@fluidframework/container-runtime 2.0.0-internal.2.3.0 → 2.0.0-internal.2.3.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 (76) hide show
  1. package/dist/blobManager.d.ts +1 -1
  2. package/dist/blobManager.d.ts.map +1 -1
  3. package/dist/blobManager.js +8 -8
  4. package/dist/blobManager.js.map +1 -1
  5. package/dist/containerRuntime.d.ts +15 -0
  6. package/dist/containerRuntime.d.ts.map +1 -1
  7. package/dist/containerRuntime.js +26 -11
  8. package/dist/containerRuntime.js.map +1 -1
  9. package/dist/dataStoreContext.d.ts.map +1 -1
  10. package/dist/dataStoreContext.js +5 -8
  11. package/dist/dataStoreContext.js.map +1 -1
  12. package/dist/dataStores.d.ts +3 -3
  13. package/dist/dataStores.d.ts.map +1 -1
  14. package/dist/dataStores.js +14 -14
  15. package/dist/dataStores.js.map +1 -1
  16. package/dist/garbageCollection.d.ts.map +1 -1
  17. package/dist/garbageCollection.js +5 -4
  18. package/dist/garbageCollection.js.map +1 -1
  19. package/dist/garbageCollectionConstants.d.ts +1 -0
  20. package/dist/garbageCollectionConstants.d.ts.map +1 -1
  21. package/dist/garbageCollectionConstants.js +4 -2
  22. package/dist/garbageCollectionConstants.js.map +1 -1
  23. package/dist/garbageCollectionTombstoneUtils.d.ts +5 -4
  24. package/dist/garbageCollectionTombstoneUtils.d.ts.map +1 -1
  25. package/dist/garbageCollectionTombstoneUtils.js +8 -13
  26. package/dist/garbageCollectionTombstoneUtils.js.map +1 -1
  27. package/dist/index.d.ts +1 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +3 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/packageVersion.d.ts +1 -1
  32. package/dist/packageVersion.js +1 -1
  33. package/dist/packageVersion.js.map +1 -1
  34. package/lib/blobManager.d.ts +1 -1
  35. package/lib/blobManager.d.ts.map +1 -1
  36. package/lib/blobManager.js +9 -9
  37. package/lib/blobManager.js.map +1 -1
  38. package/lib/containerRuntime.d.ts +15 -0
  39. package/lib/containerRuntime.d.ts.map +1 -1
  40. package/lib/containerRuntime.js +25 -10
  41. package/lib/containerRuntime.js.map +1 -1
  42. package/lib/dataStoreContext.d.ts.map +1 -1
  43. package/lib/dataStoreContext.js +5 -8
  44. package/lib/dataStoreContext.js.map +1 -1
  45. package/lib/dataStores.d.ts +3 -3
  46. package/lib/dataStores.d.ts.map +1 -1
  47. package/lib/dataStores.js +15 -15
  48. package/lib/dataStores.js.map +1 -1
  49. package/lib/garbageCollection.d.ts.map +1 -1
  50. package/lib/garbageCollection.js +6 -5
  51. package/lib/garbageCollection.js.map +1 -1
  52. package/lib/garbageCollectionConstants.d.ts +1 -0
  53. package/lib/garbageCollectionConstants.d.ts.map +1 -1
  54. package/lib/garbageCollectionConstants.js +3 -1
  55. package/lib/garbageCollectionConstants.js.map +1 -1
  56. package/lib/garbageCollectionTombstoneUtils.d.ts +5 -4
  57. package/lib/garbageCollectionTombstoneUtils.d.ts.map +1 -1
  58. package/lib/garbageCollectionTombstoneUtils.js +9 -14
  59. package/lib/garbageCollectionTombstoneUtils.js.map +1 -1
  60. package/lib/index.d.ts +1 -1
  61. package/lib/index.d.ts.map +1 -1
  62. package/lib/index.js +1 -1
  63. package/lib/index.js.map +1 -1
  64. package/lib/packageVersion.d.ts +1 -1
  65. package/lib/packageVersion.js +1 -1
  66. package/lib/packageVersion.js.map +1 -1
  67. package/package.json +18 -35
  68. package/src/blobManager.ts +16 -11
  69. package/src/containerRuntime.ts +36 -8
  70. package/src/dataStoreContext.ts +13 -14
  71. package/src/dataStores.ts +25 -19
  72. package/src/garbageCollection.ts +12 -8
  73. package/src/garbageCollectionConstants.ts +3 -1
  74. package/src/garbageCollectionTombstoneUtils.ts +11 -14
  75. package/src/index.ts +2 -0
  76. package/src/packageVersion.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"garbageCollectionConstants.js","sourceRoot":"","sources":["../src/garbageCollectionConstants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAc,CAAC,CAAC;AAC5C,iDAAiD;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAc,CAAC,CAAC;AAE7C,wCAAwC;AACxC,MAAM,CAAC,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AACxD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,kCAAkC,CAAC;AAC9D,kDAAkD;AAClD,MAAM,CAAC,MAAM,aAAa,GAAG,oCAAoC,CAAC;AAClE,mEAAmE;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,0CAA0C,CAAC;AAC9E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,sCAAsC,CAAC;AACtE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,yCAAyC,CAAC;AAC5E,qHAAqH;AACrH,MAAM,CAAC,MAAM,mBAAmB,GAAG,0CAA0C,CAAC;AAC9E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,+CAA+C,CAAC;AACxF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,8CAA8C,CAAC;AAEtF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,SAAS;AAC/D,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,UAAU","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { GCVersion } from \"./summaryFormat\";\n\n/** The stable version of garbage collection in production. */\nexport const stableGCVersion: GCVersion = 1;\n/** The current version of garbage collection. */\nexport const currentGCVersion: GCVersion = 2;\n\n// Feature gate key to turn GC on / off.\nexport const runGCKey = \"Fluid.GarbageCollection.RunGC\";\n// Feature gate key to turn GC sweep on / off.\nexport const runSweepKey = \"Fluid.GarbageCollection.RunSweep\";\n// Feature gate key to turn GC test mode on / off.\nexport const gcTestModeKey = \"Fluid.GarbageCollection.GCTestMode\";\n// Feature gate key to expire a session after a set period of time.\nexport const runSessionExpiryKey = \"Fluid.GarbageCollection.RunSessionExpiry\";\n// Feature gate key to write the gc blob as a handle if the data is the same.\nexport const trackGCStateKey = \"Fluid.GarbageCollection.TrackGCState\";\n// Feature gate key to turn GC sweep log off.\nexport const disableSweepLogKey = \"Fluid.GarbageCollection.DisableSweepLog\";\n// Feature gate key to disable the tombstone feature, i.e., tombstone information is not read / written into summary.\nexport const disableTombstoneKey = \"Fluid.GarbageCollection.DisableTombstone\";\n// Feature gate to enable throwing an error when tombstone object is used.\nexport const throwOnTombstoneUsageKey = \"Fluid.GarbageCollection.ThrowOnTombstoneUsage\";\n// Feature gate to enable GC version upgrade.\nexport const gcVersionUpgradeToV2Key = \"Fluid.GarbageCollection.GCVersionUpgradeToV2\";\n\n// One day in milliseconds.\nexport const oneDayMs = 1 * 24 * 60 * 60 * 1000;\n\nexport const defaultInactiveTimeoutMs = 7 * oneDayMs; // 7 days\nexport const defaultSessionExpiryDurationMs = 30 * oneDayMs; // 30 days\n"]}
