@fluidframework/container-runtime 2.0.0-internal.5.3.2 → 2.0.0-internal.6.0.0
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/CHANGELOG.md +80 -0
- package/dist/batchTracker.d.ts +2 -1
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +1 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +13 -2
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +103 -25
- package/dist/blobManager.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +12 -4
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts +69 -22
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +344 -238
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.js +11 -2
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +1 -1
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +40 -44
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.js +1 -1
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStores.d.ts +21 -5
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +102 -58
- package/dist/dataStores.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/dist/deltaManagerSummarizerProxy.js +2 -0
- package/dist/deltaManagerSummarizerProxy.js.map +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +5 -5
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +29 -25
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.js +13 -11
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +1 -0
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +5 -6
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +4 -6
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +44 -33
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/id-compressor/idCompressor.d.ts +3 -3
- package/dist/id-compressor/idCompressor.d.ts.map +1 -1
- package/dist/id-compressor/idCompressor.js +52 -52
- package/dist/id-compressor/idCompressor.js.map +1 -1
- package/dist/id-compressor/idRange.js +2 -2
- package/dist/id-compressor/idRange.js.map +1 -1
- package/dist/id-compressor/sessionIdNormalizer.js +11 -16
- package/dist/id-compressor/sessionIdNormalizer.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/opLifecycle/batchManager.js +10 -6
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts +2 -2
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +7 -2
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +2 -2
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +12 -10
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +13 -5
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +2 -2
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +11 -7
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +6 -5
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +6 -14
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +6 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +8 -2
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/opProperties.js +1 -2
- package/dist/opProperties.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +6 -3
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +41 -32
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +15 -11
- package/dist/scheduleManager.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +2 -1
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +18 -19
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +3 -5
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +42 -66
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.js +5 -8
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.js +5 -9
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.js +8 -12
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +5 -5
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +26 -22
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +2 -4
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +4 -3
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +13 -16
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summaryCollection.js +3 -5
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.js +1 -2
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +67 -21
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +2 -3
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +9 -7
- package/dist/summary/summaryManager.js.map +1 -1
- package/lib/batchTracker.d.ts +2 -1
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -2
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +13 -2
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +103 -25
- package/lib/blobManager.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +13 -5
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts +69 -22
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +343 -238
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.js +11 -2
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +1 -1
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +42 -46
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.js +2 -2
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStores.d.ts +21 -5
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +103 -59
- package/lib/dataStores.js.map +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/lib/deltaManagerSummarizerProxy.js +2 -0
- package/lib/deltaManagerSummarizerProxy.js.map +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +6 -6
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +30 -26
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.js +13 -11
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts +1 -0
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +5 -6
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +4 -6
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +45 -34
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/id-compressor/idCompressor.d.ts +3 -3
- package/lib/id-compressor/idCompressor.d.ts.map +1 -1
- package/lib/id-compressor/idCompressor.js +52 -52
- package/lib/id-compressor/idCompressor.js.map +1 -1
- package/lib/id-compressor/idRange.js +2 -2
- package/lib/id-compressor/idRange.js.map +1 -1
- package/lib/id-compressor/sessionIdNormalizer.js +11 -16
- package/lib/id-compressor/sessionIdNormalizer.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/opLifecycle/batchManager.js +10 -6
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts +2 -2
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +8 -3
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +2 -2
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +13 -11
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +13 -5
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +2 -2
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +12 -8
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +6 -5
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +7 -15
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts +6 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +8 -2
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/opProperties.js +1 -2
- package/lib/opProperties.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +6 -3
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +41 -32
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +16 -12
- package/lib/scheduleManager.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +2 -1
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +19 -20
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +3 -5
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +43 -67
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.js +6 -9
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.js +5 -9
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.js +8 -12
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +5 -5
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +27 -23
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +2 -4
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +4 -3
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +14 -17
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summaryCollection.js +3 -5
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.js +1 -2
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +68 -22
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts +2 -3
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +10 -8
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +30 -18
- package/src/batchTracker.ts +4 -3
- package/src/blobManager.ts +113 -15
- package/src/connectionTelemetry.ts +7 -3
- package/src/containerRuntime.ts +354 -194
- package/src/dataStore.ts +10 -1
- package/src/dataStoreContext.ts +31 -33
- package/src/dataStoreContexts.ts +2 -2
- package/src/dataStores.ts +108 -71
- package/src/deltaManagerSummarizerProxy.ts +2 -0
- package/src/deltaScheduler.ts +6 -10
- package/src/gc/garbageCollection.ts +13 -8
- package/src/gc/gcHelpers.ts +1 -0
- package/src/gc/gcTelemetry.ts +13 -10
- package/src/id-compressor/idCompressor.ts +6 -5
- package/src/index.ts +0 -1
- package/src/opLifecycle/opCompressor.ts +4 -3
- package/src/opLifecycle/opDecompressor.ts +4 -3
- package/src/opLifecycle/opSplitter.ts +4 -3
- package/src/opLifecycle/outbox.ts +13 -25
- package/src/opLifecycle/remoteMessageProcessor.ts +8 -2
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +34 -25
- package/src/scheduleManager.ts +2 -2
- package/src/summary/orderedClientElection.ts +4 -3
- package/src/summary/runningSummarizer.ts +18 -44
- package/src/summary/summarizer.ts +2 -2
- package/src/summary/summarizerNode/summarizerNode.ts +13 -15
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +8 -7
- package/src/summary/summaryGenerator.ts +6 -2
- package/src/summary/summaryManager.ts +9 -5
|
@@ -8,8 +8,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.hasOngoingSession = exports.IdCompressor = exports.isLocalId = exports.isFinalId = exports.defaultClusterCapacity = void 0;
|
|
11
|
+
/* eslint-disable @typescript-eslint/restrict-plus-operands */
|
|
11
12
|
const common_utils_1 = require("@fluidframework/common-utils");
|
|
12
13
|
const sorted_btree_1 = __importDefault(require("sorted-btree"));
|
|
14
|
+
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
13
15
|
const utils_1 = require("./utils");
|
|
14
16
|
const uuidUtilities_1 = require("./uuidUtilities");
|
|
15
17
|
const appendOnlySortedMap_1 = require("./appendOnlySortedMap");
|
|
@@ -52,7 +54,6 @@ class IdCompressor {
|
|
|
52
54
|
*/
|
|
53
55
|
constructor(localSessionId, logger) {
|
|
54
56
|
this.localSessionId = localSessionId;
|
|
55
|
-
this.logger = logger;
|
|
56
57
|
/**
|
|
57
58
|
* Trivially reach consensus on default cluster size and reserved IDs.
|
|
58
59
|
* These initial values must *NOT* change without careful consideration to compatibility.
|
|
@@ -107,6 +108,7 @@ class IdCompressor {
|
|
|
107
108
|
*/
|
|
108
109
|
this.finalIdToCluster = new appendOnlySortedMap_1.AppendOnlySortedMap(utils_1.compareFiniteNumbers);
|
|
109
110
|
this.localSession = this.createSession(localSessionId);
|
|
111
|
+
this.logger = (0, telemetry_utils_1.createChildLogger)({ logger });
|
|
110
112
|
}
|
|
111
113
|
/**
|
|
112
114
|
* The size of each newly created ID cluster.
|
|
@@ -151,9 +153,8 @@ class IdCompressor {
|
|
|
151
153
|
* it is finalized. Ranges must be sent to the server in the order that they are taken via calls to this method.
|
|
152
154
|
*/
|
|
153
155
|
takeNextCreationRange() {
|
|
154
|
-
var _a;
|
|
155
156
|
const lastLocalInRange = -this.localIdCount;
|
|
156
|
-
const lastTakenNormalized =
|
|
157
|
+
const lastTakenNormalized = this.lastTakenLocalId ?? 0;
|
|
157
158
|
(0, common_utils_1.assert)(lastLocalInRange <= lastTakenNormalized, 0x485 /* Inconsistent local ID state */);
|
|
158
159
|
let ids;
|
|
159
160
|
if (lastLocalInRange !== lastTakenNormalized) {
|
|
@@ -196,21 +197,20 @@ class IdCompressor {
|
|
|
196
197
|
* @param range - the range of session-local IDs to finalize.
|
|
197
198
|
*/
|
|
198
199
|
finalizeCreationRange(range) {
|
|
199
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
200
200
|
const { sessionId } = range;
|
|
201
201
|
const isLocal = sessionId === this.localSessionId;
|
|
202
|
-
const session =
|
|
202
|
+
const session = this.sessions.get(sessionId) ?? this.createSession(sessionId);
|
|
203
203
|
const ids = (0, idRange_1.getIds)(range);
|
|
204
204
|
if (ids === undefined) {
|
|
205
205
|
return;
|
|
206
206
|
}
|
|
207
207
|
const { currentClusterDetails } = session;
|
|
208
|
-
const { cluster: currentCluster, clusterBase: currentBaseFinalId } = currentClusterDetails
|
|
208
|
+
const { cluster: currentCluster, clusterBase: currentBaseFinalId } = currentClusterDetails ?? {
|
|
209
209
|
cluster: undefined,
|
|
210
210
|
clusterBase: undefined,
|
|
211
211
|
};
|
|
212
212
|
const currentClusterExists = currentCluster !== undefined && currentBaseFinalId !== undefined;
|
|
213
|
-
const normalizedLastFinalizedLocal =
|
|
213
|
+
const normalizedLastFinalizedLocal = session.lastFinalizedLocalId ?? 0;
|
|
214
214
|
const { first: newFirstFinalizedLocal, last: newLastFinalizedLocal } = ids;
|
|
215
215
|
(0, common_utils_1.assert)(newFirstFinalizedLocal === normalizedLastFinalizedLocal - 1, 0x489 /* Ranges finalized out of order. */);
|
|
216
216
|
// The total number of session-local IDs to finalize
|
|
@@ -222,7 +222,8 @@ class IdCompressor {
|
|
|
222
222
|
let newBaseUuid;
|
|
223
223
|
if (currentClusterExists) {
|
|
224
224
|
if (isLocal) {
|
|
225
|
-
const lastKnownFinal =
|
|
225
|
+
const lastKnownFinal = this.sessionIdNormalizer.getLastFinalId() ??
|
|
226
|
+
(0, utils_1.fail)("Cluster exists but normalizer does not have an entry for it.");
|
|
226
227
|
const lastAlignedFinalInCluster = (currentBaseFinalId +
|
|
227
228
|
Math.min(currentCluster.count + finalizeCount, currentCluster.capacity) -
|
|
228
229
|
1);
|
|
@@ -273,7 +274,7 @@ class IdCompressor {
|
|
|
273
274
|
// actually finalized, because total order broadcast guarantees that any usage of those final IDs will be observed after
|
|
274
275
|
// the finalization of the ranges.
|
|
275
276
|
this.sessionIdNormalizer.registerFinalIdBlock(finalPivot, expansionAmount, currentCluster);
|
|
276
|
-
|
|
277
|
+
this.logger?.sendTelemetryEvent({
|
|
277
278
|
eventName: "RuntimeIdCompressor:ClusterExpansion",
|
|
278
279
|
sessionId: this.localSessionId,
|
|
279
280
|
previousCapacity,
|
|
@@ -289,7 +290,7 @@ class IdCompressor {
|
|
|
289
290
|
newBaseUuid = (0, numericUuid_1.incrementUuid)(currentCluster.baseUuid, currentCluster.capacity);
|
|
290
291
|
currentCluster.count += remainingCapacity;
|
|
291
292
|
remainingCount -= remainingCapacity;
|
|
292
|
-
|
|
293
|
+
this.logger?.sendTelemetryEvent({
|
|
293
294
|
eventName: "RuntimeIdCompressor:OverfilledCluster",
|
|
294
295
|
sessionId: this.localSessionId,
|
|
295
296
|
});
|
|
@@ -299,7 +300,7 @@ class IdCompressor {
|
|
|
299
300
|
// Session has never made a cluster, form a new one with the session UUID as the baseUuid
|
|
300
301
|
newBaseUuid = session.sessionUuid;
|
|
301
302
|
if (isLocal) {
|
|
302
|
-
|
|
303
|
+
this.logger?.sendTelemetryEvent({
|
|
303
304
|
eventName: "RuntimeIdCompressor:FirstCluster",
|
|
304
305
|
sessionId: this.localSessionId,
|
|
305
306
|
});
|
|
@@ -334,7 +335,7 @@ class IdCompressor {
|
|
|
334
335
|
const usedCapacity = finalizeCount - remainingCount;
|
|
335
336
|
localIdPivot = (newFirstFinalizedLocal - usedCapacity);
|
|
336
337
|
if (isLocal) {
|
|
337
|
-
|
|
338
|
+
this.logger?.sendTelemetryEvent({
|
|
338
339
|
eventName: "RuntimeIdCompressor:NewCluster",
|
|
339
340
|
sessionId: this.localSessionId,
|
|
340
341
|
clusterCapacity: newCapacity,
|
|
@@ -380,7 +381,7 @@ class IdCompressor {
|
|
|
380
381
|
(normalizedLastFinalizedLocal - overriddenLocal) -
|
|
381
382
|
1);
|
|
382
383
|
}
|
|
383
|
-
|
|
384
|
+
cluster.overrides ?? (cluster.overrides = new Map());
|
|
384
385
|
const inversionKey = IdCompressor.createInversionKey(override);
|
|
385
386
|
const existingIds = this.getExistingIdsForNewOverride(inversionKey, true);
|
|
386
387
|
let overrideForCluster;
|
|
@@ -448,11 +449,11 @@ class IdCompressor {
|
|
|
448
449
|
}
|
|
449
450
|
}
|
|
450
451
|
if (isLocal) {
|
|
451
|
-
|
|
452
|
+
this.logger?.sendTelemetryEvent({
|
|
452
453
|
eventName: "RuntimeIdCompressor:IdCompressorStatus",
|
|
453
|
-
eagerFinalIdCount: eagerFinalIdCount - (
|
|
454
|
-
localIdCount: remainingCount + (
|
|
455
|
-
overridesCount:
|
|
454
|
+
eagerFinalIdCount: eagerFinalIdCount - (overrides?.length ?? 0),
|
|
455
|
+
localIdCount: remainingCount + (overrides?.length ?? 0),
|
|
456
|
+
overridesCount: overrides?.length ?? 0,
|
|
456
457
|
sessionId: this.localSessionId,
|
|
457
458
|
});
|
|
458
459
|
}
|
|
@@ -497,7 +498,6 @@ class IdCompressor {
|
|
|
497
498
|
* Returns an existing ID associated with an override, or undefined if none exists.
|
|
498
499
|
*/
|
|
499
500
|
getExistingIdsForNewOverride(inversionKey, isFinalOverride) {
|
|
500
|
-
var _a;
|
|
501
501
|
const closestMatch = this.clustersAndOverridesInversion.getPairOrNextLower(inversionKey, reusedArray);
|
|
502
502
|
let numericOverride;
|
|
503
503
|
let stableOverride;
|
|
@@ -535,7 +535,9 @@ class IdCompressor {
|
|
|
535
535
|
}
|
|
536
536
|
}
|
|
537
537
|
}
|
|
538
|
-
const override =
|
|
538
|
+
const override = numericOverride ??
|
|
539
|
+
stableOverride ??
|
|
540
|
+
(IdCompressor.isStableInversionKey(inversionKey) ? inversionKey : undefined);
|
|
539
541
|
if (override !== undefined) {
|
|
540
542
|
const sessionSpaceId = this.getCompressedIdForStableId(override);
|
|
541
543
|
if (sessionSpaceId !== undefined) {
|
|
@@ -563,8 +565,7 @@ class IdCompressor {
|
|
|
563
565
|
* Helper for retrieving an override.
|
|
564
566
|
*/
|
|
565
567
|
static tryGetOverride(cluster, finalId) {
|
|
566
|
-
|
|
567
|
-
const override = (_a = cluster.overrides) === null || _a === void 0 ? void 0 : _a.get(finalId);
|
|
568
|
+
const override = cluster.overrides?.get(finalId);
|
|
568
569
|
if (override === undefined) {
|
|
569
570
|
return undefined;
|
|
570
571
|
}
|
|
@@ -609,15 +610,15 @@ class IdCompressor {
|
|
|
609
610
|
const registeredLocal = sessionIdNormalizer.addLocalId();
|
|
610
611
|
(0, common_utils_1.assert)(registeredLocal === newLocalId, 0x496 /* Session ID Normalizer produced unexpected local ID */);
|
|
611
612
|
if (eagerFinalId !== undefined) {
|
|
612
|
-
sessionIdNormalizer.addFinalIds(eagerFinalId, eagerFinalId, cluster
|
|
613
|
+
sessionIdNormalizer.addFinalIds(eagerFinalId, eagerFinalId, cluster ?? (0, utils_1.fail)("No cluster when generating compressed ID"));
|
|
613
614
|
}
|
|
614
|
-
this.localOverrides.append(newLocalId, override
|
|
615
|
+
this.localOverrides.append(newLocalId, override ?? (0, utils_1.fail)("Override must be defined"));
|
|
615
616
|
// Since the local ID was just created, it is in both session and op space
|
|
616
617
|
const compressionMapping = newLocalId;
|
|
617
618
|
this.clustersAndOverridesInversion.set(overrideInversionKey, compressionMapping);
|
|
618
619
|
}
|
|
619
620
|
else if (eagerFinalId !== undefined) {
|
|
620
|
-
sessionIdNormalizer.addFinalIds(eagerFinalId, eagerFinalId, cluster
|
|
621
|
+
sessionIdNormalizer.addFinalIds(eagerFinalId, eagerFinalId, cluster ?? (0, utils_1.fail)("No cluster when generating compressed ID"));
|
|
621
622
|
return eagerFinalId;
|
|
622
623
|
}
|
|
623
624
|
else {
|
|
@@ -632,8 +633,7 @@ class IdCompressor {
|
|
|
632
633
|
* @returns the UUID or override string associated with the compressed ID. Fails if the ID was not generated by this compressor.
|
|
633
634
|
*/
|
|
634
635
|
decompress(id) {
|
|
635
|
-
|
|
636
|
-
return (_a = this.tryDecompress(id)) !== null && _a !== void 0 ? _a : (0, utils_1.fail)("Compressed ID was not generated by this compressor");
|
|
636
|
+
return this.tryDecompress(id) ?? (0, utils_1.fail)("Compressed ID was not generated by this compressor");
|
|
637
637
|
}
|
|
638
638
|
/**
|
|
639
639
|
* Attempts to decompress a previously compressed ID into a UUID or override string.
|
|
@@ -641,7 +641,6 @@ class IdCompressor {
|
|
|
641
641
|
* @returns the UUID or override string associated with the compressed ID, or undefined if the ID was not generated by this compressor.
|
|
642
642
|
*/
|
|
643
643
|
tryDecompress(id) {
|
|
644
|
-
var _a;
|
|
645
644
|
if (isFinalId(id)) {
|
|
646
645
|
const possibleCluster = this.getClusterForFinalId(id);
|
|
647
646
|
if (possibleCluster === undefined) {
|
|
@@ -673,7 +672,7 @@ class IdCompressor {
|
|
|
673
672
|
// If this is a local ID with an override, then it must have been allocated on this machine and will be contained in
|
|
674
673
|
// `localOverrides`s. Otherwise, it is a sequential allocation from the session UUID and can simply be negated and
|
|
675
674
|
// added to that UUID to obtain the stable ID associated with it.
|
|
676
|
-
const localOverride =
|
|
675
|
+
const localOverride = this.localOverrides?.get(id);
|
|
677
676
|
return localOverride !== undefined
|
|
678
677
|
? localOverride
|
|
679
678
|
: (0, numericUuid_1.stableIdFromNumericUuid)(this.localSession.sessionUuid, idOffset - 1);
|
|
@@ -685,8 +684,7 @@ class IdCompressor {
|
|
|
685
684
|
* @returns the `CompressedId` associated with `uncompressed`. Fails if it has not been previously compressed by this compressor.
|
|
686
685
|
*/
|
|
687
686
|
recompress(uncompressed) {
|
|
688
|
-
|
|
689
|
-
return (_a = this.tryRecompress(uncompressed)) !== null && _a !== void 0 ? _a : (0, utils_1.fail)("No such string has ever been compressed");
|
|
687
|
+
return this.tryRecompress(uncompressed) ?? (0, utils_1.fail)("No such string has ever been compressed");
|
|
690
688
|
}
|
|
691
689
|
/**
|
|
692
690
|
* Attempts to recompresses a decompressed ID, which could be a UUID or an override string.
|
|
@@ -701,7 +699,6 @@ class IdCompressor {
|
|
|
701
699
|
* performance optimization.
|
|
702
700
|
*/
|
|
703
701
|
recompressInternal(uncompressed, uncompressedUuidNumeric) {
|
|
704
|
-
var _a, _b;
|
|
705
702
|
let numericUuid = uncompressedUuidNumeric;
|
|
706
703
|
const inversionKey = IdCompressor.createInversionKey(uncompressed);
|
|
707
704
|
const isStable = IdCompressor.isStableInversionKey(inversionKey);
|
|
@@ -712,7 +709,8 @@ class IdCompressor {
|
|
|
712
709
|
if (key === inversionKey) {
|
|
713
710
|
return IdCompressor.isUnfinalizedOverride(compressionMapping)
|
|
714
711
|
? compressionMapping
|
|
715
|
-
:
|
|
712
|
+
: compressionMapping.associatedLocalId ??
|
|
713
|
+
compressionMapping.originalOverridingFinal;
|
|
716
714
|
}
|
|
717
715
|
}
|
|
718
716
|
else {
|
|
@@ -720,11 +718,11 @@ class IdCompressor {
|
|
|
720
718
|
return undefined;
|
|
721
719
|
}
|
|
722
720
|
const { clusterBase: closestBaseFinalId, cluster: closestCluster } = compressionMapping;
|
|
723
|
-
numericUuid
|
|
721
|
+
numericUuid ?? (numericUuid = (0, numericUuid_1.numericUuidFromStableId)(inversionKey));
|
|
724
722
|
const uuidOffset = (0, numericUuid_1.getPositiveDelta)(numericUuid, closestCluster.baseUuid, closestCluster.count - 1);
|
|
725
723
|
if (uuidOffset !== undefined) {
|
|
726
724
|
let targetFinalId = (closestBaseFinalId + uuidOffset);
|
|
727
|
-
const override =
|
|
725
|
+
const override = closestCluster.overrides?.get(targetFinalId);
|
|
728
726
|
if (typeof override === "object") {
|
|
729
727
|
if (override.associatedLocalId !== undefined) {
|
|
730
728
|
return override.associatedLocalId;
|
|
@@ -739,7 +737,7 @@ class IdCompressor {
|
|
|
739
737
|
}
|
|
740
738
|
if (isStable) {
|
|
741
739
|
// May have already computed the numeric UUID, so avoid recomputing if possible
|
|
742
|
-
const sessionSpaceId = this.getCompressedIdForStableId(numericUuid
|
|
740
|
+
const sessionSpaceId = this.getCompressedIdForStableId(numericUuid ?? inversionKey);
|
|
743
741
|
if (sessionSpaceId !== undefined) {
|
|
744
742
|
return sessionSpaceId;
|
|
745
743
|
}
|
|
@@ -752,7 +750,6 @@ class IdCompressor {
|
|
|
752
750
|
* @returns the ID in op space.
|
|
753
751
|
*/
|
|
754
752
|
normalizeToOpSpace(id) {
|
|
755
|
-
var _a, _b, _c;
|
|
756
753
|
if (isFinalId(id)) {
|
|
757
754
|
return id;
|
|
758
755
|
}
|
|
@@ -771,7 +768,8 @@ class IdCompressor {
|
|
|
771
768
|
const override = this.localOverrides.get(id);
|
|
772
769
|
if (override !== undefined) {
|
|
773
770
|
const inversionKey = IdCompressor.createInversionKey(override);
|
|
774
|
-
const compressionMapping =
|
|
771
|
+
const compressionMapping = this.clustersAndOverridesInversion.get(inversionKey) ??
|
|
772
|
+
(0, utils_1.fail)("Bimap is malformed.");
|
|
775
773
|
return !IdCompressor.isClusterInfo(compressionMapping) &&
|
|
776
774
|
!IdCompressor.isUnfinalizedOverride(compressionMapping) &&
|
|
777
775
|
compressionMapping.associatedLocalId === id
|
|
@@ -779,9 +777,10 @@ class IdCompressor {
|
|
|
779
777
|
: id;
|
|
780
778
|
}
|
|
781
779
|
const possibleFinal = this.sessionIdNormalizer.getFinalId(id);
|
|
782
|
-
return
|
|
780
|
+
return possibleFinal?.[0] ?? id;
|
|
783
781
|
}
|
|
784
|
-
const [correspondingFinal, cluster] =
|
|
782
|
+
const [correspondingFinal, cluster] = this.sessionIdNormalizer.getFinalId(id) ??
|
|
783
|
+
(0, utils_1.fail)("Locally created cluster should be added to the map when allocated");
|
|
785
784
|
if (cluster.overrides) {
|
|
786
785
|
const override = cluster.overrides.get(correspondingFinal);
|
|
787
786
|
if (typeof override === "object" && override.originalOverridingFinal !== undefined) {
|
|
@@ -792,7 +791,6 @@ class IdCompressor {
|
|
|
792
791
|
return correspondingFinal;
|
|
793
792
|
}
|
|
794
793
|
normalizeToSessionSpace(id, sessionIdIfLocal) {
|
|
795
|
-
var _a, _b, _c, _d;
|
|
796
794
|
if (isLocalId(id)) {
|
|
797
795
|
if (sessionIdIfLocal === undefined || sessionIdIfLocal === this.localSessionId) {
|
|
798
796
|
const localIndex = -id;
|
|
@@ -802,10 +800,12 @@ class IdCompressor {
|
|
|
802
800
|
return id;
|
|
803
801
|
}
|
|
804
802
|
else {
|
|
805
|
-
const session =
|
|
803
|
+
const session = this.sessions.get(sessionIdIfLocal) ??
|
|
804
|
+
(0, utils_1.fail)("No IDs have ever been finalized by the supplied session.");
|
|
806
805
|
const localCount = -id;
|
|
807
806
|
const numericUuid = (0, numericUuid_1.incrementUuid)(session.sessionUuid, localCount - 1);
|
|
808
|
-
return (
|
|
807
|
+
return (this.compressNumericUuid(numericUuid) ??
|
|
808
|
+
(0, utils_1.fail)("ID is not known to this compressor."));
|
|
809
809
|
}
|
|
810
810
|
}
|
|
811
811
|
const normalizedId = this.sessionIdNormalizer.getSessionSpaceId(id);
|
|
@@ -814,8 +814,9 @@ class IdCompressor {
|
|
|
814
814
|
}
|
|
815
815
|
// Check for a unified override finalized first by another session but to which the local session
|
|
816
816
|
// still has an associated local ID.
|
|
817
|
-
const [_, cluster] =
|
|
818
|
-
|
|
817
|
+
const [_, cluster] = this.getClusterForFinalId(id) ??
|
|
818
|
+
(0, utils_1.fail)("Supplied final ID was not finalized by this compressor.");
|
|
819
|
+
const override = cluster.overrides?.get(id);
|
|
819
820
|
if (typeof override === "object" && override.associatedLocalId !== undefined) {
|
|
820
821
|
return override.associatedLocalId;
|
|
821
822
|
}
|
|
@@ -984,7 +985,6 @@ class IdCompressor {
|
|
|
984
985
|
return true;
|
|
985
986
|
}
|
|
986
987
|
static idClustersEqual(a, b, checkSessionData = true, compareLocalState = true) {
|
|
987
|
-
var _a, _b;
|
|
988
988
|
const areEqual = (0, numericUuid_1.numericUuidEquals)(a.baseUuid, b.baseUuid) &&
|
|
989
989
|
a.capacity === b.capacity &&
|
|
990
990
|
a.count === b.count &&
|
|
@@ -992,7 +992,7 @@ class IdCompressor {
|
|
|
992
992
|
IdCompressor.sessionDataEqual(a.session, b.session, false, compareLocalState)) &&
|
|
993
993
|
(a.overrides === undefined) === (b.overrides === undefined) &&
|
|
994
994
|
(a.overrides === undefined ||
|
|
995
|
-
(0, utils_1.compareMaps)(
|
|
995
|
+
(0, utils_1.compareMaps)(a.overrides ?? (0, utils_1.fail)("Overrides must be defined"), b.overrides ?? (0, utils_1.fail)("Overrides must be defined"), (overrideA, overrideB) => {
|
|
996
996
|
if (compareLocalState) {
|
|
997
997
|
if (typeof overrideA === "string" || typeof overrideB === "string") {
|
|
998
998
|
return overrideA === overrideB;
|
|
@@ -1016,7 +1016,6 @@ class IdCompressor {
|
|
|
1016
1016
|
return areEqual;
|
|
1017
1017
|
}
|
|
1018
1018
|
serialize(withSession) {
|
|
1019
|
-
var _a, _b;
|
|
1020
1019
|
const serializedSessions = [];
|
|
1021
1020
|
const sessionIdToSessionIndex = new Map();
|
|
1022
1021
|
for (const [sessionId, session] of this.sessions) {
|
|
@@ -1034,7 +1033,8 @@ class IdCompressor {
|
|
|
1034
1033
|
for (const [baseFinalId, cluster] of this.finalIdToCluster.entries()) {
|
|
1035
1034
|
const sessionId = (0, numericUuid_1.stableIdFromNumericUuid)(cluster.session.sessionUuid);
|
|
1036
1035
|
if (sessionId !== reservedSessionId) {
|
|
1037
|
-
const sessionIndex =
|
|
1036
|
+
const sessionIndex = sessionIdToSessionIndex.get(sessionId) ??
|
|
1037
|
+
(0, utils_1.fail)("Session object contains wrong session numeric UUID");
|
|
1038
1038
|
const serializedCluster = [
|
|
1039
1039
|
sessionIndex,
|
|
1040
1040
|
cluster.capacity,
|
|
@@ -1086,7 +1086,7 @@ class IdCompressor {
|
|
|
1086
1086
|
}
|
|
1087
1087
|
return serializedWithSession;
|
|
1088
1088
|
}
|
|
1089
|
-
|
|
1089
|
+
this.logger?.sendTelemetryEvent({
|
|
1090
1090
|
eventName: "RuntimeIdCompressor:SerializedIdCompressorSize",
|
|
1091
1091
|
size: JSON.stringify(serializedIdCompressor).length,
|
|
1092
1092
|
clusterCount: serializedIdCompressor.clusters.length,
|
|
@@ -1147,7 +1147,7 @@ class IdCompressor {
|
|
|
1147
1147
|
baseUuid: (0, numericUuid_1.incrementUuid)(sessionUuid, currentIdCount),
|
|
1148
1148
|
session,
|
|
1149
1149
|
};
|
|
1150
|
-
const lastFinalizedNormalized = lastFinalizedLocalId
|
|
1150
|
+
const lastFinalizedNormalized = lastFinalizedLocalId ?? 0;
|
|
1151
1151
|
const clusterBase = compressor.nextClusterBaseFinalId;
|
|
1152
1152
|
session.lastFinalizedLocalId = (lastFinalizedNormalized - count);
|
|
1153
1153
|
session.currentClusterDetails = { clusterBase, cluster };
|
|
@@ -1201,8 +1201,8 @@ class IdCompressor {
|
|
|
1201
1201
|
}
|
|
1202
1202
|
if (serializedLocalState !== undefined) {
|
|
1203
1203
|
compressor.sessionIdNormalizer = sessionIdNormalizer_1.SessionIdNormalizer.deserialize(serializedLocalState.sessionNormalizer, (finalId) => {
|
|
1204
|
-
|
|
1205
|
-
|
|
1204
|
+
const [_, cluster] = compressor.finalIdToCluster.getPairOrNextLower(finalId) ??
|
|
1205
|
+
(0, utils_1.fail)("Final in serialized normalizer was never created.");
|
|
1206
1206
|
return cluster;
|
|
1207
1207
|
});
|
|
1208
1208
|
}
|