velocious 1.0.620 → 1.0.621
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/background-jobs/store.js +1 -1
- package/build/src/background-jobs/store.js +1 -1
- package/build/src/testing/shared-transaction-connection-coordinator.d.ts +5 -3
- package/build/src/testing/shared-transaction-connection-coordinator.d.ts.map +1 -1
- package/build/src/testing/shared-transaction-connection-coordinator.js +30 -30
- package/build/testing/shared-transaction-connection-coordinator.js +35 -27
- package/package.json +1 -1
- package/src/background-jobs/store.js +1 -1
- package/src/testing/shared-transaction-connection-coordinator.js +35 -27
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
export type CoordinatorOwnerScope = {
|
|
2
|
+
ownedQueue: Promise<void>;
|
|
3
|
+
};
|
|
1
4
|
export type CoordinatorRegistration = {
|
|
5
|
+
connectionScope: CoordinatorOwnerScope;
|
|
2
6
|
coordinator: (callback: () => Promise<unknown>) => Promise<unknown>;
|
|
3
|
-
ownedQueue: Promise<void>;
|
|
4
7
|
owner: symbol;
|
|
5
|
-
|
|
6
|
-
rootOwners: Set<symbol>;
|
|
8
|
+
ownerScopes: Map<symbol, CoordinatorOwnerScope>;
|
|
7
9
|
};
|
|
8
10
|
/**
|
|
9
11
|
* Registers test-only serialization owned by the active broker.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-transaction-connection-coordinator.d.ts","sourceRoot":"","sources":["../../../src/testing/shared-transaction-connection-coordinator.js"],"names":[],"mappings":"AAEI,
|
|
1
|
+
{"version":3,"file":"shared-transaction-connection-coordinator.d.ts","sourceRoot":"","sources":["../../../src/testing/shared-transaction-connection-coordinator.js"],"names":[],"mappings":"AAEI,YAAuC,qBAAqB,GAAlD;IAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAC,CAAuB;AAC5D,YAAyL,uBAAuB,GAAtM;IAAC,eAAe,EAAE,qBAAqB,CAAC;IAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;CAAC,CAAyB;AAkFpN;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,UAAU,EAJ/C,MAI+C,EAAE,WAAW,EAH5D,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAGO,GAF1D,MAAM,CAqBlB;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAAC,UAAU,EAJjD,MAIiD,EAAE,WAAW,EAH9D,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAGS,GAF5D,IAAI,CAShB;AAED;;;;;;;GAOG;AACH,wBAAsB,qCAAqC,CAN9C,CAAC,EAM8C,UAAU,EAL3D,OAAO,6BAA6B,EAAE,OAKqB,EAAE,QAAQ,EAJrE,MAAM,OAAO,CAAC,CAAC,CAIsD,EAAE,cAAc,AAH7F,CACA,EADQ,MAGqF,GAFnF,OAAO,CAAC,CAAC,CAAC,CAyBtB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
-
/** @typedef {{
|
|
2
|
+
/** @typedef {{ownedQueue: Promise<void>}} CoordinatorOwnerScope */
|
|
3
|
+
/** @typedef {{connectionScope: CoordinatorOwnerScope, coordinator: (callback: () => Promise<unknown>) => Promise<unknown>, owner: symbol, ownerScopes: Map<symbol, CoordinatorOwnerScope>}} CoordinatorRegistration */
|
|
3
4
|
/** @type {WeakMap<object, CoordinatorRegistration>} */
|
|
4
5
|
const coordinators = new WeakMap();
|
|
5
6
|
/** @type {WeakMap<object, CoordinatorRegistration>} */
|
|
@@ -17,40 +18,44 @@ async function inactiveCoordinator(callback) {
|
|
|
17
18
|
* @template T
|
|
18
19
|
* @param {import("../database/drivers/base.js").default} connection - Parent physical connection.
|
|
19
20
|
* @param {CoordinatorRegistration} registration - Physical connection registration.
|
|
21
|
+
* @param {CoordinatorOwnerScope} ownerScope - Queue inherited from the current owner.
|
|
20
22
|
* @param {() => Promise<T>} callback - Owned operation.
|
|
23
|
+
* @param {string} [ownerDescription] - Async owner description.
|
|
21
24
|
* @returns {Promise<T>} - Operation result.
|
|
22
25
|
*/
|
|
23
|
-
async function coordinateOwnedSharedTransactionConnection(connection, registration, callback) {
|
|
24
|
-
const previous =
|
|
26
|
+
async function coordinateOwnedSharedTransactionConnection(connection, registration, ownerScope, callback, ownerDescription = "shared-transaction-owned-operation") {
|
|
27
|
+
const previous = ownerScope.ownedQueue;
|
|
25
28
|
/**
|
|
26
29
|
* Releases the next owned sibling operation.
|
|
27
30
|
* @type {() => void}
|
|
28
31
|
*/
|
|
29
32
|
let release = () => { };
|
|
30
|
-
|
|
33
|
+
ownerScope.ownedQueue = new Promise((resolve) => { release = resolve; });
|
|
31
34
|
await previous;
|
|
32
|
-
const operationOwner = Symbol(
|
|
35
|
+
const operationOwner = Symbol(ownerDescription);
|
|
33
36
|
const environmentHandler = connection.configuration.getEnvironmentHandler();
|
|
34
|
-
|
|
37
|
+
const operationScope = { ownedQueue: Promise.resolve() };
|
|
38
|
+
registration.ownerScopes.set(operationOwner, operationScope);
|
|
35
39
|
try {
|
|
36
40
|
return await environmentHandler.runWithSharedTransactionCoordinatorOwner(connection, operationOwner, callback);
|
|
37
41
|
}
|
|
38
42
|
finally {
|
|
39
|
-
|
|
43
|
+
await drainOwnedSharedTransactionConnections(operationScope);
|
|
44
|
+
registration.ownerScopes.delete(operationOwner);
|
|
40
45
|
release();
|
|
41
46
|
}
|
|
42
47
|
}
|
|
43
48
|
/**
|
|
44
49
|
* Drains all inherited operations admitted before the root owner is revoked.
|
|
45
|
-
* @param {
|
|
50
|
+
* @param {CoordinatorOwnerScope} ownerScope - Owner scope to drain.
|
|
46
51
|
* @returns {Promise<void>} - Resolves when the owned queue stops advancing.
|
|
47
52
|
*/
|
|
48
|
-
async function drainOwnedSharedTransactionConnections(
|
|
53
|
+
async function drainOwnedSharedTransactionConnections(ownerScope) {
|
|
49
54
|
let tail;
|
|
50
55
|
do {
|
|
51
|
-
tail =
|
|
56
|
+
tail = ownerScope.ownedQueue;
|
|
52
57
|
await tail;
|
|
53
|
-
} while (tail !==
|
|
58
|
+
} while (tail !== ownerScope.ownedQueue);
|
|
54
59
|
}
|
|
55
60
|
/**
|
|
56
61
|
* Runs one broker-serialized root while tracking and draining its inherited work.
|
|
@@ -61,17 +66,7 @@ async function drainOwnedSharedTransactionConnections(registration) {
|
|
|
61
66
|
* @returns {Promise<T>} - Operation result.
|
|
62
67
|
*/
|
|
63
68
|
async function coordinateRootSharedTransactionConnection(connection, registration, callback) {
|
|
64
|
-
await
|
|
65
|
-
const rootOwner = Symbol("shared-transaction-root-operation");
|
|
66
|
-
const environmentHandler = connection.configuration.getEnvironmentHandler();
|
|
67
|
-
registration.rootOwners.add(rootOwner);
|
|
68
|
-
try {
|
|
69
|
-
return await environmentHandler.runWithSharedTransactionCoordinatorOwner(connection, rootOwner, callback);
|
|
70
|
-
}
|
|
71
|
-
finally {
|
|
72
|
-
await drainOwnedSharedTransactionConnections(registration);
|
|
73
|
-
registration.rootOwners.delete(rootOwner);
|
|
74
|
-
}
|
|
69
|
+
return await coordinateOwnedSharedTransactionConnection(connection, registration, registration.connectionScope, callback, "shared-transaction-root-operation");
|
|
75
70
|
}
|
|
76
71
|
/**
|
|
77
72
|
* Registers test-only serialization owned by the active broker.
|
|
@@ -87,7 +82,12 @@ export function setSharedTransactionCoordinator(connection, coordinator) {
|
|
|
87
82
|
registration.owner = owner;
|
|
88
83
|
}
|
|
89
84
|
else {
|
|
90
|
-
registration = {
|
|
85
|
+
registration = {
|
|
86
|
+
connectionScope: { ownedQueue: Promise.resolve() },
|
|
87
|
+
coordinator,
|
|
88
|
+
owner,
|
|
89
|
+
ownerScopes: new Map()
|
|
90
|
+
};
|
|
91
91
|
connectionRegistrations.set(connection, registration);
|
|
92
92
|
}
|
|
93
93
|
coordinators.set(connection, registration);
|
|
@@ -121,13 +121,13 @@ export async function coordinateSharedTransactionConnection(connection, callback
|
|
|
121
121
|
return await callback();
|
|
122
122
|
const environmentHandler = connection.configuration.getEnvironmentHandler();
|
|
123
123
|
const currentOwner = environmentHandler.getSharedTransactionCoordinatorOwner(connection);
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
const currentOwnerScope = currentOwner ? registration.ownerScopes.get(currentOwner) : undefined;
|
|
125
|
+
if (currentOwnerScope) {
|
|
126
|
+
return await coordinateOwnedSharedTransactionConnection(connection, registration, currentOwnerScope, callback);
|
|
127
|
+
}
|
|
128
|
+
if (!activeRegistration) {
|
|
129
|
+
return await coordinateOwnedSharedTransactionConnection(connection, registration, registration.connectionScope, callback);
|
|
128
130
|
}
|
|
129
|
-
if (!activeRegistration)
|
|
130
|
-
return await coordinateOwnedSharedTransactionConnection(connection, registration, callback);
|
|
131
131
|
if (operationOwner === registration.owner) {
|
|
132
132
|
return await coordinateRootSharedTransactionConnection(connection, registration, callback);
|
|
133
133
|
}
|
|
@@ -135,4 +135,4 @@ export async function coordinateSharedTransactionConnection(connection, callback
|
|
|
135
135
|
return await coordinateRootSharedTransactionConnection(connection, registration, callback);
|
|
136
136
|
}));
|
|
137
137
|
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLXRyYW5zYWN0aW9uLWNvbm5lY3Rpb24tY29vcmRpbmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9zaGFyZWQtdHJhbnNhY3Rpb24tY29ubmVjdGlvbi1jb29yZGluYXRvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosZ05BQWdOO0FBRWhOLHVEQUF1RDtBQUN2RCxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBQ2xDLHVEQUF1RDtBQUN2RCxNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFN0M7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxRQUFRO0lBQ3pDLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQTtBQUN6QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILEtBQUssVUFBVSwwQ0FBMEMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVE7SUFDMUYsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQTtJQUN4Qzs7O09BR0c7SUFDSCxJQUFJLE9BQU8sR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUE7SUFFdEIsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3pFLE1BQU0sUUFBUSxDQUFBO0lBQ2QsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUE7SUFDbkUsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUE7SUFFM0UsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDaEQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLGtCQUFrQixDQUFD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ZGluYXRvcjogKGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPHVua25vd24+KSA9PiBQcm9taXNlPHVua25vd24+LCBvd25lZFF1ZXVlOiBQcm9taXNlPHZvaWQ+LCBvd25lcjogc3ltYm9sLCByZWVudHJhbnRPd25lcnM6IFNldDxzeW1ib2w+LCByb290T3duZXJzOiBTZXQ8c3ltYm9sPn19IENvb3JkaW5hdG9yUmVnaXN0cmF0aW9uICovXG5cbi8qKiBAdHlwZSB7V2Vha01hcDxvYmplY3QsIENvb3JkaW5hdG9yUmVnaXN0cmF0aW9uPn0gKi9cbmNvbnN0IGNvb3JkaW5hdG9ycyA9IG5ldyBXZWFrTWFwKClcbi8qKiBAdHlwZSB7V2Vha01hcDxvYmplY3QsIENvb3JkaW5hdG9yUmVnaXN0cmF0aW9uPn0gKi9cbmNvbnN0IGNvbm5lY3Rpb25SZWdpc3RyYXRpb25zID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIFJ1bnMgd29yayBkaXJlY3RseSB3aGVuIG9ubHkgdGhlIGNvbm5lY3Rpb24tbG9jYWwgcXVldWUgcmVtYWlucyByZWdpc3RlcmVkLlxuICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPHVua25vd24+fSBjYWxsYmFjayAtIFNlcmlhbGl6ZWQgb3BlcmF0aW9uLlxuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IC0gT3BlcmF0aW9uIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5hY3RpdmVDb29yZGluYXRvcihjYWxsYmFjaykge1xuICByZXR1cm4gYXdhaXQgY2FsbGJhY2soKVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgc2libGluZyB3b3JrIHRoYXQgaW5oZXJpdGVkIG9uZSBjb29yZGluYXRvciBvd25lciB3aXRob3V0IHJlLWVudGVyaW5nIHRoZSBicm9rZXIgcXVldWUuXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gY29ubmVjdGlvbiAtIFBhcmVudCBwaHlzaWNhbCBjb25uZWN0aW9uLlxuICogQHBhcmFtIHtDb29yZGluYXRvclJlZ2lzdHJhdGlvbn0gcmVnaXN0cmF0aW9uIC0gUGh5c2ljYWwgY29ubmVjdGlvbiByZWdpc3RyYXRpb24uXG4gKiBAcGFyYW0geygpID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gT3duZWQgb3BlcmF0aW9uLlxuICogQHJldHVybnMge1Byb21pc2U8VD59IC0gT3BlcmF0aW9uIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29vcmRpbmF0ZU93bmVkU2hhcmVkVHJhbnNhY3Rpb25Db25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlZ2lzdHJhdGlvbiwgY2FsbGJhY2spIHtcbiAgY29uc3QgcHJldmlvdXMgPSByZWdpc3RyYXRpb24ub3duZWRRdWV1ZVxuICAvKipcbiAgICogUmVsZWFzZXMgdGhlIG5leHQgb3duZWQgc2libGluZyBvcGVyYXRpb24uXG4gICAqIEB0eXBlIHsoKSA9PiB2b2lkfVxuICAgKi9cbiAgbGV0IHJlbGVhc2UgPSAoKSA9PiB7fVxuXG4gIHJlZ2lzdHJhdGlvbi5vd25lZFF1ZXVlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsgcmVsZWFzZSA9IHJlc29sdmUgfSlcbiAgYXdhaXQgcHJldmlvdXNcbiAgY29uc3Qgb3BlcmF0aW9uT3duZXIgPSBTeW1ib2woXCJzaGFyZWQtdHJhbnNhY3Rpb24tb3duZWQtb3BlcmF0aW9uXCIpXG4gIGNvbnN0IGVudmlyb25tZW50SGFuZGxlciA9IGNvbm5lY3Rpb24uY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKVxuXG4gIHJlZ2lzdHJhdGlvbi5yZWVudHJhbnRPd25lcnMuYWRkKG9wZXJhdGlvbk93bmVyKVxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlbnZpcm9ubWVudEhhbmRsZXIucnVuV2l0aFNoYXJlZFRyYW5zYWN0aW9uQ29vcmRpbmF0b3JPd25lcihjb25uZWN0aW9uLCBvcGVyYXRpb25Pd25lciwgY2FsbGJhY2spXG4gIH0gZmluYWxseSB7XG4gICAgcmVnaXN0cmF0aW9uLnJlZW50cmFudE93bmVycy5kZWxldGUob3BlcmF0aW9uT3duZXIpXG4gICAgcmVsZWFzZSgpXG4gIH1cbn1cblxuLyoqXG4gKiBEcmFpbnMgYWxsIGluaGVyaXRlZCBvcGVyYXRpb25zIGFkbWl0dGVkIGJlZm9yZSB0aGUgcm9vdCBvd25lciBpcyByZXZva2VkLlxuICogQHBhcmFtIHtDb29yZGluYXRvclJlZ2lzdHJhdGlvbn0gcmVnaXN0cmF0aW9uIC0gUGh5c2ljYWwgY29ubmVjdGlvbiByZWdpc3RyYXRpb24uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHRoZSBvd25lZCBxdWV1ZSBzdG9wcyBhZHZhbmNpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRyYWluT3duZWRTaGFyZWRUcmFuc2FjdGlvbkNvbm5lY3Rpb25zKHJlZ2lzdHJhdGlvbikge1xuICBsZXQgdGFpbFxuXG4gIGRvIHtcbiAgICB0YWlsID0gcmVnaXN0cmF0aW9uLm93bmVkUXVldWVcbiAgICBhd2FpdCB0YWlsXG4gIH0gd2hpbGUgKHRhaWwgIT09IHJlZ2lzdHJhdGlvbi5vd25lZFF1ZXVlKVxufVxuXG4vKipcbiAqIFJ1bnMgb25lIGJyb2tlci1zZXJpYWxpemVkIHJvb3Qgd2hpbGUgdHJhY2tpbmcgYW5kIGRyYWluaW5nIGl0cyBpbmhlcml0ZWQgd29yay5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gUGFyZW50IHBoeXNpY2FsIGNvbm5lY3Rpb24uXG4gKiBAcGFyYW0ge0Nvb3JkaW5hdG9yUmVnaXN0cmF0aW9ufSByZWdpc3RyYXRpb24gLSBQaHlzaWNhbCBjb25uZWN0aW9uIHJlZ2lzdHJhdGlvbi5cbiAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxUPn0gY2FsbGJhY2sgLSBSb290IG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIE9wZXJhdGlvbiByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvb3JkaW5hdGVSb290U2hhcmVkVHJhbnNhY3Rpb25Db25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlZ2lzdHJhdGlvbiwgY2FsbGJhY2spIHtcbiAgYXdhaXQgZHJhaW5Pd25lZFNoYXJlZFRyYW5zYWN0aW9uQ29ubmVjdGlvbnMocmVnaXN0cmF0aW9uKVxuICBjb25zdCByb290T3duZXIgPSBTeW1ib2woXCJzaGFyZWQtdHJhbnNhY3Rpb24tcm9vdC1vcGVyYXRpb25cIilcbiAgY29uc3QgZW52aXJvbm1lbnRIYW5kbGVyID0gY29ubmVjdGlvbi5jb25maWd1cmF0aW9uLmdldEVudmlyb25tZW50SGFuZGxlcigpXG5cbiAgcmVnaXN0cmF0aW9uLnJvb3RPd25lcnMuYWRkKHJvb3RPd25lcilcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZW52aXJvbm1lbnRIYW5kbGVyLnJ1bldpdGhTaGFyZWRUcmFuc2FjdGlvbkNvb3JkaW5hdG9yT3duZXIoY29ubmVjdGlvbiwgcm9vdE93bmVyLCBjYWxsYmFjaylcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBkcmFpbk93bmVkU2hhcmVkVHJhbnNhY3Rpb25Db25uZWN0aW9ucyhyZWdpc3RyYXRpb24pXG4gICAgcmVnaXN0cmF0aW9uLnJvb3RPd25lcnMuZGVsZXRlKHJvb3RPd25lcilcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0ZXN0LW9ubHkgc2VyaWFsaXphdGlvbiBvd25lZCBieSB0aGUgYWN0aXZlIGJyb2tlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25uZWN0aW9uIC0gUGFyZW50IHBoeXNpY2FsIGNvbm5lY3Rpb24uXG4gKiBAcGFyYW0geyhjYWxsYmFjazogKCkgPT4gUHJvbWlzZTx1bmtub3duPikgPT4gUHJvbWlzZTx1bmtub3duPn0gY29vcmRpbmF0b3IgLSBTZXJpYWxpemVyLlxuICogQHJldHVybnMge3N5bWJvbH0gLSBPcGFxdWUgb3duZXIgZm9yIGJyb2tlci1pbnRlcm5hbCBjb25uZWN0aW9uIGNhbGxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U2hhcmVkVHJhbnNhY3Rpb25Db29yZGluYXRvcihjb25uZWN0aW9uLCBjb29yZGluYXRvcikge1xuICBjb25zdCBvd25lciA9IFN5bWJvbChcInNoYXJlZC10cmFuc2FjdGlvbi1jb29yZGluYXRvclwiKVxuICBsZXQgcmVnaXN0cmF0aW9uID0gY29ubmVjdGlvblJlZ2lzdHJhdGlvbnMuZ2V0KGNvbm5lY3Rpb24pXG5cbiAgaWYgKHJlZ2lzdHJhdGlvbikge1xuICAgIHJlZ2lzdHJhdGlvbi5jb29yZGluYXRvciA9IGNvb3JkaW5hdG9yXG4gICAgcmVnaXN0cmF0aW9uLm93bmVyID0gb3duZXJcbiAgfSBlbHNlIHtcbiAgICByZWdpc3RyYXRpb24gPSB7Y29vcmRpbmF0b3IsIG93bmVkUXVldWU6IFByb21pc2UucmVzb2x2ZSgpLCBvd25lciwgcmVlbnRyYW50T3duZXJzOiBuZXcgU2V0KCksIHJvb3RPd25lcnM6IG5ldyBTZXQoKX1cbiAgICBjb25uZWN0aW9uUmVnaXN0cmF0aW9ucy5zZXQoY29ubmVjdGlvbiwgcmVnaXN0cmF0aW9uKVxuICB9XG5cbiAgY29vcmRpbmF0b3JzLnNldChjb25uZWN0aW9uLCByZWdpc3RyYXRpb24pXG4gIHJldHVybiBvd25lclxufVxuXG4vKipcbiAqIFJlbW92ZXMgYSBicm9rZXItb3duZWQgY29vcmRpbmF0b3Igd2l0aG91dCBkaXN0dXJiaW5nIGEgcmVwbGFjZW1lbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gY29ubmVjdGlvbiAtIFBhcmVudCBwaHlzaWNhbCBjb25uZWN0aW9uLlxuICogQHBhcmFtIHsoY2FsbGJhY2s6ICgpID0+IFByb21pc2U8dW5rbm93bj4pID0+IFByb21pc2U8dW5rbm93bj59IGNvb3JkaW5hdG9yIC0gRXhwZWN0ZWQgc2VyaWFsaXplci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTaGFyZWRUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKGNvbm5lY3Rpb24sIGNvb3JkaW5hdG9yKSB7XG4gIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGNvb3JkaW5hdG9ycy5nZXQoY29ubmVjdGlvbilcblxuICBpZiAocmVnaXN0cmF0aW9uPy5jb29yZGluYXRvciA9PT0gY29vcmRpbmF0b3IpIHtcbiAgICBjb29yZGluYXRvcnMuZGVsZXRlKGNvbm5lY3Rpb24pXG4gICAgcmVnaXN0cmF0aW9uLmNvb3JkaW5hdG9yID0gaW5hY3RpdmVDb29yZGluYXRvclxuICB9XG59XG5cbi8qKlxuICogUnVucyBwYXJlbnQgd29yayB0aHJvdWdoIGJyb2tlciBzZXJpYWxpemF0aW9uIHdoZW4gcmVnaXN0ZXJlZC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gUGFyZW50IHBoeXNpY2FsIGNvbm5lY3Rpb24uXG4gKiBAcGFyYW0geygpID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gUGFyZW50IG9wZXJhdGlvbi5cbiAqIEBwYXJhbSB7c3ltYm9sfSBbb3BlcmF0aW9uT3duZXJdIC0gQnJva2VyIG93bmVyIGZvciBhbiBhbHJlYWR5LWNvb3JkaW5hdGVkIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIE9wZXJhdGlvbiByZXN1bHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb29yZGluYXRlU2hhcmVkVHJhbnNhY3Rpb25Db25uZWN0aW9uKGNvbm5lY3Rpb24sIGNhbGxiYWNrLCBvcGVyYXRpb25Pd25lcikge1xuICBjb25zdCBhY3RpdmVSZWdpc3RyYXRpb24gPSBjb29yZGluYXRvcnMuZ2V0KGNvbm5lY3Rpb24pXG4gIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGFjdGl2ZVJlZ2lzdHJhdGlvbiB8fCBjb25uZWN0aW9uUmVnaXN0cmF0aW9ucy5nZXQoY29ubmVjdGlvbilcblxuICBpZiAoIXJlZ2lzdHJhdGlvbikgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKClcblxuICBjb25zdCBlbnZpcm9ubWVudEhhbmRsZXIgPSBjb25uZWN0aW9uLmNvbmZpZ3VyYXRpb24uZ2V0RW52aXJvbm1lbnRIYW5kbGVyKClcbiAgY29uc3QgY3VycmVudE93bmVyID0gZW52aXJvbm1lbnRIYW5kbGVyLmdldFNoYXJlZFRyYW5zYWN0aW9uQ29vcmRpbmF0b3JPd25lcihjb25uZWN0aW9uKVxuXG4gIGlmIChjdXJyZW50T3duZXIgJiYgcmVnaXN0cmF0aW9uLnJlZW50cmFudE93bmVycy5oYXMoY3VycmVudE93bmVyKSkgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKClcbiAgaWYgKGN1cnJlbnRPd25lciAmJiByZWdpc3RyYXRpb24ucm9vdE93bmVycy5oYXMoY3VycmVudE93bmVyKSkge1xuICAgIHJldHVybiBhd2FpdCBjb29yZGluYXRlT3duZWRTaGFyZWRUcmFuc2FjdGlvbkNvbm5lY3Rpb24oY29ubmVjdGlvbiwgcmVnaXN0cmF0aW9uLCBjYWxsYmFjaylcbiAgfVxuICBpZiAoIWFjdGl2ZVJlZ2lzdHJhdGlvbikgcmV0dXJuIGF3YWl0IGNvb3JkaW5hdGVPd25lZFNoYXJlZFRyYW5zYWN0aW9uQ29ubmVjdGlvbihjb25uZWN0aW9uLCByZWdpc3RyYXRpb24sIGNhbGxiYWNrKVxuICBpZiAob3BlcmF0aW9uT3duZXIgPT09IHJlZ2lzdHJhdGlvbi5vd25lcikge1xuICAgIHJldHVybiBhd2FpdCBjb29yZGluYXRlUm9vdFNoYXJlZFRyYW5zYWN0aW9uQ29ubmVjdGlvbihjb25uZWN0aW9uLCByZWdpc3RyYXRpb24sIGNhbGxiYWNrKVxuICB9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7VH0gKi8gKGF3YWl0IHJlZ2lzdHJhdGlvbi5jb29yZGluYXRvcihhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGNvb3JkaW5hdGVSb290U2hhcmVkVHJhbnNhY3Rpb25Db25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlZ2lzdHJhdGlvbiwgY2FsbGJhY2spXG4gIH0pKVxufVxuIl19
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLXRyYW5zYWN0aW9uLWNvbm5lY3Rpb24tY29vcmRpbmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9zaGFyZWQtdHJhbnNhY3Rpb24tY29ubmVjdGlvbi1jb29yZGluYXRvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosbUVBQW1FO0FBQ25FLHVOQUF1TjtBQUV2Tix1REFBdUQ7QUFDdkQsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUNsQyx1REFBdUQ7QUFDdkQsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBRTdDOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsbUJBQW1CLENBQUMsUUFBUTtJQUN6QyxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUE7QUFDekIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILEtBQUssVUFBVSwwQ0FBMEMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEdBQUcsb0NBQW9DO0lBQy9KLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUE7SUFDdEM7OztPQUdHO0lBQ0gsSUFBSSxPQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFBO0lBRXRCLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2RSxNQUFNLFFBQVEsQ0FBQTtJQUNkLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQy9DLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO0lBQzNFLE1BQU0sY0FBYyxHQUFHLEVBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBQyxDQUFBO0lBRXRELFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUM1RCxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sa0JBQWtCLENBQUMsd0NBQXdDLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNoSCxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sc0NBQXNDLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDNUQsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDL0MsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsc0NBQXNDLENBQUMsVUFBVTtJQUM5RCxJQUFJLElBQUksQ0FBQTtJQUVSLEdBQUcsQ0FBQztRQUNGLElBQUksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFBO1FBQzVCLE1BQU0sSUFBSSxDQUFBO0lBQ1osQ0FBQyxRQUFRLElBQUksS0FBSyxVQUFVLENBQUMsVUFBVSxFQUFDO0FBQzFDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsS0FBSyxVQUFVLHlDQUF5QyxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUTtJQUN6RixPQUFPLE1BQU0sMENBQTBDLENBQ3JELFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxDQUFDLGVBQWUsRUFDNUIsUUFBUSxFQUNSLG1DQUFtQyxDQUNwQyxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLCtCQUErQixDQUFDLFVBQVUsRUFBRSxXQUFXO0lBQ3JFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO0lBQ3RELElBQUksWUFBWSxHQUFHLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUUxRCxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLFlBQVksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQ3RDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQzVCLENBQUM7U0FBTSxDQUFDO1FBQ04sWUFBWSxHQUFHO1lBQ2IsZUFBZSxFQUFFLEVBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBQztZQUNoRCxXQUFXO1lBQ1gsS0FBSztZQUNMLFdBQVcsRUFBRSxJQUFJLEdBQUcsRUFBRTtTQUN2QixDQUFBO1FBQ0QsdUJBQXVCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDMUMsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUNBQWlDLENBQUMsVUFBVSxFQUFFLFdBQVc7SUFDdkUsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUVqRCxJQUFJLFlBQVksRUFBRSxXQUFXLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDOUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMvQixZQUFZLENBQUMsV0FBVyxHQUFHLG1CQUFtQixDQUFBO0lBQ2hELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUNBQXFDLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjO0lBQzlGLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN2RCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsSUFBSSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFbEYsSUFBSSxDQUFDLFlBQVk7UUFBRSxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUE7SUFFMUMsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUE7SUFDM0UsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsb0NBQW9DLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDeEYsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFFL0YsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sTUFBTSwwQ0FBMEMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ2hILENBQUM7SUFDRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN4QixPQUFPLE1BQU0sMENBQTBDLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzNILENBQUM7SUFDRCxJQUFJLGNBQWMsS0FBSyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUMsT0FBTyxNQUFNLHlDQUF5QyxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDNUYsQ0FBQztJQUVELE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDakUsT0FBTyxNQUFNLHlDQUF5QyxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDNUYsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqIEB0eXBlZGVmIHt7b3duZWRRdWV1ZTogUHJvbWlzZTx2b2lkPn19IENvb3JkaW5hdG9yT3duZXJTY29wZSAqL1xuLyoqIEB0eXBlZGVmIHt7Y29ubmVjdGlvblNjb3BlOiBDb29yZGluYXRvck93bmVyU2NvcGUsIGNvb3JkaW5hdG9yOiAoY2FsbGJhY2s6ICgpID0+IFByb21pc2U8dW5rbm93bj4pID0+IFByb21pc2U8dW5rbm93bj4sIG93bmVyOiBzeW1ib2wsIG93bmVyU2NvcGVzOiBNYXA8c3ltYm9sLCBDb29yZGluYXRvck93bmVyU2NvcGU+fX0gQ29vcmRpbmF0b3JSZWdpc3RyYXRpb24gKi9cblxuLyoqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgQ29vcmRpbmF0b3JSZWdpc3RyYXRpb24+fSAqL1xuY29uc3QgY29vcmRpbmF0b3JzID0gbmV3IFdlYWtNYXAoKVxuLyoqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgQ29vcmRpbmF0b3JSZWdpc3RyYXRpb24+fSAqL1xuY29uc3QgY29ubmVjdGlvblJlZ2lzdHJhdGlvbnMgPSBuZXcgV2Vha01hcCgpXG5cbi8qKlxuICogUnVucyB3b3JrIGRpcmVjdGx5IHdoZW4gb25seSB0aGUgY29ubmVjdGlvbi1sb2NhbCBxdWV1ZSByZW1haW5zIHJlZ2lzdGVyZWQuXG4gKiBAcGFyYW0geygpID0+IFByb21pc2U8dW5rbm93bj59IGNhbGxiYWNrIC0gU2VyaWFsaXplZCBvcGVyYXRpb24uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gLSBPcGVyYXRpb24gcmVzdWx0LlxuICovXG5hc3luYyBmdW5jdGlvbiBpbmFjdGl2ZUNvb3JkaW5hdG9yKGNhbGxiYWNrKSB7XG4gIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBzaWJsaW5nIHdvcmsgdGhhdCBpbmhlcml0ZWQgb25lIGNvb3JkaW5hdG9yIG93bmVyIHdpdGhvdXQgcmUtZW50ZXJpbmcgdGhlIGJyb2tlciBxdWV1ZS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gUGFyZW50IHBoeXNpY2FsIGNvbm5lY3Rpb24uXG4gKiBAcGFyYW0ge0Nvb3JkaW5hdG9yUmVnaXN0cmF0aW9ufSByZWdpc3RyYXRpb24gLSBQaHlzaWNhbCBjb25uZWN0aW9uIHJlZ2lzdHJhdGlvbi5cbiAqIEBwYXJhbSB7Q29vcmRpbmF0b3JPd25lclNjb3BlfSBvd25lclNjb3BlIC0gUXVldWUgaW5oZXJpdGVkIGZyb20gdGhlIGN1cnJlbnQgb3duZXIuXG4gKiBAcGFyYW0geygpID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gT3duZWQgb3BlcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lckRlc2NyaXB0aW9uXSAtIEFzeW5jIG93bmVyIGRlc2NyaXB0aW9uLlxuICogQHJldHVybnMge1Byb21pc2U8VD59IC0gT3BlcmF0aW9uIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29vcmRpbmF0ZU93bmVkU2hhcmVkVHJhbnNhY3Rpb25Db25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlZ2lzdHJhdGlvbiwgb3duZXJTY29wZSwgY2FsbGJhY2ssIG93bmVyRGVzY3JpcHRpb24gPSBcInNoYXJlZC10cmFuc2FjdGlvbi1vd25lZC1vcGVyYXRpb25cIikge1xuICBjb25zdCBwcmV2aW91cyA9IG93bmVyU2NvcGUub3duZWRRdWV1ZVxuICAvKipcbiAgICogUmVsZWFzZXMgdGhlIG5leHQgb3duZWQgc2libGluZyBvcGVyYXRpb24uXG4gICAqIEB0eXBlIHsoKSA9PiB2b2lkfVxuICAgKi9cbiAgbGV0IHJlbGVhc2UgPSAoKSA9PiB7fVxuXG4gIG93bmVyU2NvcGUub3duZWRRdWV1ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7IHJlbGVhc2UgPSByZXNvbHZlIH0pXG4gIGF3YWl0IHByZXZpb3VzXG4gIGNvbnN0IG9wZXJhdGlvbk93bmVyID0gU3ltYm9sKG93bmVyRGVzY3JpcHRpb24pXG4gIGNvbnN0IGVudmlyb25tZW50SGFuZGxlciA9IGNvbm5lY3Rpb24uY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKVxuICBjb25zdCBvcGVyYXRpb25TY29wZSA9IHtvd25lZFF1ZXVlOiBQcm9taXNlLnJlc29sdmUoKX1cblxuICByZWdpc3RyYXRpb24ub3duZXJTY29wZXMuc2V0KG9wZXJhdGlvbk93bmVyLCBvcGVyYXRpb25TY29wZSlcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZW52aXJvbm1lbnRIYW5kbGVyLnJ1bldpdGhTaGFyZWRUcmFuc2FjdGlvbkNvb3JkaW5hdG9yT3duZXIoY29ubmVjdGlvbiwgb3BlcmF0aW9uT3duZXIsIGNhbGxiYWNrKVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGRyYWluT3duZWRTaGFyZWRUcmFuc2FjdGlvbkNvbm5lY3Rpb25zKG9wZXJhdGlvblNjb3BlKVxuICAgIHJlZ2lzdHJhdGlvbi5vd25lclNjb3Blcy5kZWxldGUob3BlcmF0aW9uT3duZXIpXG4gICAgcmVsZWFzZSgpXG4gIH1cbn1cblxuLyoqXG4gKiBEcmFpbnMgYWxsIGluaGVyaXRlZCBvcGVyYXRpb25zIGFkbWl0dGVkIGJlZm9yZSB0aGUgcm9vdCBvd25lciBpcyByZXZva2VkLlxuICogQHBhcmFtIHtDb29yZGluYXRvck93bmVyU2NvcGV9IG93bmVyU2NvcGUgLSBPd25lciBzY29wZSB0byBkcmFpbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gdGhlIG93bmVkIHF1ZXVlIHN0b3BzIGFkdmFuY2luZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZHJhaW5Pd25lZFNoYXJlZFRyYW5zYWN0aW9uQ29ubmVjdGlvbnMob3duZXJTY29wZSkge1xuICBsZXQgdGFpbFxuXG4gIGRvIHtcbiAgICB0YWlsID0gb3duZXJTY29wZS5vd25lZFF1ZXVlXG4gICAgYXdhaXQgdGFpbFxuICB9IHdoaWxlICh0YWlsICE9PSBvd25lclNjb3BlLm93bmVkUXVldWUpXG59XG5cbi8qKlxuICogUnVucyBvbmUgYnJva2VyLXNlcmlhbGl6ZWQgcm9vdCB3aGlsZSB0cmFja2luZyBhbmQgZHJhaW5pbmcgaXRzIGluaGVyaXRlZCB3b3JrLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBQYXJlbnQgcGh5c2ljYWwgY29ubmVjdGlvbi5cbiAqIEBwYXJhbSB7Q29vcmRpbmF0b3JSZWdpc3RyYXRpb259IHJlZ2lzdHJhdGlvbiAtIFBoeXNpY2FsIGNvbm5lY3Rpb24gcmVnaXN0cmF0aW9uLlxuICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPFQ+fSBjYWxsYmFjayAtIFJvb3Qgb3BlcmF0aW9uLlxuICogQHJldHVybnMge1Byb21pc2U8VD59IC0gT3BlcmF0aW9uIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29vcmRpbmF0ZVJvb3RTaGFyZWRUcmFuc2FjdGlvbkNvbm5lY3Rpb24oY29ubmVjdGlvbiwgcmVnaXN0cmF0aW9uLCBjYWxsYmFjaykge1xuICByZXR1cm4gYXdhaXQgY29vcmRpbmF0ZU93bmVkU2hhcmVkVHJhbnNhY3Rpb25Db25uZWN0aW9uKFxuICAgIGNvbm5lY3Rpb24sXG4gICAgcmVnaXN0cmF0aW9uLFxuICAgIHJlZ2lzdHJhdGlvbi5jb25uZWN0aW9uU2NvcGUsXG4gICAgY2FsbGJhY2ssXG4gICAgXCJzaGFyZWQtdHJhbnNhY3Rpb24tcm9vdC1vcGVyYXRpb25cIlxuICApXG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRlc3Qtb25seSBzZXJpYWxpemF0aW9uIG93bmVkIGJ5IHRoZSBhY3RpdmUgYnJva2VyLlxuICogQHBhcmFtIHtvYmplY3R9IGNvbm5lY3Rpb24gLSBQYXJlbnQgcGh5c2ljYWwgY29ubmVjdGlvbi5cbiAqIEBwYXJhbSB7KGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPHVua25vd24+KSA9PiBQcm9taXNlPHVua25vd24+fSBjb29yZGluYXRvciAtIFNlcmlhbGl6ZXIuXG4gKiBAcmV0dXJucyB7c3ltYm9sfSAtIE9wYXF1ZSBvd25lciBmb3IgYnJva2VyLWludGVybmFsIGNvbm5lY3Rpb24gY2FsbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRTaGFyZWRUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKGNvbm5lY3Rpb24sIGNvb3JkaW5hdG9yKSB7XG4gIGNvbnN0IG93bmVyID0gU3ltYm9sKFwic2hhcmVkLXRyYW5zYWN0aW9uLWNvb3JkaW5hdG9yXCIpXG4gIGxldCByZWdpc3RyYXRpb24gPSBjb25uZWN0aW9uUmVnaXN0cmF0aW9ucy5nZXQoY29ubmVjdGlvbilcblxuICBpZiAocmVnaXN0cmF0aW9uKSB7XG4gICAgcmVnaXN0cmF0aW9uLmNvb3JkaW5hdG9yID0gY29vcmRpbmF0b3JcbiAgICByZWdpc3RyYXRpb24ub3duZXIgPSBvd25lclxuICB9IGVsc2Uge1xuICAgIHJlZ2lzdHJhdGlvbiA9IHtcbiAgICAgIGNvbm5lY3Rpb25TY29wZToge293bmVkUXVldWU6IFByb21pc2UucmVzb2x2ZSgpfSxcbiAgICAgIGNvb3JkaW5hdG9yLFxuICAgICAgb3duZXIsXG4gICAgICBvd25lclNjb3BlczogbmV3IE1hcCgpXG4gICAgfVxuICAgIGNvbm5lY3Rpb25SZWdpc3RyYXRpb25zLnNldChjb25uZWN0aW9uLCByZWdpc3RyYXRpb24pXG4gIH1cblxuICBjb29yZGluYXRvcnMuc2V0KGNvbm5lY3Rpb24sIHJlZ2lzdHJhdGlvbilcbiAgcmV0dXJuIG93bmVyXG59XG5cbi8qKlxuICogUmVtb3ZlcyBhIGJyb2tlci1vd25lZCBjb29yZGluYXRvciB3aXRob3V0IGRpc3R1cmJpbmcgYSByZXBsYWNlbWVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25uZWN0aW9uIC0gUGFyZW50IHBoeXNpY2FsIGNvbm5lY3Rpb24uXG4gKiBAcGFyYW0geyhjYWxsYmFjazogKCkgPT4gUHJvbWlzZTx1bmtub3duPikgPT4gUHJvbWlzZTx1bmtub3duPn0gY29vcmRpbmF0b3IgLSBFeHBlY3RlZCBzZXJpYWxpemVyLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclNoYXJlZFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoY29ubmVjdGlvbiwgY29vcmRpbmF0b3IpIHtcbiAgY29uc3QgcmVnaXN0cmF0aW9uID0gY29vcmRpbmF0b3JzLmdldChjb25uZWN0aW9uKVxuXG4gIGlmIChyZWdpc3RyYXRpb24/LmNvb3JkaW5hdG9yID09PSBjb29yZGluYXRvcikge1xuICAgIGNvb3JkaW5hdG9ycy5kZWxldGUoY29ubmVjdGlvbilcbiAgICByZWdpc3RyYXRpb24uY29vcmRpbmF0b3IgPSBpbmFjdGl2ZUNvb3JkaW5hdG9yXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIHBhcmVudCB3b3JrIHRocm91Z2ggYnJva2VyIHNlcmlhbGl6YXRpb24gd2hlbiByZWdpc3RlcmVkLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBQYXJlbnQgcGh5c2ljYWwgY29ubmVjdGlvbi5cbiAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxUPn0gY2FsbGJhY2sgLSBQYXJlbnQgb3BlcmF0aW9uLlxuICogQHBhcmFtIHtzeW1ib2x9IFtvcGVyYXRpb25Pd25lcl0gLSBCcm9rZXIgb3duZXIgZm9yIGFuIGFscmVhZHktY29vcmRpbmF0ZWQgb3BlcmF0aW9uLlxuICogQHJldHVybnMge1Byb21pc2U8VD59IC0gT3BlcmF0aW9uIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvb3JkaW5hdGVTaGFyZWRUcmFuc2FjdGlvbkNvbm5lY3Rpb24oY29ubmVjdGlvbiwgY2FsbGJhY2ssIG9wZXJhdGlvbk93bmVyKSB7XG4gIGNvbnN0IGFjdGl2ZVJlZ2lzdHJhdGlvbiA9IGNvb3JkaW5hdG9ycy5nZXQoY29ubmVjdGlvbilcbiAgY29uc3QgcmVnaXN0cmF0aW9uID0gYWN0aXZlUmVnaXN0cmF0aW9uIHx8IGNvbm5lY3Rpb25SZWdpc3RyYXRpb25zLmdldChjb25uZWN0aW9uKVxuXG4gIGlmICghcmVnaXN0cmF0aW9uKSByZXR1cm4gYXdhaXQgY2FsbGJhY2soKVxuXG4gIGNvbnN0IGVudmlyb25tZW50SGFuZGxlciA9IGNvbm5lY3Rpb24uY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKVxuICBjb25zdCBjdXJyZW50T3duZXIgPSBlbnZpcm9ubWVudEhhbmRsZXIuZ2V0U2hhcmVkVHJhbnNhY3Rpb25Db29yZGluYXRvck93bmVyKGNvbm5lY3Rpb24pXG4gIGNvbnN0IGN1cnJlbnRPd25lclNjb3BlID0gY3VycmVudE93bmVyID8gcmVnaXN0cmF0aW9uLm93bmVyU2NvcGVzLmdldChjdXJyZW50T3duZXIpIDogdW5kZWZpbmVkXG5cbiAgaWYgKGN1cnJlbnRPd25lclNjb3BlKSB7XG4gICAgcmV0dXJuIGF3YWl0IGNvb3JkaW5hdGVPd25lZFNoYXJlZFRyYW5zYWN0aW9uQ29ubmVjdGlvbihjb25uZWN0aW9uLCByZWdpc3RyYXRpb24sIGN1cnJlbnRPd25lclNjb3BlLCBjYWxsYmFjaylcbiAgfVxuICBpZiAoIWFjdGl2ZVJlZ2lzdHJhdGlvbikge1xuICAgIHJldHVybiBhd2FpdCBjb29yZGluYXRlT3duZWRTaGFyZWRUcmFuc2FjdGlvbkNvbm5lY3Rpb24oY29ubmVjdGlvbiwgcmVnaXN0cmF0aW9uLCByZWdpc3RyYXRpb24uY29ubmVjdGlvblNjb3BlLCBjYWxsYmFjaylcbiAgfVxuICBpZiAob3BlcmF0aW9uT3duZXIgPT09IHJlZ2lzdHJhdGlvbi5vd25lcikge1xuICAgIHJldHVybiBhd2FpdCBjb29yZGluYXRlUm9vdFNoYXJlZFRyYW5zYWN0aW9uQ29ubmVjdGlvbihjb25uZWN0aW9uLCByZWdpc3RyYXRpb24sIGNhbGxiYWNrKVxuICB9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7VH0gKi8gKGF3YWl0IHJlZ2lzdHJhdGlvbi5jb29yZGluYXRvcihhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGNvb3JkaW5hdGVSb290U2hhcmVkVHJhbnNhY3Rpb25Db25uZWN0aW9uKGNvbm5lY3Rpb24sIHJlZ2lzdHJhdGlvbiwgY2FsbGJhY2spXG4gIH0pKVxufVxuIl19
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
|
|
3
|
-
/** @typedef {{
|
|
3
|
+
/** @typedef {{ownedQueue: Promise<void>}} CoordinatorOwnerScope */
|
|
4
|
+
/** @typedef {{connectionScope: CoordinatorOwnerScope, coordinator: (callback: () => Promise<unknown>) => Promise<unknown>, owner: symbol, ownerScopes: Map<symbol, CoordinatorOwnerScope>}} CoordinatorRegistration */
|
|
4
5
|
|
|
5
6
|
/** @type {WeakMap<object, CoordinatorRegistration>} */
|
|
6
7
|
const coordinators = new WeakMap()
|
|
@@ -21,43 +22,47 @@ async function inactiveCoordinator(callback) {
|
|
|
21
22
|
* @template T
|
|
22
23
|
* @param {import("../database/drivers/base.js").default} connection - Parent physical connection.
|
|
23
24
|
* @param {CoordinatorRegistration} registration - Physical connection registration.
|
|
25
|
+
* @param {CoordinatorOwnerScope} ownerScope - Queue inherited from the current owner.
|
|
24
26
|
* @param {() => Promise<T>} callback - Owned operation.
|
|
27
|
+
* @param {string} [ownerDescription] - Async owner description.
|
|
25
28
|
* @returns {Promise<T>} - Operation result.
|
|
26
29
|
*/
|
|
27
|
-
async function coordinateOwnedSharedTransactionConnection(connection, registration, callback) {
|
|
28
|
-
const previous =
|
|
30
|
+
async function coordinateOwnedSharedTransactionConnection(connection, registration, ownerScope, callback, ownerDescription = "shared-transaction-owned-operation") {
|
|
31
|
+
const previous = ownerScope.ownedQueue
|
|
29
32
|
/**
|
|
30
33
|
* Releases the next owned sibling operation.
|
|
31
34
|
* @type {() => void}
|
|
32
35
|
*/
|
|
33
36
|
let release = () => {}
|
|
34
37
|
|
|
35
|
-
|
|
38
|
+
ownerScope.ownedQueue = new Promise((resolve) => { release = resolve })
|
|
36
39
|
await previous
|
|
37
|
-
const operationOwner = Symbol(
|
|
40
|
+
const operationOwner = Symbol(ownerDescription)
|
|
38
41
|
const environmentHandler = connection.configuration.getEnvironmentHandler()
|
|
42
|
+
const operationScope = {ownedQueue: Promise.resolve()}
|
|
39
43
|
|
|
40
|
-
registration.
|
|
44
|
+
registration.ownerScopes.set(operationOwner, operationScope)
|
|
41
45
|
try {
|
|
42
46
|
return await environmentHandler.runWithSharedTransactionCoordinatorOwner(connection, operationOwner, callback)
|
|
43
47
|
} finally {
|
|
44
|
-
|
|
48
|
+
await drainOwnedSharedTransactionConnections(operationScope)
|
|
49
|
+
registration.ownerScopes.delete(operationOwner)
|
|
45
50
|
release()
|
|
46
51
|
}
|
|
47
52
|
}
|
|
48
53
|
|
|
49
54
|
/**
|
|
50
55
|
* Drains all inherited operations admitted before the root owner is revoked.
|
|
51
|
-
* @param {
|
|
56
|
+
* @param {CoordinatorOwnerScope} ownerScope - Owner scope to drain.
|
|
52
57
|
* @returns {Promise<void>} - Resolves when the owned queue stops advancing.
|
|
53
58
|
*/
|
|
54
|
-
async function drainOwnedSharedTransactionConnections(
|
|
59
|
+
async function drainOwnedSharedTransactionConnections(ownerScope) {
|
|
55
60
|
let tail
|
|
56
61
|
|
|
57
62
|
do {
|
|
58
|
-
tail =
|
|
63
|
+
tail = ownerScope.ownedQueue
|
|
59
64
|
await tail
|
|
60
|
-
} while (tail !==
|
|
65
|
+
} while (tail !== ownerScope.ownedQueue)
|
|
61
66
|
}
|
|
62
67
|
|
|
63
68
|
/**
|
|
@@ -69,17 +74,13 @@ async function drainOwnedSharedTransactionConnections(registration) {
|
|
|
69
74
|
* @returns {Promise<T>} - Operation result.
|
|
70
75
|
*/
|
|
71
76
|
async function coordinateRootSharedTransactionConnection(connection, registration, callback) {
|
|
72
|
-
await
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
} finally {
|
|
80
|
-
await drainOwnedSharedTransactionConnections(registration)
|
|
81
|
-
registration.rootOwners.delete(rootOwner)
|
|
82
|
-
}
|
|
77
|
+
return await coordinateOwnedSharedTransactionConnection(
|
|
78
|
+
connection,
|
|
79
|
+
registration,
|
|
80
|
+
registration.connectionScope,
|
|
81
|
+
callback,
|
|
82
|
+
"shared-transaction-root-operation"
|
|
83
|
+
)
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
/**
|
|
@@ -96,7 +97,12 @@ export function setSharedTransactionCoordinator(connection, coordinator) {
|
|
|
96
97
|
registration.coordinator = coordinator
|
|
97
98
|
registration.owner = owner
|
|
98
99
|
} else {
|
|
99
|
-
registration = {
|
|
100
|
+
registration = {
|
|
101
|
+
connectionScope: {ownedQueue: Promise.resolve()},
|
|
102
|
+
coordinator,
|
|
103
|
+
owner,
|
|
104
|
+
ownerScopes: new Map()
|
|
105
|
+
}
|
|
100
106
|
connectionRegistrations.set(connection, registration)
|
|
101
107
|
}
|
|
102
108
|
|
|
@@ -135,12 +141,14 @@ export async function coordinateSharedTransactionConnection(connection, callback
|
|
|
135
141
|
|
|
136
142
|
const environmentHandler = connection.configuration.getEnvironmentHandler()
|
|
137
143
|
const currentOwner = environmentHandler.getSharedTransactionCoordinatorOwner(connection)
|
|
144
|
+
const currentOwnerScope = currentOwner ? registration.ownerScopes.get(currentOwner) : undefined
|
|
138
145
|
|
|
139
|
-
if (
|
|
140
|
-
|
|
141
|
-
|
|
146
|
+
if (currentOwnerScope) {
|
|
147
|
+
return await coordinateOwnedSharedTransactionConnection(connection, registration, currentOwnerScope, callback)
|
|
148
|
+
}
|
|
149
|
+
if (!activeRegistration) {
|
|
150
|
+
return await coordinateOwnedSharedTransactionConnection(connection, registration, registration.connectionScope, callback)
|
|
142
151
|
}
|
|
143
|
-
if (!activeRegistration) return await coordinateOwnedSharedTransactionConnection(connection, registration, callback)
|
|
144
152
|
if (operationOwner === registration.owner) {
|
|
145
153
|
return await coordinateRootSharedTransactionConnection(connection, registration, callback)
|
|
146
154
|
}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@ import TableData from "../database/table-data/index.js"
|
|
|
7
7
|
import VelociousError from "../velocious-error.js"
|
|
8
8
|
import BackgroundJobRecord from "./job-record.js"
|
|
9
9
|
import normalizeBackgroundJobError from "./normalize-error.js"
|
|
10
|
-
import {coordinateSharedTransactionConnection} from "../testing/shared-transaction-connection-coordinator.js"
|
|
10
|
+
import { coordinateSharedTransactionConnection } from "../testing/shared-transaction-connection-coordinator.js"
|
|
11
11
|
import stableJsonStringify from "../utils/stable-json.js"
|
|
12
12
|
import {
|
|
13
13
|
BACKGROUND_JOB_EXECUTION_MODES,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
|
|
3
|
-
/** @typedef {{
|
|
3
|
+
/** @typedef {{ownedQueue: Promise<void>}} CoordinatorOwnerScope */
|
|
4
|
+
/** @typedef {{connectionScope: CoordinatorOwnerScope, coordinator: (callback: () => Promise<unknown>) => Promise<unknown>, owner: symbol, ownerScopes: Map<symbol, CoordinatorOwnerScope>}} CoordinatorRegistration */
|
|
4
5
|
|
|
5
6
|
/** @type {WeakMap<object, CoordinatorRegistration>} */
|
|
6
7
|
const coordinators = new WeakMap()
|
|
@@ -21,43 +22,47 @@ async function inactiveCoordinator(callback) {
|
|
|
21
22
|
* @template T
|
|
22
23
|
* @param {import("../database/drivers/base.js").default} connection - Parent physical connection.
|
|
23
24
|
* @param {CoordinatorRegistration} registration - Physical connection registration.
|
|
25
|
+
* @param {CoordinatorOwnerScope} ownerScope - Queue inherited from the current owner.
|
|
24
26
|
* @param {() => Promise<T>} callback - Owned operation.
|
|
27
|
+
* @param {string} [ownerDescription] - Async owner description.
|
|
25
28
|
* @returns {Promise<T>} - Operation result.
|
|
26
29
|
*/
|
|
27
|
-
async function coordinateOwnedSharedTransactionConnection(connection, registration, callback) {
|
|
28
|
-
const previous =
|
|
30
|
+
async function coordinateOwnedSharedTransactionConnection(connection, registration, ownerScope, callback, ownerDescription = "shared-transaction-owned-operation") {
|
|
31
|
+
const previous = ownerScope.ownedQueue
|
|
29
32
|
/**
|
|
30
33
|
* Releases the next owned sibling operation.
|
|
31
34
|
* @type {() => void}
|
|
32
35
|
*/
|
|
33
36
|
let release = () => {}
|
|
34
37
|
|
|
35
|
-
|
|
38
|
+
ownerScope.ownedQueue = new Promise((resolve) => { release = resolve })
|
|
36
39
|
await previous
|
|
37
|
-
const operationOwner = Symbol(
|
|
40
|
+
const operationOwner = Symbol(ownerDescription)
|
|
38
41
|
const environmentHandler = connection.configuration.getEnvironmentHandler()
|
|
42
|
+
const operationScope = {ownedQueue: Promise.resolve()}
|
|
39
43
|
|
|
40
|
-
registration.
|
|
44
|
+
registration.ownerScopes.set(operationOwner, operationScope)
|
|
41
45
|
try {
|
|
42
46
|
return await environmentHandler.runWithSharedTransactionCoordinatorOwner(connection, operationOwner, callback)
|
|
43
47
|
} finally {
|
|
44
|
-
|
|
48
|
+
await drainOwnedSharedTransactionConnections(operationScope)
|
|
49
|
+
registration.ownerScopes.delete(operationOwner)
|
|
45
50
|
release()
|
|
46
51
|
}
|
|
47
52
|
}
|
|
48
53
|
|
|
49
54
|
/**
|
|
50
55
|
* Drains all inherited operations admitted before the root owner is revoked.
|
|
51
|
-
* @param {
|
|
56
|
+
* @param {CoordinatorOwnerScope} ownerScope - Owner scope to drain.
|
|
52
57
|
* @returns {Promise<void>} - Resolves when the owned queue stops advancing.
|
|
53
58
|
*/
|
|
54
|
-
async function drainOwnedSharedTransactionConnections(
|
|
59
|
+
async function drainOwnedSharedTransactionConnections(ownerScope) {
|
|
55
60
|
let tail
|
|
56
61
|
|
|
57
62
|
do {
|
|
58
|
-
tail =
|
|
63
|
+
tail = ownerScope.ownedQueue
|
|
59
64
|
await tail
|
|
60
|
-
} while (tail !==
|
|
65
|
+
} while (tail !== ownerScope.ownedQueue)
|
|
61
66
|
}
|
|
62
67
|
|
|
63
68
|
/**
|
|
@@ -69,17 +74,13 @@ async function drainOwnedSharedTransactionConnections(registration) {
|
|
|
69
74
|
* @returns {Promise<T>} - Operation result.
|
|
70
75
|
*/
|
|
71
76
|
async function coordinateRootSharedTransactionConnection(connection, registration, callback) {
|
|
72
|
-
await
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
} finally {
|
|
80
|
-
await drainOwnedSharedTransactionConnections(registration)
|
|
81
|
-
registration.rootOwners.delete(rootOwner)
|
|
82
|
-
}
|
|
77
|
+
return await coordinateOwnedSharedTransactionConnection(
|
|
78
|
+
connection,
|
|
79
|
+
registration,
|
|
80
|
+
registration.connectionScope,
|
|
81
|
+
callback,
|
|
82
|
+
"shared-transaction-root-operation"
|
|
83
|
+
)
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
/**
|
|
@@ -96,7 +97,12 @@ export function setSharedTransactionCoordinator(connection, coordinator) {
|
|
|
96
97
|
registration.coordinator = coordinator
|
|
97
98
|
registration.owner = owner
|
|
98
99
|
} else {
|
|
99
|
-
registration = {
|
|
100
|
+
registration = {
|
|
101
|
+
connectionScope: {ownedQueue: Promise.resolve()},
|
|
102
|
+
coordinator,
|
|
103
|
+
owner,
|
|
104
|
+
ownerScopes: new Map()
|
|
105
|
+
}
|
|
100
106
|
connectionRegistrations.set(connection, registration)
|
|
101
107
|
}
|
|
102
108
|
|
|
@@ -135,12 +141,14 @@ export async function coordinateSharedTransactionConnection(connection, callback
|
|
|
135
141
|
|
|
136
142
|
const environmentHandler = connection.configuration.getEnvironmentHandler()
|
|
137
143
|
const currentOwner = environmentHandler.getSharedTransactionCoordinatorOwner(connection)
|
|
144
|
+
const currentOwnerScope = currentOwner ? registration.ownerScopes.get(currentOwner) : undefined
|
|
138
145
|
|
|
139
|
-
if (
|
|
140
|
-
|
|
141
|
-
|
|
146
|
+
if (currentOwnerScope) {
|
|
147
|
+
return await coordinateOwnedSharedTransactionConnection(connection, registration, currentOwnerScope, callback)
|
|
148
|
+
}
|
|
149
|
+
if (!activeRegistration) {
|
|
150
|
+
return await coordinateOwnedSharedTransactionConnection(connection, registration, registration.connectionScope, callback)
|
|
142
151
|
}
|
|
143
|
-
if (!activeRegistration) return await coordinateOwnedSharedTransactionConnection(connection, registration, callback)
|
|
144
152
|
if (operationOwner === registration.owner) {
|
|
145
153
|
return await coordinateRootSharedTransactionConnection(connection, registration, callback)
|
|
146
154
|
}
|