1
+ {"version":3,"file":"garbageCollectionConstants.js","sourceRoot":"","sources":["../src/garbageCollectionConstants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAc,CAAC,CAAC;AAC5C,iDAAiD;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAc,CAAC,CAAC;AAE7C,wCAAwC;AACxC,MAAM,CAAC,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AACxD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,kCAAkC,CAAC;AAC9D,kDAAkD;AAClD,MAAM,CAAC,MAAM,aAAa,GAAG,oCAAoC,CAAC;AAClE,mEAAmE;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,0CAA0C,CAAC;AAC9E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,sCAAsC,CAAC;AACtE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,yCAAyC,CAAC;AAC5E,qHAAqH;AACrH,MAAM,CAAC,MAAM,mBAAmB,GAAG,0CAA0C,CAAC;AAC9E,wFAAwF;AACxF,MAAM,CAAC,MAAM,uBAAuB,GAAG,8CAA8C,CAAC;AACtF,0GAA0G;AAC1G,MAAM,CAAC,MAAM,wBAAwB,GAAG,+CAA+C,CAAC;AACxF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,8CAA8C,CAAC;AAEtF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,SAAS;AAC/D,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,UAAU","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { GCVersion } from \"./summaryFormat\";\n\n/** The stable version of garbage collection in production. */\nexport const stableGCVersion: GCVersion = 1;\n/** The current version of garbage collection. */\nexport const currentGCVersion: GCVersion = 2;\n\n// Feature gate key to turn GC on / off.\nexport const runGCKey = \"Fluid.GarbageCollection.RunGC\";\n// Feature gate key to turn GC sweep on / off.\nexport const runSweepKey = \"Fluid.GarbageCollection.RunSweep\";\n// Feature gate key to turn GC test mode on / off.\nexport const gcTestModeKey = \"Fluid.GarbageCollection.GCTestMode\";\n// Feature gate key to expire a session after a set period of time.\nexport const runSessionExpiryKey = \"Fluid.GarbageCollection.RunSessionExpiry\";\n// Feature gate key to write the gc blob as a handle if the data is the same.\nexport const trackGCStateKey = \"Fluid.GarbageCollection.TrackGCState\";\n// Feature gate key to turn GC sweep log off.\nexport const disableSweepLogKey = \"Fluid.GarbageCollection.DisableSweepLog\";\n// Feature gate key to disable the tombstone feature, i.e., tombstone information is not read / written into summary.\nexport const disableTombstoneKey = \"Fluid.GarbageCollection.DisableTombstone\";\n// Feature gate to enable throwing an error when tombstone object is loaded (requested).\nexport const throwOnTombstoneLoadKey = \"Fluid.GarbageCollection.ThrowOnTombstoneLoad\";\n// Feature gate to enable throwing an error when tombstone object is used (e.g. outgoing or incoming ops).\nexport const throwOnTombstoneUsageKey = \"Fluid.GarbageCollection.ThrowOnTombstoneUsage\";\n// Feature gate to enable GC version upgrade.\nexport const gcVersionUpgradeToV2Key = \"Fluid.GarbageCollection.GCVersionUpgradeToV2\";\n\n// One day in milliseconds.\nexport const oneDayMs = 1 * 24 * 60 * 60 * 1000;\n\nexport const defaultInactiveTimeoutMs = 7 * oneDayMs; // 7 days\nexport const defaultSessionExpiryDurationMs = 30 * oneDayMs; // 30 days\n"]}
@@ -5,9 +5,10 @@
5
5
  import { ITelemetryGenericEvent } from "@fluidframework/common-definitions";
6
6
  import { MonitoringContext } from "@fluidframework/telemetry-utils";
7
7
  /**
8
- * Decides whether or not to send an error event or a generic event for gc tombstone scenarios
9
- *
10
- * Adds isSummarizerClient, packagePath, and error to telemetry properties.
8
+ * Consolidates info / logic for logging when we encounter a Tombstone
11
9
  */
12
- export declare function sendGCTombstoneEvent(mc: MonitoringContext, event: ITelemetryGenericEvent, isSummarizerClient: boolean, packagePath: readonly string[] | undefined, error?: any): void;
10
+ export declare function sendGCTombstoneEvent(mc: MonitoringContext, event: ITelemetryGenericEvent & {
11
+ category: "error" | "generic";
12
+ isSummarizerClient: boolean;
13
+ }, packagePath: readonly string[] | undefined, error?: unknown): void;
13
14
  //# sourceMappingURL=garbageCollectionTombstoneUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"garbageCollectionTombstoneUtils.d.ts","sourceRoot":"","sources":["../src/garbageCollectionTombstoneUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAChC,EAAE,EAAE,iBAAiB,EACrB,KAAK,EAAE,sBAAsB,EAC7B,kBAAkB,EAAE,OAAO,EAC3B,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAC1C,KAAK,CAAC,EAAE,GAAG,QAUd"}
