@fluidframework/container-runtime 2.0.0-dev.7.2.0.205722 → 2.0.0-dev.7.3.0.207781

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 (80) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/api-report/container-runtime.api.md +2 -4
  3. package/dist/blobManager.d.ts +3 -4
  4. package/dist/blobManager.d.ts.map +1 -1
  5. package/dist/blobManager.js +17 -36
  6. package/dist/blobManager.js.map +1 -1
  7. package/dist/containerRuntime.d.ts +10 -4
  8. package/dist/containerRuntime.d.ts.map +1 -1
  9. package/dist/containerRuntime.js +22 -11
  10. package/dist/containerRuntime.js.map +1 -1
  11. package/dist/dataStoreContext.d.ts +8 -1
  12. package/dist/dataStoreContext.d.ts.map +1 -1
  13. package/dist/dataStoreContext.js +46 -31
  14. package/dist/dataStoreContext.js.map +1 -1
  15. package/dist/dataStores.d.ts +0 -14
  16. package/dist/dataStores.d.ts.map +1 -1
  17. package/dist/dataStores.js +0 -43
  18. package/dist/dataStores.js.map +1 -1
  19. package/dist/deltaManagerProxyBase.d.ts +1 -1
  20. package/dist/deltaManagerProxyBase.d.ts.map +1 -1
  21. package/dist/deltaManagerProxyBase.js +2 -2
  22. package/dist/deltaManagerProxyBase.js.map +1 -1
  23. package/dist/gc/garbageCollection.d.ts +6 -3
  24. package/dist/gc/garbageCollection.d.ts.map +1 -1
  25. package/dist/gc/garbageCollection.js +27 -17
  26. package/dist/gc/garbageCollection.js.map +1 -1
  27. package/dist/gc/gcDefinitions.d.ts +7 -3
  28. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  29. package/dist/gc/gcDefinitions.js.map +1 -1
  30. package/dist/gc/gcTelemetry.d.ts +11 -4
  31. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  32. package/dist/gc/gcTelemetry.js +72 -39
  33. package/dist/gc/gcTelemetry.js.map +1 -1
  34. package/dist/packageVersion.d.ts +1 -1
  35. package/dist/packageVersion.js +1 -1
  36. package/dist/packageVersion.js.map +1 -1
  37. package/lib/blobManager.d.ts +3 -4
  38. package/lib/blobManager.d.ts.map +1 -1
  39. package/lib/blobManager.js +18 -37
  40. package/lib/blobManager.js.map +1 -1
  41. package/lib/containerRuntime.d.ts +10 -4
  42. package/lib/containerRuntime.d.ts.map +1 -1
  43. package/lib/containerRuntime.js +22 -11
  44. package/lib/containerRuntime.js.map +1 -1
  45. package/lib/dataStoreContext.d.ts +8 -1
  46. package/lib/dataStoreContext.d.ts.map +1 -1
  47. package/lib/dataStoreContext.js +46 -31
  48. package/lib/dataStoreContext.js.map +1 -1
  49. package/lib/dataStores.d.ts +0 -14
  50. package/lib/dataStores.d.ts.map +1 -1
  51. package/lib/dataStores.js +1 -44
  52. package/lib/dataStores.js.map +1 -1
  53. package/lib/deltaManagerProxyBase.d.ts +1 -1
  54. package/lib/deltaManagerProxyBase.d.ts.map +1 -1
  55. package/lib/deltaManagerProxyBase.js +2 -2
  56. package/lib/deltaManagerProxyBase.js.map +1 -1
  57. package/lib/gc/garbageCollection.d.ts +6 -3
  58. package/lib/gc/garbageCollection.d.ts.map +1 -1
  59. package/lib/gc/garbageCollection.js +28 -18
  60. package/lib/gc/garbageCollection.js.map +1 -1
  61. package/lib/gc/gcDefinitions.d.ts +7 -3
  62. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  63. package/lib/gc/gcDefinitions.js.map +1 -1
  64. package/lib/gc/gcTelemetry.d.ts +11 -4
  65. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  66. package/lib/gc/gcTelemetry.js +72 -39
  67. package/lib/gc/gcTelemetry.js.map +1 -1
  68. package/lib/packageVersion.d.ts +1 -1
  69. package/lib/packageVersion.js +1 -1
  70. package/lib/packageVersion.js.map +1 -1
  71. package/package.json +15 -15
  72. package/src/blobManager.ts +18 -46
  73. package/src/containerRuntime.ts +37 -15
  74. package/src/dataStoreContext.ts +23 -4
  75. package/src/dataStores.ts +1 -67
  76. package/src/deltaManagerProxyBase.ts +2 -2
  77. package/src/gc/garbageCollection.ts +39 -25
  78. package/src/gc/gcDefinitions.ts +8 -3
  79. package/src/gc/gcTelemetry.ts +102 -54
  80. package/src/packageVersion.ts +1 -1
