@fluidframework/container-runtime 2.23.0-325054 → 2.30.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 +52 -0
- package/api-report/container-runtime.legacy.alpha.api.md +0 -246
- package/dist/blobManager/blobManager.d.ts +11 -9
- package/dist/blobManager/blobManager.d.ts.map +1 -1
- package/dist/blobManager/blobManager.js +38 -39
- package/dist/blobManager/blobManager.js.map +1 -1
- package/dist/blobManager/blobManagerSnapSum.d.ts +2 -4
- package/dist/blobManager/blobManagerSnapSum.d.ts.map +1 -1
- package/dist/blobManager/blobManagerSnapSum.js +6 -6
- package/dist/blobManager/blobManagerSnapSum.js.map +1 -1
- package/dist/channelCollection.d.ts +1 -7
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +1 -26
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +0 -43
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts +21 -141
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +49 -290
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStoreContext.d.ts +0 -13
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +2 -25
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +2 -20
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +0 -2
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +8 -24
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +1 -3
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +1 -4
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +0 -1
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +4 -16
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +0 -29
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/signalTelemetryProcessing.d.ts +33 -0
- package/dist/signalTelemetryProcessing.d.ts.map +1 -0
- package/dist/signalTelemetryProcessing.js +149 -0
- package/dist/signalTelemetryProcessing.js.map +1 -0
- package/dist/summary/documentSchema.d.ts +7 -31
- package/dist/summary/documentSchema.d.ts.map +1 -1
- package/dist/summary/documentSchema.js +2 -18
- package/dist/summary/documentSchema.js.map +1 -1
- package/dist/summary/index.d.ts +2 -1
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +7 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +1 -3
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -3
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +2 -7
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +1 -2
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +4 -23
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +2 -5
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +3 -11
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js +0 -1
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.d.ts +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +109 -22
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +3 -9
- 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 +3 -9
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryHelpers.d.ts +19 -0
- package/dist/summary/summaryHelpers.d.ts.map +1 -0
- package/dist/summary/summaryHelpers.js +90 -0
- package/dist/summary/summaryHelpers.js.map +1 -0
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +0 -2
- package/dist/summary/summaryManager.js.map +1 -1
- package/lib/blobManager/blobManager.d.ts +11 -9
- package/lib/blobManager/blobManager.d.ts.map +1 -1
- package/lib/blobManager/blobManager.js +37 -37
- package/lib/blobManager/blobManager.js.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.d.ts +2 -4
- package/lib/blobManager/blobManagerSnapSum.d.ts.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.js +6 -6
- package/lib/blobManager/blobManagerSnapSum.js.map +1 -1
- package/lib/channelCollection.d.ts +1 -7
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +2 -29
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +0 -43
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts +21 -141
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +51 -298
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStoreContext.d.ts +0 -13
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +2 -25
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +3 -23
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +0 -2
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +8 -24
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js +1 -3
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +1 -4
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +0 -1
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +5 -19
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +0 -29
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/signalTelemetryProcessing.d.ts +33 -0
- package/lib/signalTelemetryProcessing.d.ts.map +1 -0
- package/lib/signalTelemetryProcessing.js +145 -0
- package/lib/signalTelemetryProcessing.js.map +1 -0
- package/lib/summary/documentSchema.d.ts +7 -31
- package/lib/summary/documentSchema.d.ts.map +1 -1
- package/lib/summary/documentSchema.js +2 -18
- package/lib/summary/documentSchema.js.map +1 -1
- package/lib/summary/index.d.ts +2 -1
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +1 -0
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +1 -3
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -3
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +2 -7
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +1 -2
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +4 -23
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +2 -5
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +3 -11
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js +0 -1
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.d.ts +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +109 -22
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +3 -9
- 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 +3 -9
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryHelpers.d.ts +19 -0
- package/lib/summary/summaryHelpers.d.ts.map +1 -0
- package/lib/summary/summaryHelpers.js +84 -0
- package/lib/summary/summaryHelpers.js.map +1 -0
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +0 -2
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +27 -20
- package/src/blobManager/blobManager.ts +70 -62
- package/src/blobManager/blobManagerSnapSum.ts +7 -9
- package/src/channelCollection.ts +3 -31
- package/src/connectionTelemetry.ts +0 -51
- package/src/containerRuntime.ts +111 -522
- package/src/dataStoreContext.ts +2 -32
- package/src/gc/garbageCollection.ts +9 -26
- package/src/gc/gcConfigs.ts +3 -6
- package/src/gc/gcDefinitions.ts +10 -28
- package/src/gc/gcHelpers.ts +0 -5
- package/src/gc/gcSummaryStateTracker.ts +1 -2
- package/src/gc/gcTelemetry.ts +6 -13
- package/src/index.ts +6 -6
- package/src/messageTypes.ts +0 -2
- package/src/packageVersion.ts +1 -1
- package/src/signalTelemetryProcessing.ts +233 -0
- package/src/summary/documentSchema.ts +7 -38
- package/src/summary/index.ts +12 -0
- package/src/summary/orderedClientElection.ts +1 -3
- package/src/summary/runWhileConnectedCoordinator.ts +3 -8
- package/src/summary/runningSummarizer.ts +12 -20
- package/src/summary/summarizer.ts +6 -18
- package/src/summary/summarizerClientElection.ts +0 -2
- package/src/summary/summarizerHeuristics.ts +1 -2
- package/src/summary/summarizerTypes.ts +119 -23
- package/src/summary/summaryFormat.ts +4 -13
- package/src/summary/summaryGenerator.ts +1 -8
- package/src/summary/summaryHelpers.ts +118 -0
- package/src/summary/summaryManager.ts +0 -2
package/dist/containerRuntime.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ContainerRuntime = exports.loadContainerRuntime = exports.getSingleUseLegacyLogCallback = exports.makeLegacySendBatchFn = exports.getDeviceSpec = exports.agentSchedulerId = exports.isUnpackedRuntimeMessage = exports.defaultPendingOpsRetryDelayMs = exports.defaultPendingOpsWaitTimeoutMs = exports.disabledCompressionConfig = exports.CompressionAlgorithms = exports.defaultRuntimeHeaderData = exports.InactiveResponseHeaderKey = exports.TombstoneResponseHeaderKey = exports.DeletedResponseHeaderKey =
|
|
7
|
+
exports.createNewSignalEnvelope = exports.ContainerRuntime = exports.loadContainerRuntime = exports.getSingleUseLegacyLogCallback = exports.makeLegacySendBatchFn = exports.getDeviceSpec = exports.agentSchedulerId = exports.isUnpackedRuntimeMessage = exports.defaultPendingOpsRetryDelayMs = exports.defaultPendingOpsWaitTimeoutMs = exports.disabledCompressionConfig = exports.CompressionAlgorithms = exports.defaultRuntimeHeaderData = exports.InactiveResponseHeaderKey = exports.TombstoneResponseHeaderKey = exports.DeletedResponseHeaderKey = void 0;
|
|
8
8
|
const client_utils_1 = require("@fluid-internal/client-utils");
|
|
9
9
|
const container_definitions_1 = require("@fluidframework/container-definitions");
|
|
10
10
|
const internal_1 = require("@fluidframework/container-definitions/internal");
|
|
@@ -32,6 +32,7 @@ const messageTypes_js_1 = require("./messageTypes.js");
|
|
|
32
32
|
const index_js_3 = require("./opLifecycle/index.js");
|
|
33
33
|
const packageVersion_js_1 = require("./packageVersion.js");
|
|
34
34
|
const pendingStateManager_js_1 = require("./pendingStateManager.js");
|
|
35
|
+
const signalTelemetryProcessing_js_1 = require("./signalTelemetryProcessing.js");
|
|
35
36
|
const index_js_4 = require("./summary/index.js");
|
|
36
37
|
const throttler_js_1 = require("./throttler.js");
|
|
37
38
|
/**
|
|
@@ -53,33 +54,9 @@ function getUnknownMessageTypeError(unknownContainerRuntimeMessageType, codePath
|
|
|
53
54
|
},
|
|
54
55
|
});
|
|
55
56
|
}
|
|
56
|
-
function isSummariesDisabled(config) {
|
|
57
|
-
return config.state === "disabled";
|
|
58
|
-
}
|
|
59
|
-
exports.isSummariesDisabled = isSummariesDisabled;
|
|
60
|
-
/**
|
|
61
|
-
* @legacy
|
|
62
|
-
* @alpha
|
|
63
|
-
*/
|
|
64
|
-
exports.DefaultSummaryConfiguration = {
|
|
65
|
-
state: "enabled",
|
|
66
|
-
minIdleTime: 0,
|
|
67
|
-
maxIdleTime: 30 * 1000, // 30 secs.
|
|
68
|
-
maxTime: 60 * 1000, // 1 min.
|
|
69
|
-
maxOps: 100, // Summarize if 100 weighted ops received since last snapshot.
|
|
70
|
-
minOpsForLastSummaryAttempt: 10,
|
|
71
|
-
maxAckWaitTime: 3 * 60 * 1000, // 3 mins.
|
|
72
|
-
maxOpsSinceLastSummary: 7000,
|
|
73
|
-
initialSummarizerDelayMs: 5 * 1000, // 5 secs.
|
|
74
|
-
nonRuntimeOpWeight: 0.1,
|
|
75
|
-
runtimeOpWeight: 1,
|
|
76
|
-
nonRuntimeHeuristicThreshold: 20,
|
|
77
|
-
};
|
|
78
57
|
/**
|
|
79
58
|
* Error responses when requesting a deleted object will have this header set to true
|
|
80
|
-
* @
|
|
81
|
-
* @alpha
|
|
82
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
59
|
+
* @internal
|
|
83
60
|
*/
|
|
84
61
|
exports.DeletedResponseHeaderKey = "wasDeleted";
|
|
85
62
|
/**
|
|
@@ -198,55 +175,13 @@ const makeLegacySendBatchFn = (submitFn, deltaManager) => (batch) => {
|
|
|
198
175
|
return clientSequenceNumber;
|
|
199
176
|
};
|
|
200
177
|
exports.makeLegacySendBatchFn = makeLegacySendBatchFn;
|
|
201
|
-
const summarizerRequestUrl = "_summarizer";
|
|
202
|
-
/**
|
|
203
|
-
* Create and retrieve the summmarizer
|
|
204
|
-
*/
|
|
205
|
-
async function createSummarizer(loader, url) {
|
|
206
|
-
const request = {
|
|
207
|
-
headers: {
|
|
208
|
-
[internal_1.LoaderHeader.cache]: false,
|
|
209
|
-
[internal_1.LoaderHeader.clientDetails]: {
|
|
210
|
-
capabilities: { interactive: false },
|
|
211
|
-
type: index_js_4.summarizerClientType,
|
|
212
|
-
},
|
|
213
|
-
[internal_3.DriverHeader.summarizingClient]: true,
|
|
214
|
-
[internal_1.LoaderHeader.reconnect]: false,
|
|
215
|
-
},
|
|
216
|
-
url,
|
|
217
|
-
};
|
|
218
|
-
const resolvedContainer = await loader.resolve(request);
|
|
219
|
-
let fluidObject;
|
|
220
|
-
// Older containers may not have the "getEntryPoint" API
|
|
221
|
-
// ! This check will need to stay until LTS of loader moves past 2.0.0-internal.7.0.0
|
|
222
|
-
if (resolvedContainer.getEntryPoint === undefined) {
|
|
223
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-explicit-any
|
|
224
|
-
const response = (await resolvedContainer.request({
|
|
225
|
-
url: `/${summarizerRequestUrl}`,
|
|
226
|
-
}));
|
|
227
|
-
if (response.status !== 200 || response.mimeType !== "fluid/object") {
|
|
228
|
-
throw (0, internal_6.responseToException)(response, request);
|
|
229
|
-
}
|
|
230
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
231
|
-
fluidObject = response.value;
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
fluidObject = await resolvedContainer.getEntryPoint();
|
|
235
|
-
}
|
|
236
|
-
if (fluidObject?.ISummarizer === undefined) {
|
|
237
|
-
throw new internal_7.UsageError("Fluid object does not implement ISummarizer");
|
|
238
|
-
}
|
|
239
|
-
return fluidObject.ISummarizer;
|
|
240
|
-
}
|
|
241
178
|
/**
|
|
242
179
|
* Extract last message from the snapshot metadata.
|
|
243
180
|
* Uses legacy property if not using explicit schema control, otherwise uses the new property.
|
|
244
181
|
* This allows new runtime to make documents not openable for old runtimes, one explicit document schema control is enabled.
|
|
245
182
|
* Please see addMetadataToSummary() as well
|
|
246
183
|
*/
|
|
247
|
-
function lastMessageFromMetadata(
|
|
248
|
-
// eslint-disable-next-line import/no-deprecated
|
|
249
|
-
metadata) {
|
|
184
|
+
function lastMessageFromMetadata(metadata) {
|
|
250
185
|
return metadata?.documentSchema?.runtime?.explicitSchemaControl
|
|
251
186
|
? metadata?.lastMessage
|
|
252
187
|
: metadata?.message;
|
|
@@ -280,7 +215,6 @@ async function loadContainerRuntime(params) {
|
|
|
280
215
|
}
|
|
281
216
|
exports.loadContainerRuntime = loadContainerRuntime;
|
|
282
217
|
const defaultMaxConsecutiveReconnects = 7;
|
|
283
|
-
const defaultTelemetrySignalSampleCount = 100;
|
|
284
218
|
/**
|
|
285
219
|
* Represents the runtime of the container. Contains helper functions/state of the container.
|
|
286
220
|
* It will define the store level mappings.
|
|
@@ -336,15 +270,13 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
336
270
|
const [chunks, recentBatchInfo, metadata, electedSummarizerData, aliases, serializedIdCompressor,] = await Promise.all([
|
|
337
271
|
tryFetchBlob(index_js_4.chunksBlobName),
|
|
338
272
|
tryFetchBlob(index_js_4.recentBatchInfoBlobName),
|
|
339
|
-
// eslint-disable-next-line import/no-deprecated
|
|
340
273
|
tryFetchBlob(index_js_4.metadataBlobName),
|
|
341
|
-
// eslint-disable-next-line import/no-deprecated
|
|
342
274
|
tryFetchBlob(index_js_4.electedSummarizerBlobName),
|
|
343
275
|
tryFetchBlob(index_js_4.aliasBlobName),
|
|
344
276
|
tryFetchBlob(index_js_4.idCompressorBlobName),
|
|
345
277
|
]);
|
|
346
278
|
// read snapshot blobs needed for BlobManager to load
|
|
347
|
-
const
|
|
279
|
+
const blobManagerLoadInfo = await (0, index_js_1.loadBlobManagerLoadInfo)(context);
|
|
348
280
|
const messageAtLastSummary = lastMessageFromMetadata(metadata);
|
|
349
281
|
// Verify summary runtime sequence number matches protocol sequence number.
|
|
350
282
|
const runtimeSequenceNumber = messageAtLastSummary?.sequenceNumber;
|
|
@@ -448,7 +380,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
448
380
|
};
|
|
449
381
|
const compressionLz4 = compressionOptions.minimumBatchSizeInBytes !== Number.POSITIVE_INFINITY &&
|
|
450
382
|
compressionOptions.compressionAlgorithm === "lz4";
|
|
451
|
-
// eslint-disable-next-line import/no-deprecated
|
|
452
383
|
const documentSchemaController = new index_js_4.DocumentsSchemaController(existing, protocolSequenceNumber, metadata?.documentSchema, {
|
|
453
384
|
explicitSchemaControl,
|
|
454
385
|
compressionLz4,
|
|
@@ -476,7 +407,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
476
407
|
enableGroupedBatching,
|
|
477
408
|
explicitSchemaControl,
|
|
478
409
|
};
|
|
479
|
-
const runtime = new containerRuntimeCtor(context, registry, metadata, electedSummarizerData, chunks ?? [], aliases ?? [], internalRuntimeOptions, containerScope, logger, existing,
|
|
410
|
+
const runtime = new containerRuntimeCtor(context, registry, metadata, electedSummarizerData, chunks ?? [], aliases ?? [], internalRuntimeOptions, containerScope, logger, existing, blobManagerLoadInfo, context.storage, createIdCompressorFn, documentSchemaController, featureGatesForTelemetry, provideEntryPoint, requestHandler, undefined, // summaryConfiguration
|
|
480
411
|
recentBatchInfo);
|
|
481
412
|
runtime.blobManager.stashedBlobsUploadP.then(() => {
|
|
482
413
|
// make sure we didn't reconnect before the promise resolved
|
|
@@ -605,23 +536,15 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
605
536
|
return layerCompatState_js_1.RuntimeCompatDetails;
|
|
606
537
|
}
|
|
607
538
|
/***/
|
|
608
|
-
constructor(context, registry,
|
|
609
|
-
// eslint-disable-next-line import/no-deprecated
|
|
610
|
-
metadata,
|
|
611
|
-
// eslint-disable-next-line import/no-deprecated
|
|
612
|
-
electedSummarizerData, chunks, dataStoreAliasMap, baseRuntimeOptions, containerScope,
|
|
539
|
+
constructor(context, registry, metadata, electedSummarizerData, chunks, dataStoreAliasMap, runtimeOptions, containerScope,
|
|
613
540
|
// Create a custom ITelemetryBaseLogger to output telemetry events.
|
|
614
|
-
baseLogger, existing,
|
|
615
|
-
// eslint-disable-next-line import/no-deprecated
|
|
616
|
-
blobManagerSnapshot, _storage, createIdCompressor,
|
|
617
|
-
// eslint-disable-next-line import/no-deprecated
|
|
618
|
-
documentsSchemaController, featureGatesForTelemetry, provideEntryPoint, requestHandler,
|
|
541
|
+
baseLogger, existing, blobManagerLoadInfo, _storage, createIdCompressor, documentsSchemaController, featureGatesForTelemetry, provideEntryPoint, requestHandler,
|
|
619
542
|
// eslint-disable-next-line unicorn/no-object-as-default-parameter
|
|
620
543
|
summaryConfiguration = {
|
|
621
544
|
// the defaults
|
|
622
|
-
...
|
|
545
|
+
...index_js_4.DefaultSummaryConfiguration,
|
|
623
546
|
// the runtime configuration overrides
|
|
624
|
-
...
|
|
547
|
+
...runtimeOptions.summaryOptions?.summaryConfigOverrides,
|
|
625
548
|
}, recentBatchInfo) {
|
|
626
549
|
super();
|
|
627
550
|
this.registry = registry;
|
|
@@ -642,17 +565,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
642
565
|
this.ensureNoDataModelChangesCalls = 0;
|
|
643
566
|
this._disposed = false;
|
|
644
567
|
this.emitDirtyDocumentEvent = true;
|
|
645
|
-
this.
|
|
646
|
-
totalSignalsSentInLatencyWindow: 0,
|
|
647
|
-
signalsLost: 0,
|
|
648
|
-
signalsOutOfOrder: 0,
|
|
649
|
-
signalsSentSinceLastLatencyMeasurement: 0,
|
|
650
|
-
broadcastSignalSequenceNumber: 0,
|
|
651
|
-
signalTimestamp: 0,
|
|
652
|
-
roundTripSignalSequenceNumber: undefined,
|
|
653
|
-
trackingSignalSequenceNumber: undefined,
|
|
654
|
-
minimumTrackingSignalSequenceNumber: undefined,
|
|
655
|
-
};
|
|
568
|
+
this.signalTelemetryManager = new signalTelemetryProcessing_js_1.SignalTelemetryManager();
|
|
656
569
|
/**
|
|
657
570
|
* It a cache for holding mapping for loading groupIds with its snapshot from the service. Add expiry policy of 1 minute.
|
|
658
571
|
* Starting with 1 min and based on recorded usage we can tweak it later on.
|
|
@@ -666,11 +579,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
666
579
|
this.disposeFn = disposeFn ?? closeFn;
|
|
667
580
|
const maybeLoaderCompatDetails = context;
|
|
668
581
|
(0, layerCompatState_js_1.validateLoaderCompatibility)(maybeLoaderCompatDetails.ILayerCompatDetails, this.disposeFn);
|
|
669
|
-
// Backfill in defaults for the internal runtimeOptions, since they may not be present on the provided runtimeOptions object
|
|
670
|
-
const runtimeOptions = {
|
|
671
|
-
flushMode: defaultFlushMode,
|
|
672
|
-
...baseRuntimeOptions,
|
|
673
|
-
};
|
|
674
582
|
this.mc = (0, internal_7.createChildMonitoringContext)({
|
|
675
583
|
logger: this.baseLogger,
|
|
676
584
|
namespace: "ContainerRuntime",
|
|
@@ -782,10 +690,10 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
782
690
|
this._deltaManager = outerDeltaManager;
|
|
783
691
|
this.handleContext = new containerHandleContext_js_1.ContainerFluidHandleContext("", this);
|
|
784
692
|
if (summaryConfiguration.state === "enabled") {
|
|
785
|
-
|
|
693
|
+
(0, index_js_4.validateSummaryHeuristicConfiguration)(summaryConfiguration);
|
|
786
694
|
}
|
|
787
|
-
this.summariesDisabled = isSummariesDisabled(summaryConfiguration);
|
|
788
|
-
const { maxOpsSinceLastSummary = 0, initialSummarizerDelayMs = 0 } = isSummariesDisabled(summaryConfiguration)
|
|
695
|
+
this.summariesDisabled = (0, index_js_4.isSummariesDisabled)(summaryConfiguration);
|
|
696
|
+
const { maxOpsSinceLastSummary = 0, initialSummarizerDelayMs = 0 } = (0, index_js_4.isSummariesDisabled)(summaryConfiguration)
|
|
789
697
|
? {}
|
|
790
698
|
: {
|
|
791
699
|
...summaryConfiguration,
|
|
@@ -880,9 +788,14 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
880
788
|
// what is the interface of passing signals, we need the
|
|
881
789
|
// downstream stores to wrap the signal.
|
|
882
790
|
parentContext.submitSignal = (type, content, targetClientId) => {
|
|
791
|
+
// Future: Can the `content` argument type be IEnvelope?
|
|
792
|
+
// verifyNotClosed is called in FluidDataStoreContext, which is *the* expected caller.
|
|
883
793
|
const envelope1 = content;
|
|
884
|
-
const envelope2 =
|
|
885
|
-
|
|
794
|
+
const envelope2 = createNewSignalEnvelope(envelope1.address, type, envelope1.contents);
|
|
795
|
+
if (targetClientId === undefined) {
|
|
796
|
+
this.signalTelemetryManager.applyTrackingToBroadcastSignalEnvelope(envelope2);
|
|
797
|
+
}
|
|
798
|
+
this.submitSignalFn(envelope2, targetClientId);
|
|
886
799
|
};
|
|
887
800
|
let snapshot = (0, channelCollection_js_1.getSummaryForDatastores)(baseSnapshot, metadata);
|
|
888
801
|
if (snapshot !== undefined && snapshotWithContents !== undefined) {
|
|
@@ -897,8 +810,8 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
897
810
|
}), (path) => this.garbageCollector.isNodeDeleted(path), new Map(dataStoreAliasMap), async (runtime) => provideEntryPoint);
|
|
898
811
|
this.blobManager = new index_js_1.BlobManager({
|
|
899
812
|
routeContext: this.handleContext,
|
|
900
|
-
|
|
901
|
-
|
|
813
|
+
blobManagerLoadInfo,
|
|
814
|
+
storage: this.storage,
|
|
902
815
|
sendBlobAttachOp: (localId, blobId) => {
|
|
903
816
|
if (!this.disposed) {
|
|
904
817
|
this.submit({ type: messageTypes_js_1.ContainerMessageType.BlobAttach, contents: undefined }, undefined, {
|
|
@@ -986,10 +899,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
986
899
|
const orderedClientElectionForSummarizer = new index_js_4.OrderedClientElection(orderedClientLogger, orderedClientCollection, electedSummarizerData ?? this.innerDeltaManager.lastSequenceNumber, index_js_4.SummarizerClientElection.isClientEligible, this.mc.config.getBoolean("Fluid.ContainerRuntime.OrderedClientElection.EnablePerformanceEvents"));
|
|
987
900
|
this.summarizerClientElection = new index_js_4.SummarizerClientElection(orderedClientLogger, summaryCollection, orderedClientElectionForSummarizer, maxOpsSinceLastSummary);
|
|
988
901
|
if (isSummarizerClient) {
|
|
989
|
-
|
|
990
|
-
this._summarizer = new index_js_4.Summarizer(this /* ISummarizerRuntime */, () => summaryConfiguration, this /* ISummarizerInternalsProvider */, this.handleContext, summaryCollection,
|
|
991
|
-
// eslint-disable-next-line import/no-deprecated
|
|
992
|
-
async (runtime) => index_js_4.RunWhileConnectedCoordinator.create(runtime,
|
|
902
|
+
this._summarizer = new index_js_4.Summarizer(this /* ISummarizerRuntime */, () => summaryConfiguration, this /* ISummarizerInternalsProvider */, this.handleContext, summaryCollection, async (runtime) => index_js_4.RunWhileConnectedCoordinator.create(runtime,
|
|
993
903
|
// Summarization runs in summarizer client and needs access to the real (non-proxy) active
|
|
994
904
|
// information. The proxy delta manager would always return false for summarizer client.
|
|
995
905
|
() => this.innerDeltaManager.active));
|
|
@@ -1017,7 +927,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1017
927
|
summaryCollection.on("default", defaultAction);
|
|
1018
928
|
// Create the SummaryManager and mark the initial state
|
|
1019
929
|
this.summaryManager = new index_js_4.SummaryManager(this.summarizerClientElection, this, // IConnectedState
|
|
1020
|
-
summaryCollection, this.baseLogger,
|
|
930
|
+
summaryCollection, this.baseLogger, (0, index_js_4.formCreateSummarizerFn)(loader), new throttler_js_1.Throttler(60 * 1000, // 60 sec delay window
|
|
1021
931
|
30 * 1000, // 30 sec max delay
|
|
1022
932
|
// throttling function increases exponentially (0ms, 40ms, 80ms, 160ms, etc)
|
|
1023
933
|
(0, throttler_js_1.formExponentialFn)({ coefficient: 20, initialDelay: 0 })), {
|
|
@@ -1052,7 +962,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1052
962
|
summaryFormatVersion: metadata?.summaryFormatVersion,
|
|
1053
963
|
disableIsolatedChannels: metadata?.disableIsolatedChannels,
|
|
1054
964
|
gcVersion: metadata?.gcFeature,
|
|
1055
|
-
options: JSON.stringify(
|
|
965
|
+
options: JSON.stringify(runtimeOptions),
|
|
1056
966
|
idCompressorModeMetadata: metadata?.documentSchema?.runtime?.idCompressorMode,
|
|
1057
967
|
idCompressorMode: this.sessionSchema.idCompressorMode,
|
|
1058
968
|
sessionRuntimeSchema: JSON.stringify(this.sessionSchema),
|
|
@@ -1077,7 +987,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1077
987
|
// saved state, i.e. all the ops marked by Loader layer sa savedOp === true.
|
|
1078
988
|
this.skipSavedCompressorOps = pendingRuntimeState?.pendingIdCompressorState !== undefined;
|
|
1079
989
|
}
|
|
1080
|
-
// eslint-disable-next-line import/no-deprecated
|
|
1081
990
|
onSchemaChange(schema) {
|
|
1082
991
|
this.mc.logger.sendTelemetryEvent({
|
|
1083
992
|
eventName: "SchemaChangeAccept",
|
|
@@ -1254,7 +1163,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1254
1163
|
try {
|
|
1255
1164
|
const parser = internal_6.RequestParser.create(request);
|
|
1256
1165
|
const id = parser.pathParts[0];
|
|
1257
|
-
if (id === summarizerRequestUrl && parser.pathParts.length === 1) {
|
|
1166
|
+
if (id === index_js_4.summarizerRequestUrl && parser.pathParts.length === 1) {
|
|
1258
1167
|
if (this._summarizer !== undefined) {
|
|
1259
1168
|
return {
|
|
1260
1169
|
status: 200,
|
|
@@ -1288,13 +1197,11 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1288
1197
|
}
|
|
1289
1198
|
if (id === index_js_1.blobManagerBasePath && requestParser.isLeaf(2)) {
|
|
1290
1199
|
const blob = await this.blobManager.getBlob(requestParser.pathParts[1]);
|
|
1291
|
-
return
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
}
|
|
1297
|
-
: (0, internal_6.create404Response)(request);
|
|
1200
|
+
return {
|
|
1201
|
+
status: 200,
|
|
1202
|
+
mimeType: "fluid/object",
|
|
1203
|
+
value: blob,
|
|
1204
|
+
};
|
|
1298
1205
|
}
|
|
1299
1206
|
else if (requestParser.pathParts.length > 0) {
|
|
1300
1207
|
return await this.channelCollection.request(request);
|
|
@@ -1325,7 +1232,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1325
1232
|
const documentSchema = this.documentsSchemaController.summarizeDocumentSchema(this.deltaManager.lastSequenceNumber);
|
|
1326
1233
|
// Is document schema explicit control on?
|
|
1327
1234
|
const explicitSchemaControl = documentSchema?.runtime.explicitSchemaControl;
|
|
1328
|
-
// eslint-disable-next-line import/no-deprecated
|
|
1329
1235
|
const metadata = {
|
|
1330
1236
|
...this.createContainerMetadata,
|
|
1331
1237
|
// Increment the summary number for the next summary that will be generated.
|
|
@@ -1339,8 +1245,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1339
1245
|
// last message's sequence number.
|
|
1340
1246
|
// See also lastMessageFromMetadata()
|
|
1341
1247
|
message: explicitSchemaControl
|
|
1342
|
-
?
|
|
1343
|
-
{ sequenceNumber: -1 }
|
|
1248
|
+
? { sequenceNumber: -1 }
|
|
1344
1249
|
: message,
|
|
1345
1250
|
lastMessage: explicitSchemaControl ? message : undefined,
|
|
1346
1251
|
documentSchema,
|
|
@@ -1562,14 +1467,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1562
1467
|
if (connected) {
|
|
1563
1468
|
(0, internal_2.assert)(this.attachState === container_definitions_1.AttachState.Attached, 0x3cd /* Connection is possible only if container exists in storage */);
|
|
1564
1469
|
if (changeOfState) {
|
|
1565
|
-
this.
|
|
1566
|
-
this._signalTracking.signalsOutOfOrder = 0;
|
|
1567
|
-
this._signalTracking.signalTimestamp = 0;
|
|
1568
|
-
this._signalTracking.signalsSentSinceLastLatencyMeasurement = 0;
|
|
1569
|
-
this._signalTracking.totalSignalsSentInLatencyWindow = 0;
|
|
1570
|
-
this._signalTracking.roundTripSignalSequenceNumber = undefined;
|
|
1571
|
-
this._signalTracking.trackingSignalSequenceNumber = undefined;
|
|
1572
|
-
this._signalTracking.minimumTrackingSignalSequenceNumber = undefined;
|
|
1470
|
+
this.signalTelemetryManager.resetTracking();
|
|
1573
1471
|
}
|
|
1574
1472
|
}
|
|
1575
1473
|
// Fail while disconnected
|
|
@@ -1868,9 +1766,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1868
1766
|
break;
|
|
1869
1767
|
}
|
|
1870
1768
|
case messageTypes_js_1.ContainerMessageType.DocumentSchemaChange: {
|
|
1871
|
-
this.documentsSchemaController.processDocumentSchemaMessages(
|
|
1872
|
-
// eslint-disable-next-line import/no-deprecated
|
|
1873
|
-
contents, local, message.sequenceNumber);
|
|
1769
|
+
this.documentsSchemaController.processDocumentSchemaMessages(contents, local, message.sequenceNumber);
|
|
1874
1770
|
break;
|
|
1875
1771
|
}
|
|
1876
1772
|
default: {
|
|
@@ -1900,90 +1796,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1900
1796
|
}
|
|
1901
1797
|
}
|
|
1902
1798
|
}
|
|
1903
|
-
/**
|
|
1904
|
-
* Emits the Signal event and update the perf signal data.
|
|
1905
|
-
*/
|
|
1906
|
-
sendSignalTelemetryEvent() {
|
|
1907
|
-
const duration = Date.now() - this._signalTracking.signalTimestamp;
|
|
1908
|
-
this.mc.logger.sendPerformanceEvent({
|
|
1909
|
-
eventName: "SignalLatency",
|
|
1910
|
-
details: {
|
|
1911
|
-
duration, // Roundtrip duration of the tracked signal in milliseconds.
|
|
1912
|
-
sent: this._signalTracking.totalSignalsSentInLatencyWindow, // Signals sent since the last logged SignalLatency event.
|
|
1913
|
-
lost: this._signalTracking.signalsLost, // Signals lost since the last logged SignalLatency event.
|
|
1914
|
-
outOfOrder: this._signalTracking.signalsOutOfOrder, // Out of order signals since the last logged SignalLatency event.
|
|
1915
|
-
reconnectCount: this.consecutiveReconnects, // Container reconnect count.
|
|
1916
|
-
},
|
|
1917
|
-
});
|
|
1918
|
-
this._signalTracking.signalsLost = 0;
|
|
1919
|
-
this._signalTracking.signalsOutOfOrder = 0;
|
|
1920
|
-
this._signalTracking.signalTimestamp = 0;
|
|
1921
|
-
this._signalTracking.totalSignalsSentInLatencyWindow = 0;
|
|
1922
|
-
}
|
|
1923
|
-
/**
|
|
1924
|
-
* Updates signal telemetry including emitting telemetry events.
|
|
1925
|
-
*/
|
|
1926
|
-
processSignalForTelemetry(envelope) {
|
|
1927
|
-
const { clientBroadcastSignalSequenceNumber, contents: envelopeContents, address: envelopeAddress, } = envelope;
|
|
1928
|
-
if (clientBroadcastSignalSequenceNumber === undefined) {
|
|
1929
|
-
return;
|
|
1930
|
-
}
|
|
1931
|
-
if (this._signalTracking.trackingSignalSequenceNumber === undefined ||
|
|
1932
|
-
this._signalTracking.minimumTrackingSignalSequenceNumber === undefined) {
|
|
1933
|
-
return;
|
|
1934
|
-
}
|
|
1935
|
-
if (clientBroadcastSignalSequenceNumber >= this._signalTracking.trackingSignalSequenceNumber) {
|
|
1936
|
-
// Calculate the number of signals lost and log the event.
|
|
1937
|
-
const signalsLost = clientBroadcastSignalSequenceNumber -
|
|
1938
|
-
this._signalTracking.trackingSignalSequenceNumber;
|
|
1939
|
-
if (signalsLost > 0) {
|
|
1940
|
-
this._signalTracking.signalsLost += signalsLost;
|
|
1941
|
-
this.mc.logger.sendErrorEvent({
|
|
1942
|
-
eventName: "SignalLost",
|
|
1943
|
-
details: {
|
|
1944
|
-
signalsLost, // Number of lost signals detected.
|
|
1945
|
-
expectedSequenceNumber: this._signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
|
|
1946
|
-
clientBroadcastSignalSequenceNumber, // Actual signal sequence number received.
|
|
1947
|
-
},
|
|
1948
|
-
});
|
|
1949
|
-
}
|
|
1950
|
-
// Update the tracking signal sequence number to the next expected signal in the sequence.
|
|
1951
|
-
this._signalTracking.trackingSignalSequenceNumber =
|
|
1952
|
-
clientBroadcastSignalSequenceNumber + 1;
|
|
1953
|
-
}
|
|
1954
|
-
else if (
|
|
1955
|
-
// Check if this is a signal in range of interest.
|
|
1956
|
-
clientBroadcastSignalSequenceNumber >=
|
|
1957
|
-
this._signalTracking.minimumTrackingSignalSequenceNumber) {
|
|
1958
|
-
this._signalTracking.signalsOutOfOrder++;
|
|
1959
|
-
const details = {
|
|
1960
|
-
expectedSequenceNumber: this._signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
|
|
1961
|
-
clientBroadcastSignalSequenceNumber, // Sequence number of the out of order signal.
|
|
1962
|
-
};
|
|
1963
|
-
// Only log `contents.type` when address is for container to avoid
|
|
1964
|
-
// chance that contents type is customer data.
|
|
1965
|
-
if (envelopeAddress === undefined) {
|
|
1966
|
-
details.contentsType = envelopeContents.type; // Type of signal that was received out of order.
|
|
1967
|
-
}
|
|
1968
|
-
this.mc.logger.sendTelemetryEvent({
|
|
1969
|
-
eventName: "SignalOutOfOrder",
|
|
1970
|
-
details,
|
|
1971
|
-
});
|
|
1972
|
-
}
|
|
1973
|
-
if (this._signalTracking.roundTripSignalSequenceNumber !== undefined &&
|
|
1974
|
-
clientBroadcastSignalSequenceNumber >= this._signalTracking.roundTripSignalSequenceNumber) {
|
|
1975
|
-
if (clientBroadcastSignalSequenceNumber ===
|
|
1976
|
-
this._signalTracking.roundTripSignalSequenceNumber) {
|
|
1977
|
-
// Latency tracked signal has been received.
|
|
1978
|
-
// We now log the roundtrip duration of the tracked signal.
|
|
1979
|
-
// This telemetry event also logs metrics for broadcast signals
|
|
1980
|
-
// sent, lost, and out of order.
|
|
1981
|
-
// These metrics are reset after logging the telemetry event.
|
|
1982
|
-
this.sendSignalTelemetryEvent();
|
|
1983
|
-
}
|
|
1984
|
-
this._signalTracking.roundTripSignalSequenceNumber = undefined;
|
|
1985
|
-
}
|
|
1986
|
-
}
|
|
1987
1799
|
processSignal(message, local) {
|
|
1988
1800
|
const envelope = message.content;
|
|
1989
1801
|
const transformed = {
|
|
@@ -1994,7 +1806,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1994
1806
|
};
|
|
1995
1807
|
// Only collect signal telemetry for broadcast messages sent by the current client.
|
|
1996
1808
|
if (message.clientId === this.clientId) {
|
|
1997
|
-
this.
|
|
1809
|
+
this.signalTelemetryManager.trackReceivedSignal(envelope, this.mc.logger, this.consecutiveReconnects);
|
|
1998
1810
|
}
|
|
1999
1811
|
if (envelope.address === undefined) {
|
|
2000
1812
|
// No address indicates a container signal message.
|
|
@@ -2162,43 +1974,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2162
1974
|
}
|
|
2163
1975
|
return true;
|
|
2164
1976
|
}
|
|
2165
|
-
createNewSignalEnvelope(address, type, content) {
|
|
2166
|
-
const newEnvelope = {
|
|
2167
|
-
address,
|
|
2168
|
-
contents: { type, content },
|
|
2169
|
-
};
|
|
2170
|
-
return newEnvelope;
|
|
2171
|
-
}
|
|
2172
|
-
submitEnvelopedSignal(envelope, targetClientId) {
|
|
2173
|
-
const isBroadcastSignal = targetClientId === undefined;
|
|
2174
|
-
if (isBroadcastSignal) {
|
|
2175
|
-
const clientBroadcastSignalSequenceNumber = ++this._signalTracking
|
|
2176
|
-
.broadcastSignalSequenceNumber;
|
|
2177
|
-
// Stamp with the broadcast signal sequence number.
|
|
2178
|
-
envelope.clientBroadcastSignalSequenceNumber = clientBroadcastSignalSequenceNumber;
|
|
2179
|
-
this._signalTracking.signalsSentSinceLastLatencyMeasurement++;
|
|
2180
|
-
if (this._signalTracking.minimumTrackingSignalSequenceNumber === undefined ||
|
|
2181
|
-
this._signalTracking.trackingSignalSequenceNumber === undefined) {
|
|
2182
|
-
// Signal monitoring window is undefined
|
|
2183
|
-
// Initialize tracking to expect the next signal sent by the connected client.
|
|
2184
|
-
this._signalTracking.minimumTrackingSignalSequenceNumber =
|
|
2185
|
-
clientBroadcastSignalSequenceNumber;
|
|
2186
|
-
this._signalTracking.trackingSignalSequenceNumber =
|
|
2187
|
-
clientBroadcastSignalSequenceNumber;
|
|
2188
|
-
}
|
|
2189
|
-
// We should not track the round trip of a new signal in the case we are already tracking one.
|
|
2190
|
-
if (clientBroadcastSignalSequenceNumber % defaultTelemetrySignalSampleCount === 1 &&
|
|
2191
|
-
this._signalTracking.roundTripSignalSequenceNumber === undefined) {
|
|
2192
|
-
this._signalTracking.signalTimestamp = Date.now();
|
|
2193
|
-
this._signalTracking.roundTripSignalSequenceNumber =
|
|
2194
|
-
clientBroadcastSignalSequenceNumber;
|
|
2195
|
-
this._signalTracking.totalSignalsSentInLatencyWindow +=
|
|
2196
|
-
this._signalTracking.signalsSentSinceLastLatencyMeasurement;
|
|
2197
|
-
this._signalTracking.signalsSentSinceLastLatencyMeasurement = 0;
|
|
2198
|
-
}
|
|
2199
|
-
}
|
|
2200
|
-
this.submitSignalFn(envelope, targetClientId);
|
|
2201
|
-
}
|
|
2202
1977
|
/**
|
|
2203
1978
|
* Submits the signal to be sent to other clients.
|
|
2204
1979
|
* @param type - Type of the signal.
|
|
@@ -2213,8 +1988,11 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2213
1988
|
*/
|
|
2214
1989
|
submitSignal(type, content, targetClientId) {
|
|
2215
1990
|
this.verifyNotClosed();
|
|
2216
|
-
const envelope =
|
|
2217
|
-
|
|
1991
|
+
const envelope = createNewSignalEnvelope(undefined /* address */, type, content);
|
|
1992
|
+
if (targetClientId === undefined) {
|
|
1993
|
+
this.signalTelemetryManager.applyTrackingToBroadcastSignalEnvelope(envelope);
|
|
1994
|
+
}
|
|
1995
|
+
this.submitSignalFn(envelope, targetClientId);
|
|
2218
1996
|
}
|
|
2219
1997
|
setAttachState(attachState) {
|
|
2220
1998
|
if (attachState === container_definitions_1.AttachState.Attaching) {
|
|
@@ -2368,13 +2146,10 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2368
2146
|
* Returns the type of the GC node. Currently, there are nodes that belong to the root ("/"), data stores or
|
|
2369
2147
|
* blob manager.
|
|
2370
2148
|
*/
|
|
2371
|
-
// eslint-disable-next-line import/no-deprecated
|
|
2372
2149
|
getNodeType(nodePath) {
|
|
2373
2150
|
if ((0, index_js_1.isBlobPath)(nodePath)) {
|
|
2374
|
-
// eslint-disable-next-line import/no-deprecated
|
|
2375
2151
|
return index_js_2.GCNodeType.Blob;
|
|
2376
2152
|
}
|
|
2377
|
-
// eslint-disable-next-line import/no-deprecated
|
|
2378
2153
|
return this.channelCollection.getGCNodeType(nodePath) ?? index_js_2.GCNodeType.Other;
|
|
2379
2154
|
}
|
|
2380
2155
|
/**
|
|
@@ -2388,13 +2163,10 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2388
2163
|
return ["_gcRoot"];
|
|
2389
2164
|
}
|
|
2390
2165
|
switch (this.getNodeType(nodePath)) {
|
|
2391
|
-
// eslint-disable-next-line import/no-deprecated
|
|
2392
2166
|
case index_js_2.GCNodeType.Blob: {
|
|
2393
2167
|
return [index_js_1.blobManagerBasePath];
|
|
2394
2168
|
}
|
|
2395
|
-
// eslint-disable-next-line import/no-deprecated
|
|
2396
2169
|
case index_js_2.GCNodeType.DataStore:
|
|
2397
|
-
// eslint-disable-next-line import/no-deprecated
|
|
2398
2170
|
case index_js_2.GCNodeType.SubDataStore: {
|
|
2399
2171
|
return this.channelCollection.getDataStorePackagePath(nodePath);
|
|
2400
2172
|
}
|
|
@@ -2462,7 +2234,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
2462
2234
|
* op processing, updating SummarizerNode state tracking, and garbage collection.
|
|
2463
2235
|
* @param options - options controlling how the summary is generated or submitted
|
|
2464
2236
|
*/
|
|
2465
|
-
// eslint-disable-next-line import/no-deprecated
|
|
2466
2237
|
async submitSummary(options) {
|
|
2467
2238
|
const { cancellationToken, fullTree = false, finalAttempt = false, summaryLogger, latestSummaryRefSeqNum, } = options;
|
|
2468
2239
|
// The summary number for this summary. This will be updated during the summary process, so get it now and
|
|
@@ -3064,7 +2835,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
3064
2835
|
/**
|
|
3065
2836
|
* Implementation of ISummarizerInternalsProvider.refreshLatestSummaryAck
|
|
3066
2837
|
*/
|
|
3067
|
-
// eslint-disable-next-line import/no-deprecated
|
|
3068
2838
|
async refreshLatestSummaryAck(options) {
|
|
3069
2839
|
const { proposalHandle, ackHandle, summaryRefSeq, summaryLogger } = options;
|
|
3070
2840
|
// proposalHandle is always passed from RunningSummarizer.
|
|
@@ -3223,28 +2993,17 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
3223
2993
|
return this.summaryManager.enqueueSummarize(options);
|
|
3224
2994
|
}
|
|
3225
2995
|
}
|
|
3226
|
-
/**
|
|
3227
|
-
* Forms a function that will create and retrieve a Summarizer.
|
|
3228
|
-
*/
|
|
3229
|
-
formCreateSummarizerFn(loader) {
|
|
3230
|
-
return async () => {
|
|
3231
|
-
return createSummarizer(loader, `/${summarizerRequestUrl}`);
|
|
3232
|
-
};
|
|
3233
|
-
}
|
|
3234
|
-
validateSummaryHeuristicConfiguration(configuration) {
|
|
3235
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
3236
|
-
for (const prop in configuration) {
|
|
3237
|
-
if (typeof configuration[prop] === "number" && configuration[prop] < 0) {
|
|
3238
|
-
throw new internal_7.UsageError(`Summary heuristic configuration property "${prop}" cannot be less than 0`);
|
|
3239
|
-
}
|
|
3240
|
-
}
|
|
3241
|
-
if (configuration.minIdleTime > configuration.maxIdleTime) {
|
|
3242
|
-
throw new internal_7.UsageError(`"minIdleTime" [${configuration.minIdleTime}] cannot be greater than "maxIdleTime" [${configuration.maxIdleTime}]`);
|
|
3243
|
-
}
|
|
3244
|
-
}
|
|
3245
2996
|
get groupedBatchingEnabled() {
|
|
3246
2997
|
return this.sessionSchema.opGroupingEnabled === true;
|
|
3247
2998
|
}
|
|
3248
2999
|
}
|
|
3249
3000
|
exports.ContainerRuntime = ContainerRuntime;
|
|
3001
|
+
function createNewSignalEnvelope(address, type, content) {
|
|
3002
|
+
const newEnvelope = {
|
|
3003
|
+
address,
|
|
3004
|
+
contents: { type, content },
|
|
3005
|
+
};
|
|
3006
|
+
return newEnvelope;
|
|
3007
|
+
}
|
|
3008
|
+
exports.createNewSignalEnvelope = createNewSignalEnvelope;
|
|
3250
3009
|
//# sourceMappingURL=containerRuntime.js.map
|