1
+ {"version":3,"file":"garbageCollectionTombstoneUtils.d.ts","sourceRoot":"","sources":["../src/garbageCollectionTombstoneUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,EAAE,EAAE,iBAAiB,EACrB,KAAK,EAAE,sBAAsB,GAAG;IAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,kBAAkB,EAAE,OAAO,CAAA;CAAE,EAC9F,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAC1C,KAAK,CAAC,EAAE,OAAO,QAUlB"}
@@ -3,22 +3,17 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { packagePathToTelemetryProperty } from "@fluidframework/runtime-utils";
6
- import { throwOnTombstoneUsageKey } from "./garbageCollectionConstants";
6
+ import { disableTombstoneKey, throwOnTombstoneLoadKey, throwOnTombstoneUsageKey } from "./garbageCollectionConstants";
7
7
  /**
8
- * Decides whether or not to send an error event or a generic event for gc tombstone scenarios
9
- *
10
- * Adds isSummarizerClient, packagePath, and error to telemetry properties.
8
+ * Consolidates info / logic for logging when we encounter a Tombstone
11
9
  */
12
- export function sendGCTombstoneEvent(mc, event, isSummarizerClient, packagePath, error) {
13
- var _a;
14
- const throwOnTombstoneUsage = event.throwOnTombstoneUsage = (_a = mc.config.getBoolean(throwOnTombstoneUsageKey)) !== null && _a !== void 0 ? _a : false;
10
+ export function sendGCTombstoneEvent(mc, event, packagePath, error) {
15
11
  event.pkg = packagePathToTelemetryProperty(packagePath);
16
- event.isSummarizerClient = isSummarizerClient;
17
- if (throwOnTombstoneUsage) {
18
- mc.logger.sendErrorEvent(event, error);
19
- }
20
- else {
21
- mc.logger.sendTelemetryEvent(event, error);
22
- }
12
+ event.tombstoneFlags = JSON.stringify({
13
+ DisableTombstone: mc.config.getBoolean(disableTombstoneKey),
14
+ ThrowOnTombstoneUsage: mc.config.getBoolean(throwOnTombstoneUsageKey),
15
+ ThrowOnTombstoneLoad: mc.config.getBoolean(throwOnTombstoneLoadKey),
16
+ });
17
+ mc.logger.sendTelemetryEvent(event, error);
23
18
  }
24
19
  //# sourceMappingURL=garbageCollectionTombstoneUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"garbageCollectionTombstoneUtils.js","sourceRoot":"","sources":["../src/garbageCollectionTombstoneUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAE/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAChC,EAAqB,EACrB,KAA6B,EAC7B,kBAA2B,EAC3B,WAA0C,EAC1C,KAAW;;IAEX,MAAM,qBAAqB,GAAG,KAAK,CAAC,qBAAqB,GAAG,MAAA,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,mCAAI,KAAK,CAAC;IACpH,KAAK,CAAC,GAAG,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAC;IACxD,KAAK,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC9C,IAAG,qBAAqB,EAAE;QACtB,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KAC1C;SAAM;QACH,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KAC9C;AACL,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryGenericEvent } from \"@fluidframework/common-definitions\";\nimport { packagePathToTelemetryProperty } from \"@fluidframework/runtime-utils\";\nimport { MonitoringContext } from \"@fluidframework/telemetry-utils\";\nimport { throwOnTombstoneUsageKey } from \"./garbageCollectionConstants\";\n\n/**\n * Decides whether or not to send an error event or a generic event for gc tombstone scenarios\n *\n * Adds isSummarizerClient, packagePath, and error to telemetry properties.\n */\nexport function sendGCTombstoneEvent(\n mc: MonitoringContext,\n event: ITelemetryGenericEvent,\n isSummarizerClient: boolean,\n packagePath: readonly string[] | undefined,\n error?: any,\n) {\n const throwOnTombstoneUsage = event.throwOnTombstoneUsage = mc.config.getBoolean(throwOnTombstoneUsageKey) ?? false;\n event.pkg = packagePathToTelemetryProperty(packagePath);\n event.isSummarizerClient = isSummarizerClient;\n if(throwOnTombstoneUsage) {\n mc.logger.sendErrorEvent(event, error);\n } else {\n mc.logger.sendTelemetryEvent(event, error);\n }\n}\n"]}
1
+ {"version":3,"file":"garbageCollectionTombstoneUtils.js","sourceRoot":"","sources":["../src/garbageCollectionTombstoneUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAE/E,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAEtH;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAChC,EAAqB,EACrB,KAA8F,EAC9F,WAA0C,EAC1C,KAAe;IAEf,KAAK,CAAC,GAAG,GAAG,8BAA8B,CAAC,WAAW,CAAC,CAAC;IACxD,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;QAClC,gBAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAC3D,qBAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC;QACrE,oBAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,uBAAuB,CAAC;KACtE,CAAC,CAAC;IAEH,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryGenericEvent } from \"@fluidframework/common-definitions\";\nimport { packagePathToTelemetryProperty } from \"@fluidframework/runtime-utils\";\nimport { MonitoringContext } from \"@fluidframework/telemetry-utils\";\nimport { disableTombstoneKey, throwOnTombstoneLoadKey, throwOnTombstoneUsageKey } from \"./garbageCollectionConstants\";\n\n/**\n * Consolidates info / logic for logging when we encounter a Tombstone\n */\nexport function sendGCTombstoneEvent(\n mc: MonitoringContext,\n event: ITelemetryGenericEvent & { category: \"error\" | \"generic\", isSummarizerClient: boolean },\n packagePath: readonly string[] | undefined,\n error?: unknown,\n) {\n event.pkg = packagePathToTelemetryProperty(packagePath);\n event.tombstoneFlags = JSON.stringify({\n DisableTombstone: mc.config.getBoolean(disableTombstoneKey),\n ThrowOnTombstoneUsage: mc.config.getBoolean(throwOnTombstoneUsageKey),\n ThrowOnTombstoneLoad: mc.config.getBoolean(throwOnTombstoneLoadKey),\n });\n\n mc.logger.sendTelemetryEvent(event, error);\n}\n"]}
package/lib/index.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export { ContainerMessageType, ContainerRuntimeMessage, IGCRuntimeOptions, ISummaryRuntimeOptions, ISummaryBaseConfiguration, ISummaryConfigurationHeuristics, ISummaryConfigurationDisableSummarizer, ISummaryConfigurationDisableHeuristics, IContainerRuntimeOptions, IRootSummaryTreeWithStats, isRuntimeMessage, RuntimeMessage, agentSchedulerId, ContainerRuntime, RuntimeHeaders, ISummaryConfiguration, DefaultSummaryConfiguration, ICompressionRuntimeOptions, CompressionAlgorithms, } from "./containerRuntime";
5
+ export { ContainerMessageType, ContainerRuntimeMessage, IGCRuntimeOptions, ISummaryRuntimeOptions, ISummaryBaseConfiguration, ISummaryConfigurationHeuristics, ISummaryConfigurationDisableSummarizer, ISummaryConfigurationDisableHeuristics, IContainerRuntimeOptions, IRootSummaryTreeWithStats, isRuntimeMessage, RuntimeMessage, agentSchedulerId, ContainerRuntime, RuntimeHeaders, AllowTombstoneRequestHeaderKey, TombstoneResponseHeaderKey, ISummaryConfiguration, DefaultSummaryConfiguration, ICompressionRuntimeOptions, CompressionAlgorithms, } from "./containerRuntime";
6
6
  export { FluidDataStoreRegistry } from "./dataStoreRegistry";
7
7
  export { IGCStats, } from "./garbageCollection";
8
8
  export { IPendingFlush, IPendingLocalState, IPendingMessage, IPendingState, } from "./pendingStateManager";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,+BAA+B,EAC/B,sCAAsC,EACtC,sCAAsC,EACtC,wBAAwB,EACxB,yBAAyB,EACzB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,qBAAqB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACH,QAAQ,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,aAAa,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACH,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,4BAA4B,EAC5B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,aAAa,EACb,qBAAqB,EACrB,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gCAAgC,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,+BAA+B,EAC/B,sCAAsC,EACtC,sCAAsC,EACtC,wBAAwB,EACxB,yBAAyB,EACzB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,EACrB,2BAA2B,EAC3B,0BAA0B,EAC1B,qBAAqB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACH,QAAQ,GACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,aAAa,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACH,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,4BAA4B,EAC5B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,aAAa,EACb,qBAAqB,EACrB,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gCAAgC,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export { ContainerMessageType, isRuntimeMessage, RuntimeMessage, agentSchedulerId, ContainerRuntime, RuntimeHeaders, DefaultSummaryConfiguration, CompressionAlgorithms, } from "./containerRuntime";
5
+ export { ContainerMessageType, isRuntimeMessage, RuntimeMessage, agentSchedulerId, ContainerRuntime, RuntimeHeaders, AllowTombstoneRequestHeaderKey, TombstoneResponseHeaderKey, DefaultSummaryConfiguration, CompressionAlgorithms, } from "./containerRuntime";
6
6
  export { FluidDataStoreRegistry } from "./dataStoreRegistry";
7
7
  export { Summarizer } from "./summarizer";
8
8
  export { ISummarizer, } from "./summarizerTypes";
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,oBAAoB,EAUpB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EAEd,2BAA2B,EAE3B,qBAAqB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAU7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAkBH,WAAW,GAUd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAUH,iBAAiB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAoC,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC9G,OAAO,EAAc,oBAAoB,EAAE,MAAM,eAAe,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n ContainerMessageType,\n ContainerRuntimeMessage,\n IGCRuntimeOptions,\n ISummaryRuntimeOptions,\n ISummaryBaseConfiguration,\n ISummaryConfigurationHeuristics,\n ISummaryConfigurationDisableSummarizer,\n ISummaryConfigurationDisableHeuristics,\n IContainerRuntimeOptions,\n IRootSummaryTreeWithStats,\n isRuntimeMessage,\n RuntimeMessage,\n agentSchedulerId,\n ContainerRuntime,\n RuntimeHeaders,\n ISummaryConfiguration,\n DefaultSummaryConfiguration,\n ICompressionRuntimeOptions,\n CompressionAlgorithms,\n} from \"./containerRuntime\";\nexport { FluidDataStoreRegistry } from \"./dataStoreRegistry\";\nexport {\n IGCStats,\n} from \"./garbageCollection\";\nexport {\n IPendingFlush,\n IPendingLocalState,\n IPendingMessage,\n IPendingState,\n} from \"./pendingStateManager\";\nexport { Summarizer } from \"./summarizer\";\nexport {\n EnqueueSummarizeResult,\n IAckSummaryResult,\n IBaseSummarizeResult,\n IBroadcastSummaryResult,\n ICancellationToken,\n IConnectableRuntime,\n IEnqueueSummarizeOptions,\n IGenerateSummaryTreeResult,\n IGeneratedSummaryStats,\n INackSummaryResult,\n IOnDemandSummarizeOptions,\n IProvideSummarizer,\n IRefreshSummaryAckOptions,\n ISubmitSummaryOpResult,\n ISubmitSummaryOptions,\n ISummarizeOptions,\n ISummarizeResults,\n ISummarizer,\n ISummarizerEvents,\n ISummarizerInternalsProvider,\n ISummarizerRuntime,\n ISummarizingWarning,\n ISummaryCancellationToken,\n IUploadSummaryResult,\n SubmitSummaryResult,\n SummarizeResultPart,\n SummarizerStopReason,\n} from \"./summarizerTypes\";\nexport {\n IAckedSummary,\n IClientSummaryWatcher,\n ISummary,\n ISummaryCollectionOpEvents,\n ISummaryAckMessage,\n ISummaryNackMessage,\n ISummaryOpMessage,\n OpActionEventListener,\n OpActionEventName,\n SummaryCollection,\n} from \"./summaryCollection\";\nexport { ICancellableSummarizerController, neverCancelledSummaryToken } from \"./runWhileConnectedCoordinator\";\nexport { IChunkedOp, unpackRuntimeMessage } from \"./opLifecycle\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,oBAAoB,EAUpB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,8BAA8B,EAC9B,0BAA0B,EAE1B,2BAA2B,EAE3B,qBAAqB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAU7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAkBH,WAAW,GAUd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAUH,iBAAiB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAoC,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC9G,OAAO,EAAc,oBAAoB,EAAE,MAAM,eAAe,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n ContainerMessageType,\n ContainerRuntimeMessage,\n IGCRuntimeOptions,\n ISummaryRuntimeOptions,\n ISummaryBaseConfiguration,\n ISummaryConfigurationHeuristics,\n ISummaryConfigurationDisableSummarizer,\n ISummaryConfigurationDisableHeuristics,\n IContainerRuntimeOptions,\n IRootSummaryTreeWithStats,\n isRuntimeMessage,\n RuntimeMessage,\n agentSchedulerId,\n ContainerRuntime,\n RuntimeHeaders,\n AllowTombstoneRequestHeaderKey,\n TombstoneResponseHeaderKey,\n ISummaryConfiguration,\n DefaultSummaryConfiguration,\n ICompressionRuntimeOptions,\n CompressionAlgorithms,\n} from \"./containerRuntime\";\nexport { FluidDataStoreRegistry } from \"./dataStoreRegistry\";\nexport {\n IGCStats,\n} from \"./garbageCollection\";\nexport {\n IPendingFlush,\n IPendingLocalState,\n IPendingMessage,\n IPendingState,\n} from \"./pendingStateManager\";\nexport { Summarizer } from \"./summarizer\";\nexport {\n EnqueueSummarizeResult,\n IAckSummaryResult,\n IBaseSummarizeResult,\n IBroadcastSummaryResult,\n ICancellationToken,\n IConnectableRuntime,\n IEnqueueSummarizeOptions,\n IGenerateSummaryTreeResult,\n IGeneratedSummaryStats,\n INackSummaryResult,\n IOnDemandSummarizeOptions,\n IProvideSummarizer,\n IRefreshSummaryAckOptions,\n ISubmitSummaryOpResult,\n ISubmitSummaryOptions,\n ISummarizeOptions,\n ISummarizeResults,\n ISummarizer,\n ISummarizerEvents,\n ISummarizerInternalsProvider,\n ISummarizerRuntime,\n ISummarizingWarning,\n ISummaryCancellationToken,\n IUploadSummaryResult,\n SubmitSummaryResult,\n SummarizeResultPart,\n SummarizerStopReason,\n} from \"./summarizerTypes\";\nexport {\n IAckedSummary,\n IClientSummaryWatcher,\n ISummary,\n ISummaryCollectionOpEvents,\n ISummaryAckMessage,\n ISummaryNackMessage,\n ISummaryOpMessage,\n OpActionEventListener,\n OpActionEventName,\n SummaryCollection,\n} from \"./summaryCollection\";\nexport { ICancellableSummarizerController, neverCancelledSummaryToken } from \"./runWhileConnectedCoordinator\";\nexport { IChunkedOp, unpackRuntimeMessage } from \"./opLifecycle\";\n"]}
@@ -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-internal.2.3.0";
8
+ export declare const pkgVersion = "2.0.0-internal.2.3.1";
9
9
  //# sourceMappingURL=packageVersion.d.ts.map
