@fluidframework/container-runtime 2.0.0-internal.7.0.0 → 2.0.0-internal.7.0.1

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.
Files changed (87) hide show
  1. package/dist/blobManager.d.ts +3 -6
  2. package/dist/blobManager.d.ts.map +1 -1
  3. package/dist/blobManager.js +17 -42
  4. package/dist/blobManager.js.map +1 -1
  5. package/dist/containerRuntime.d.ts +5 -4
  6. package/dist/containerRuntime.d.ts.map +1 -1
  7. package/dist/containerRuntime.js +27 -6
  8. package/dist/containerRuntime.js.map +1 -1
  9. package/dist/dataStoreContext.d.ts +1 -0
  10. package/dist/dataStoreContext.d.ts.map +1 -1
  11. package/dist/dataStoreContext.js +39 -34
  12. package/dist/dataStoreContext.js.map +1 -1
  13. package/dist/dataStores.d.ts +0 -16
  14. package/dist/dataStores.d.ts.map +1 -1
  15. package/dist/dataStores.js +0 -48
  16. package/dist/dataStores.js.map +1 -1
  17. package/dist/gc/garbageCollection.d.ts +12 -3
  18. package/dist/gc/garbageCollection.d.ts.map +1 -1
  19. package/dist/gc/garbageCollection.js +41 -18
  20. package/dist/gc/garbageCollection.js.map +1 -1
  21. package/dist/gc/gcConfigs.d.ts +1 -0
  22. package/dist/gc/gcConfigs.d.ts.map +1 -1
  23. package/dist/gc/gcConfigs.js +12 -2
  24. package/dist/gc/gcConfigs.js.map +1 -1
  25. package/dist/gc/gcDefinitions.d.ts +21 -7
  26. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  27. package/dist/gc/gcDefinitions.js.map +1 -1
  28. package/dist/gc/gcTelemetry.d.ts +12 -6
  29. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  30. package/dist/gc/gcTelemetry.js +74 -42
  31. package/dist/gc/gcTelemetry.js.map +1 -1
  32. package/dist/gc/index.d.ts +2 -2
  33. package/dist/gc/index.d.ts.map +1 -1
  34. package/dist/gc/index.js +1 -5
  35. package/dist/gc/index.js.map +1 -1
  36. package/dist/packageVersion.d.ts +1 -1
  37. package/dist/packageVersion.js +1 -1
  38. package/dist/packageVersion.js.map +1 -1
  39. package/lib/blobManager.d.ts +3 -6
  40. package/lib/blobManager.d.ts.map +1 -1
  41. package/lib/blobManager.js +18 -43
  42. package/lib/blobManager.js.map +1 -1
  43. package/lib/containerRuntime.d.ts +5 -4
  44. package/lib/containerRuntime.d.ts.map +1 -1
  45. package/lib/containerRuntime.js +28 -7
  46. package/lib/containerRuntime.js.map +1 -1
  47. package/lib/dataStoreContext.d.ts +1 -0
  48. package/lib/dataStoreContext.d.ts.map +1 -1
  49. package/lib/dataStoreContext.js +40 -35
  50. package/lib/dataStoreContext.js.map +1 -1
  51. package/lib/dataStores.d.ts +0 -16
  52. package/lib/dataStores.d.ts.map +1 -1
  53. package/lib/dataStores.js +2 -50
  54. package/lib/dataStores.js.map +1 -1
  55. package/lib/gc/garbageCollection.d.ts +12 -3
  56. package/lib/gc/garbageCollection.d.ts.map +1 -1
  57. package/lib/gc/garbageCollection.js +42 -19
  58. package/lib/gc/garbageCollection.js.map +1 -1
  59. package/lib/gc/gcConfigs.d.ts +1 -0
  60. package/lib/gc/gcConfigs.d.ts.map +1 -1
  61. package/lib/gc/gcConfigs.js +14 -4
  62. package/lib/gc/gcConfigs.js.map +1 -1
  63. package/lib/gc/gcDefinitions.d.ts +21 -7
  64. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  65. package/lib/gc/gcDefinitions.js.map +1 -1
  66. package/lib/gc/gcTelemetry.d.ts +12 -6
  67. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  68. package/lib/gc/gcTelemetry.js +74 -42
  69. package/lib/gc/gcTelemetry.js.map +1 -1
  70. package/lib/gc/index.d.ts +2 -2
  71. package/lib/gc/index.d.ts.map +1 -1
  72. package/lib/gc/index.js +2 -2
  73. package/lib/gc/index.js.map +1 -1
  74. package/lib/packageVersion.d.ts +1 -1
  75. package/lib/packageVersion.js +1 -1
  76. package/lib/packageVersion.js.map +1 -1
  77. package/package.json +15 -18
  78. package/src/blobManager.ts +18 -58
  79. package/src/containerRuntime.ts +39 -16
  80. package/src/dataStoreContext.ts +17 -8
  81. package/src/dataStores.ts +2 -80
  82. package/src/gc/garbageCollection.ts +53 -24
  83. package/src/gc/gcConfigs.ts +22 -4
  84. package/src/gc/gcDefinitions.ts +22 -7
  85. package/src/gc/gcTelemetry.ts +103 -56
  86. package/src/gc/index.ts +0 -4
  87. package/src/packageVersion.ts +1 -1
