@fluidframework/container-runtime 2.0.0-internal.7.0.0 → 2.0.0-internal.7.0.2
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/dist/blobManager.d.ts +3 -6
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +17 -42
- package/dist/blobManager.js.map +1 -1
- package/dist/containerRuntime.d.ts +5 -4
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +33 -8
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStoreContext.d.ts +1 -0
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +39 -34
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStores.d.ts +0 -16
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +0 -48
- package/dist/dataStores.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +12 -3
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +41 -18
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts +1 -0
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +15 -2
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +28 -9
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +8 -3
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +12 -6
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +91 -47
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/index.d.ts +2 -2
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +3 -5
- package/dist/gc/index.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +10 -2
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +23 -3
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +0 -1
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +2 -1
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/lib/blobManager.d.ts +3 -6
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +18 -43
- package/lib/blobManager.js.map +1 -1
- package/lib/containerRuntime.d.ts +5 -4
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +34 -9
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStoreContext.d.ts +1 -0
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +40 -35
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStores.d.ts +0 -16
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +2 -50
- package/lib/dataStores.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +12 -3
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +42 -19
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts +1 -0
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +17 -4
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +28 -9
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js +7 -2
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +12 -6
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +92 -48
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/index.d.ts +2 -2
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js +2 -2
- package/lib/gc/index.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +10 -2
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +23 -3
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +0 -1
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +2 -1
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/package.json +15 -18
- package/src/blobManager.ts +18 -58
- package/src/containerRuntime.ts +50 -18
- package/src/dataStoreContext.ts +17 -8
- package/src/dataStores.ts +2 -80
- package/src/gc/garbageCollection.ts +53 -24
- package/src/gc/gcConfigs.ts +28 -4
- package/src/gc/gcDefinitions.ts +32 -9
- package/src/gc/gcTelemetry.ts +123 -65
- package/src/gc/index.ts +2 -4
- package/src/opLifecycle/opGroupingManager.ts +34 -2
- package/src/opLifecycle/outbox.ts +4 -2
- package/src/packageVersion.ts +1 -1
package/dist/containerRuntime.js
CHANGED
|
@@ -105,6 +105,7 @@ exports.defaultRuntimeHeaderData = {
|
|
|
105
105
|
wait: true,
|
|
106
106
|
viaHandle: false,
|
|
107
107
|
allowTombstone: false,
|
|
108
|
+
allowInactive: false,
|
|
108
109
|
};
|
|
109
110
|
/**
|
|
110
111
|
* Available compression algorithms for op compression.
|
|
@@ -408,6 +409,14 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
408
409
|
? this.summaryConfiguration.initialSummarizerDelayMs
|
|
409
410
|
: 0;
|
|
410
411
|
}
|
|
412
|
+
/** If false, loading or using a Tombstoned object should merely log, not fail */
|
|
413
|
+
get gcTombstoneEnforcementAllowed() {
|
|
414
|
+
return this.garbageCollector.tombstoneEnforcementAllowed;
|
|
415
|
+
}
|
|
416
|
+
/** If true, throw an error when a tombstone data store is used. */
|
|
417
|
+
get gcThrowOnTombstoneUsage() {
|
|
418
|
+
return this.garbageCollector.throwOnTombstoneUsage;
|
|
419
|
+
}
|
|
411
420
|
/**
|
|
412
421
|
* @internal
|
|
413
422
|
*/
|
|
@@ -512,7 +521,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
512
521
|
// Note that we only need to pull the *initial* connected state from the context.
|
|
513
522
|
// Later updates come through calls to setConnectionState.
|
|
514
523
|
this._connected = connected;
|
|
515
|
-
this.gcTombstoneEnforcementAllowed = (0, gc_1.shouldAllowGcTombstoneEnforcement)(metadata?.gcFeatureMatrix?.tombstoneGeneration /* persisted */, this.runtimeOptions.gcOptions[gc_1.gcTombstoneGenerationOptionName] /* current */);
|
|
516
524
|
this.mc.logger.sendTelemetryEvent({
|
|
517
525
|
eventName: "GCFeatureMatrix",
|
|
518
526
|
metadataValue: JSON.stringify(metadata?.gcFeatureMatrix),
|
|
@@ -523,7 +531,12 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
523
531
|
this.telemetryDocumentId = metadata?.telemetryDocumentId ?? (0, uuid_1.v4)();
|
|
524
532
|
this.disableAttachReorder = this.mc.config.getBoolean("Fluid.ContainerRuntime.disableAttachOpReorder");
|
|
525
533
|
const disableChunking = this.mc.config.getBoolean("Fluid.ContainerRuntime.CompressionChunkingDisabled");
|
|
526
|
-
const opGroupingManager = new opLifecycle_1.OpGroupingManager(
|
|
534
|
+
const opGroupingManager = new opLifecycle_1.OpGroupingManager({
|
|
535
|
+
groupedBatchingEnabled: this.groupedBatchingEnabled,
|
|
536
|
+
opCountThreshold: this.mc.config.getNumber("Fluid.ContainerRuntime.GroupedBatchingOpCount") ?? 2,
|
|
537
|
+
reentrantBatchGroupingEnabled: this.mc.config.getBoolean("Fluid.ContainerRuntime.GroupedBatchingReentrancy") ??
|
|
538
|
+
true,
|
|
539
|
+
}, this.mc.logger);
|
|
527
540
|
const opSplitter = new opLifecycle_1.OpSplitter(chunks, this.submitBatchFn, disableChunking === true ? Number.POSITIVE_INFINITY : runtimeOptions.chunkSizeInBytes, runtimeOptions.maxBatchSizeInBytes, this.mc.logger);
|
|
528
541
|
this.remoteMessageProcessor = new opLifecycle_1.RemoteMessageProcessor(opSplitter, new opLifecycle_1.OpDecompressor(this.mc.logger), opGroupingManager);
|
|
529
542
|
this.handleContext = new containerHandleContext_1.ContainerFluidHandleContext("", this);
|
|
@@ -642,7 +655,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
642
655
|
compressionOptions,
|
|
643
656
|
maxBatchSizeInBytes: runtimeOptions.maxBatchSizeInBytes,
|
|
644
657
|
disablePartialFlush: disablePartialFlush === true,
|
|
645
|
-
enableGroupedBatching: this.groupedBatchingEnabled,
|
|
646
658
|
},
|
|
647
659
|
logger: this.mc.logger,
|
|
648
660
|
groupingManager: opGroupingManager,
|
|
@@ -833,7 +845,9 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
833
845
|
: (0, runtime_utils_1.create404Response)(request);
|
|
834
846
|
}
|
|
835
847
|
else if (requestParser.pathParts.length > 0) {
|
|
836
|
-
|
|
848
|
+
// Differentiate between requesting the dataStore directly, or one of its children
|
|
849
|
+
const requestForChild = !requestParser.isLeaf(1);
|
|
850
|
+
const dataStore = await this.getDataStoreFromRequest(id, request, requestForChild);
|
|
837
851
|
const subRequest = requestParser.createSubRequest(1);
|
|
838
852
|
// We always expect createSubRequest to include a leading slash, but asserting here to protect against
|
|
839
853
|
// unintentionally modifying the url if that changes.
|
|
@@ -855,7 +869,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
855
869
|
internalId(maybeAlias) {
|
|
856
870
|
return this.dataStores.aliases.get(maybeAlias) ?? maybeAlias;
|
|
857
871
|
}
|
|
858
|
-
async getDataStoreFromRequest(id, request) {
|
|
872
|
+
async getDataStoreFromRequest(id, request, requestForChild) {
|
|
859
873
|
const headerData = {};
|
|
860
874
|
if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
|
|
861
875
|
headerData.wait = request.headers[RuntimeHeaders.wait];
|
|
@@ -866,15 +880,25 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
866
880
|
if (typeof request.headers?.[exports.AllowTombstoneRequestHeaderKey] === "boolean") {
|
|
867
881
|
headerData.allowTombstone = request.headers[exports.AllowTombstoneRequestHeaderKey];
|
|
868
882
|
}
|
|
883
|
+
if (typeof request.headers?.[exports.AllowInactiveRequestHeaderKey] === "boolean") {
|
|
884
|
+
headerData.allowInactive = request.headers[exports.AllowInactiveRequestHeaderKey];
|
|
885
|
+
}
|
|
886
|
+
// We allow Tombstone requests for sub-DataStore objects
|
|
887
|
+
if (requestForChild) {
|
|
888
|
+
headerData.allowTombstone = true;
|
|
889
|
+
}
|
|
869
890
|
await this.dataStores.waitIfPendingAlias(id);
|
|
870
891
|
const internalId = this.internalId(id);
|
|
871
892
|
const dataStoreContext = await this.dataStores.getDataStore(internalId, headerData);
|
|
872
|
-
const dataStoreChannel = await dataStoreContext.realize();
|
|
873
893
|
// Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
|
|
874
894
|
// the same as GC nodes id.
|
|
875
895
|
const urlWithoutQuery = (0, gc_1.trimLeadingAndTrailingSlashes)(request.url.split("?")[0]);
|
|
876
|
-
|
|
877
|
-
|
|
896
|
+
// Get the initial snapshot details which contain the data store package path.
|
|
897
|
+
const details = await dataStoreContext.getInitialSnapshotDetails();
|
|
898
|
+
// Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
|
|
899
|
+
// is configured.
|
|
900
|
+
this.garbageCollector.nodeUpdated(`/${urlWithoutQuery}`, "Loaded", undefined /* timestampMs */, details.pkg, request, headerData);
|
|
901
|
+
return dataStoreContext.realize();
|
|
878
902
|
}
|
|
879
903
|
/** Adds the container's metadata to the given summary tree. */
|
|
880
904
|
addMetadataToSummary(summaryTree) {
|
|
@@ -1378,6 +1402,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
1378
1402
|
if (channel.entryPoint === undefined) {
|
|
1379
1403
|
throw new telemetry_utils_1.UsageError("entryPoint must be defined on data store runtime for using getAliasedDataStoreEntryPoint");
|
|
1380
1404
|
}
|
|
1405
|
+
this.garbageCollector.nodeUpdated(`/${internalId}`, "Loaded", undefined /* timestampMs */, context.packagePath);
|
|
1381
1406
|
return channel.entryPoint;
|
|
1382
1407
|
}
|
|
1383
1408
|
createDetachedRootDataStore(pkg, rootDataStoreId) {
|