@@ -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-internal.2.3.0";
8
+ export const pkgVersion = "2.0.0-internal.2.3.1";
9
9
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,mCAAmC,CAAC;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,sBAAsB,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-internal.2.3.0\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,mCAAmC,CAAC;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,sBAAsB,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-internal.2.3.1\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/container-runtime",
3
- "version": "2.0.0-internal.2.3.0",
3
+ "version": "2.0.0-internal.2.3.1",
4
4
  "description": "Fluid container runtime",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -65,19 +65,19 @@
65
65
  "dependencies": {
66
66
  "@fluidframework/common-definitions": "^0.20.1",
67
67
  "@fluidframework/common-utils": "^1.0.0",
68
- "@fluidframework/container-definitions": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
69
- "@fluidframework/container-runtime-definitions": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
70
- "@fluidframework/container-utils": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
71
- "@fluidframework/core-interfaces": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
72
- "@fluidframework/datastore": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
73
- "@fluidframework/driver-definitions": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
74
- "@fluidframework/driver-utils": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
75
- "@fluidframework/garbage-collector": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
68
+ "@fluidframework/container-definitions": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
69
+ "@fluidframework/container-runtime-definitions": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
70
+ "@fluidframework/container-utils": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
71
+ "@fluidframework/core-interfaces": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
72
+ "@fluidframework/datastore": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
73
+ "@fluidframework/driver-definitions": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
74
+ "@fluidframework/driver-utils": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
75
+ "@fluidframework/garbage-collector": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
76
76
  "@fluidframework/protocol-base": "^0.1038.2000",
77
77
  "@fluidframework/protocol-definitions": "^1.1.0",
78
- "@fluidframework/runtime-definitions": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
79
- "@fluidframework/runtime-utils": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
80
- "@fluidframework/telemetry-utils": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
78
+ "@fluidframework/runtime-definitions": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
79
+ "@fluidframework/runtime-utils": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
80
+ "@fluidframework/telemetry-utils": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
81
81
  "double-ended-queue": "^2.1.0-0",
82
82
  "events": "^3.1.0",
83
83
  "lz4js": "^0.2.0",
@@ -87,10 +87,10 @@
87
87
  "@fluid-tools/build-cli": "^0.7.0",
88
88
  "@fluidframework/build-common": "^1.1.0",
89
89
  "@fluidframework/build-tools": "^0.7.0",
90
- "@fluidframework/container-runtime-previous": "npm:@fluidframework/container-runtime@2.0.0-internal.2.2.0",
90
+ "@fluidframework/container-runtime-previous": "npm:@fluidframework/container-runtime@2.0.0-internal.2.3.0",
91
91
  "@fluidframework/eslint-config-fluid": "^2.0.0",
92
- "@fluidframework/mocha-test-setup": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
93
- "@fluidframework/test-runtime-utils": ">=2.0.0-internal.2.3.0 <2.0.0-internal.3.0.0",
92
+ "@fluidframework/mocha-test-setup": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
93
+ "@fluidframework/test-runtime-utils": ">=2.0.0-internal.2.3.1 <2.0.0-internal.3.0.0",
94
94
  "@microsoft/api-extractor": "^7.22.2",
95
95
  "@rushstack/eslint-config": "^2.5.1",
96
96
  "@types/double-ended-queue": "^2.1.0",
@@ -109,25 +109,8 @@
109
109
  "typescript": "~4.5.5"
110
110
  },
