@fluidframework/container-runtime 2.0.0-dev-rc.1.0.0.225277 → 2.0.0-dev-rc.1.0.0.232845
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 +34 -0
- package/README.md +0 -6
- package/api-report/container-runtime.api.md +14 -3
- package/dist/{batchTracker.cjs → batchTracker.js} +1 -1
- package/dist/batchTracker.js.map +1 -0
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/{blobManager.cjs → blobManager.js} +9 -3
- package/dist/blobManager.js.map +1 -0
- package/dist/{connectionTelemetry.cjs → connectionTelemetry.js} +1 -1
- package/dist/connectionTelemetry.js.map +1 -0
- package/dist/container-runtime-alpha.d.ts +13 -3
- package/dist/container-runtime-beta.d.ts +7 -0
- package/dist/container-runtime-public.d.ts +7 -0
- package/dist/container-runtime-untrimmed.d.ts +30 -3
- package/dist/{containerHandleContext.cjs → containerHandleContext.js} +1 -1
- package/dist/containerHandleContext.js.map +1 -0
- package/dist/containerRuntime.d.ts +5 -2
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/{containerRuntime.cjs → containerRuntime.js} +78 -85
- package/dist/containerRuntime.js.map +1 -0
- package/dist/{dataStore.cjs → dataStore.js} +1 -1
- package/dist/dataStore.js.map +1 -0
- package/dist/dataStoreContext.d.ts +7 -1
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/{dataStoreContext.cjs → dataStoreContext.js} +13 -7
- package/dist/dataStoreContext.js.map +1 -0
- package/dist/{dataStoreContexts.cjs → dataStoreContexts.js} +1 -1
- package/dist/dataStoreContexts.js.map +1 -0
- package/dist/{dataStoreRegistry.cjs → dataStoreRegistry.js} +1 -1
- package/dist/dataStoreRegistry.js.map +1 -0
- package/dist/dataStores.d.ts +9 -3
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/{dataStores.cjs → dataStores.js} +62 -16
- package/dist/dataStores.js.map +1 -0
- package/dist/{deltaManagerProxyBase.cjs → deltaManagerProxyBase.js} +1 -1
- package/dist/deltaManagerProxyBase.js.map +1 -0
- package/dist/{deltaManagerSummarizerProxy.cjs → deltaManagerSummarizerProxy.js} +3 -3
- package/dist/deltaManagerSummarizerProxy.js.map +1 -0
- package/dist/{deltaScheduler.cjs → deltaScheduler.js} +1 -1
- package/dist/deltaScheduler.js.map +1 -0
- package/dist/{error.cjs → error.js} +1 -1
- package/dist/error.js.map +1 -0
- package/dist/gc/garbageCollection.d.ts +17 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/{garbageCollection.cjs → garbageCollection.js} +111 -42
- package/dist/gc/garbageCollection.js.map +1 -0
- package/dist/gc/{gcConfigs.cjs → gcConfigs.js} +3 -3
- package/dist/gc/gcConfigs.js.map +1 -0
- package/dist/gc/gcDefinitions.d.ts +20 -2
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/{gcDefinitions.cjs → gcDefinitions.js} +8 -2
- package/dist/gc/gcDefinitions.js.map +1 -0
- package/dist/gc/{gcHelpers.cjs → gcHelpers.js} +1 -1
- package/dist/gc/gcHelpers.js.map +1 -0
- package/dist/gc/{gcReferenceGraphAlgorithm.cjs → gcReferenceGraphAlgorithm.js} +1 -1
- package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -0
- package/dist/gc/{gcSummaryDefinitions.cjs → gcSummaryDefinitions.js} +1 -1
- package/dist/gc/gcSummaryDefinitions.js.map +1 -0
- package/dist/gc/{gcSummaryStateTracker.cjs → gcSummaryStateTracker.js} +2 -2
- package/dist/gc/gcSummaryStateTracker.js.map +1 -0
- package/dist/gc/gcTelemetry.d.ts +1 -0
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/{gcTelemetry.cjs → gcTelemetry.js} +2 -4
- package/dist/gc/gcTelemetry.js.map +1 -0
- package/dist/gc/gcUnreferencedStateTracker.d.ts +5 -0
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/{gcUnreferencedStateTracker.cjs → gcUnreferencedStateTracker.js} +14 -3
- package/dist/gc/{gcUnreferencedStateTracker.cjs.map → gcUnreferencedStateTracker.js.map} +1 -1
- package/dist/gc/index.d.ts +1 -1
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/{index.cjs → index.js} +11 -9
- package/dist/gc/index.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/{index.cjs → index.js} +10 -8
- package/dist/index.js.map +1 -0
- package/dist/messageTypes.d.ts +1 -1
- package/dist/{messageTypes.cjs → messageTypes.js} +1 -1
- package/dist/messageTypes.js.map +1 -0
- package/dist/{metadata.cjs → metadata.js} +1 -1
- package/dist/metadata.js.map +1 -0
- package/dist/opLifecycle/{batchManager.cjs → batchManager.js} +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -0
- package/dist/opLifecycle/{definitions.cjs → definitions.js} +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -0
- package/dist/opLifecycle/{index.cjs → index.js} +8 -8
- package/dist/opLifecycle/index.js.map +1 -0
- package/dist/opLifecycle/{opCompressor.cjs → opCompressor.js} +3 -3
- package/dist/opLifecycle/opCompressor.js.map +1 -0
- package/dist/opLifecycle/{opDecompressor.cjs → opDecompressor.js} +2 -2
- package/dist/opLifecycle/opDecompressor.js.map +1 -0
- package/dist/opLifecycle/{opGroupingManager.cjs → opGroupingManager.js} +1 -1
- package/dist/opLifecycle/opGroupingManager.js.map +1 -0
- package/dist/opLifecycle/{opSplitter.cjs → opSplitter.js} +3 -3
- package/dist/opLifecycle/opSplitter.js.map +1 -0
- package/dist/opLifecycle/{outbox.cjs → outbox.js} +2 -2
- package/dist/opLifecycle/outbox.js.map +1 -0
- package/dist/opLifecycle/{remoteMessageProcessor.cjs → remoteMessageProcessor.js} +2 -2
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -0
- package/dist/{opProperties.cjs → opProperties.js} +1 -1
- package/dist/opProperties.js.map +1 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/{packageVersion.cjs → packageVersion.js} +2 -2
- package/dist/packageVersion.js.map +1 -0
- package/dist/{pendingStateManager.cjs → pendingStateManager.js} +2 -2
- package/dist/pendingStateManager.js.map +1 -0
- package/dist/{scheduleManager.cjs → scheduleManager.js} +3 -3
- package/dist/scheduleManager.js.map +1 -0
- package/dist/{storageServiceWithAttachBlobs.cjs → storageServiceWithAttachBlobs.js} +1 -1
- package/dist/storageServiceWithAttachBlobs.js.map +1 -0
- package/dist/summary/{index.cjs → index.js} +12 -12
- package/dist/summary/index.js.map +1 -0
- package/dist/summary/{orderedClientElection.cjs → orderedClientElection.js} +2 -2
- package/dist/summary/orderedClientElection.js.map +1 -0
- package/dist/summary/{runWhileConnectedCoordinator.cjs → runWhileConnectedCoordinator.js} +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -0
- package/dist/summary/runningSummarizer.d.ts +11 -6
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/{runningSummarizer.cjs → runningSummarizer.js} +140 -93
- package/dist/summary/runningSummarizer.js.map +1 -0
- package/dist/summary/{summarizer.cjs → summarizer.js} +4 -4
- package/dist/summary/summarizer.js.map +1 -0
- package/dist/summary/{summarizerClientElection.cjs → summarizerClientElection.js} +1 -1
- package/dist/summary/summarizerClientElection.js.map +1 -0
- package/dist/summary/{summarizerHeuristics.cjs → summarizerHeuristics.js} +1 -1
- package/dist/summary/summarizerHeuristics.js.map +1 -0
- package/dist/summary/summarizerNode/{index.cjs → index.js} +3 -3
- package/dist/summary/summarizerNode/index.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts +2 -3
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/{summarizerNode.cjs → summarizerNode.js} +8 -50
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +1 -18
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/{summarizerNodeUtils.cjs → summarizerNodeUtils.js} +2 -22
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +3 -3
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/{summarizerNodeWithGc.cjs → summarizerNodeWithGc.js} +9 -9
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/dist/summary/summarizerTypes.d.ts +3 -1
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/{summarizerTypes.cjs → summarizerTypes.js} +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -0
- package/dist/summary/{summaryCollection.cjs → summaryCollection.js} +1 -1
- package/dist/summary/summaryCollection.js.map +1 -0
- package/dist/summary/{summaryFormat.cjs → summaryFormat.js} +1 -1
- package/dist/summary/summaryFormat.js.map +1 -0
- package/dist/summary/{summaryGenerator.cjs → summaryGenerator.js} +1 -1
- package/dist/summary/summaryGenerator.js.map +1 -0
- package/dist/summary/{summaryManager.cjs → summaryManager.js} +2 -2
- package/dist/summary/summaryManager.js.map +1 -0
- package/dist/{throttler.cjs → throttler.js} +1 -1
- package/dist/throttler.js.map +1 -0
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/blobManager.d.mts.map +1 -1
- package/lib/blobManager.mjs +7 -1
- package/lib/blobManager.mjs.map +1 -1
- package/lib/container-runtime-alpha.d.mts +13 -3
- package/lib/container-runtime-beta.d.mts +7 -0
- package/lib/container-runtime-public.d.mts +7 -0
- package/lib/container-runtime-untrimmed.d.mts +30 -3
- package/lib/containerRuntime.d.mts +5 -2
- package/lib/containerRuntime.d.mts.map +1 -1
- package/lib/containerRuntime.mjs +62 -69
- package/lib/containerRuntime.mjs.map +1 -1
- package/lib/dataStoreContext.d.mts +7 -1
- package/lib/dataStoreContext.d.mts.map +1 -1
- package/lib/dataStoreContext.mjs +11 -5
- package/lib/dataStoreContext.mjs.map +1 -1
- package/lib/dataStores.d.mts +9 -3
- package/lib/dataStores.d.mts.map +1 -1
- package/lib/dataStores.mjs +54 -9
- package/lib/dataStores.mjs.map +1 -1
- package/lib/gc/garbageCollection.d.mts +17 -1
- package/lib/gc/garbageCollection.d.mts.map +1 -1
- package/lib/gc/garbageCollection.mjs +103 -34
- package/lib/gc/garbageCollection.mjs.map +1 -1
- package/lib/gc/gcDefinitions.d.mts +20 -2
- package/lib/gc/gcDefinitions.d.mts.map +1 -1
- package/lib/gc/gcDefinitions.mjs +6 -0
- package/lib/gc/gcDefinitions.mjs.map +1 -1
- package/lib/gc/gcTelemetry.d.mts +1 -0
- package/lib/gc/gcTelemetry.d.mts.map +1 -1
- package/lib/gc/gcTelemetry.mjs +0 -2
- package/lib/gc/gcTelemetry.mjs.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.d.mts +5 -0
- package/lib/gc/gcUnreferencedStateTracker.d.mts.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.mjs +10 -0
- package/lib/gc/gcUnreferencedStateTracker.mjs.map +1 -1
- package/lib/gc/index.d.mts +1 -1
- package/lib/gc/index.d.mts.map +1 -1
- package/lib/gc/index.mjs +1 -1
- package/lib/gc/index.mjs.map +1 -1
- package/lib/index.d.mts +2 -1
- package/lib/index.d.mts.map +1 -1
- package/lib/index.mjs +1 -0
- package/lib/index.mjs.map +1 -1
- package/lib/messageTypes.d.mts +1 -1
- package/lib/messageTypes.mjs.map +1 -1
- package/lib/packageVersion.d.mts +1 -1
- package/lib/packageVersion.mjs +1 -1
- package/lib/packageVersion.mjs.map +1 -1
- package/lib/summary/runningSummarizer.d.mts +11 -6
- package/lib/summary/runningSummarizer.d.mts.map +1 -1
- package/lib/summary/runningSummarizer.mjs +136 -89
- package/lib/summary/runningSummarizer.mjs.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.mts +2 -3
- package/lib/summary/summarizerNode/summarizerNode.d.mts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.mjs +8 -50
- package/lib/summary/summarizerNode/summarizerNode.mjs.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts +1 -18
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.mjs +0 -19
- package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts +3 -3
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs +5 -5
- package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +1 -1
- package/lib/summary/summarizerTypes.d.mts +3 -1
- package/lib/summary/summarizerTypes.d.mts.map +1 -1
- package/lib/summary/summarizerTypes.mjs.map +1 -1
- package/package.json +48 -38
- package/src/blobManager.ts +7 -1
- package/src/containerRuntime.ts +103 -85
- package/src/dataStoreContext.ts +15 -6
- package/src/dataStores.ts +64 -6
- package/src/gc/garbageCollection.ts +118 -32
- package/src/gc/gcDefinitions.ts +21 -3
- package/src/gc/gcTelemetry.ts +1 -2
- package/src/gc/gcUnreferencedStateTracker.ts +11 -0
- package/src/gc/index.ts +3 -0
- package/src/index.ts +2 -0
- package/src/messageTypes.ts +1 -1
- package/src/packageVersion.ts +1 -1
- package/src/summary/runningSummarizer.ts +174 -113
- package/src/summary/summarizerNode/summarizerNode.ts +4 -64
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +2 -33
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +0 -6
- package/src/summary/summarizerTypes.ts +3 -1
- package/dist/batchTracker.cjs.map +0 -1
- package/dist/blobManager.cjs.map +0 -1
- package/dist/connectionTelemetry.cjs.map +0 -1
- package/dist/containerHandleContext.cjs.map +0 -1
- package/dist/containerRuntime.cjs.map +0 -1
- package/dist/dataStore.cjs.map +0 -1
- package/dist/dataStoreContext.cjs.map +0 -1
- package/dist/dataStoreContexts.cjs.map +0 -1
- package/dist/dataStoreRegistry.cjs.map +0 -1
- package/dist/dataStores.cjs.map +0 -1
- package/dist/deltaManagerProxyBase.cjs.map +0 -1
- package/dist/deltaManagerSummarizerProxy.cjs.map +0 -1
- package/dist/deltaScheduler.cjs.map +0 -1
- package/dist/error.cjs.map +0 -1
- package/dist/gc/garbageCollection.cjs.map +0 -1
- package/dist/gc/gcConfigs.cjs.map +0 -1
- package/dist/gc/gcDefinitions.cjs.map +0 -1
- package/dist/gc/gcHelpers.cjs.map +0 -1
- package/dist/gc/gcReferenceGraphAlgorithm.cjs.map +0 -1
- package/dist/gc/gcSummaryDefinitions.cjs.map +0 -1
- package/dist/gc/gcSummaryStateTracker.cjs.map +0 -1
- package/dist/gc/gcTelemetry.cjs.map +0 -1
- package/dist/gc/index.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/messageTypes.cjs.map +0 -1
- package/dist/metadata.cjs.map +0 -1
- package/dist/opLifecycle/batchManager.cjs.map +0 -1
- package/dist/opLifecycle/definitions.cjs.map +0 -1
- package/dist/opLifecycle/index.cjs.map +0 -1
- package/dist/opLifecycle/opCompressor.cjs.map +0 -1
- package/dist/opLifecycle/opDecompressor.cjs.map +0 -1
- package/dist/opLifecycle/opGroupingManager.cjs.map +0 -1
- package/dist/opLifecycle/opSplitter.cjs.map +0 -1
- package/dist/opLifecycle/outbox.cjs.map +0 -1
- package/dist/opLifecycle/remoteMessageProcessor.cjs.map +0 -1
- package/dist/opProperties.cjs.map +0 -1
- package/dist/packageVersion.cjs.map +0 -1
- package/dist/pendingStateManager.cjs.map +0 -1
- package/dist/scheduleManager.cjs.map +0 -1
- package/dist/storageServiceWithAttachBlobs.cjs.map +0 -1
- package/dist/summary/index.cjs.map +0 -1
- package/dist/summary/orderedClientElection.cjs.map +0 -1
- package/dist/summary/runWhileConnectedCoordinator.cjs.map +0 -1
- package/dist/summary/runningSummarizer.cjs.map +0 -1
- package/dist/summary/summarizer.cjs.map +0 -1
- package/dist/summary/summarizerClientElection.cjs.map +0 -1
- package/dist/summary/summarizerHeuristics.cjs.map +0 -1
- package/dist/summary/summarizerNode/index.cjs.map +0 -1
- package/dist/summary/summarizerNode/summarizerNode.cjs.map +0 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.cjs.map +0 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs.map +0 -1
- package/dist/summary/summarizerTypes.cjs.map +0 -1
- package/dist/summary/summaryCollection.cjs.map +0 -1
- package/dist/summary/summaryFormat.cjs.map +0 -1
- package/dist/summary/summaryGenerator.cjs.map +0 -1
- package/dist/summary/summaryManager.cjs.map +0 -1
- package/dist/throttler.cjs.map +0 -1
- package/tsc-multi.test.json +0 -4
- /package/{.eslintrc.js → .eslintrc.cjs} +0 -0
package/lib/messageTypes.d.mts
CHANGED
|
@@ -80,7 +80,7 @@ export type ContainerRuntimeAliasMessage = TypedContainerRuntimeMessage<Containe
|
|
|
80
80
|
export type ContainerRuntimeIdAllocationMessage = TypedContainerRuntimeMessage<ContainerMessageType.IdAllocation, IdCreationRange>;
|
|
81
81
|
export type ContainerRuntimeGCMessage = TypedContainerRuntimeMessage<ContainerMessageType.GC, GarbageCollectionMessage>;
|
|
82
82
|
/**
|
|
83
|
-
* Represents an unrecognized
|
|
83
|
+
* Represents an unrecognized TypedContainerRuntimeMessage, e.g. a message from a future version of the container runtime.
|
|
84
84
|
* @internal
|
|
85
85
|
*/
|
|
86
86
|
export interface UnknownContainerRuntimeMessage extends Partial<RecentlyAddedContainerRuntimeMessageDetails> {
|
package/lib/messageTypes.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageTypes.mjs","sourceRoot":"","sources":["../src/messageTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH;;GAEG;AACH,MAAM,CAAN,IAAY,oBA+BX;AA/BD,WAAY,oBAAoB;IAC/B,iCAAiC;IACjC,sDAA8B,CAAA;IAE9B,sBAAsB;IACtB,yCAAiB,CAAA;IAEjB,qBAAqB;IACrB,+CAAuB,CAAA;IAEvB,yFAAyF;IACzF,iDAAyB,CAAA;IAEzB,oDAAoD;IACpD,yCAAiB,CAAA;IAEjB,sCAAsC;IACtC,uCAAe,CAAA;IAEf;;;;OAIG;IACH,qDAA6B,CAAA;IAE7B;;;OAGG;IACH,iCAAS,CAAA;AACV,CAAC,EA/BW,oBAAoB,KAApB,oBAAoB,QA+B/B","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport {\n\tIEnvelope,\n\tInboundAttachMessage,\n\tIAttachMessage,\n} from \"@fluidframework/runtime-definitions\";\nimport type { IdCreationRange } from \"@fluidframework/id-compressor\";\nimport { IDataStoreAliasMessage } from \"./dataStore\";\nimport { GarbageCollectionMessage } from \"./gc\";\nimport { IChunkedOp } from \"./opLifecycle\";\n\n/**\n * @alpha\n */\nexport enum ContainerMessageType {\n\t// An op to be delivered to store\n\tFluidDataStoreOp = \"component\",\n\n\t// Creates a new store\n\tAttach = \"attach\",\n\n\t// Chunked operation.\n\tChunkedOp = \"chunkedOp\",\n\n\t// Signifies that a blob has been attached and should not be garbage collected by storage\n\tBlobAttach = \"blobAttach\",\n\n\t// Ties our new clientId to our old one on reconnect\n\tRejoin = \"rejoin\",\n\n\t// Sets the alias of a root data store\n\tAlias = \"alias\",\n\n\t/**\n\t * An op containing an IdRange of Ids allocated using the runtime's IdCompressor since\n\t * the last allocation op was sent.\n\t * See the [IdCompressor README](./id-compressor/README.md) for more details.\n\t */\n\tIdAllocation = \"idAllocation\",\n\n\t/**\n\t * Garbage collection specific op. This is sent by the summarizer client when GC runs. It's used to synchronize GC\n\t * state across all clients.\n\t */\n\tGC = \"GC\",\n}\n\n/**\n * How should an older client handle an unrecognized remote op type?\n *\n * @internal\n */\nexport type CompatModeBehavior =\n\t/** Ignore the op. It won't be persisted if this client summarizes */\n\t| \"Ignore\"\n\t/** Fail processing immediately. (The container will close) */\n\t| \"FailToProcess\";\n\n/**\n * All the info an older client would need to know how to handle an unrecognized remote op type\n *\n * @internal\n */\nexport interface IContainerRuntimeMessageCompatDetails {\n\t/** How should an older client handle an unrecognized remote op type? */\n\tbehavior: CompatModeBehavior;\n}\n\n/**\n * The unpacked runtime message / details to be handled or dispatched by the ContainerRuntime.\n * Message type are differentiated via a `type` string and contain different contents depending on their type.\n *\n * IMPORTANT: when creating one to be serialized, set the properties in the order they appear here.\n * This way stringified values can be compared.\n */\ninterface TypedContainerRuntimeMessage<TType extends ContainerMessageType, TContents>\n\textends Partial<RecentlyAddedContainerRuntimeMessageDetails> {\n\t/** Type of the op, within the ContainerRuntime's domain */\n\ttype: TType;\n\t/** Domain-specific contents, interpreted according to the type */\n\tcontents: TContents;\n}\n\n/**\n * Additional details expected for any recently added message.\n * @internal\n */\nexport interface RecentlyAddedContainerRuntimeMessageDetails {\n\t/** Info describing how to handle this op in case the type is unrecognized (default: fail to process) */\n\tcompatDetails: IContainerRuntimeMessageCompatDetails;\n}\n\nexport type ContainerRuntimeDataStoreOpMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.FluidDataStoreOp,\n\tIEnvelope\n>;\nexport type InboundContainerRuntimeAttachMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.Attach,\n\tInboundAttachMessage\n>;\nexport type OutboundContainerRuntimeAttachMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.Attach,\n\tIAttachMessage\n>;\nexport type ContainerRuntimeChunkedOpMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.ChunkedOp,\n\tIChunkedOp\n>;\nexport type ContainerRuntimeBlobAttachMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.BlobAttach,\n\tundefined\n>;\nexport type ContainerRuntimeRejoinMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.Rejoin,\n\tundefined\n>;\nexport type ContainerRuntimeAliasMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.Alias,\n\tIDataStoreAliasMessage\n>;\nexport type ContainerRuntimeIdAllocationMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.IdAllocation,\n\tIdCreationRange\n>;\nexport type ContainerRuntimeGCMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.GC,\n\tGarbageCollectionMessage\n>;\n\n/**\n * Represents an unrecognized
|
|
1
|
+
{"version":3,"file":"messageTypes.mjs","sourceRoot":"","sources":["../src/messageTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH;;GAEG;AACH,MAAM,CAAN,IAAY,oBA+BX;AA/BD,WAAY,oBAAoB;IAC/B,iCAAiC;IACjC,sDAA8B,CAAA;IAE9B,sBAAsB;IACtB,yCAAiB,CAAA;IAEjB,qBAAqB;IACrB,+CAAuB,CAAA;IAEvB,yFAAyF;IACzF,iDAAyB,CAAA;IAEzB,oDAAoD;IACpD,yCAAiB,CAAA;IAEjB,sCAAsC;IACtC,uCAAe,CAAA;IAEf;;;;OAIG;IACH,qDAA6B,CAAA;IAE7B;;;OAGG;IACH,iCAAS,CAAA;AACV,CAAC,EA/BW,oBAAoB,KAApB,oBAAoB,QA+B/B","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport {\n\tIEnvelope,\n\tInboundAttachMessage,\n\tIAttachMessage,\n} from \"@fluidframework/runtime-definitions\";\nimport type { IdCreationRange } from \"@fluidframework/id-compressor\";\nimport { IDataStoreAliasMessage } from \"./dataStore\";\nimport { GarbageCollectionMessage } from \"./gc\";\nimport { IChunkedOp } from \"./opLifecycle\";\n\n/**\n * @alpha\n */\nexport enum ContainerMessageType {\n\t// An op to be delivered to store\n\tFluidDataStoreOp = \"component\",\n\n\t// Creates a new store\n\tAttach = \"attach\",\n\n\t// Chunked operation.\n\tChunkedOp = \"chunkedOp\",\n\n\t// Signifies that a blob has been attached and should not be garbage collected by storage\n\tBlobAttach = \"blobAttach\",\n\n\t// Ties our new clientId to our old one on reconnect\n\tRejoin = \"rejoin\",\n\n\t// Sets the alias of a root data store\n\tAlias = \"alias\",\n\n\t/**\n\t * An op containing an IdRange of Ids allocated using the runtime's IdCompressor since\n\t * the last allocation op was sent.\n\t * See the [IdCompressor README](./id-compressor/README.md) for more details.\n\t */\n\tIdAllocation = \"idAllocation\",\n\n\t/**\n\t * Garbage collection specific op. This is sent by the summarizer client when GC runs. It's used to synchronize GC\n\t * state across all clients.\n\t */\n\tGC = \"GC\",\n}\n\n/**\n * How should an older client handle an unrecognized remote op type?\n *\n * @internal\n */\nexport type CompatModeBehavior =\n\t/** Ignore the op. It won't be persisted if this client summarizes */\n\t| \"Ignore\"\n\t/** Fail processing immediately. (The container will close) */\n\t| \"FailToProcess\";\n\n/**\n * All the info an older client would need to know how to handle an unrecognized remote op type\n *\n * @internal\n */\nexport interface IContainerRuntimeMessageCompatDetails {\n\t/** How should an older client handle an unrecognized remote op type? */\n\tbehavior: CompatModeBehavior;\n}\n\n/**\n * The unpacked runtime message / details to be handled or dispatched by the ContainerRuntime.\n * Message type are differentiated via a `type` string and contain different contents depending on their type.\n *\n * IMPORTANT: when creating one to be serialized, set the properties in the order they appear here.\n * This way stringified values can be compared.\n */\ninterface TypedContainerRuntimeMessage<TType extends ContainerMessageType, TContents>\n\textends Partial<RecentlyAddedContainerRuntimeMessageDetails> {\n\t/** Type of the op, within the ContainerRuntime's domain */\n\ttype: TType;\n\t/** Domain-specific contents, interpreted according to the type */\n\tcontents: TContents;\n}\n\n/**\n * Additional details expected for any recently added message.\n * @internal\n */\nexport interface RecentlyAddedContainerRuntimeMessageDetails {\n\t/** Info describing how to handle this op in case the type is unrecognized (default: fail to process) */\n\tcompatDetails: IContainerRuntimeMessageCompatDetails;\n}\n\nexport type ContainerRuntimeDataStoreOpMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.FluidDataStoreOp,\n\tIEnvelope\n>;\nexport type InboundContainerRuntimeAttachMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.Attach,\n\tInboundAttachMessage\n>;\nexport type OutboundContainerRuntimeAttachMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.Attach,\n\tIAttachMessage\n>;\nexport type ContainerRuntimeChunkedOpMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.ChunkedOp,\n\tIChunkedOp\n>;\nexport type ContainerRuntimeBlobAttachMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.BlobAttach,\n\tundefined\n>;\nexport type ContainerRuntimeRejoinMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.Rejoin,\n\tundefined\n>;\nexport type ContainerRuntimeAliasMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.Alias,\n\tIDataStoreAliasMessage\n>;\nexport type ContainerRuntimeIdAllocationMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.IdAllocation,\n\tIdCreationRange\n>;\nexport type ContainerRuntimeGCMessage = TypedContainerRuntimeMessage<\n\tContainerMessageType.GC,\n\tGarbageCollectionMessage\n>;\n\n/**\n * Represents an unrecognized TypedContainerRuntimeMessage, e.g. a message from a future version of the container runtime.\n * @internal\n */\nexport interface UnknownContainerRuntimeMessage\n\textends Partial<RecentlyAddedContainerRuntimeMessageDetails> {\n\t/** Invalid type of the op, within the ContainerRuntime's domain. This value should never exist at runtime.\n\t * This is useful for type narrowing but should never be used as an actual message type at runtime.\n\t * Actual value will not be \"__unknown...\", but the type `Exclude<string, ContainerMessageType>` is not supported.\n\t */\n\ttype: \"__unknown_container_message_type__never_use_as_value__\";\n\n\t/** Domain-specific contents, but not decipherable by an unknown op. */\n\tcontents: unknown;\n}\n\n/**\n * A {@link TypedContainerRuntimeMessage} that is received from the server and will be processed by the container runtime.\n */\nexport type InboundContainerRuntimeMessage =\n\t| ContainerRuntimeDataStoreOpMessage\n\t| InboundContainerRuntimeAttachMessage\n\t| ContainerRuntimeChunkedOpMessage\n\t| ContainerRuntimeBlobAttachMessage\n\t| ContainerRuntimeRejoinMessage\n\t| ContainerRuntimeAliasMessage\n\t| ContainerRuntimeIdAllocationMessage\n\t| ContainerRuntimeGCMessage\n\t// Inbound messages may include unknown types from other clients, so we include that as a special case here\n\t| UnknownContainerRuntimeMessage;\n\n/** A {@link TypedContainerRuntimeMessage} that has been generated by the container runtime but is not yet being sent to the server. */\nexport type LocalContainerRuntimeMessage =\n\t| ContainerRuntimeDataStoreOpMessage\n\t| OutboundContainerRuntimeAttachMessage\n\t| ContainerRuntimeChunkedOpMessage\n\t| ContainerRuntimeBlobAttachMessage\n\t| ContainerRuntimeRejoinMessage\n\t| ContainerRuntimeAliasMessage\n\t| ContainerRuntimeIdAllocationMessage\n\t| ContainerRuntimeGCMessage\n\t// In rare cases (e.g. related to stashed ops) we could have a local message of an unknown type\n\t| UnknownContainerRuntimeMessage;\n\n/** A {@link TypedContainerRuntimeMessage} that is being sent to the server from the container runtime. */\nexport type OutboundContainerRuntimeMessage =\n\t| ContainerRuntimeDataStoreOpMessage\n\t| OutboundContainerRuntimeAttachMessage\n\t| ContainerRuntimeChunkedOpMessage\n\t| ContainerRuntimeBlobAttachMessage\n\t| ContainerRuntimeRejoinMessage\n\t| ContainerRuntimeAliasMessage\n\t| ContainerRuntimeIdAllocationMessage\n\t| ContainerRuntimeGCMessage;\n\n/**\n * An unpacked ISequencedDocumentMessage with the inner TypedContainerRuntimeMessage type/contents/etc\n * promoted up to the outer object\n */\nexport type InboundSequencedContainerRuntimeMessage = Omit<\n\tISequencedDocumentMessage,\n\t\"type\" | \"contents\"\n> &\n\tInboundContainerRuntimeMessage;\n\n/** Essentially ISequencedDocumentMessage except that `type` is not `string` to enable narrowing\n * as `Exclude<string, InboundContainerRuntimeMessage['type']>` is not supported.\n * There should never be a runtime value of \"__not_a_...\".\n * Currently additionally replaces `contents` type until protocol-definitions update is taken with `unknown` instead of `any`.\n */\ntype InboundSequencedNonContainerRuntimeMessage = Omit<\n\tISequencedDocumentMessage,\n\t\"type\" | \"contents\"\n> & { type: \"__not_a_container_runtime_message_type__\"; contents: unknown };\n\nexport type InboundSequencedContainerRuntimeMessageOrSystemMessage =\n\t| InboundSequencedContainerRuntimeMessage\n\t| InboundSequencedNonContainerRuntimeMessage;\n\n/** A [loose] InboundSequencedContainerRuntimeMessage that is recent and may contain compat details.\n * It exists solely to to provide access to those details.\n */\nexport type InboundSequencedRecentlyAddedContainerRuntimeMessage = ISequencedDocumentMessage &\n\tPartial<RecentlyAddedContainerRuntimeMessageDetails>;\n\n/**\n * The unpacked runtime message / details to be handled or dispatched by the ContainerRuntime\n *\n * IMPORTANT: when creating one to be serialized, set the properties in the order they appear here.\n * This way stringified values can be compared.\n *\n * @deprecated this is an internal type which should not be used outside of the package.\n * Internally, it is superseded by `TypedContainerRuntimeMessage`.\n *\n * @internal\n */\nexport interface ContainerRuntimeMessage {\n\t/** Type of the op, within the ContainerRuntime's domain */\n\ttype: ContainerMessageType;\n\t/** Domain-specific contents, interpreted according to the type */\n\tcontents: any;\n\t/** Info describing how to handle this op in case the type is unrecognized (default: fail to process) */\n\tcompatDetails?: IContainerRuntimeMessageCompatDetails;\n}\n"]}
|
package/lib/packageVersion.d.mts
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
|
|
6
6
|
*/
|
|
7
7
|
export declare const pkgName = "@fluidframework/container-runtime";
|
|
8
|
-
export declare const pkgVersion = "2.0.0-dev-rc.1.0.0.
|
|
8
|
+
export declare const pkgVersion = "2.0.0-dev-rc.1.0.0.232845";
|
|
9
9
|
//# sourceMappingURL=packageVersion.d.mts.map
|
package/lib/packageVersion.mjs
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
|
|
6
6
|
*/
|
|
7
7
|
export const pkgName = "@fluidframework/container-runtime";
|
|
8
|
-
export const pkgVersion = "2.0.0-dev-rc.1.0.0.
|
|
8
|
+
export const pkgVersion = "2.0.0-dev-rc.1.0.0.232845";
|
|
9
9
|
//# sourceMappingURL=packageVersion.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.mjs","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,mCAAmC,CAAC;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,2BAA2B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/container-runtime\";\nexport const pkgVersion = \"2.0.0-dev-rc.1.0.0.
|
|
1
|
+
{"version":3,"file":"packageVersion.mjs","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,mCAAmC,CAAC;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,2BAA2B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/container-runtime\";\nexport const pkgVersion = \"2.0.0-dev-rc.1.0.0.232845\";\n"]}
|
|
@@ -56,12 +56,12 @@ export declare class RunningSummarizer extends TypedEventEmitter<ISummarizerEven
|
|
|
56
56
|
private constructor();
|
|
57
57
|
private handleSummaryAck;
|
|
58
58
|
/**
|
|
59
|
-
* Responsible for receiving and processing all the
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
59
|
+
* Responsible for receiving and processing all the summary acks.
|
|
60
|
+
* It starts processing ACKs after the one for the summary this client loaded from (initialSequenceNumber). Any
|
|
61
|
+
* ACK before that is not interesting as it will simply be ignored.
|
|
62
|
+
*
|
|
63
|
+
* @param referenceSequenceNumber - The referenceSequenceNumber of the summary from which to start processing
|
|
64
|
+
* acks.
|
|
65
65
|
*/
|
|
66
66
|
private processIncomingSummaryAcks;
|
|
67
67
|
dispose(): void;
|
|
@@ -118,6 +118,11 @@ export declare class RunningSummarizer extends TypedEventEmitter<ISummarizerEven
|
|
|
118
118
|
* For example, summarization may be retried for failures with "retryAfterSeconds" param.
|
|
119
119
|
*/
|
|
120
120
|
private trySummarizeWithRetries;
|
|
121
|
+
/**
|
|
122
|
+
* Attempts to generate a summary on demand with retries in case of failures. The retry logic is the same
|
|
123
|
+
* as heuristics based summaries.
|
|
124
|
+
*/
|
|
125
|
+
private summarizeOnDemandWithRetries;
|
|
121
126
|
/** {@inheritdoc (ISummarizer:interface).summarizeOnDemand} */
|
|
122
127
|
summarizeOnDemand(options: IOnDemandSummarizeOptions, resultsBuilder?: SummarizeResultBuilder): ISummarizeResults;
|
|
123
128
|
/** {@inheritdoc (ISummarizer:interface).enqueueSummarize} */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runningSummarizer.d.mts","sourceRoot":"","sources":["../../src/summary/runningSummarizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAEI,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iCAAiC;OAS5E,EAAE,iBAAiB,EAAE,MAAM,8BAA8B;OAEzD,EAAE,yBAAyB,EAAe,MAAM,sCAAsC;OACtF,EAAE,qBAAqB,EAAE;OAGzB,EACN,wBAAwB,EAExB,uBAAuB,EAEvB,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EAEjB,kBAAkB,EAElB,yBAAyB,EACzB,iBAAiB,EAEjB;OACM,EAAiB,qBAAqB,EAAE,iBAAiB,EAAE;OAC3D,EAGN,sBAAsB,EAEtB;AAID;;;GAGG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC;;;GAGG;AACH,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,iBAAiB,CAAC,iBAAiB,CAAE,YAAW,WAAW;
|
|
1
|
+
{"version":3,"file":"runningSummarizer.d.mts","sourceRoot":"","sources":["../../src/summary/runningSummarizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,13 +31,22 @@ export const defaultMaxAttemptsForSubmitFailures = 5;
|
|
|
31
31
|
export class RunningSummarizer extends TypedEventEmitter {
|
|
32
32
|
static async start(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime) {
|
|
33
33
|
const summarizer = new RunningSummarizer(logger, summaryWatcher, configuration, submitSummaryCallback, refreshLatestSummaryAckCallback, heuristicData, summaryCollection, cancellationToken, stopSummarizerCallback, runtime);
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
|
|
34
|
+
// If there have been any acks newer that the one this client loaded from until now, process them before
|
|
35
|
+
// starting the running summarizer which will trigger summary heuristics.
|
|
36
|
+
// This is done primarily to handle scenarios where the summarizer loads from a cached snapshot and there
|
|
37
|
+
// is newer one available. The ack for the newer summary is processed before summarizing because otherwise
|
|
38
|
+
// that summary would fail as it has an older parent.
|
|
39
|
+
let nextReferenceSequenceNumber = runtime.deltaManager.initialSequenceNumber + 1;
|
|
40
|
+
const latestAck = summaryCollection.latestAck;
|
|
41
|
+
if (latestAck !== undefined &&
|
|
42
|
+
latestAck.summaryOp.referenceSequenceNumber >= nextReferenceSequenceNumber) {
|
|
43
|
+
await summarizer.handleSummaryAck(latestAck);
|
|
44
|
+
nextReferenceSequenceNumber = latestAck.summaryOp.referenceSequenceNumber + 1;
|
|
45
|
+
}
|
|
37
46
|
await summarizer.waitStart();
|
|
38
|
-
//
|
|
47
|
+
// Process summary acks asynchronously
|
|
39
48
|
// Note: no exceptions are thrown from processIncomingSummaryAcks handler as it handles all exceptions
|
|
40
|
-
summarizer.processIncomingSummaryAcks(
|
|
49
|
+
summarizer.processIncomingSummaryAcks(nextReferenceSequenceNumber).catch((error) => {
|
|
41
50
|
createChildLogger({ logger }).sendErrorEvent({ eventName: "HandleSummaryAckFatalError" }, error);
|
|
42
51
|
});
|
|
43
52
|
// Update heuristic counts
|
|
@@ -154,78 +163,63 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
154
163
|
? overrideMaxAttempts
|
|
155
164
|
: defaultMaxAttemptsForSubmitFailures;
|
|
156
165
|
}
|
|
157
|
-
async handleSummaryAck() {
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
while (this.summarizingLock !== undefined) {
|
|
167
|
-
summaryLogger.sendTelemetryEvent({
|
|
168
|
-
eventName: "RefreshAttemptWithSummarizerRunning",
|
|
169
|
-
referenceSequenceNumber: refSequenceNumber,
|
|
170
|
-
proposalHandle: summaryOpHandle,
|
|
171
|
-
ackHandle: summaryAckHandle,
|
|
172
|
-
});
|
|
173
|
-
await this.summarizingLock;
|
|
174
|
-
}
|
|
175
|
-
// Make sure we block any summarizer from being executed/enqueued while
|
|
176
|
-
// executing the refreshLatestSummaryAck.
|
|
177
|
-
// https://dev.azure.com/fluidframework/internal/_workitems/edit/779
|
|
178
|
-
await this.lockedSummaryAction(() => { }, async () => this.refreshLatestSummaryAckCallback({
|
|
166
|
+
async handleSummaryAck(ack) {
|
|
167
|
+
const refSequenceNumber = ack.summaryOp.referenceSequenceNumber;
|
|
168
|
+
const summaryLogger = this.tryGetCorrelatedLogger(refSequenceNumber) ?? this.mc.logger;
|
|
169
|
+
const summaryOpHandle = ack.summaryOp.contents.handle;
|
|
170
|
+
const summaryAckHandle = ack.summaryAck.contents.handle;
|
|
171
|
+
while (this.summarizingLock !== undefined) {
|
|
172
|
+
summaryLogger.sendTelemetryEvent({
|
|
173
|
+
eventName: "RefreshAttemptWithSummarizerRunning",
|
|
174
|
+
referenceSequenceNumber: refSequenceNumber,
|
|
179
175
|
proposalHandle: summaryOpHandle,
|
|
180
176
|
ackHandle: summaryAckHandle,
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}).catch(async (error) => {
|
|
184
|
-
// If the error is 404, so maybe the fetched version no longer exists on server. We just
|
|
185
|
-
// ignore this error in that case, as that means we will have another summaryAck for the
|
|
186
|
-
// latest version with which we will refresh the state. However in case of single commit
|
|
187
|
-
// summary, we might me missing a summary ack, so in that case we are still fine as the
|
|
188
|
-
// code in `submitSummary` function in container runtime, will refresh the latest state
|
|
189
|
-
// by calling `prefetchLatestSummaryThenClose`. We will load the next summarizer from the
|
|
190
|
-
// updated state and be fine.
|
|
191
|
-
const isIgnoredError = isFluidError(error) &&
|
|
192
|
-
error.errorType === DriverErrorTypes.fileNotFoundOrAccessDeniedError;
|
|
193
|
-
summaryLogger.sendTelemetryEvent({
|
|
194
|
-
eventName: isIgnoredError
|
|
195
|
-
? "HandleSummaryAckErrorIgnored"
|
|
196
|
-
: "HandleLastSummaryAckError",
|
|
197
|
-
referenceSequenceNumber: refSequenceNumber,
|
|
198
|
-
proposalHandle: summaryOpHandle,
|
|
199
|
-
ackHandle: summaryAckHandle,
|
|
200
|
-
}, error);
|
|
201
|
-
}), () => { });
|
|
202
|
-
refSequenceNumber++;
|
|
177
|
+
});
|
|
178
|
+
await this.summarizingLock;
|
|
203
179
|
}
|
|
204
|
-
|
|
180
|
+
// Make sure we block any summarizer from being executed/enqueued while
|
|
181
|
+
// executing the refreshLatestSummaryAck.
|
|
182
|
+
// https://dev.azure.com/fluidframework/internal/_workitems/edit/779
|
|
183
|
+
await this.lockedSummaryAction(() => { }, async () => this.refreshLatestSummaryAckCallback({
|
|
184
|
+
proposalHandle: summaryOpHandle,
|
|
185
|
+
ackHandle: summaryAckHandle,
|
|
186
|
+
summaryRefSeq: refSequenceNumber,
|
|
187
|
+
summaryLogger,
|
|
188
|
+
}).catch(async (error) => {
|
|
189
|
+
// If the error is 404, so maybe the fetched version no longer exists on server. We just
|
|
190
|
+
// ignore this error in that case, as that means we will have another summaryAck for the
|
|
191
|
+
// latest version with which we will refresh the state. However in case of single commit
|
|
192
|
+
// summary, we might me missing a summary ack, so in that case we are still fine as the
|
|
193
|
+
// code in `submitSummary` function in container runtime, will refresh the latest state
|
|
194
|
+
// by calling `prefetchLatestSummaryThenClose`. We will load the next summarizer from the
|
|
195
|
+
// updated state and be fine.
|
|
196
|
+
const isIgnoredError = isFluidError(error) &&
|
|
197
|
+
error.errorType === DriverErrorTypes.fileNotFoundOrAccessDeniedError;
|
|
198
|
+
summaryLogger.sendTelemetryEvent({
|
|
199
|
+
eventName: isIgnoredError
|
|
200
|
+
? "HandleSummaryAckErrorIgnored"
|
|
201
|
+
: "HandleLastSummaryAckError",
|
|
202
|
+
referenceSequenceNumber: refSequenceNumber,
|
|
203
|
+
proposalHandle: summaryOpHandle,
|
|
204
|
+
ackHandle: summaryAckHandle,
|
|
205
|
+
}, error);
|
|
206
|
+
}), () => { });
|
|
205
207
|
}
|
|
206
208
|
/**
|
|
207
|
-
* Responsible for receiving and processing all the
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
*
|
|
209
|
+
* Responsible for receiving and processing all the summary acks.
|
|
210
|
+
* It starts processing ACKs after the one for the summary this client loaded from (initialSequenceNumber). Any
|
|
211
|
+
* ACK before that is not interesting as it will simply be ignored.
|
|
212
|
+
*
|
|
213
|
+
* @param referenceSequenceNumber - The referenceSequenceNumber of the summary from which to start processing
|
|
214
|
+
* acks.
|
|
213
215
|
*/
|
|
214
|
-
async processIncomingSummaryAcks(
|
|
215
|
-
|
|
216
|
+
async processIncomingSummaryAcks(referenceSequenceNumber) {
|
|
217
|
+
// Start waiting for acks that are for summaries newer that the one this client loaded from.
|
|
218
|
+
let nextReferenceSequenceNumber = referenceSequenceNumber;
|
|
216
219
|
while (!this.disposed) {
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
await this.summaryCollection.waitSummaryAck(refSequenceNumber);
|
|
221
|
-
summaryLogger.sendTelemetryEvent({
|
|
222
|
-
eventName: "processIncomingSummaryAcks",
|
|
223
|
-
referenceSequenceNumber: refSequenceNumber,
|
|
224
|
-
lastAckRefSeq,
|
|
225
|
-
});
|
|
226
|
-
refSequenceNumber = await this.handleSummaryAck();
|
|
227
|
-
// A valid Summary Ack must have been processed.
|
|
228
|
-
assert(refSequenceNumber >= 0, 0x58f /* Invalid ref sequence number */);
|
|
220
|
+
const ackedSummary = await this.summaryCollection.waitSummaryAck(nextReferenceSequenceNumber);
|
|
221
|
+
await this.handleSummaryAck(ackedSummary);
|
|
222
|
+
nextReferenceSequenceNumber = ackedSummary.summaryOp.referenceSequenceNumber + 1;
|
|
229
223
|
}
|
|
230
224
|
}
|
|
231
225
|
dispose() {
|
|
@@ -382,7 +376,14 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
382
376
|
};
|
|
383
377
|
const summarizeResult = this.generator.summarize(summaryOptions, resultsBuilder);
|
|
384
378
|
// ensure we wait till the end of the process
|
|
385
|
-
|
|
379
|
+
const result = await summarizeResult.receivedSummaryAckOrNack;
|
|
380
|
+
if (!result.success) {
|
|
381
|
+
this.mc.logger.sendErrorEvent({
|
|
382
|
+
eventName: "SummarizeFailed",
|
|
383
|
+
maxAttempts: 1,
|
|
384
|
+
summaryAttempts: 1,
|
|
385
|
+
}, result.error);
|
|
386
|
+
}
|
|
386
387
|
}, () => {
|
|
387
388
|
this.afterSummaryAction();
|
|
388
389
|
}).catch((error) => {
|
|
@@ -425,6 +426,7 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
425
426
|
let summaryAttempts = 0;
|
|
426
427
|
let summaryAttemptsPerPhase = 0;
|
|
427
428
|
let summaryAttemptPhase = 0;
|
|
429
|
+
let error;
|
|
428
430
|
while (summaryAttemptPhase < attemptOptions.length) {
|
|
429
431
|
if (this.cancellationToken.cancelled) {
|
|
430
432
|
return;
|
|
@@ -458,6 +460,7 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
458
460
|
if (ackNackResult.success) {
|
|
459
461
|
return;
|
|
460
462
|
}
|
|
463
|
+
error = ackNackResult.error;
|
|
461
464
|
// Check for retryDelay that can come from summaryNack, upload summary or submit summary flows.
|
|
462
465
|
// Retry the same step only once per retryAfter response.
|
|
463
466
|
const submitResult = await resultSummarize.summarySubmitted;
|
|
@@ -478,6 +481,11 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
478
481
|
await delay(delaySeconds * 1000);
|
|
479
482
|
}
|
|
480
483
|
}
|
|
484
|
+
this.mc.logger.sendErrorEvent({
|
|
485
|
+
eventName: "SummarizeFailed",
|
|
486
|
+
maxAttempts: attemptOptions.length,
|
|
487
|
+
summaryAttempts: summaryAttemptPhase,
|
|
488
|
+
}, error);
|
|
481
489
|
this.stopSummarizerCallback("failToSummarize");
|
|
482
490
|
}
|
|
483
491
|
/**
|
|
@@ -522,19 +530,22 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
522
530
|
let currentAttempt = 0;
|
|
523
531
|
let retryAfterSeconds;
|
|
524
532
|
let done = false;
|
|
525
|
-
let
|
|
533
|
+
let status = "success";
|
|
534
|
+
let results;
|
|
535
|
+
let error;
|
|
526
536
|
do {
|
|
527
537
|
currentAttempt++;
|
|
528
538
|
if (this.cancellationToken.cancelled) {
|
|
529
|
-
|
|
539
|
+
status = "canceled";
|
|
530
540
|
done = true;
|
|
531
541
|
break;
|
|
532
542
|
}
|
|
533
|
-
const
|
|
543
|
+
const attemptResult = attemptSummarize(currentAttempt, false /* finalAttempt */);
|
|
544
|
+
results = attemptResult.summarizeResult;
|
|
534
545
|
// Ack / nack is the final step, so if it succeeds we're done.
|
|
535
|
-
const ackNackResult = await
|
|
546
|
+
const ackNackResult = await results.receivedSummaryAckOrNack;
|
|
536
547
|
if (ackNackResult.success) {
|
|
537
|
-
|
|
548
|
+
status = "success";
|
|
538
549
|
done = true;
|
|
539
550
|
break;
|
|
540
551
|
}
|
|
@@ -542,7 +553,7 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
542
553
|
// If submit summary failed, use the params from "summarySubmitted" result. Else, use the params
|
|
543
554
|
// from "receivedSummaryAckOrNack" result.
|
|
544
555
|
// Note: Check "summarySubmitted" result first because if it fails, ack nack would fail as well.
|
|
545
|
-
const submitSummaryResult = await
|
|
556
|
+
const submitSummaryResult = await results.summarySubmitted;
|
|
546
557
|
if (!submitSummaryResult.success) {
|
|
547
558
|
maxAttempts = this.maxAttemptsForSubmitFailures;
|
|
548
559
|
retryAfterSeconds = submitSummaryResult.data?.retryAfterSeconds;
|
|
@@ -552,12 +563,13 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
552
563
|
retryAfterSeconds = ackNackResult.data?.retryAfterSeconds;
|
|
553
564
|
}
|
|
554
565
|
// Emit "summarize" event for this failed attempt.
|
|
555
|
-
|
|
566
|
+
status = "failure";
|
|
567
|
+
error = ackNackResult.error;
|
|
556
568
|
const eventProps = {
|
|
557
|
-
result,
|
|
569
|
+
result: status,
|
|
558
570
|
currentAttempt,
|
|
559
571
|
maxAttempts,
|
|
560
|
-
error
|
|
572
|
+
error,
|
|
561
573
|
};
|
|
562
574
|
this.emit("summarize", eventProps);
|
|
563
575
|
// If the failure doesn't have "retryAfterSeconds" or the max number of attempts have been done, we're done.
|
|
@@ -573,15 +585,15 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
573
585
|
summaryNackDelay: ackNackResult.data?.retryAfterSeconds !== undefined,
|
|
574
586
|
stage: submitSummaryResult.data?.stage,
|
|
575
587
|
dynamicRetries: true,
|
|
576
|
-
...summarizeProps,
|
|
588
|
+
...attemptResult.summarizeProps,
|
|
577
589
|
});
|
|
578
590
|
await delay(retryAfterSeconds * 1000);
|
|
579
591
|
}
|
|
580
592
|
} while (!done);
|
|
581
593
|
// If summarize attempt did not fail, emit "summarize" event and return. A failed attempt may be retried below.
|
|
582
|
-
if (
|
|
583
|
-
this.emit("summarize", { result, currentAttempt, maxAttempts });
|
|
584
|
-
return;
|
|
594
|
+
if (status !== "failure") {
|
|
595
|
+
this.emit("summarize", { result: status, currentAttempt, maxAttempts });
|
|
596
|
+
return results;
|
|
585
597
|
}
|
|
586
598
|
// If summarization wasn't successful above and the failure contains "retryAfterSeconds", perform one last
|
|
587
599
|
// attempt. This gives a chance to the runtime to perform additional steps in the last attempt.
|
|
@@ -589,19 +601,47 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
589
601
|
const { summarizeResult } = attemptSummarize(++currentAttempt, true /* finalAttempt */);
|
|
590
602
|
// Ack / nack is the final step, so if it succeeds we're done.
|
|
591
603
|
const ackNackResult = await summarizeResult.receivedSummaryAckOrNack;
|
|
592
|
-
|
|
604
|
+
status = ackNackResult.success ? "success" : "failure";
|
|
605
|
+
if (!ackNackResult.success) {
|
|
606
|
+
error = ackNackResult.error;
|
|
607
|
+
}
|
|
593
608
|
const eventProps = {
|
|
594
|
-
result,
|
|
609
|
+
result: status,
|
|
595
610
|
currentAttempt,
|
|
596
611
|
maxAttempts,
|
|
597
612
|
error: ackNackResult.success ? undefined : ackNackResult.error,
|
|
598
613
|
};
|
|
599
614
|
this.emit("summarize", eventProps);
|
|
615
|
+
results = summarizeResult;
|
|
600
616
|
}
|
|
601
617
|
// If summarization is still unsuccessful, stop the summarizer.
|
|
602
|
-
if (
|
|
618
|
+
if (status === "failure") {
|
|
619
|
+
this.mc.logger.sendErrorEvent({
|
|
620
|
+
eventName: "SummarizeFailed",
|
|
621
|
+
maxAttempts,
|
|
622
|
+
summaryAttempts: currentAttempt,
|
|
623
|
+
}, error);
|
|
603
624
|
this.stopSummarizerCallback("failToSummarize");
|
|
604
625
|
}
|
|
626
|
+
return results;
|
|
627
|
+
}
|
|
628
|
+
/**
|
|
629
|
+
* Attempts to generate a summary on demand with retries in case of failures. The retry logic is the same
|
|
630
|
+
* as heuristics based summaries.
|
|
631
|
+
*/
|
|
632
|
+
async summarizeOnDemandWithRetries(reason, resultsBuilder) {
|
|
633
|
+
const results = await this.trySummarizeWithRetries(reason);
|
|
634
|
+
if (results === undefined) {
|
|
635
|
+
resultsBuilder.fail("Summarization was canceled", undefined);
|
|
636
|
+
return resultsBuilder.build();
|
|
637
|
+
}
|
|
638
|
+
const submitResult = await results.summarySubmitted;
|
|
639
|
+
const summaryOpBroadcastedResult = await results.summaryOpBroadcasted;
|
|
640
|
+
const ackNackResult = await results.receivedSummaryAckOrNack;
|
|
641
|
+
resultsBuilder.summarySubmitted.resolve(submitResult);
|
|
642
|
+
resultsBuilder.summaryOpBroadcasted.resolve(summaryOpBroadcastedResult);
|
|
643
|
+
resultsBuilder.receivedSummaryAckOrNack.resolve(ackNackResult);
|
|
644
|
+
return resultsBuilder.build();
|
|
605
645
|
}
|
|
606
646
|
/** {@inheritdoc (ISummarizer:interface).summarizeOnDemand} */
|
|
607
647
|
summarizeOnDemand(options, resultsBuilder = new SummarizeResultBuilder()) {
|
|
@@ -616,8 +656,15 @@ export class RunningSummarizer extends TypedEventEmitter {
|
|
|
616
656
|
throw new UsageError("Attempted to run an already-running summarizer on demand");
|
|
617
657
|
}
|
|
618
658
|
const { reason, ...summarizeOptions } = options;
|
|
619
|
-
|
|
620
|
-
|
|
659
|
+
if (options.retryOnFailure === true) {
|
|
660
|
+
this.summarizeOnDemandWithRetries(`onDemand;${reason}`, resultsBuilder).catch((error) => {
|
|
661
|
+
resultsBuilder.fail("summarize failed", error);
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
else {
|
|
665
|
+
this.trySummarizeOnce({ summarizeReason: `onDemand/${reason}` }, summarizeOptions, resultsBuilder);
|
|
666
|
+
}
|
|
667
|
+
return resultsBuilder.build();
|
|
621
668
|
}
|
|
622
669
|
/** {@inheritdoc (ISummarizer:interface).enqueueSummarize} */
|
|
623
670
|
enqueueSummarize(options) {
|