@fluidframework/container-runtime 2.0.0-dev-rc.5.0.0.271717 → 2.0.0-dev-rc.5.0.0.272889
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/api-extractor/api-extractor-lint-bundle.json +5 -0
- package/api-extractor/api-extractor-lint-legacy.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-legacy.esm.json +5 -0
- package/api-extractor/api-extractor-lint-public.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-public.esm.json +5 -0
- package/api-extractor.json +1 -1
- package/api-report/container-runtime.alpha.api.md +1 -1
- package/container-runtime.test-files.tar +0 -0
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +12 -2
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +86 -90
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts +2 -1
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +29 -9
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStoreContext.d.ts +2 -1
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +5 -3
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/deltaManagerProxies.d.ts.map +1 -1
- package/dist/deltaManagerProxies.js.map +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +1 -3
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +4 -2
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +12 -8
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.js +1 -1
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +7 -4
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +1 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +1 -7
- package/dist/gc/gcTelemetry.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/messageTypes.d.ts +5 -21
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +1 -1
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +1 -2
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +1 -1
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.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.map +1 -1
- package/dist/pendingStateManager.js +1 -1
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/summary/documentSchema.d.ts.map +1 -1
- package/dist/summary/documentSchema.js +1 -2
- package/dist/summary/documentSchema.js.map +1 -1
- package/dist/summary/index.d.ts +1 -1
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +1 -2
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +4 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +1 -2
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +1 -2
- package/dist/summary/summaryManager.js.map +1 -1
- package/dist/throttler.d.ts.map +1 -1
- package/dist/throttler.js +3 -1
- package/dist/throttler.js.map +1 -1
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +1 -1
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +1 -1
- package/lib/blobManager.js.map +1 -1
- package/lib/channelCollection.d.ts +12 -2
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +86 -90
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts +2 -1
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +32 -12
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStoreContext.d.ts +2 -1
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +5 -3
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +1 -1
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/deltaManagerProxies.d.ts.map +1 -1
- package/lib/deltaManagerProxies.js.map +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +1 -3
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +4 -2
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +13 -9
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.js +1 -1
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +7 -4
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +1 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +1 -7
- package/lib/gc/gcTelemetry.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/messageTypes.d.ts +5 -21
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +1 -1
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +1 -1
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +1 -2
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +1 -1
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.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.map +1 -1
- package/lib/pendingStateManager.js +1 -1
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/summary/documentSchema.d.ts.map +1 -1
- package/lib/summary/documentSchema.js +1 -2
- package/lib/summary/documentSchema.js.map +1 -1
- package/lib/summary/index.d.ts +1 -1
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +1 -1
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +1 -2
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +4 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +1 -2
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +1 -2
- package/lib/summary/summaryManager.js.map +1 -1
- package/lib/throttler.d.ts.map +1 -1
- package/lib/throttler.js +3 -1
- package/lib/throttler.js.map +1 -1
- package/package.json +33 -20
- package/src/batchTracker.ts +4 -1
- package/src/blobManager.ts +14 -16
- package/src/channelCollection.ts +139 -132
- package/src/connectionTelemetry.ts +3 -8
- package/src/containerRuntime.ts +72 -44
- package/src/dataStoreContext.ts +34 -11
- package/src/dataStoreContexts.ts +7 -2
- package/src/deltaManagerProxies.ts +12 -3
- package/src/deltaScheduler.ts +1 -3
- package/src/gc/garbageCollection.ts +47 -31
- package/src/gc/gcConfigs.ts +7 -3
- package/src/gc/gcDefinitions.ts +16 -4
- package/src/gc/gcHelpers.ts +6 -2
- package/src/gc/gcSummaryStateTracker.ts +4 -1
- package/src/gc/gcTelemetry.ts +2 -9
- package/src/index.ts +0 -1
- package/src/messageTypes.ts +7 -23
- package/src/opLifecycle/index.ts +5 -1
- package/src/opLifecycle/opDecompressor.ts +2 -6
- package/src/opLifecycle/opGroupingManager.ts +1 -4
- package/src/opLifecycle/opSplitter.ts +9 -3
- package/src/opLifecycle/outbox.ts +1 -4
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +4 -2
- package/src/summary/documentSchema.ts +4 -7
- package/src/summary/index.ts +4 -1
- package/src/summary/orderedClientElection.ts +17 -10
- package/src/summary/runningSummarizer.ts +20 -9
- package/src/summary/summarizerClientElection.ts +2 -1
- package/src/summary/summarizerNode/summarizerNode.ts +6 -4
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +7 -2
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +10 -6
- package/src/summary/summarizerTypes.ts +9 -2
- package/src/summary/summaryCollection.ts +4 -1
- package/src/summary/summaryFormat.ts +8 -3
- package/src/summary/summaryGenerator.ts +4 -9
- package/src/summary/summaryManager.ts +6 -9
- package/src/throttler.ts +3 -1
- package/tsdoc.json +4 -0
|
@@ -88,7 +88,7 @@ export declare class ChannelCollection implements IFluidDataStoreChannel, IDispo
|
|
|
88
88
|
makeVisibleAndAttachGraph(): void;
|
|
89
89
|
private processAttachMessage;
|
|
90
90
|
private processAliasMessage;
|
|
91
|
-
processAliasMessageCore(internalId: string, alias: string): boolean;
|
|
91
|
+
processAliasMessageCore(internalId: string, alias: string, messageTimestampMs?: number): boolean;
|
|
92
92
|
private alreadyProcessed;
|
|
93
93
|
/** Package up the context's attach summary etc into an IAttachMessage */
|
|
94
94
|
private generateAttachMessage;
|
|
@@ -149,7 +149,6 @@ export declare class ChannelCollection implements IFluidDataStoreChannel, IDispo
|
|
|
149
149
|
setConnectionState(connected: boolean, clientId?: string): void;
|
|
150
150
|
setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void;
|
|
151
151
|
get size(): number;
|
|
152
|
-
summarize(fullTree: boolean, trackState: boolean, telemetryContext?: ITelemetryContext): Promise<ISummaryTreeWithStats>;
|
|
153
152
|
/**
|
|
154
153
|
* Create a summary. Used when attaching or serializing a detached container.
|
|
155
154
|
*/
|
|
@@ -158,6 +157,17 @@ export declare class ChannelCollection implements IFluidDataStoreChannel, IDispo
|
|
|
158
157
|
* Gets the GC data. Used when attaching or serializing a detached container.
|
|
159
158
|
*/
|
|
160
159
|
getAttachGCData(telemetryContext?: ITelemetryContext): IGarbageCollectionData;
|
|
160
|
+
/**
|
|
161
|
+
* Helper method for preparing to attach this channel.
|
|
162
|
+
* Runs the callback for each bound context to incorporate its data however the caller specifies
|
|
163
|
+
*/
|
|
164
|
+
private visitLocalBoundContextsDuringAttach;
|
|
165
|
+
/**
|
|
166
|
+
* Helper method for preparing to summarize this channel.
|
|
167
|
+
* Runs the callback for each bound context to incorporate its data however the caller specifies
|
|
168
|
+
*/
|
|
169
|
+
private visitContextsDuringSummary;
|
|
170
|
+
summarize(fullTree: boolean, trackState: boolean, telemetryContext?: ITelemetryContext): Promise<ISummaryTreeWithStats>;
|
|
161
171
|
/**
|
|
162
172
|
* Generates data used for garbage collection. It does the following:
|
|
163
173
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channelCollection.d.ts","sourceRoot":"","sources":["../src/channelCollection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"channelCollection.d.ts","sourceRoot":"","sources":["../src/channelCollection.ts"],"names":[],"mappings":"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"}
|
package/lib/channelCollection.js
CHANGED
|
@@ -260,7 +260,7 @@ export class ChannelCollection {
|
|
|
260
260
|
const foundGCData = processAttachMessageGCData(attachMessage.snapshot, (nodeId, toPath) => {
|
|
261
261
|
// nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
|
|
262
262
|
const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
|
|
263
|
-
this.parentContext.addedGCOutboundRoute(fromPath, toPath);
|
|
263
|
+
this.parentContext.addedGCOutboundRoute(fromPath, toPath, message.timestamp);
|
|
264
264
|
});
|
|
265
265
|
// Only log once per container to avoid noise/cost.
|
|
266
266
|
// Allows longitudinal tracking of various state (e.g. foundGCData), and some sampled details
|
|
@@ -332,12 +332,12 @@ export class ChannelCollection {
|
|
|
332
332
|
});
|
|
333
333
|
}
|
|
334
334
|
const resolve = localOpMetadata;
|
|
335
|
-
const aliasResult = this.processAliasMessageCore(aliasMessage.internalId, aliasMessage.alias);
|
|
335
|
+
const aliasResult = this.processAliasMessageCore(aliasMessage.internalId, aliasMessage.alias, message.timestamp);
|
|
336
336
|
if (local) {
|
|
337
337
|
resolve(aliasResult);
|
|
338
338
|
}
|
|
339
339
|
}
|
|
340
|
-
processAliasMessageCore(internalId, alias) {
|
|
340
|
+
processAliasMessageCore(internalId, alias, messageTimestampMs) {
|
|
341
341
|
if (this.alreadyProcessed(alias)) {
|
|
342
342
|
return false;
|
|
343
343
|
}
|
|
@@ -354,7 +354,11 @@ export class ChannelCollection {
|
|
|
354
354
|
});
|
|
355
355
|
return false;
|
|
356
356
|
}
|
|
357
|
-
this.
|
|
357
|
+
// If message timestamp doesn't exist, this is called in a detached container. Don't notify GC in that case
|
|
358
|
+
// because it doesn't run in detached container and doesn't need to know about this route.
|
|
359
|
+
if (messageTimestampMs) {
|
|
360
|
+
this.parentContext.addedGCOutboundRoute("/", `/${internalId}`, messageTimestampMs);
|
|
361
|
+
}
|
|
358
362
|
this.aliasMap.set(alias, context.id);
|
|
359
363
|
this.aliasedDataStores.add(context.id);
|
|
360
364
|
context.setInMemoryRoot();
|
|
@@ -587,7 +591,7 @@ export class ChannelCollection {
|
|
|
587
591
|
};
|
|
588
592
|
this.processChannelOp(envelope.address, transformed, local, localMessageMetadata);
|
|
589
593
|
// Notify GC of any outbound references that were added by this op.
|
|
590
|
-
detectOutboundReferences(envelope.address, transformed.contents, (fromPath, toPath) => this.parentContext.addedGCOutboundRoute(fromPath, toPath));
|
|
594
|
+
detectOutboundReferences(envelope.address, transformed.contents, (fromPath, toPath) => this.parentContext.addedGCOutboundRoute(fromPath, toPath, message.timestamp));
|
|
591
595
|
break;
|
|
592
596
|
}
|
|
593
597
|
default:
|
|
@@ -668,9 +672,7 @@ export class ChannelCollection {
|
|
|
668
672
|
if (!this.isDataStoreDeleted(dataStoreNodePath)) {
|
|
669
673
|
return false;
|
|
670
674
|
}
|
|
671
|
-
const idToLog = originalRequest !== undefined
|
|
672
|
-
? urlToGCNodePath(originalRequest.url)
|
|
673
|
-
: dataStoreNodePath;
|
|
675
|
+
const idToLog = originalRequest !== undefined ? urlToGCNodePath(originalRequest.url) : dataStoreNodePath;
|
|
674
676
|
// Log the package details asynchronously since getInitialSnapshotDetails is async
|
|
675
677
|
const recentlyDeletedContext = this.contexts.getRecentlyDeletedContext(id);
|
|
676
678
|
if (recentlyDeletedContext !== undefined) {
|
|
@@ -760,61 +762,24 @@ export class ChannelCollection {
|
|
|
760
762
|
get size() {
|
|
761
763
|
return this.contexts.size;
|
|
762
764
|
}
|
|
763
|
-
async summarize(fullTree, trackState, telemetryContext) {
|
|
764
|
-
const summaryBuilder = new SummaryTreeBuilder();
|
|
765
|
-
// Iterate over each store and ask it to snapshot
|
|
766
|
-
await Promise.all(Array.from(this.contexts)
|
|
767
|
-
.filter(([_, context]) => {
|
|
768
|
-
// Summarizer works only with clients with no local changes. A data store in attaching
|
|
769
|
-
// state indicates an op was sent to attach a local data store, and the the attach op
|
|
770
|
-
// had not yet round tripped back to the client.
|
|
771
|
-
if (context.attachState === AttachState.Attaching) {
|
|
772
|
-
// Formerly assert 0x588
|
|
773
|
-
const error = DataProcessingError.create("Local data store detected in attaching state during summarize", "summarize");
|
|
774
|
-
throw error;
|
|
775
|
-
}
|
|
776
|
-
return context.attachState === AttachState.Attached;
|
|
777
|
-
})
|
|
778
|
-
.map(async ([contextId, context]) => {
|
|
779
|
-
const contextSummary = await context.summarize(fullTree, trackState, telemetryContext);
|
|
780
|
-
summaryBuilder.addWithStats(contextId, contextSummary);
|
|
781
|
-
}));
|
|
782
|
-
return summaryBuilder.getSummaryTree();
|
|
783
|
-
}
|
|
784
765
|
/**
|
|
785
766
|
* Create a summary. Used when attaching or serializing a detached container.
|
|
786
767
|
*/
|
|
787
768
|
getAttachSummary(telemetryContext) {
|
|
788
769
|
const builder = new SummaryTreeBuilder();
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
.
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
builderTree[key] ||
|
|
803
|
-
this.attachOpFiredForDataStore.has(key)))
|
|
804
|
-
.map(([key, value]) => {
|
|
805
|
-
let dataStoreSummary;
|
|
806
|
-
if (value.isLoaded) {
|
|
807
|
-
dataStoreSummary = value.getAttachSummary(telemetryContext);
|
|
808
|
-
}
|
|
809
|
-
else {
|
|
810
|
-
// If this data store is not yet loaded, then there should be no changes in the snapshot from
|
|
811
|
-
// which it was created as it is detached container. So just use the previous snapshot.
|
|
812
|
-
assert(!!this.baseSnapshot, 0x166 /* "BaseSnapshot should be there as detached container loaded from snapshot" */);
|
|
813
|
-
dataStoreSummary = convertSnapshotTreeToSummaryTree(getSnapshotTree(this.baseSnapshot).trees[key]);
|
|
814
|
-
}
|
|
815
|
-
builder.addWithStats(key, dataStoreSummary);
|
|
816
|
-
});
|
|
817
|
-
} while (notBoundContextsLength !== this.contexts.notBoundLength());
|
|
770
|
+
this.visitLocalBoundContextsDuringAttach((contextId, context) => {
|
|
771
|
+
let dataStoreSummary;
|
|
772
|
+
if (context.isLoaded) {
|
|
773
|
+
dataStoreSummary = context.getAttachSummary(telemetryContext);
|
|
774
|
+
}
|
|
775
|
+
else {
|
|
776
|
+
// If this data store is not yet loaded, then there should be no changes in the snapshot from
|
|
777
|
+
// which it was created as it is detached container. So just use the previous snapshot.
|
|
778
|
+
assert(!!this.baseSnapshot, 0x166 /* "BaseSnapshot should be there as detached container loaded from snapshot" */);
|
|
779
|
+
dataStoreSummary = convertSnapshotTreeToSummaryTree(getSnapshotTree(this.baseSnapshot).trees[contextId]);
|
|
780
|
+
}
|
|
781
|
+
builder.addWithStats(contextId, dataStoreSummary);
|
|
782
|
+
});
|
|
818
783
|
return builder.getSummaryTree();
|
|
819
784
|
}
|
|
820
785
|
/**
|
|
@@ -822,27 +787,70 @@ export class ChannelCollection {
|
|
|
822
787
|
*/
|
|
823
788
|
getAttachGCData(telemetryContext) {
|
|
824
789
|
const builder = new GCDataBuilder();
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
Array.from(this.contexts)
|
|
832
|
-
.filter(([key, _]) =>
|
|
833
|
-
// Take GC data of bounded data stores only.
|
|
834
|
-
!this.contexts.isNotBound(key))
|
|
835
|
-
.map(([key, value]) => {
|
|
836
|
-
const contextGCData = value.getAttachGCData(telemetryContext);
|
|
837
|
-
// Prefix the child's id to the ids of its GC nodes so they can be identified as belonging to the child.
|
|
838
|
-
// This also gradually builds the id of each node to be a path from the root.
|
|
839
|
-
builder.prefixAndAddNodes(key, contextGCData.gcNodes);
|
|
840
|
-
});
|
|
841
|
-
} while (notBoundContextsLength !== this.contexts.notBoundLength());
|
|
790
|
+
this.visitLocalBoundContextsDuringAttach((contextId, context) => {
|
|
791
|
+
const contextGCData = context.getAttachGCData(telemetryContext);
|
|
792
|
+
// Prefix the child's id to the ids of its GC nodes so they can be identified as belonging to the child.
|
|
793
|
+
// This also gradually builds the id of each node to be a path from the root.
|
|
794
|
+
builder.prefixAndAddNodes(contextId, contextGCData.gcNodes);
|
|
795
|
+
});
|
|
842
796
|
// Get the outbound routes (aliased data stores) and add a GC node for this channel.
|
|
843
797
|
builder.addNode("/", Array.from(this.aliasedDataStores));
|
|
844
798
|
return builder.getGCData();
|
|
845
799
|
}
|
|
800
|
+
/**
|
|
801
|
+
* Helper method for preparing to attach this channel.
|
|
802
|
+
* Runs the callback for each bound context to incorporate its data however the caller specifies
|
|
803
|
+
*/
|
|
804
|
+
visitLocalBoundContextsDuringAttach(visitor) {
|
|
805
|
+
const visitedContexts = new Set();
|
|
806
|
+
let visitedLength = -1;
|
|
807
|
+
let notBoundContextsLength = -1;
|
|
808
|
+
while (visitedLength !== visitedContexts.size &&
|
|
809
|
+
notBoundContextsLength !== this.contexts.notBoundLength()) {
|
|
810
|
+
// detect changes in the visitedContexts set, as on visiting a context
|
|
811
|
+
// it could could make contexts available by removing other contexts
|
|
812
|
+
// from the not bound context list, so we need to ensure those get processed as well.
|
|
813
|
+
// only once the loop can run with no new contexts added to the visitedContexts set do we
|
|
814
|
+
// know for sure all possible contexts have been visited.
|
|
815
|
+
visitedLength = visitedContexts.size;
|
|
816
|
+
notBoundContextsLength = this.contexts.notBoundLength();
|
|
817
|
+
for (const [contextId, context] of this.contexts) {
|
|
818
|
+
if (!(visitedContexts.has(contextId) ||
|
|
819
|
+
this.contexts.isNotBound(contextId) ||
|
|
820
|
+
this.attachOpFiredForDataStore.has(contextId))) {
|
|
821
|
+
visitor(contextId, context);
|
|
822
|
+
visitedContexts.add(contextId);
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
/**
|
|
828
|
+
* Helper method for preparing to summarize this channel.
|
|
829
|
+
* Runs the callback for each bound context to incorporate its data however the caller specifies
|
|
830
|
+
*/
|
|
831
|
+
async visitContextsDuringSummary(visitor) {
|
|
832
|
+
for (const [contextId, context] of this.contexts) {
|
|
833
|
+
// Summarizer client and hence GC works only with clients with no local changes. A data store in
|
|
834
|
+
// attaching state indicates an op was sent to attach a local data store, and the the attach op
|
|
835
|
+
// had not yet round tripped back to the client.
|
|
836
|
+
// Formerly assert 0x589
|
|
837
|
+
if (context.attachState === AttachState.Attaching) {
|
|
838
|
+
const error = DataProcessingError.create("Local data store detected in attaching state", "summarize/getGCData");
|
|
839
|
+
throw error;
|
|
840
|
+
}
|
|
841
|
+
if (context.attachState === AttachState.Attached) {
|
|
842
|
+
await visitor(contextId, context);
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
async summarize(fullTree, trackState, telemetryContext) {
|
|
847
|
+
const summaryBuilder = new SummaryTreeBuilder();
|
|
848
|
+
await this.visitContextsDuringSummary(async (contextId, context) => {
|
|
849
|
+
const contextSummary = await context.summarize(fullTree, trackState, telemetryContext);
|
|
850
|
+
summaryBuilder.addWithStats(contextId, contextSummary);
|
|
851
|
+
});
|
|
852
|
+
return summaryBuilder.getSummaryTree();
|
|
853
|
+
}
|
|
846
854
|
/**
|
|
847
855
|
* Generates data used for garbage collection. It does the following:
|
|
848
856
|
*
|
|
@@ -858,25 +866,12 @@ export class ChannelCollection {
|
|
|
858
866
|
*/
|
|
859
867
|
async getGCData(fullGC = false) {
|
|
860
868
|
const builder = new GCDataBuilder();
|
|
861
|
-
|
|
862
|
-
await Promise.all(Array.from(this.contexts)
|
|
863
|
-
.filter(([_, context]) => {
|
|
864
|
-
// Summarizer client and hence GC works only with clients with no local changes. A data store in
|
|
865
|
-
// attaching state indicates an op was sent to attach a local data store, and the the attach op
|
|
866
|
-
// had not yet round tripped back to the client.
|
|
867
|
-
// Formerly assert 0x589
|
|
868
|
-
if (context.attachState === AttachState.Attaching) {
|
|
869
|
-
const error = DataProcessingError.create("Local data store detected in attaching state while running GC", "getGCData");
|
|
870
|
-
throw error;
|
|
871
|
-
}
|
|
872
|
-
return context.attachState === AttachState.Attached;
|
|
873
|
-
})
|
|
874
|
-
.map(async ([contextId, context]) => {
|
|
869
|
+
await this.visitContextsDuringSummary(async (contextId, context) => {
|
|
875
870
|
const contextGCData = await context.getGCData(fullGC);
|
|
876
871
|
// Prefix the child's id to the ids of its GC nodes so they can be identified as belonging to the child.
|
|
877
872
|
// This also gradually builds the id of each node to be a path from the root.
|
|
878
873
|
builder.prefixAndAddNodes(contextId, contextGCData.gcNodes);
|
|
879
|
-
})
|
|
874
|
+
});
|
|
880
875
|
// Get the outbound routes and add a GC node for this channel.
|
|
881
876
|
builder.addNode("/", await this.getOutboundRoutes());
|
|
882
877
|
return builder.getGCData();
|
|
@@ -1053,6 +1048,7 @@ export class ChannelCollection {
|
|
|
1053
1048
|
packagePath: details.pkg,
|
|
1054
1049
|
request,
|
|
1055
1050
|
headerData,
|
|
1051
|
+
timestampMs: undefined, // This will be added by the parent context if needed.
|
|
1056
1052
|
});
|
|
1057
1053
|
const dataStore = await dataStoreContext.realize();
|
|
1058
1054
|
const subRequest = requestParser.createSubRequest(1);
|