111
111
  "typeValidation": {
112
- "version": "2.0.0-internal.2.3.0",
113
- "baselineRange": ">=2.0.0-internal.2.2.0 <2.0.0-internal.2.3.0",
114
- "baselineVersion": "2.0.0-internal.2.2.0",
115
- "broken": {
116
- "RemovedVariableDeclaration_gcBlobPrefix": {
117
- "forwardCompat": false,
118
- "backCompat": false
119
- },
120
- "RemovedVariableDeclaration_gcTombstoneBlobKey": {
121
- "forwardCompat": false,
122
- "backCompat": false
123
- },
124
- "RemovedVariableDeclaration_gcTreeKey": {
125
- "forwardCompat": false,
126
- "backCompat": false
127
- },
128
- "ClassDeclaration_ContainerRuntime": {
129
- "forwardCompat": false
130
- }
131
- }
112
+ "version": "2.0.0-internal.2.3.1",
113
+ "baselineRange": "2.0.0-internal.2.3.0",
114
+ "broken": {}
132
115
  }
133
116
  }
@@ -24,7 +24,7 @@ import {
24
24
  } from "@fluidframework/runtime-definitions";
25
25
  import { Throttler, formExponentialFn, IThrottler } from "./throttler";
26
26
  import { summarizerClientType } from "./summarizerClientElection";