@@ -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),
@@ -833,7 +841,9 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
833
841
  : (0, runtime_utils_1.create404Response)(request);
834
842
  }
835
843
  else if (requestParser.pathParts.length > 0) {
836
- const dataStore = await this.getDataStoreFromRequest(id, request);
844
+ // Differentiate between requesting the dataStore directly, or one of its children
845
+ const requestForChild = !requestParser.isLeaf(1);
846
+ const dataStore = await this.getDataStoreFromRequest(id, request, requestForChild);
837
847
  const subRequest = requestParser.createSubRequest(1);
838
848
  // We always expect createSubRequest to include a leading slash, but asserting here to protect against
839
849
  // unintentionally modifying the url if that changes.
@@ -855,7 +865,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
855
865
  internalId(maybeAlias) {
856
866
  return this.dataStores.aliases.get(maybeAlias) ?? maybeAlias;
857
867
  }
858
- async getDataStoreFromRequest(id, request) {
868
+ async getDataStoreFromRequest(id, request, requestForChild) {
859
869
  const headerData = {};
860
870
  if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
861
871
  headerData.wait = request.headers[RuntimeHeaders.wait];
@@ -866,15 +876,25 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
866
876
  if (typeof request.headers?.[exports.AllowTombstoneRequestHeaderKey] === "boolean") {
867
877
  headerData.allowTombstone = request.headers[exports.AllowTombstoneRequestHeaderKey];
868
878
  }
879
+ if (typeof request.headers?.[exports.AllowInactiveRequestHeaderKey] === "boolean") {
880
+ headerData.allowInactive = request.headers[exports.AllowInactiveRequestHeaderKey];
881
+ }
882
+ // We allow Tombstone requests for sub-DataStore objects
883
+ if (requestForChild) {
884
+ headerData.allowTombstone = true;
885
+ }
869
886
  await this.dataStores.waitIfPendingAlias(id);
870
887
  const internalId = this.internalId(id);
871
888
  const dataStoreContext = await this.dataStores.getDataStore(internalId, headerData);
872
- const dataStoreChannel = await dataStoreContext.realize();
873
889
  // Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
874
890
  // the same as GC nodes id.
875
891
  const urlWithoutQuery = (0, gc_1.trimLeadingAndTrailingSlashes)(request.url.split("?")[0]);
876
- this.garbageCollector.nodeUpdated(`/${urlWithoutQuery}`, "Loaded", undefined /* timestampMs */, dataStoreContext.packagePath, request?.headers);
877
- return dataStoreChannel;
892
+ // Get the initial snapshot details which contain the data store package path.
893
+ const details = await dataStoreContext.getInitialSnapshotDetails();
894
+ // Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
895
+ // is configured.
896
+ this.garbageCollector.nodeUpdated(`/${urlWithoutQuery}`, "Loaded", undefined /* timestampMs */, details.pkg, request, headerData);
897
+ return dataStoreContext.realize();
878
898
  }
879
899
  /** Adds the container's metadata to the given summary tree. */
880
900
  addMetadataToSummary(summaryTree) {
@@ -1378,6 +1398,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
1378
1398
  if (channel.entryPoint === undefined) {
1379
1399
  throw new telemetry_utils_1.UsageError("entryPoint must be defined on data store runtime for using getAliasedDataStoreEntryPoint");
1380
1400
  }
1401
+ this.garbageCollector.nodeUpdated(`/${internalId}`, "Loaded", undefined /* timestampMs */, context.packagePath);
1381
1402
  return channel.entryPoint;
1382
1403
  }
1383
1404
  createDetachedRootDataStore(pkg, rootDataStoreId) {