@fluidframework/container-runtime 2.0.0-dev-rc.5.0.0.268409 → 2.0.0-dev-rc.5.0.0.270987

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 (306) hide show
  1. package/api-report/container-runtime.alpha.api.md +3 -8
  2. package/api-report/container-runtime.beta.api.md +2 -2
  3. package/api-report/container-runtime.public.api.md +2 -2
  4. package/biome.jsonc +4 -0
  5. package/container-runtime.test-files.tar +0 -0
  6. package/dist/batchTracker.js +5 -1
  7. package/dist/batchTracker.js.map +1 -1
  8. package/dist/blobManager.d.ts +1 -18
  9. package/dist/blobManager.d.ts.map +1 -1
  10. package/dist/blobManager.js +39 -48
  11. package/dist/blobManager.js.map +1 -1
  12. package/dist/channelCollection.d.ts +8 -9
  13. package/dist/channelCollection.d.ts.map +1 -1
  14. package/dist/channelCollection.js +71 -51
  15. package/dist/channelCollection.js.map +1 -1
  16. package/dist/connectionTelemetry.d.ts +1 -2
  17. package/dist/connectionTelemetry.d.ts.map +1 -1
  18. package/dist/connectionTelemetry.js +32 -14
  19. package/dist/connectionTelemetry.js.map +1 -1
  20. package/dist/containerHandleContext.js +4 -0
  21. package/dist/containerHandleContext.js.map +1 -1
  22. package/dist/containerRuntime.d.ts +7 -18
  23. package/dist/containerRuntime.d.ts.map +1 -1
  24. package/dist/containerRuntime.js +145 -43
  25. package/dist/containerRuntime.js.map +1 -1
  26. package/dist/dataStore.js +9 -1
  27. package/dist/dataStore.js.map +1 -1
  28. package/dist/dataStoreContext.d.ts +23 -37
  29. package/dist/dataStoreContext.d.ts.map +1 -1
  30. package/dist/dataStoreContext.js +159 -133
  31. package/dist/dataStoreContext.js.map +1 -1
  32. package/dist/dataStoreContexts.js +29 -28
  33. package/dist/dataStoreContexts.js.map +1 -1
  34. package/dist/dataStoreRegistry.js +1 -0
  35. package/dist/dataStoreRegistry.js.map +1 -1
  36. package/dist/deltaManagerProxies.d.ts +4 -4
  37. package/dist/deltaManagerProxies.d.ts.map +1 -1
  38. package/dist/deltaManagerProxies.js +33 -28
  39. package/dist/deltaManagerProxies.js.map +1 -1
  40. package/dist/deltaScheduler.d.ts +1 -2
  41. package/dist/deltaScheduler.d.ts.map +1 -1
  42. package/dist/deltaScheduler.js +13 -9
  43. package/dist/deltaScheduler.js.map +1 -1
  44. package/dist/error.js +2 -1
  45. package/dist/error.js.map +1 -1
  46. package/dist/gc/garbageCollection.d.ts.map +1 -1
  47. package/dist/gc/garbageCollection.js +37 -17
  48. package/dist/gc/garbageCollection.js.map +1 -1
  49. package/dist/gc/gcDefinitions.d.ts +0 -4
  50. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  51. package/dist/gc/gcDefinitions.js +1 -3
  52. package/dist/gc/gcDefinitions.js.map +1 -1
  53. package/dist/gc/gcSummaryStateTracker.js +19 -14
  54. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  55. package/dist/gc/gcTelemetry.js +12 -5
  56. package/dist/gc/gcTelemetry.js.map +1 -1
  57. package/dist/gc/gcUnreferencedStateTracker.js +12 -1
  58. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  59. package/dist/gc/index.d.ts +1 -1
  60. package/dist/gc/index.d.ts.map +1 -1
  61. package/dist/gc/index.js +1 -2
  62. package/dist/gc/index.js.map +1 -1
  63. package/dist/messageTypes.d.ts +1 -1
  64. package/dist/messageTypes.d.ts.map +1 -1
  65. package/dist/messageTypes.js.map +1 -1
  66. package/dist/opLifecycle/batchManager.js +5 -3
  67. package/dist/opLifecycle/batchManager.js.map +1 -1
  68. package/dist/opLifecycle/opCompressor.js +1 -0
  69. package/dist/opLifecycle/opCompressor.js.map +1 -1
  70. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  71. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  72. package/dist/opLifecycle/opDecompressor.js +6 -4
  73. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  74. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  75. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  76. package/dist/opLifecycle/opGroupingManager.js +3 -1
  77. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  78. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  79. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  80. package/dist/opLifecycle/opSplitter.js +6 -0
  81. package/dist/opLifecycle/opSplitter.js.map +1 -1
  82. package/dist/opLifecycle/outbox.js +15 -10
  83. package/dist/opLifecycle/outbox.js.map +1 -1
  84. package/dist/opLifecycle/remoteMessageProcessor.d.ts +1 -1
  85. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  86. package/dist/opLifecycle/remoteMessageProcessor.js +3 -0
  87. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  88. package/dist/opProperties.d.ts +1 -1
  89. package/dist/opProperties.d.ts.map +1 -1
  90. package/dist/opProperties.js.map +1 -1
  91. package/dist/packageVersion.d.ts +1 -1
  92. package/dist/packageVersion.js +1 -1
  93. package/dist/packageVersion.js.map +1 -1
  94. package/dist/pendingStateManager.d.ts.map +1 -1
  95. package/dist/pendingStateManager.js +34 -18
  96. package/dist/pendingStateManager.js.map +1 -1
  97. package/dist/scheduleManager.d.ts +1 -2
  98. package/dist/scheduleManager.d.ts.map +1 -1
  99. package/dist/scheduleManager.js +15 -4
  100. package/dist/scheduleManager.js.map +1 -1
  101. package/dist/storageServiceWithAttachBlobs.js +1 -0
  102. package/dist/storageServiceWithAttachBlobs.js.map +1 -1
  103. package/dist/summary/documentSchema.js +17 -1
  104. package/dist/summary/documentSchema.js.map +1 -1
  105. package/dist/summary/orderedClientElection.js +19 -11
  106. package/dist/summary/orderedClientElection.js.map +1 -1
  107. package/dist/summary/runWhileConnectedCoordinator.js +4 -2
  108. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  109. package/dist/summary/runningSummarizer.d.ts +1 -1
  110. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  111. package/dist/summary/runningSummarizer.js +56 -38
  112. package/dist/summary/runningSummarizer.js.map +1 -1
  113. package/dist/summary/summarizer.js +17 -8
  114. package/dist/summary/summarizer.js.map +1 -1
  115. package/dist/summary/summarizerClientElection.js +18 -7
  116. package/dist/summary/summarizerClientElection.js.map +1 -1
  117. package/dist/summary/summarizerHeuristics.js +30 -25
  118. package/dist/summary/summarizerHeuristics.js.map +1 -1
  119. package/dist/summary/summarizerNode/summarizerNode.d.ts +1 -2
  120. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  121. package/dist/summary/summarizerNode/summarizerNode.js +12 -3
  122. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  123. package/dist/summary/summarizerNode/summarizerNodeUtils.js +2 -0
  124. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  125. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +20 -6
  126. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  127. package/dist/summary/summarizerTypes.d.ts +2 -2
  128. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  129. package/dist/summary/summarizerTypes.js.map +1 -1
  130. package/dist/summary/summaryCollection.d.ts +1 -2
  131. package/dist/summary/summaryCollection.d.ts.map +1 -1
  132. package/dist/summary/summaryCollection.js +23 -11
  133. package/dist/summary/summaryCollection.js.map +1 -1
  134. package/dist/summary/summaryFormat.d.ts +1 -2
  135. package/dist/summary/summaryFormat.d.ts.map +1 -1
  136. package/dist/summary/summaryFormat.js.map +1 -1
  137. package/dist/summary/summaryGenerator.js +12 -5
  138. package/dist/summary/summaryGenerator.js.map +1 -1
  139. package/dist/summary/summaryManager.js +58 -48
  140. package/dist/summary/summaryManager.js.map +1 -1
  141. package/dist/throttler.js +4 -1
  142. package/dist/throttler.js.map +1 -1
  143. package/lib/batchTracker.js +5 -1
  144. package/lib/batchTracker.js.map +1 -1
  145. package/lib/blobManager.d.ts +1 -18
  146. package/lib/blobManager.d.ts.map +1 -1
  147. package/lib/blobManager.js +39 -48
  148. package/lib/blobManager.js.map +1 -1
  149. package/lib/channelCollection.d.ts +8 -9
  150. package/lib/channelCollection.d.ts.map +1 -1
  151. package/lib/channelCollection.js +72 -53
  152. package/lib/channelCollection.js.map +1 -1
  153. package/lib/connectionTelemetry.d.ts +1 -2
  154. package/lib/connectionTelemetry.d.ts.map +1 -1
  155. package/lib/connectionTelemetry.js +33 -15
  156. package/lib/connectionTelemetry.js.map +1 -1
  157. package/lib/containerHandleContext.js +4 -0
  158. package/lib/containerHandleContext.js.map +1 -1
  159. package/lib/containerRuntime.d.ts +7 -18
  160. package/lib/containerRuntime.d.ts.map +1 -1
  161. package/lib/containerRuntime.js +145 -43
  162. package/lib/containerRuntime.js.map +1 -1
  163. package/lib/dataStore.js +9 -1
  164. package/lib/dataStore.js.map +1 -1
  165. package/lib/dataStoreContext.d.ts +23 -37
  166. package/lib/dataStoreContext.d.ts.map +1 -1
  167. package/lib/dataStoreContext.js +162 -136
  168. package/lib/dataStoreContext.js.map +1 -1
  169. package/lib/dataStoreContexts.js +29 -28
  170. package/lib/dataStoreContexts.js.map +1 -1
  171. package/lib/dataStoreRegistry.js +1 -0
  172. package/lib/dataStoreRegistry.js.map +1 -1
  173. package/lib/deltaManagerProxies.d.ts +4 -4
  174. package/lib/deltaManagerProxies.d.ts.map +1 -1
  175. package/lib/deltaManagerProxies.js +33 -28
  176. package/lib/deltaManagerProxies.js.map +1 -1
  177. package/lib/deltaScheduler.d.ts +1 -2
  178. package/lib/deltaScheduler.d.ts.map +1 -1
  179. package/lib/deltaScheduler.js +13 -9
  180. package/lib/deltaScheduler.js.map +1 -1
  181. package/lib/error.js +2 -1
  182. package/lib/error.js.map +1 -1
  183. package/lib/gc/garbageCollection.d.ts.map +1 -1
  184. package/lib/gc/garbageCollection.js +37 -17
  185. package/lib/gc/garbageCollection.js.map +1 -1
  186. package/lib/gc/gcDefinitions.d.ts +0 -4
  187. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  188. package/lib/gc/gcDefinitions.js +0 -2
  189. package/lib/gc/gcDefinitions.js.map +1 -1
  190. package/lib/gc/gcSummaryStateTracker.js +19 -14
  191. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  192. package/lib/gc/gcTelemetry.js +12 -5
  193. package/lib/gc/gcTelemetry.js.map +1 -1
  194. package/lib/gc/gcUnreferencedStateTracker.js +12 -1
  195. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  196. package/lib/gc/index.d.ts +1 -1
  197. package/lib/gc/index.d.ts.map +1 -1
  198. package/lib/gc/index.js +1 -1
  199. package/lib/gc/index.js.map +1 -1
  200. package/lib/messageTypes.d.ts +1 -1
  201. package/lib/messageTypes.d.ts.map +1 -1
  202. package/lib/messageTypes.js.map +1 -1
  203. package/lib/opLifecycle/batchManager.js +5 -3
  204. package/lib/opLifecycle/batchManager.js.map +1 -1
  205. package/lib/opLifecycle/opCompressor.js +1 -0
  206. package/lib/opLifecycle/opCompressor.js.map +1 -1
  207. package/lib/opLifecycle/opDecompressor.d.ts +1 -1
  208. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  209. package/lib/opLifecycle/opDecompressor.js +6 -4
  210. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  211. package/lib/opLifecycle/opGroupingManager.d.ts +1 -1
  212. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  213. package/lib/opLifecycle/opGroupingManager.js +3 -1
  214. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  215. package/lib/opLifecycle/opSplitter.d.ts +1 -1
  216. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  217. package/lib/opLifecycle/opSplitter.js +6 -0
  218. package/lib/opLifecycle/opSplitter.js.map +1 -1
  219. package/lib/opLifecycle/outbox.js +15 -10
  220. package/lib/opLifecycle/outbox.js.map +1 -1
  221. package/lib/opLifecycle/remoteMessageProcessor.d.ts +1 -1
  222. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  223. package/lib/opLifecycle/remoteMessageProcessor.js +4 -1
  224. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  225. package/lib/opProperties.d.ts +1 -1
  226. package/lib/opProperties.d.ts.map +1 -1
  227. package/lib/opProperties.js.map +1 -1
  228. package/lib/packageVersion.d.ts +1 -1
  229. package/lib/packageVersion.js +1 -1
  230. package/lib/packageVersion.js.map +1 -1
  231. package/lib/pendingStateManager.d.ts.map +1 -1
  232. package/lib/pendingStateManager.js +34 -18
  233. package/lib/pendingStateManager.js.map +1 -1
  234. package/lib/scheduleManager.d.ts +1 -2
  235. package/lib/scheduleManager.d.ts.map +1 -1
  236. package/lib/scheduleManager.js +15 -4
  237. package/lib/scheduleManager.js.map +1 -1
  238. package/lib/storageServiceWithAttachBlobs.js +1 -0
  239. package/lib/storageServiceWithAttachBlobs.js.map +1 -1
  240. package/lib/summary/documentSchema.js +17 -1
  241. package/lib/summary/documentSchema.js.map +1 -1
  242. package/lib/summary/orderedClientElection.js +19 -11
  243. package/lib/summary/orderedClientElection.js.map +1 -1
  244. package/lib/summary/runWhileConnectedCoordinator.js +4 -2
  245. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  246. package/lib/summary/runningSummarizer.d.ts +1 -1
  247. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  248. package/lib/summary/runningSummarizer.js +57 -39
  249. package/lib/summary/runningSummarizer.js.map +1 -1
  250. package/lib/summary/summarizer.js +17 -8
  251. package/lib/summary/summarizer.js.map +1 -1
  252. package/lib/summary/summarizerClientElection.js +18 -7
  253. package/lib/summary/summarizerClientElection.js.map +1 -1
  254. package/lib/summary/summarizerHeuristics.js +30 -25
  255. package/lib/summary/summarizerHeuristics.js.map +1 -1
  256. package/lib/summary/summarizerNode/summarizerNode.d.ts +1 -2
  257. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  258. package/lib/summary/summarizerNode/summarizerNode.js +12 -3
  259. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  260. package/lib/summary/summarizerNode/summarizerNodeUtils.js +2 -0
  261. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  262. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +20 -6
  263. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  264. package/lib/summary/summarizerTypes.d.ts +2 -2
  265. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  266. package/lib/summary/summarizerTypes.js.map +1 -1
  267. package/lib/summary/summaryCollection.d.ts +1 -2
  268. package/lib/summary/summaryCollection.d.ts.map +1 -1
  269. package/lib/summary/summaryCollection.js +23 -11
  270. package/lib/summary/summaryCollection.js.map +1 -1
  271. package/lib/summary/summaryFormat.d.ts +1 -2
  272. package/lib/summary/summaryFormat.d.ts.map +1 -1
  273. package/lib/summary/summaryFormat.js.map +1 -1
  274. package/lib/summary/summaryGenerator.js +12 -5
  275. package/lib/summary/summaryGenerator.js.map +1 -1
  276. package/lib/summary/summaryManager.js +58 -48
  277. package/lib/summary/summaryManager.js.map +1 -1
  278. package/lib/throttler.js +4 -1
  279. package/lib/throttler.js.map +1 -1
  280. package/package.json +23 -20
  281. package/src/batchTracker.ts +1 -1
  282. package/src/blobManager.ts +1 -39
  283. package/src/channelCollection.ts +63 -76
  284. package/src/connectionTelemetry.ts +5 -2
  285. package/src/containerRuntime.ts +9 -32
  286. package/src/dataStoreContext.ts +38 -79
  287. package/src/deltaManagerProxies.ts +3 -5
  288. package/src/deltaScheduler.ts +4 -2
  289. package/src/gc/garbageCollection.ts +0 -2
  290. package/src/gc/gcDefinitions.ts +0 -4
  291. package/src/gc/index.ts +0 -1
  292. package/src/messageTypes.ts +1 -1
  293. package/src/opLifecycle/opDecompressor.ts +1 -1
  294. package/src/opLifecycle/opGroupingManager.ts +1 -1
  295. package/src/opLifecycle/opSplitter.ts +1 -1
  296. package/src/opLifecycle/remoteMessageProcessor.ts +4 -2
  297. package/src/opProperties.ts +4 -2
  298. package/src/packageVersion.ts +1 -1
  299. package/src/pendingStateManager.ts +16 -5
  300. package/src/scheduleManager.ts +4 -2
  301. package/src/summary/runningSummarizer.ts +5 -2
  302. package/src/summary/summarizerNode/summarizerNode.ts +5 -2
  303. package/src/summary/summarizerTypes.ts +5 -2
  304. package/src/summary/summaryCollection.ts +1 -1
  305. package/src/summary/summaryFormat.ts +2 -1
  306. package/tsconfig.json +2 -0
