bpmn-server / InstanceLocker
Class: InstanceLocker#
The lock port over any IDocumentStore: a lock is a document with a unique id, so the
store's unique index makes acquisition atomic across processes. Only a duplicate key means
contention; any other failure (a lost connection) is thrown, not retried as if the lock were
busy. A lock is released only by its owner, and one older than staleAfter is taken over.
Legacy form: new InstanceLocker(dataStore), using the data store's db and database. The store
may be given as a function, read on each use (the data store gives its current db).
Implements#
Table of contents#
Constructors#
Properties#
Accessors#
Methods#
- defaultOwner
- install
- ensureIndex
- lock
- try
- keepRenewing
- stopRenewing
- release
- claim
- purgeClaims
- removeStale
- delete
- list
- delay
Constructors#
constructor#
• new InstanceLocker(store, options?): InstanceLocker
Parameters#
| Name | Type |
|---|---|
store |
IDocumentStore | () => IDocumentStore | { db: IDocumentStore ; dbConfiguration: { db: string ; Locks_collection?: string } ; logger?: any } |
options? |
Partial\<InstanceLockerOptions> |
Returns#
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:46
Properties#
owner#
• Readonly owner: string
This process's identity as a lock owner.
Implementation of#
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:33
storeOf#
• Private Readonly storeOf: () => IDocumentStore
The store, read when used: a data store's db replaced after it was made (an in-memory one, in a test) is the one locked in.
Type declaration#
▸ (): IDocumentStore
Returns#
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:35
database#
• Private Readonly database: string
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:37
collection#
• Private Readonly collection: string
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:38
retryDelay#
• Private Readonly retryDelay: number
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:39
maxTries#
• Private Readonly maxTries: number
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:40
staleAfter#
• Private Readonly staleAfter: number
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:41
logger#
• Private Readonly logger: any
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:42
renewing#
• Private Readonly renewing: Map\<string, Timeout>
The locks held here, each renewed until released: only a dead holder's goes stale.
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:44
indexed#
• Private indexed: Promise\<void> = null
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:69
Accessors#
store#
• get store(): IDocumentStore
Returns#
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:36
Methods#
defaultOwner#
▸ defaultOwner(): string
Returns#
string
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:59
install#
▸ install(): Promise\<void>
The unique index acquisition relies on; part of the data store's install().
Returns#
Promise\<void>
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:65
ensureIndex#
▸ ensureIndex(): Promise\<void>
Makes sure of the unique index before the first lock or claim, once per locker: without it two servers could both
"acquire" an instance. A database that install() (npm run setup) never ran on is protected all the same. When the index
can not be made (no privilege), it may be there already, so that is tried: two inserts of one id. If both succeed nothing
excludes anyone, and locking refuses rather than pretends.
Returns#
Promise\<void>
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:76
lock#
▸ lock(id): Promise\<boolean>
Waits until id is locked by this owner, or throws once the configured tries are spent. A lock older than the stale age is taken over.
Parameters#
| Name | Type |
|---|---|
id |
string |
Returns#
Promise\<boolean>
Implementation of#
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:100
try#
▸ try(id, kind?): Promise\<boolean>
One attempt: true when acquired, false on contention; any other failure throws.
Parameters#
| Name | Type | Default value |
|---|---|---|
id |
string |
undefined |
kind |
string |
'lock' |
Returns#
Promise\<boolean>
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:114
keepRenewing#
▸ keepRenewing(id): void
A running execution can outlast staleAfter (a long service task): its lock's time is kept fresh while it runs, or
another server would take over and both would change the instance. A holder that dies stops renewing, and its lock goes stale.
Parameters#
| Name | Type |
|---|---|
id |
string |
Returns#
void
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:130
stopRenewing#
▸ stopRenewing(): void
No more renewals: what a holder's death is, for a test; and at shutdown.
Returns#
void
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:141
release#
▸ release(id): Promise\<void>
Releases id only when this owner holds it.
Parameters#
| Name | Type |
|---|---|
id |
string |
Returns#
Promise\<void>
Implementation of#
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:146
claim#
▸ claim(key): Promise\<boolean>
Takes key once, without waiting: true for the one claimant, false when another (any process) holds it. Claims expire after the stale age.
Parameters#
| Name | Type |
|---|---|
key |
string |
Returns#
Promise\<boolean>
Implementation of#
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:153
purgeClaims#
▸ purgeClaims(): Promise\<number>
Removes the claims older than the stale age: what is still due after it is tried again.
Returns#
Promise\<number>
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:160
removeStale#
▸ removeStale(id): Promise\<boolean>
Removes id when it is older than staleAfter; true when it did.
Parameters#
| Name | Type |
|---|---|
id |
string |
Returns#
Promise\<boolean>
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:166
delete#
▸ delete(query): Promise\<{ deletedCount: number }>
Removes locks matching query, whoever holds them: an administrator's tool.
Parameters#
| Name | Type |
|---|---|
query |
any |
Returns#
Promise\<{ deletedCount: number }>
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:173
list#
▸ list(): Promise\<any[]>
Every current lock, for diagnostics.
Returns#
Promise\<any[]>
Implementation of#
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:177
delay#
▸ delay(ms): Promise\<unknown>
Parameters#
| Name | Type |
|---|---|
ms |
number |
Returns#
Promise\<unknown>
Defined in#
packages/bpmn-server/src/datastore/InstanceLocker.ts:181