Skip to content

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#

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#

InstanceLocker

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#

ILockManager.owner

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#

IDocumentStore

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#

IDocumentStore

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#

ILockManager.lock

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#

ILockManager.release

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#

ILockManager.claim

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#

ILockManager.list

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

Comments