package/lib/dataStore.js CHANGED
@@ -24,6 +24,15 @@ var AliasState;
24
24
  AliasState["None"] = "None";
25
25
  })(AliasState || (AliasState = {}));
26
26
  class DataStore {
27
+ fluidDataStoreChannel;
28
+ internalId;
29
+ channelCollection;
30
+ logger;
31
+ parentContext;
32
+ aliasState = AliasState.None;
33
+ alias;
34
+ pendingAliases;
35
+ aliasResult;
27
36
  /**
28
37
  * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.trySetAlias}
29
38
  */
@@ -115,7 +124,6 @@ class DataStore {
115
124
  this.channelCollection = channelCollection;
116
125
  this.logger = logger;
117
126
  this.parentContext = parentContext;
118
- this.aliasState = AliasState.None;
119
127
  this.pendingAliases = channelCollection.pendingAliases;
120
128
  }
121
129
  async ackBasedPromise(executor) {
@@ -1 +1 @@
1
- {"version":3,"file":"dataStore.js","sourceRoot":"","sources":["../src/dataStore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { FluidObject } from \"@fluidframework/core-interfaces\";\nimport { type IFluidHandleInternal } from \"@fluidframework/core-interfaces/internal\";\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\nimport {\n\tAliasResult,\n\tIDataStore,\n\tIFluidDataStoreChannel,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport {\n\tITelemetryLoggerExt,\n\tTelemetryDataTag,\n\tUsageError,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport { ChannelCollection } from \"./channelCollection.js\";\nimport { ContainerMessageType } from \"./messageTypes.js\";\n\n/**\n * Interface for an op to be used for assigning an\n * alias to a datastore\n */\nexport interface IDataStoreAliasMessage {\n\t/** The internal id of the datastore */\n\treadonly internalId: string;\n\t/** The alias name to be assigned to the datastore */\n\treadonly alias: string;\n}\n\n/**\n * Type guard that returns true if the given alias message is actually an instance of\n * a class which implements {@link IDataStoreAliasMessage}\n * @param maybeDataStoreAliasMessage - message object to be validated\n * @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise\n */\nexport const isDataStoreAliasMessage = (\n\tmaybeDataStoreAliasMessage: any,\n): maybeDataStoreAliasMessage is IDataStoreAliasMessage => {\n\treturn (\n\t\ttypeof maybeDataStoreAliasMessage?.internalId === \"string\" &&\n\t\ttypeof maybeDataStoreAliasMessage?.alias === \"string\"\n\t);\n};\n\nexport const channelToDataStore = (\n\tfluidDataStoreChannel: IFluidDataStoreChannel,\n\tinternalId: string,\n\tchannelCollection: ChannelCollection,\n\tlogger: ITelemetryLoggerExt,\n): IDataStore => new DataStore(fluidDataStoreChannel, internalId, channelCollection, logger);\n\nenum AliasState {\n\tAliased = \"Aliased\",\n\tAliasing = \"Aliasing\",\n\tNone = \"None\",\n}\n\nclass DataStore implements IDataStore {\n\tprivate aliasState: AliasState = AliasState.None;\n\tprivate alias: string | undefined;\n\tprivate readonly pendingAliases: Map<string, Promise<AliasResult>>;\n\tprivate aliasResult: Promise<AliasResult> | undefined;\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.trySetAlias}\n\t */\n\tasync trySetAlias(alias: string): Promise<AliasResult> {\n\t\tif (alias.includes(\"/\")) {\n\t\t\tthrow new UsageError(`The alias cannot contain slashes: '${alias}'`);\n\t\t}\n\n\t\tswitch (this.aliasState) {\n\t\t\t// If we're already aliasing, check if it's for the same value and return\n\t\t\t// the stored promise, otherwise return 'AlreadyAliased'\n\t\t\tcase AliasState.Aliasing:\n\t\t\t\tassert(\n\t\t\t\t\tthis.aliasResult !== undefined,\n\t\t\t\t\t0x316 /* There should be a cached promise of in-progress aliasing */,\n\t\t\t\t);\n\t\t\t\tawait this.aliasResult;\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\t// If this datastore is already aliased, return true only if this\n\t\t\t// is a repeated call for the same alias\n\t\t\tcase AliasState.Aliased:\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\tcase AliasState.None: {\n\t\t\t\tconst existingAlias = this.pendingAliases.get(alias);\n\t\t\t\tif (existingAlias !== undefined) {\n\t\t\t\t\t// There is already another datastore which will be aliased\n\t\t\t\t\t// to the same name\n\t\t\t\t\treturn \"Conflict\";\n\t\t\t\t}\n\n\t\t\t\t// There is no current or past alias operation for this datastore,\n\t\t\t\t// or for this alias, so it is safe to continue execution\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tunreachableCase(this.aliasState);\n\t\t}\n\n\t\tthis.aliasState = AliasState.Aliasing;\n\t\tthis.aliasResult = this.trySetAliasInternal(alias);\n\t\tthis.pendingAliases.set(alias, this.aliasResult);\n\t\treturn this.aliasResult;\n\t}\n\n\tasync trySetAliasInternal(alias: string): Promise<AliasResult> {\n\t\tconst message: IDataStoreAliasMessage = {\n\t\t\tinternalId: this.internalId,\n\t\t\talias,\n\t\t};\n\t\tthis.fluidDataStoreChannel.makeVisibleAndAttachGraph();\n\n\t\tif (this.parentContext.attachState === AttachState.Detached) {\n\t\t\tconst localResult = this.channelCollection.processAliasMessageCore(\n\t\t\t\tthis.internalId,\n\t\t\t\talias,\n\t\t\t);\n\t\t\t// Explicitly lock-out future attempts of aliasing,\n\t\t\t// regardless of result\n\t\t\tthis.aliasState = AliasState.Aliased;\n\t\t\treturn localResult ? \"Success\" : \"Conflict\";\n\t\t}\n\n\t\tconst aliased = await this.ackBasedPromise<boolean>((resolve) => {\n\t\t\tthis.parentContext.submitMessage(ContainerMessageType.Alias, message, resolve);\n\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.logger.sendErrorEvent(\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"AliasingException\",\n\t\t\t\t\t\talias: {\n\t\t\t\t\t\t\tvalue: alias,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.UserData,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinternalId: {\n\t\t\t\t\t\t\tvalue: this.internalId,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\terror,\n\t\t\t\t);\n\n\t\t\t\treturn false;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.pendingAliases.delete(alias);\n\t\t\t});\n\n\t\tif (!aliased) {\n\t\t\tthis.aliasState = AliasState.None;\n\t\t\tthis.aliasResult = undefined;\n\t\t\treturn \"Conflict\";\n\t\t}\n\n\t\tthis.alias = alias;\n\t\tthis.aliasState = AliasState.Aliased;\n\t\treturn \"Success\";\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.entryPoint}\n\t */\n\tget entryPoint(): IFluidHandleInternal<FluidObject> {\n\t\treturn this.fluidDataStoreChannel.entryPoint;\n\t}\n\n\tconstructor(\n\t\tprivate readonly fluidDataStoreChannel: IFluidDataStoreChannel,\n\t\tprivate readonly internalId: string,\n\t\tprivate readonly channelCollection: ChannelCollection,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t\tprivate readonly parentContext = channelCollection.parentContext,\n\t) {\n\t\tthis.pendingAliases = channelCollection.pendingAliases;\n\t}\n\n\tprivate async ackBasedPromise<T>(\n\t\texecutor: (\n\t\t\tresolve: (value: T | PromiseLike<T>) => void,\n\t\t\treject: (reason?: any) => void,\n\t\t) => void,\n\t): Promise<T> {\n\t\tlet rejectBecauseDispose: () => void;\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\trejectBecauseDispose = () =>\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\"ContainerRuntime disposed while this ack-based Promise was pending\"),\n\t\t\t\t);\n\n\t\t\tif (this.parentContext.containerRuntime.disposed) {\n\t\t\t\trejectBecauseDispose();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.parentContext.containerRuntime.on(\"dispose\", rejectBecauseDispose);\n\t\t\texecutor(resolve, reject);\n\t\t}).finally(() => {\n\t\t\tthis.parentContext.containerRuntime.off(\"dispose\", rejectBecauseDispose);\n\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"file":"dataStore.js","sourceRoot":"","sources":["../src/dataStore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { FluidObject } from \"@fluidframework/core-interfaces\";\nimport { type IFluidHandleInternal } from \"@fluidframework/core-interfaces/internal\";\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\nimport {\n\tAliasResult,\n\tIDataStore,\n\tIFluidDataStoreChannel,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport {\n\tITelemetryLoggerExt,\n\tTelemetryDataTag,\n\tUsageError,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport { ChannelCollection } from \"./channelCollection.js\";\nimport { ContainerMessageType } from \"./messageTypes.js\";\n\n/**\n * Interface for an op to be used for assigning an\n * alias to a datastore\n */\nexport interface IDataStoreAliasMessage {\n\t/** The internal id of the datastore */\n\treadonly internalId: string;\n\t/** The alias name to be assigned to the datastore */\n\treadonly alias: string;\n}\n\n/**\n * Type guard that returns true if the given alias message is actually an instance of\n * a class which implements {@link IDataStoreAliasMessage}\n * @param maybeDataStoreAliasMessage - message object to be validated\n * @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise\n */\nexport const isDataStoreAliasMessage = (\n\tmaybeDataStoreAliasMessage: any,\n): maybeDataStoreAliasMessage is IDataStoreAliasMessage => {\n\treturn (\n\t\ttypeof maybeDataStoreAliasMessage?.internalId === \"string\" &&\n\t\ttypeof maybeDataStoreAliasMessage?.alias === \"string\"\n\t);\n};\n\nexport const channelToDataStore = (\n\tfluidDataStoreChannel: IFluidDataStoreChannel,\n\tinternalId: string,\n\tchannelCollection: ChannelCollection,\n\tlogger: ITelemetryLoggerExt,\n): IDataStore => new DataStore(fluidDataStoreChannel, internalId, channelCollection, logger);\n\nenum AliasState {\n\tAliased = \"Aliased\",\n\tAliasing = \"Aliasing\",\n\tNone = \"None\",\n}\n\nclass DataStore implements IDataStore {\n\tprivate aliasState: AliasState = AliasState.None;\n\tprivate alias: string | undefined;\n\tprivate readonly pendingAliases: Map<string, Promise<AliasResult>>;\n\tprivate aliasResult: Promise<AliasResult> | undefined;\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.trySetAlias}\n\t */\n\tasync trySetAlias(alias: string): Promise<AliasResult> {\n\t\tif (alias.includes(\"/\")) {\n\t\t\tthrow new UsageError(`The alias cannot contain slashes: '${alias}'`);\n\t\t}\n\n\t\tswitch (this.aliasState) {\n\t\t\t// If we're already aliasing, check if it's for the same value and return\n\t\t\t// the stored promise, otherwise return 'AlreadyAliased'\n\t\t\tcase AliasState.Aliasing:\n\t\t\t\tassert(\n\t\t\t\t\tthis.aliasResult !== undefined,\n\t\t\t\t\t0x316 /* There should be a cached promise of in-progress aliasing */,\n\t\t\t\t);\n\t\t\t\tawait this.aliasResult;\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\t// If this datastore is already aliased, return true only if this\n\t\t\t// is a repeated call for the same alias\n\t\t\tcase AliasState.Aliased:\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\tcase AliasState.None: {\n\t\t\t\tconst existingAlias = this.pendingAliases.get(alias);\n\t\t\t\tif (existingAlias !== undefined) {\n\t\t\t\t\t// There is already another datastore which will be aliased\n\t\t\t\t\t// to the same name\n\t\t\t\t\treturn \"Conflict\";\n\t\t\t\t}\n\n\t\t\t\t// There is no current or past alias operation for this datastore,\n\t\t\t\t// or for this alias, so it is safe to continue execution\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tunreachableCase(this.aliasState);\n\t\t}\n\n\t\tthis.aliasState = AliasState.Aliasing;\n\t\tthis.aliasResult = this.trySetAliasInternal(alias);\n\t\tthis.pendingAliases.set(alias, this.aliasResult);\n\t\treturn this.aliasResult;\n\t}\n\n\tasync trySetAliasInternal(alias: string): Promise<AliasResult> {\n\t\tconst message: IDataStoreAliasMessage = {\n\t\t\tinternalId: this.internalId,\n\t\t\talias,\n\t\t};\n\t\tthis.fluidDataStoreChannel.makeVisibleAndAttachGraph();\n\n\t\tif (this.parentContext.attachState === AttachState.Detached) {\n\t\t\tconst localResult = this.channelCollection.processAliasMessageCore(\n\t\t\t\tthis.internalId,\n\t\t\t\talias,\n\t\t\t);\n\t\t\t// Explicitly lock-out future attempts of aliasing,\n\t\t\t// regardless of result\n\t\t\tthis.aliasState = AliasState.Aliased;\n\t\t\treturn localResult ? \"Success\" : \"Conflict\";\n\t\t}\n\n\t\tconst aliased = await this.ackBasedPromise<boolean>((resolve) => {\n\t\t\tthis.parentContext.submitMessage(ContainerMessageType.Alias, message, resolve);\n\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.logger.sendErrorEvent(\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"AliasingException\",\n\t\t\t\t\t\talias: {\n\t\t\t\t\t\t\tvalue: alias,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.UserData,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinternalId: {\n\t\t\t\t\t\t\tvalue: this.internalId,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\terror,\n\t\t\t\t);\n\n\t\t\t\treturn false;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.pendingAliases.delete(alias);\n\t\t\t});\n\n\t\tif (!aliased) {\n\t\t\tthis.aliasState = AliasState.None;\n\t\t\tthis.aliasResult = undefined;\n\t\t\treturn \"Conflict\";\n\t\t}\n\n\t\tthis.alias = alias;\n\t\tthis.aliasState = AliasState.Aliased;\n\t\treturn \"Success\";\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.entryPoint}\n\t */\n\tget entryPoint(): IFluidHandleInternal<FluidObject> {\n\t\treturn this.fluidDataStoreChannel.entryPoint;\n\t}\n\n\tconstructor(\n\t\tprivate readonly fluidDataStoreChannel: IFluidDataStoreChannel,\n\t\tprivate readonly internalId: string,\n\t\tprivate readonly channelCollection: ChannelCollection,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t\tprivate readonly parentContext = channelCollection.parentContext,\n\t) {\n\t\tthis.pendingAliases = channelCollection.pendingAliases;\n\t}\n\n\tprivate async ackBasedPromise<T>(\n\t\texecutor: (\n\t\t\tresolve: (value: T | PromiseLike<T>) => void,\n\t\t\treject: (reason?: any) => void,\n\t\t) => void,\n\t): Promise<T> {\n\t\tlet rejectBecauseDispose: () => void;\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\trejectBecauseDispose = () =>\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\"ContainerRuntime disposed while this ack-based Promise was pending\"),\n\t\t\t\t);\n\n\t\t\tif (this.parentContext.containerRuntime.disposed) {\n\t\t\t\trejectBecauseDispose();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.parentContext.containerRuntime.on(\"dispose\", rejectBecauseDispose);\n\t\t\texecutor(resolve, reject);\n\t\t}).finally(() => {\n\t\t\tthis.parentContext.containerRuntime.off(\"dispose\", rejectBecauseDispose);\n\t\t});\n\t}\n}\n"]}
@@ -7,8 +7,8 @@ import { AttachState, IAudience } from "@fluidframework/container-definitions";
7
7
  import { IDeltaManager } from "@fluidframework/container-definitions/internal";
8
8
  import { FluidObject, IDisposable, IRequest, IResponse, type IEvent } from "@fluidframework/core-interfaces";
9
9
  import { type IFluidHandleInternal } from "@fluidframework/core-interfaces/internal";
10
- import { IClientDetails, IQuorumClients, ISequencedDocumentMessage } from "@fluidframework/driver-definitions";
11
- import { IDocumentStorageService, type ISnapshot, IDocumentMessage, ISnapshotTree, ITreeEntry } from "@fluidframework/driver-definitions/internal";
10
+ import { IClientDetails, IQuorumClients } from "@fluidframework/driver-definitions";
11
+ import { IDocumentStorageService, type ISnapshot, IDocumentMessage, ISnapshotTree, ITreeEntry, ISequencedDocumentMessage } from "@fluidframework/driver-definitions/internal";
12
12
  import type { IIdCompressor } from "@fluidframework/id-compressor";
13
13
  import { ISummaryTreeWithStats, ITelemetryContext, IGarbageCollectionData, CreateChildSummarizerNodeFn, CreateChildSummarizerNodeParam, IContainerRuntimeBase, IDataStore, IFluidDataStoreChannel, IFluidDataStoreContext, IFluidDataStoreContextDetached, IFluidDataStoreRegistry, IFluidParentContext, IGarbageCollectionDetailsBase, IProvideFluidDataStoreFactory, ISummarizeResult, ISummarizerNodeWithGC, SummarizeInternalFn, IInboundSignalMessage } from "@fluidframework/runtime-definitions/internal";
14
14
  import { MonitoringContext } from "@fluidframework/telemetry-utils/internal";
@@ -27,10 +27,8 @@ export interface ISnapshotDetails {
27
27
  * @internal
28
28
  */
29
29
  export interface IFluidDataStoreContextInternal extends IFluidDataStoreContext {
30
- getAttachData(includeGCData: boolean, telemetryContext?: ITelemetryContext): {
31
- attachSummary: ISummaryTreeWithStats;
32
- type: string;
33
- };
30
+ getAttachSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats;
31
+ getAttachGCData(telemetryContext?: ITelemetryContext): IGarbageCollectionData;
34
32
  getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
35
33
  realize(): Promise<IFluidDataStoreChannel>;
36
34
  isRoot(): Promise<boolean>;
@@ -224,20 +222,6 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
224
222
  */
225
223
  updateUsedRoutes(usedRoutes: string[]): void;
226
224
  /**
227
- * @deprecated There is no replacement for this, its functionality is no longer needed at this layer.
228
- * It will be removed in a future release, sometime after 2.0.0-internal.8.0.0
229
- *
230
- * Similar capability is exposed with from/to string paths instead of handles via @see addedGCOutboundRoute
231
- *
232
- * Called when a new outbound reference is added to another node. This is used by garbage collection to identify
233
- * all references added in the system.
234
- * @param srcHandle - The handle of the node that added the reference.
235
- * @param outboundHandle - The handle of the outbound node that is referenced.
236
- */
237
- addedGCOutboundReference(srcHandle: IFluidHandleInternal, outboundHandle: IFluidHandleInternal): void;
238
- /**
239
- * (Same as @see addedGCOutboundReference, but with string paths instead of handles)
240
- *
241
225
  * Called when a new outbound reference is added to another node. This is used by garbage collection to identify
242
226
  * all references added in the system.
243
227
  *
@@ -284,15 +268,15 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
284
268
  protected bindRuntime(channel: IFluidDataStoreChannel, existing: boolean): Promise<void>;
285
269
  getAbsoluteUrl(relativeUrl: string): Promise<string | undefined>;
286
270
  /**
287
- * Get the data required when attaching this context's DataStore.
271
+ * Get the summary required when attaching this context's DataStore.
288
272
  * Used for both Container Attach and DataStore Attach.
289
- *
290
- * @returns the summary, type, and GC Data for this context's DataStore.
291
273
  */
292
- abstract getAttachData(includeGCData: boolean, telemetryContext?: ITelemetryContext): {
293
- attachSummary: ISummaryTreeWithStats;
294
- type: string;
295
- };
274
+ abstract getAttachSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats;
275
+ /**
276
+ * Get the GC Data for the initial state being attached so remote clients can learn of this DataStore's
277
+ * outbound routes.
278
+ */
279
+ abstract getAttachGCData(telemetryContext?: ITelemetryContext): IGarbageCollectionData;
296
280
  abstract getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
297
281
  /**
298
282
  * @deprecated Sets the datastore as root, for aliasing purposes: #7948
@@ -328,12 +312,13 @@ export declare class RemoteFluidDataStoreContext extends FluidDataStoreContext {
328
312
  private readonly initialSnapshotDetailsP;
329
313
  getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
330
314
  /**
331
- * @see FluidDataStoreContext.getAttachData
315
+ * @see FluidDataStoreContext.getAttachSummary
332
316
  */
333
- getAttachData(includeGCData: boolean): {
334
- attachSummary: ISummaryTreeWithStats;
335
- type: string;
336
- };
317
+ getAttachSummary(): ISummaryTreeWithStats;
318
+ /**
319
+ * @see FluidDataStoreContext.getAttachGCData
320
+ */
321
+ getAttachGCData(telemetryContext?: ITelemetryContext): IGarbageCollectionData;
337
322
  }
338
323
  /**
339
324
  * Base class for detached & attached context classes
@@ -348,12 +333,13 @@ export declare class LocalFluidDataStoreContextBase extends FluidDataStoreContex
348
333
  constructor(props: ILocalFluidDataStoreContextProps);
349
334
  setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void;
350
335
  /**
351
- * @see FluidDataStoreContext.getAttachData
336
+ * @see FluidDataStoreContext.getAttachSummary
337
+ */
338
+ getAttachSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats;
339
+ /**
340
+ * @see FluidDataStoreContext.getAttachGCData
352
341
  */
353
- getAttachData(includeGCData: boolean, telemetryContext?: ITelemetryContext): {
354
- attachSummary: ISummaryTreeWithStats;
355
- type: string;
356
- };
342
+ getAttachGCData(telemetryContext?: ITelemetryContext): IGarbageCollectionData;
357
343
  private readonly initialSnapshotDetailsP;
358
344
  getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
359
345
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,10 @@ import { TypedEventEmitter } from "@fluid-internal/client-utils";
6
6
  import { AttachState } from "@fluidframework/container-definitions";
7
7
  import { assert, LazyPromise, unreachableCase } from "@fluidframework/core-utils/internal";
8
8
  import { BlobTreeEntry, isInstanceOfISnapshot, readAndParse, } from "@fluidframework/driver-utils/internal";
9
- import { channelsTreeName, gcDataBlobKey, } from "@fluidframework/runtime-definitions/internal";
10
- import { addBlobToSummary, isSnapshotFetchRequiredForLoadingGroupId, toFluidHandleInternal, } from "@fluidframework/runtime-utils/internal";
9
+ import { channelsTreeName, } from "@fluidframework/runtime-definitions/internal";
10
+ import { addBlobToSummary, isSnapshotFetchRequiredForLoadingGroupId, } from "@fluidframework/runtime-utils/internal";
11
11
  import { DataCorruptionError, DataProcessingError, LoggingError, ThresholdCounter, createChildMonitoringContext, extractSafePropertiesFromMessage, generateStack, tagCodeArtifacts, } from "@fluidframework/telemetry-utils/internal";
12
- import { detectOutboundRoutesViaDDSKey, sendGCUnexpectedUsageEvent } from "./gc/index.js";
12
+ import { sendGCUnexpectedUsageEvent } from "./gc/index.js";
13
13
  import { dataStoreAttributesBlobName, getAttributesFormatVersion, getFluidDataStoreAttributes, hasIsolatedChannels, summarizerClientType, wrapSummaryInChannelsTree, } from "./summary/index.js";
14
14
  function createAttributes(pkg, isRootDataStore) {
15
15
  const stringifiedPkg = JSON.stringify(pkg);
@@ -28,6 +28,9 @@ export function createAttributesBlob(pkg, isRootDataStore) {
28
28
  * @internal
29
29
  */
30
30
  export class FluidDataStoreContext extends TypedEventEmitter {
31
+ existing;
32
+ isLocalDataStore;
33
+ makeLocallyVisibleFn;
31
34
  get packagePath() {
32
35
  assert(this.pkg !== undefined, 0x139 /* "Undefined package path" */);
33
36
  return this.pkg;
@@ -69,18 +72,30 @@ export class FluidDataStoreContext extends TypedEventEmitter {
69
72
  get idCompressor() {
70
73
  return this.parentContext.idCompressor;
71
74
  }
75
+ _disposed = false;
72
76
  get disposed() {
73
77
  return this._disposed;
74
78
  }
79
+ /**
80
+ * A Tombstoned object has been unreferenced long enough that GC knows it won't be referenced again.
81
+ * Tombstoned objects are eventually deleted by GC.
82
+ */
83
+ _tombstoned = false;
75
84
  get tombstoned() {
76
85
  return this._tombstoned;
77
86
  }
87
+ /** If true, throw an error when a tombstone data store is used. */
88
+ gcThrowOnTombstoneUsage;
89
+ gcTombstoneEnforcementAllowed;
90
+ /** If true, this means that this data store context and its children have been removed from the runtime */
91
+ deleted = false;
78
92
  get attachState() {
79
93
  return this._attachState;
80
94
  }
81
95
  get IFluidDataStoreRegistry() {
82
96
  return this.registry;
83
97
  }
98
+ baseSnapshotSequenceNumber;
84
99
  /**
85
100
  * A datastore is considered as root if it
86
101
  * 1. is root in memory - see isInMemoryRoot
@@ -110,23 +125,41 @@ export class FluidDataStoreContext extends TypedEventEmitter {
110
125
  isInMemoryRoot() {
111
126
  return this._isInMemoryRoot;
112
127
  }
128
+ registry;
129
+ detachedRuntimeCreation = false;
130
+ channel;
131
+ loaded = false;
132
+ pending = [];
133
+ channelP;
134
+ _baseSnapshot;
135
+ _attachState;
136
+ _isInMemoryRoot = false;
137
+ summarizerNode;
138
+ mc;
139
+ thresholdOpsCounter;
140
+ static pendingOpsCountThreshold = 1000;
141
+ /**
142
+ * If the summarizer makes local changes, a telemetry event is logged. This has the potential to be very noisy.
143
+ * So, adding a count of how many telemetry events are logged per data store context. This can be
144
+ * controlled via feature flags.
145
+ */
146
+ localChangesTelemetryCount;
147
+ // The used routes of this node as per the last GC run. This is used to update the used routes of the channel
148
+ // if it realizes after GC is run.
149
+ lastUsedRoutes;
150
+ id;
151
+ _containerRuntime;
152
+ parentContext;
153
+ storage;
154
+ scope;
155
+ // Represents the group to which the data store belongs too.
156
+ loadingGroupId;
157
+ pkg;
113
158
  constructor(props, existing, isLocalDataStore, makeLocallyVisibleFn) {
114
159
  super();
115
160
  this.existing = existing;
116
161
  this.isLocalDataStore = isLocalDataStore;
117
162
  this.makeLocallyVisibleFn = makeLocallyVisibleFn;
118
- this._disposed = false;
119
- /**
120
- * A Tombstoned object has been unreferenced long enough that GC knows it won't be referenced again.
121
- * Tombstoned objects are eventually deleted by GC.
122
- */
123
- this._tombstoned = false;
124
- /** If true, this means that this data store context and its children have been removed from the runtime */
125
- this.deleted = false;
126
- this.detachedRuntimeCreation = false;
127
- this.loaded = false;
128
- this.pending = [];
129
- this._isInMemoryRoot = false;
130
163
  this._containerRuntime = props.parentContext.containerRuntime;
131
164
  this.parentContext = props.parentContext;
132
165
  this.id = props.id;
@@ -398,26 +431,6 @@ export class FluidDataStoreContext extends TypedEventEmitter {
398
431
  }
399
432
  }
400
433
  /**
401
- * @deprecated There is no replacement for this, its functionality is no longer needed at this layer.
402
- * It will be removed in a future release, sometime after 2.0.0-internal.8.0.0
403
- *
404
- * Similar capability is exposed with from/to string paths instead of handles via @see addedGCOutboundRoute
405
- *
406
- * Called when a new outbound reference is added to another node. This is used by garbage collection to identify
407
- * all references added in the system.
408
- * @param srcHandle - The handle of the node that added the reference.
409
- * @param outboundHandle - The handle of the outbound node that is referenced.
410
- */
411
- addedGCOutboundReference(srcHandle, outboundHandle) {
412
- // By default, skip this call since the ContainerRuntime will detect the outbound route directly.
413
- if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) === true) {
414
- // Note: The ContainerRuntime code will check this same setting to avoid double counting.
415
- this.parentContext.addedGCOutboundReference?.(toFluidHandleInternal(srcHandle), toFluidHandleInternal(outboundHandle));
416
- }
417
- }
418
- /**
419
- * (Same as @see addedGCOutboundReference, but with string paths instead of handles)
420
- *
421
434
  * Called when a new outbound reference is added to another node. This is used by garbage collection to identify
422
435
  * all references added in the system.
423
436
  *
@@ -425,7 +438,7 @@ export class FluidDataStoreContext extends TypedEventEmitter {
425
438
  * @param toPath - The absolute path of the outbound node that is referenced.
426
439
  */
427
440
  addedGCOutboundRoute(fromPath, toPath) {
428
- this.parentContext.addedGCOutboundReference?.({ absolutePath: fromPath }, { absolutePath: toPath });
441
+ this.parentContext.addedGCOutboundRoute(fromPath, toPath);
429
442
  }
430
443
  /**
431
444
  * Updates the used routes of the channel and its child contexts. The channel must be loaded before calling this.
@@ -650,68 +663,16 @@ export class FluidDataStoreContext extends TypedEventEmitter {
650
663
  return this.parentContext.uploadBlob(blob, signal);
651
664
  }
652
665
  }
653
- FluidDataStoreContext.pendingOpsCountThreshold = 1000;
654
666
  /** @internal */
655
667
  export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
668
+ // Tells whether we need to fetch the snapshot before use. This is to support Data Virtualization.
669
+ snapshotFetchRequired;
670
+ runtime;
671
+ blobContents;
656
672
  constructor(props) {
657
673
  super(props, true /* existing */, false /* isLocalDataStore */, () => {
658
674
  throw new Error("Already attached");
659
675
  });
660
- this.initialSnapshotDetailsP = new LazyPromise(async () => {
661
- // Sequence number of the snapshot.
662
- let sequenceNumber;
663
- // Check whether we need to fetch the snapshot first to load.
664
- if (this.snapshotFetchRequired === undefined && this._baseSnapshot?.groupId !== undefined) {
665
- assert(this.blobContents !== undefined, 0x97a /* Blob contents should be present to evaluate */);
666
- assert(this._baseSnapshot !== undefined, 0x97b /* snapshotTree should be present to evaluate */);
667
- this.snapshotFetchRequired = isSnapshotFetchRequiredForLoadingGroupId(this._baseSnapshot, this.blobContents);
668
- }
669
- if (this.snapshotFetchRequired) {
670
- assert(this.loadingGroupId !== undefined, 0x8f5 /* groupId should be present to fetch snapshot */);
671
- const snapshot = await this.runtime.getSnapshotForLoadingGroupId([this.loadingGroupId], [this.id]);
672
- this._baseSnapshot = snapshot.snapshotTree;
673
- sequenceNumber = snapshot.sequenceNumber;
674
- this.snapshotFetchRequired = false;
675
- }
676
- let tree = this.baseSnapshot;
677
- let isRootDataStore = true;
678
- if (!!tree && tree.blobs[dataStoreAttributesBlobName] !== undefined) {
679
- // Need to get through snapshot and use that to populate extraBlobs
680
- // eslint-disable-next-line import/no-deprecated
681
- const attributes = await readAndParse(this.storage, tree.blobs[dataStoreAttributesBlobName]);
682
- let pkgFromSnapshot;
683
- // Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.
684
- // For snapshotFormatVersion = "0.1" (1) or above, pkg is jsonified, otherwise it is just a string.
685
- const formatVersion = getAttributesFormatVersion(attributes);
686
- if (formatVersion < 1) {
687
- pkgFromSnapshot =
688
- attributes.pkg.startsWith('["') && attributes.pkg.endsWith('"]')
689
- ? JSON.parse(attributes.pkg)
690
- : [attributes.pkg];
691
- }
692
- else {
693
- pkgFromSnapshot = JSON.parse(attributes.pkg);
694
- }
695
- this.pkg = pkgFromSnapshot;
696
- /**
697
- * If there is no isRootDataStore in the attributes blob, set it to true. This will ensure that
698
- * data stores in older documents are not garbage collected incorrectly. This may lead to additional
699
- * roots in the document but they won't break.
700
- */
701
- isRootDataStore = attributes.isRootDataStore ?? true;
702
- if (hasIsolatedChannels(attributes)) {
703
- tree = tree.trees[channelsTreeName];
704
- assert(tree !== undefined, 0x1fe /* "isolated channels subtree should exist in remote datastore snapshot" */);
705
- }
706
- }
707
- assert(this.pkg !== undefined, 0x8f6 /* The datastore context package should be defined */);
708
- return {
709
- pkg: this.pkg,
710
- isRootDataStore,
711
- snapshot: tree,
712
- sequenceNumber,
713
- };
714
- });
715
676
  this.runtime = props.parentContext.containerRuntime;
716
677
  if (isInstanceOfISnapshot(props.snapshot)) {
717
678
  this.blobContents = props.snapshot.blobContents;
@@ -735,13 +696,74 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
735
696
  4. attach op for this data store is processed - setAttachState() is called.
736
697
  */
737
698
  setAttachState(attachState) { }
699
+ initialSnapshotDetailsP = new LazyPromise(async () => {
700
+ // Sequence number of the snapshot.
701
+ let sequenceNumber;
702
+ // Check whether we need to fetch the snapshot first to load.
703
+ if (this.snapshotFetchRequired === undefined && this._baseSnapshot?.groupId !== undefined) {
704
+ assert(this.blobContents !== undefined, 0x97a /* Blob contents should be present to evaluate */);
705
+ assert(this._baseSnapshot !== undefined, 0x97b /* snapshotTree should be present to evaluate */);
706
+ this.snapshotFetchRequired = isSnapshotFetchRequiredForLoadingGroupId(this._baseSnapshot, this.blobContents);
707
+ }
708
+ if (this.snapshotFetchRequired) {
709
+ assert(this.loadingGroupId !== undefined, 0x8f5 /* groupId should be present to fetch snapshot */);
710
+ const snapshot = await this.runtime.getSnapshotForLoadingGroupId([this.loadingGroupId], [this.id]);
711
+ this._baseSnapshot = snapshot.snapshotTree;
712
+ sequenceNumber = snapshot.sequenceNumber;
713
+ this.snapshotFetchRequired = false;
714
+ }
715
+ let tree = this.baseSnapshot;
716
+ let isRootDataStore = true;
717
+ if (!!tree && tree.blobs[dataStoreAttributesBlobName] !== undefined) {
718
+ // Need to get through snapshot and use that to populate extraBlobs
719
+ // eslint-disable-next-line import/no-deprecated
720
+ const attributes = await readAndParse(this.storage, tree.blobs[dataStoreAttributesBlobName]);
721
+ let pkgFromSnapshot;
722
+ // Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.
723
+ // For snapshotFormatVersion = "0.1" (1) or above, pkg is jsonified, otherwise it is just a string.
724
+ const formatVersion = getAttributesFormatVersion(attributes);
725
+ if (formatVersion < 1) {
726
+ pkgFromSnapshot =
727
+ attributes.pkg.startsWith('["') && attributes.pkg.endsWith('"]')
728
+ ? JSON.parse(attributes.pkg)
729
+ : [attributes.pkg];
730
+ }
731
+ else {
732
+ pkgFromSnapshot = JSON.parse(attributes.pkg);
733
+ }
734
+ this.pkg = pkgFromSnapshot;
735
+ /**
736
+ * If there is no isRootDataStore in the attributes blob, set it to true. This will ensure that
737
+ * data stores in older documents are not garbage collected incorrectly. This may lead to additional
738
+ * roots in the document but they won't break.
739
+ */
740
+ isRootDataStore = attributes.isRootDataStore ?? true;
741
+ if (hasIsolatedChannels(attributes)) {
742
+ tree = tree.trees[channelsTreeName];
743
+ assert(tree !== undefined, 0x1fe /* "isolated channels subtree should exist in remote datastore snapshot" */);
744
+ }
745
+ }
746
+ assert(this.pkg !== undefined, 0x8f6 /* The datastore context package should be defined */);
747
+ return {
748
+ pkg: this.pkg,
749
+ isRootDataStore,
750
+ snapshot: tree,
751
+ sequenceNumber,
752
+ };
753
+ });
738
754
  async getInitialSnapshotDetails() {
739
755
  return this.initialSnapshotDetailsP;
740
756
  }
741
757
  /**
742
- * @see FluidDataStoreContext.getAttachData
758
+ * @see FluidDataStoreContext.getAttachSummary
743
759
  */
744
- getAttachData(includeGCData) {
760
+ getAttachSummary() {
761
+ throw new Error("Cannot attach remote store");
762
+ }
763
+ /**
764
+ * @see FluidDataStoreContext.getAttachGCData
765
+ */
766
+ getAttachGCData(telemetryContext) {
745
767
  throw new Error("Cannot attach remote store");
746
768
  }
747
769
  }
@@ -750,39 +772,13 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
750
772
  * @internal
751
773
  */
752
774
  export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
775
+ snapshotTree;
776
+ /**
777
+ * @deprecated 0.16 Issue #1635, #3631
778
+ */
779
+ createProps;
753
780
  constructor(props) {
754
781
  super(props, props.snapshotTree !== undefined /* existing */, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
755
- this.initialSnapshotDetailsP = new LazyPromise(async () => {
756
- let snapshot = this.snapshotTree;
757
- // eslint-disable-next-line import/no-deprecated
758
- let attributes;
759
- let isRootDataStore = false;
760
- if (snapshot !== undefined) {
761
- // Get the dataStore attributes.
762
- // Note: storage can be undefined in special case while detached.
763
- attributes = await getFluidDataStoreAttributes(this.storage, snapshot);
764
- if (hasIsolatedChannels(attributes)) {
765
- snapshot = snapshot.trees[channelsTreeName];
766
- assert(snapshot !== undefined, 0x1ff /* "isolated channels subtree should exist in local datastore snapshot" */);
767
- }
768
- if (this.pkg === undefined) {
769
- this.pkg = JSON.parse(attributes.pkg);
770
- // If there is no isRootDataStore in the attributes blob, set it to true. This ensures that data
771
- // stores in older documents are not garbage collected incorrectly. This may lead to additional
772
- // roots in the document but they won't break.
773
- if (attributes.isRootDataStore ?? true) {
774
- isRootDataStore = true;
775
- this.setInMemoryRoot();
776
- }
777
- }
778
- }
779
- assert(this.pkg !== undefined, 0x152 /* "pkg should be available in local data store" */);
780
- return {
781
- pkg: this.pkg,
782
- isRootDataStore,
783
- snapshot,
784
- };
785
- });
786
782
  // Summarizer client should not create local data stores.
787
783
  this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
788
784
  this.snapshotTree = props.snapshotTree;
@@ -828,9 +824,9 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
828
824
  }
829
825
  }
830
826
  /**
831
- * @see FluidDataStoreContext.getAttachData
827
+ * @see FluidDataStoreContext.getAttachSummary
832
828
  */
833
- getAttachData(includeGCData, telemetryContext) {
829
+ getAttachSummary(telemetryContext) {
834
830
  assert(this.channel !== undefined, 0x14f /* "There should be a channel when generating attach message" */);
835
831
  assert(this.pkg !== undefined, 0x150 /* "pkg should be available in local data store context" */);
836
832
  const attachSummary = this.channel.getAttachSummary(telemetryContext);
@@ -839,21 +835,50 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
839
835
  // Add data store's attributes to the summary.
840
836
  const attributes = createAttributes(this.pkg, this.isInMemoryRoot());
841
837
  addBlobToSummary(attachSummary, dataStoreAttributesBlobName, JSON.stringify(attributes));
842
- if (includeGCData) {
843
- const gcData = this.channel.getAttachGCData?.(telemetryContext);
844
- if (gcData !== undefined) {
845
- addBlobToSummary(attachSummary, gcDataBlobKey, JSON.stringify(gcData));
846
- }
847
- }
848
838
  // Add loadingGroupId to the summary
849
839
  if (this.loadingGroupId !== undefined) {
850
840
  attachSummary.summary.groupId = this.loadingGroupId;
851
841
  }
842
+ return attachSummary;
843
+ }
844
+ /**
845
+ * @see FluidDataStoreContext.getAttachGCData
846
+ */
847
+ getAttachGCData(telemetryContext) {
848
+ assert(this.channel !== undefined, "There should be a channel when generating attach GC data");
849
+ return this.channel.getAttachGCData(telemetryContext);
850
+ }
851
+ initialSnapshotDetailsP = new LazyPromise(async () => {
852
+ let snapshot = this.snapshotTree;
853
+ // eslint-disable-next-line import/no-deprecated
854
+ let attributes;
855
+ let isRootDataStore = false;
856
+ if (snapshot !== undefined) {
857
+ // Get the dataStore attributes.
858
+ // Note: storage can be undefined in special case while detached.
859
+ attributes = await getFluidDataStoreAttributes(this.storage, snapshot);
860
+ if (hasIsolatedChannels(attributes)) {
861
+ snapshot = snapshot.trees[channelsTreeName];
862
+ assert(snapshot !== undefined, 0x1ff /* "isolated channels subtree should exist in local datastore snapshot" */);
863
+ }
864
+ if (this.pkg === undefined) {
865
+ this.pkg = JSON.parse(attributes.pkg);
866
+ // If there is no isRootDataStore in the attributes blob, set it to true. This ensures that data
867
+ // stores in older documents are not garbage collected incorrectly. This may lead to additional
868
+ // roots in the document but they won't break.
869
+ if (attributes.isRootDataStore ?? true) {
870
+ isRootDataStore = true;
871
+ this.setInMemoryRoot();
872
+ }
873
+ }
874
+ }
875
+ assert(this.pkg !== undefined, 0x152 /* "pkg should be available in local data store" */);
852
876
  return {
853
- attachSummary,
854
- type: this.pkg[this.pkg.length - 1],
877
+ pkg: this.pkg,
878
+ isRootDataStore,
879
+ snapshot,
855
880
  };
856
- }
881
+ });
857
882
  async getInitialSnapshotDetails() {
858
883
  return this.initialSnapshotDetailsP;
859
884
  }
@@ -899,6 +924,7 @@ export class LocalDetachedFluidDataStoreContext extends LocalFluidDataStoreConte
899
924
  this.detachedRuntimeCreation = true;
900
925
  this.channelToDataStoreFn = props.channelToDataStoreFn;
901
926
  }
927
+ channelToDataStoreFn;
902
928
  async attachRuntime(registry, dataStoreChannel) {
903
929
  assert(this.detachedRuntimeCreation, 0x154 /* "runtime creation is already attached" */);
904
930
  this.detachedRuntimeCreation = false;