27
- import { throwOnTombstoneUsageKey } from "./garbageCollectionConstants";
27
+ import { throwOnTombstoneLoadKey } from "./garbageCollectionConstants";
28
28
  import { sendGCTombstoneEvent } from "./garbageCollectionTombstoneUtils";
29
29
 
30
30
  /**
@@ -151,7 +151,7 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
151
151
  ));
152
152
 
153
153
  /** If true, throw an error when a tombstone attachment blob is retrieved. */
154
- private readonly throwOnTombstoneUsage: boolean;
154
+ private readonly throwOnTombstoneLoad: boolean;
155
155
  /**
156
156
  * This stores IDs of tombstoned blobs.
157
157
  * Tombstone is a temporary feature that imitates a blob getting swept by garbage collection.
@@ -183,8 +183,8 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
183
183
  super();
184
184
  this.mc = loggerToMonitoringContext(ChildLogger.create(this.runtime.logger, "BlobManager"));
185
185
  // Read the feature flag that tells whether to throw when a tombstone blob is requested.
186
- this.throwOnTombstoneUsage =
187
- this.mc.config.getBoolean(throwOnTombstoneUsageKey) === true &&
186
+ this.throwOnTombstoneLoad =
187
+ this.mc.config.getBoolean(throwOnTombstoneLoadKey) === true &&
188
188
  this.runtime.clientDetails.type !== summarizerClientType;
189
189
 
190
190
  this.runtime.on("disconnected", () => this.onDisconnected());
@@ -274,13 +274,18 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
274
274
  public async getBlob(blobId: string): Promise<ArrayBufferLike> {
275
275
  const request = { url: blobId };
276
276
  if (this.tombstonedBlobs.has(blobId) ) {
277
- const error = responseToException(createResponseError(404, "Blob removed by gc", request), request);
278
- const event = {
279
- eventName: "GC_Tombstone_Blob_Requested",
280
- url: request.url,
281
- };
282
- sendGCTombstoneEvent(this.mc, event, this.runtime.clientDetails.type === summarizerClientType, [BlobManager.basePath], error);
283
- if (this.throwOnTombstoneUsage) {
277
+ const error = responseToException(createResponseError(404, "Blob was deleted", request), request);
278
+ sendGCTombstoneEvent(
279
+ this.mc,
280
+ {
281
+ eventName: "GC_Tombstone_Blob_Requested",
282
+ category: this.throwOnTombstoneLoad ? "error" : "generic",
283
+ isSummarizerClient: this.runtime.clientDetails.type === summarizerClientType,
284
+ },
285
+ [BlobManager.basePath],
286
+ error,
287
+ );
288
+ if (this.throwOnTombstoneLoad) {
284
289
  throw error;
285
290
  }
286
291
  }
@@ -524,6 +524,30 @@ export enum RuntimeHeaders {
524
524
  viaHandle = "viaHandle",
525
525
  }
526
526
 
527
+ /** True if a tombstoned object should be returned without erroring */
528
+ export const AllowTombstoneRequestHeaderKey = "allowTombstone"; // Belongs in the enum above, but avoiding the breaking change
529
+
530
+ /** Tombstone error responses will have this header set to true */
531
+ export const TombstoneResponseHeaderKey = "isTombstoned"
532
+
533
+ /**
534
+ * The full set of parsed header data that may be found on Runtime requests
535
+ */
536
+ export interface RuntimeHeaderData {
537
+ wait?: boolean;
538
+ externalRequest?: boolean;
539
+ viaHandle?: boolean;
540
+ allowTombstone?: boolean;
541
+ }
542
+
543
+ /** Default values for Runtime Headers */
544
+ export const defaultRuntimeHeaderData: Required<RuntimeHeaderData> = {
545
+ wait: true,
546
+ externalRequest: false,
547
+ viaHandle: false,
548
+ allowTombstone: false,
549
+ }
550
+
527
551
  /**
528
552
  * Available compression algorithms for op compression.
529
553
  */
@@ -1460,16 +1484,20 @@ export class ContainerRuntime extends TypedEventEmitter<IContainerRuntimeEvents>
1460
1484
  }
1461
1485
 
1462
1486
  private async getDataStoreFromRequest(id: string, request: IRequest): Promise<IFluidRouter> {
1463
- const wait = typeof request.headers?.[RuntimeHeaders.wait] === "boolean"
1464
- ? request.headers?.[RuntimeHeaders.wait]
1465
- : true;
1466
- const viaHandle = typeof request.headers?.[RuntimeHeaders.viaHandle] === "boolean"
1467
- ? request.headers?.[RuntimeHeaders.viaHandle]
1468
- : false;
1487
+ const headerData: RuntimeHeaderData = {};
1488
+ if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
1489
+ headerData.wait = request.headers[RuntimeHeaders.wait];
1490
+ }
1491
+ if (typeof request.headers?.[RuntimeHeaders.viaHandle] === "boolean") {
1492
+ headerData.viaHandle = request.headers[RuntimeHeaders.viaHandle];
1493
+ }
1494
+ if (typeof request.headers?.[AllowTombstoneRequestHeaderKey] === "boolean") {
1495
+ headerData.allowTombstone = request.headers[AllowTombstoneRequestHeaderKey];
1496
+ }
1469
1497
 
1470
1498
  await this.dataStores.waitIfPendingAlias(id);
1471
1499
  const internalId = this.internalId(id);
1472
- const dataStoreContext = await this.dataStores.getDataStore(internalId, wait, viaHandle);
1500
+ const dataStoreContext = await this.dataStores.getDataStore(internalId, headerData);
1473
1501
 