@@ -120,6 +120,7 @@ exports.defaultRuntimeHeaderData = {
120
120
  wait: true,
121
121
  viaHandle: false,
122
122
  allowTombstone: false,
123
+ allowInactive: false,
123
124
  };
124
125
  /**
125
126
  * Available compression algorithms for op compression.
@@ -476,10 +477,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
476
477
  get gcTombstoneEnforcementAllowed() {
477
478
  return this.garbageCollector.tombstoneEnforcementAllowed;
478
479
  }
479
- /** If true, throw an error when a tombstone data store is retrieved */
480
- get gcThrowOnTombstoneLoad() {
481
- return this.garbageCollector.throwOnTombstoneLoad;
482
- }
483
480
  /** If true, throw an error when a tombstone data store is used. */
484
481
  get gcThrowOnTombstoneUsage() {
485
482
  return this.garbageCollector.throwOnTombstoneUsage;
@@ -946,6 +943,9 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
946
943
  if (typeof request.headers?.[exports.AllowTombstoneRequestHeaderKey] === "boolean") {
947
944
  headerData.allowTombstone = request.headers[exports.AllowTombstoneRequestHeaderKey];
948
945
  }
946
+ if (typeof request.headers?.[exports.AllowInactiveRequestHeaderKey] === "boolean") {
947
+ headerData.allowInactive = request.headers[exports.AllowInactiveRequestHeaderKey];
948
+ }
949
949
  // We allow Tombstone requests for sub-DataStore objects
950
950
  if (requestForChild) {
951
951
  headerData.allowTombstone = true;
@@ -953,12 +953,15 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
953
953
  await this.dataStores.waitIfPendingAlias(id);
954
954
  const internalId = this.internalId(id);
955
955
  const dataStoreContext = await this.dataStores.getDataStore(internalId, headerData);
956
- const dataStoreChannel = await dataStoreContext.realize();
957
956
  // Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
958
957
  // the same as GC nodes id.
959
958
  const urlWithoutQuery = (0, gc_1.trimLeadingAndTrailingSlashes)(request.url.split("?")[0]);
960
- this.garbageCollector.nodeUpdated(`/${urlWithoutQuery}`, "Loaded", undefined /* timestampMs */, dataStoreContext.packagePath, request?.headers);
961
- return dataStoreChannel;
959
+ // Get the initial snapshot details which contain the data store package path.
960
+ const details = await dataStoreContext.getInitialSnapshotDetails();
961
+ // Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
962
+ // is configured.
963
+ this.garbageCollector.nodeUpdated(`/${urlWithoutQuery}`, "Loaded", undefined /* timestampMs */, details.pkg, request, headerData);
964
+ return dataStoreContext.realize();
962
965
  }
963
966
  /** Adds the container's metadata to the given summary tree. */
964
967
  addMetadataToSummary(summaryTree) {
@@ -1462,6 +1465,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
1462
1465
  if (channel.entryPoint === undefined) {
1463
1466
  throw new telemetry_utils_1.UsageError("entryPoint must be defined on data store runtime for using getAliasedDataStoreEntryPoint");
1464
1467
  }
1468
+ this.garbageCollector.nodeUpdated(`/${internalId}`, "Loaded", undefined /* timestampMs */, context.packagePath);
1465
1469
  return channel.entryPoint;
1466
1470
  }
1467
1471
  createDetachedRootDataStore(pkg, rootDataStoreId) {
@@ -1548,15 +1552,22 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
1548
1552
  * Submits the signal to be sent to other clients.
1549
1553
  * @param type - Type of the signal.
1550
1554
  * @param content - Content of the signal.
1555
+ * @param targetClientId - When specified, the signal is only sent to the provided client id.
1551
1556
  */
1552
- submitSignal(type, content) {
1557
+ submitSignal(type, content, targetClientId) {
1553
1558
  this.verifyNotClosed();
1554
1559
  const envelope = this.createNewSignalEnvelope(undefined /* address */, type, content);
1555
- return this.submitSignalFn(envelope);
1560
+ return this.submitSignalFn(envelope, targetClientId);
1556
1561
  }
1557
- submitDataStoreSignal(address, type, content) {
1562
+ /**
1563
+ * Submits the signal to be sent to other clients.
1564
+ * @param type - Type of the signal.
1565
+ * @param content - Content of the signal.
1566
+ * @param targetClientId - When specified, the signal is only sent to the provided client id.
1567
+ */
1568
+ submitDataStoreSignal(address, type, content, targetClientId) {
1558
1569
  const envelope = this.createNewSignalEnvelope(address, type, content);
1559
- return this.submitSignalFn(envelope);
1570
+ return this.submitSignalFn(envelope, targetClientId);
1560
1571
  }
1561
1572
  setAttachState(attachState) {
1562
1573
  if (attachState === container_definitions_1.AttachState.Attaching) {