1474
1502
  /**
1475
1503
  * If GC should run and this an external app request with "externalRequest" header, we need to return
@@ -1860,7 +1888,7 @@ export class ContainerRuntime extends TypedEventEmitter<IContainerRuntimeEvents>
1860
1888
  private async getRootDataStoreChannel(id: string, wait = true): Promise<IFluidDataStoreChannel> {
1861
1889
  await this.dataStores.waitIfPendingAlias(id);
1862
1890
  const internalId = this.internalId(id);
1863
- const context = await this.dataStores.getDataStore(internalId, wait, false /* viaHandle */);
1891
+ const context = await this.dataStores.getDataStore(internalId, { wait });
1864
1892
  assert(await context.isRoot(), 0x12b /* "did not get root data store" */);
1865
1893
  return context.realize();
1866
1894
  }
@@ -775,20 +775,19 @@ export abstract class FluidDataStoreContext extends TypedEventEmitter<IFluidData
775
775
 
776
776
  if (checkTombstone && this.tombstoned) {
777
777
  const messageString = `Context is tombstoned! Call site [${callSite}]`;
778
- const error = new DataCorruptionError(messageString, {
779
- errorMessage: messageString,
780
- ...safeTelemetryProps,
781
- });
782
-
783
- // Always log an error when tombstoned data store is used. However, throw an error only if
784
- // throwOnTombstoneUsage is set.
785
- const event = {
786
- eventName: "GC_Tombstone_DataStore_Changed",
787
- callSite,
788
- };
789
- sendGCTombstoneEvent(this.mc, event, this.clientDetails.type === summarizerClientType, this.pkg, error);
790
- // Always log an error when tombstoned data store is used. However, throw an error only if
791
- // throwOnTombstoneUsage is set and the client is not a summarizer.
778
+ const error = new DataCorruptionError(messageString, safeTelemetryProps);
779
+
780
+ sendGCTombstoneEvent(
781
+ this.mc,
782
+ {
783
+ eventName: "GC_Tombstone_DataStore_Changed",
784
+ category: this.throwOnTombstoneUsage ? "error" : "generic",
785
+ isSummarizerClient: this.clientDetails.type === summarizerClientType,
786
+ callSite,
787
+ },
788
+ this.pkg,
789
+ error,
790
+ );
792
791
  if (this.throwOnTombstoneUsage) {
793
792
  throw error;
794
793
  }
package/src/dataStores.ts CHANGED
@@ -43,7 +43,7 @@ import { assert, Lazy, LazyPromise } from "@fluidframework/common-utils";
43
43
  import { v4 as uuid } from "uuid";
44
44
  import { GCDataBuilder, unpackChildNodesGCDetails, unpackChildNodesUsedRoutes } from "@fluidframework/garbage-collector";
45
45
  import { DataStoreContexts } from "./dataStoreContexts";
46
- import { ContainerRuntime } from "./containerRuntime";
46
+ import { ContainerRuntime, defaultRuntimeHeaderData, RuntimeHeaderData, TombstoneResponseHeaderKey } from "./containerRuntime";
47
47
  import {
48
48
  FluidDataStoreContext,
49
49
  RemoteFluidDataStoreContext,
@@ -54,7 +54,7 @@ import {
54
54
  import { IContainerRuntimeMetadata, nonDataStorePaths, rootHasIsolatedChannels } from "./summaryFormat";
55
55
  import { IDataStoreAliasMessage, isDataStoreAliasMessage } from "./dataStore";
56
56
  import { GCNodeType } from "./garbageCollection";
57
- import { throwOnTombstoneUsageKey } from "./garbageCollectionConstants";
57
+ import { throwOnTombstoneLoadKey } from "./garbageCollectionConstants";
58
58
  import { summarizerClientType } from "./summarizerClientElection";
59
59
  import { sendGCTombstoneEvent } from "./garbageCollectionTombstoneUtils";
60
60
 
@@ -85,7 +85,7 @@ export class DataStores implements IDisposable {
85
85
  // root data stores that are added.
86
86
  private dataStoresSinceLastGC: string[] = [];
87
87
  /** If true, throw an error when a tombstone data store is retrieved. */
88
- private readonly throwOnTombstoneUsage: boolean;
88
+ private readonly throwOnTombstoneLoad: boolean;
89
89
  // The handle to the container runtime. This is used mainly for GC purposes to represent outbound reference from
90
90
  // the container runtime to other nodes.
91
91
  private readonly containerRuntimeHandle: IFluidHandle;
@@ -118,8 +118,8 @@ export class DataStores implements IDisposable {
118
118
  return baseGCDetails.get(dataStoreId);
119
119
  };
120
120
  // Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
121
- this.throwOnTombstoneUsage =
122
- this.mc.config.getBoolean(throwOnTombstoneUsageKey) === true &&
121
+ this.throwOnTombstoneLoad =
122
+ this.mc.config.getBoolean(throwOnTombstoneLoadKey) === true &&
123
123
  this.runtime.clientDetails.type !== summarizerClientType;
124
124
 
125
125
  // Extract stores stored inside the snapshot
@@ -430,8 +430,10 @@ export class DataStores implements IDisposable {
430
430
  );
431
431
  }
432
432
 
433
- public async getDataStore(id: string, wait: boolean, viaHandle: boolean): Promise<FluidDataStoreContext> {
434
- const context = await this.contexts.getBoundOrRemoted(id, wait);
433
+ public async getDataStore(id: string, requestHeaderData: RuntimeHeaderData): Promise<FluidDataStoreContext> {
434
+ const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
435
+
436
+ const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
435
437
  const request = { url: id };
436
438
  if (context === undefined) {
437
439
  // The requested data store does not exits. Throw a 404 response exception.
@@ -439,24 +441,28 @@ export class DataStores implements IDisposable {
439
441
  }
440
442
 
441
443
  if (context.tombstoned) {
444
+ const shouldFail = this.throwOnTombstoneLoad && !headerData.allowTombstone;
445
+
442
446
  // The requested data store is removed by gc. Create a 404 gc response exception.
443
- const error = responseToException(createResponseError(404, "Datastore removed by gc", request), request);
444
- // Note: if a user writes a request to look like it's viaHandle, we will also send this telemetry event
445
- const event = {
446
- eventName: "GC_Tombstone_DataStore_Requested",
447
- url: request.url,
448
- viaHandle,
449
- };
447
+ const error = responseToException(createResponseError(
448
+ 404,
449
+ "DataStore was deleted",
450
+ request,
451
+ { [TombstoneResponseHeaderKey]: true },
452
+ ), request);
450
453
  sendGCTombstoneEvent(
451
454
  this.mc,
452
- event,
453
- this.runtime.clientDetails.type === summarizerClientType,
455
+ {
456
+ eventName: "GC_Tombstone_DataStore_Requested",
457
+ category: shouldFail ? "error" : "generic",
458
+ isSummarizerClient: this.runtime.clientDetails.type === summarizerClientType,
459
+ headers: JSON.stringify(requestHeaderData),
460
+ },
454
461
  context.isLoaded ? context.packagePath : undefined,
455
462
  error,
456
463
  );
457
- // Always log an error when tombstoned data store is used. However, throw an error only if
458
- // throwOnTombstoneUsage is set.
459
- if (this.throwOnTombstoneUsage) {
464
+
465
+ if (shouldFail) {
460
466
  throw error;
461
467
  }
462
468
  }
@@ -62,9 +62,9 @@ import {
62
62
  runSessionExpiryKey,
63
63
  runSweepKey,
64
64
  stableGCVersion,
65
- throwOnTombstoneUsageKey,
66
65
  trackGCStateKey
67
66
  } from "./garbageCollectionConstants";
67
+ import { sendGCTombstoneEvent } from "./garbageCollectionTombstoneUtils";
68
68
  import { SweepReadyUsageDetectionHandler } from "./gcSweepReadyUsageDetection";
69
69
  import {
70
70
  getGCVersion,
@@ -1243,13 +1243,17 @@ export class GarbageCollector implements IGarbageCollector {
1243
1243
  eventName = "GC_Tombstone_Blob_Revived";
1244
1244
  }
1245
1245
 
1246
- this.mc.logger.sendTelemetryEvent({
1247
- eventName,
1248
- isSummarizerClient: this.isSummarizerClient,
1249
- url: trimLeadingSlashes(toNodePath),
1250
- nodeType,
1251
- throwOnTombstoneUsage: this.mc.config.getBoolean(throwOnTombstoneUsageKey) ?? false,
1252
- });
1246
+ sendGCTombstoneEvent(
1247
+ this.mc,
1248
+ {
1249
+ eventName,
1250
+ category: "generic",
1251
+ isSummarizerClient: this.isSummarizerClient,
1252
+ url: trimLeadingSlashes(toNodePath),
1253
+ nodeType,
1254
+ },
1255
+ undefined /* packagePath */,
1256
+ );
1253
1257
  }
1254
1258
  }
1255
1259
 
@@ -24,7 +24,9 @@ export const trackGCStateKey = "Fluid.GarbageCollection.TrackGCState";
24
24
  export const disableSweepLogKey = "Fluid.GarbageCollection.DisableSweepLog";
25
25
  // Feature gate key to disable the tombstone feature, i.e., tombstone information is not read / written into summary.
26
26
  export const disableTombstoneKey = "Fluid.GarbageCollection.DisableTombstone";
27
- // Feature gate to enable throwing an error when tombstone object is used.
27
+ // Feature gate to enable throwing an error when tombstone object is loaded (requested).
28
+ export const throwOnTombstoneLoadKey = "Fluid.GarbageCollection.ThrowOnTombstoneLoad";
29
+ // Feature gate to enable throwing an error when tombstone object is used (e.g. outgoing or incoming ops).
28
30
  export const throwOnTombstoneUsageKey = "Fluid.GarbageCollection.ThrowOnTombstoneUsage";
29
31
  // Feature gate to enable GC version upgrade.
30
32
  export const gcVersionUpgradeToV2Key = "Fluid.GarbageCollection.GCVersionUpgradeToV2";
@@ -6,26 +6,23 @@
6
6
  import { ITelemetryGenericEvent } from "@fluidframework/common-definitions";
7
7
  import { packagePathToTelemetryProperty } from "@fluidframework/runtime-utils";
8
8
  import { MonitoringContext } from "@fluidframework/telemetry-utils";
9
- import { throwOnTombstoneUsageKey } from "./garbageCollectionConstants";
9
+ import { disableTombstoneKey, throwOnTombstoneLoadKey, throwOnTombstoneUsageKey } from "./garbageCollectionConstants";
10
10
 
11
11
  /**
12
- * Decides whether or not to send an error event or a generic event for gc tombstone scenarios
13
- *
14
- * Adds isSummarizerClient, packagePath, and error to telemetry properties.
12
+ * Consolidates info / logic for logging when we encounter a Tombstone
15
13
  */
16
14
  export function sendGCTombstoneEvent(
17
15
  mc: MonitoringContext,
18
- event: ITelemetryGenericEvent,
19
- isSummarizerClient: boolean,
16
+ event: ITelemetryGenericEvent & { category: "error" | "generic", isSummarizerClient: boolean },
20
17
  packagePath: readonly string[] | undefined,
21
- error?: any,
18
+ error?: unknown,
22
19
  ) {
23
- const throwOnTombstoneUsage = event.throwOnTombstoneUsage = mc.config.getBoolean(throwOnTombstoneUsageKey) ?? false;
24
20
  event.pkg = packagePathToTelemetryProperty(packagePath);
25
- event.isSummarizerClient = isSummarizerClient;
26
- if(throwOnTombstoneUsage) {
27
- mc.logger.sendErrorEvent(event, error);
28
- } else {
29
- mc.logger.sendTelemetryEvent(event, error);
30
- }
21
+ event.tombstoneFlags = JSON.stringify({
22
+ DisableTombstone: mc.config.getBoolean(disableTombstoneKey),
23
+ ThrowOnTombstoneUsage: mc.config.getBoolean(throwOnTombstoneUsageKey),
24
+ ThrowOnTombstoneLoad: mc.config.getBoolean(throwOnTombstoneLoadKey),
25
+ });
26
+
27
+ mc.logger.sendTelemetryEvent(event, error);
31
28
  }
package/src/index.ts CHANGED
@@ -19,6 +19,8 @@ export {
19
19
  agentSchedulerId,
20
20
  ContainerRuntime,
21
21
  RuntimeHeaders,
22
+ AllowTombstoneRequestHeaderKey,
23
+ TombstoneResponseHeaderKey,
22
24
  ISummaryConfiguration,
23
25
  DefaultSummaryConfiguration,
24
26
  ICompressionRuntimeOptions,
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/container-runtime";
9
- export const pkgVersion = "2.0.0-internal.2.3.0";
9
+ export const pkgVersion = "2.0.0-internal.2.3.1";