@fluidframework/container-runtime 2.0.0-internal.8.0.1 → 2.0.0-rc.1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +1 -7
  3. package/api-extractor-esm.json +4 -0
  4. package/api-extractor-lint.json +1 -10
  5. package/api-extractor.json +1 -9
  6. package/api-report/container-runtime.api.md +18 -17
  7. package/dist/blobManager.d.ts +8 -3
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +15 -4
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/container-runtime-alpha.d.ts +265 -17
  12. package/dist/container-runtime-beta.d.ts +0 -42
  13. package/dist/container-runtime-public.d.ts +0 -42
  14. package/dist/container-runtime-untrimmed.d.ts +32 -17
  15. package/dist/containerRuntime.d.ts +8 -4
  16. package/dist/containerRuntime.d.ts.map +1 -1
  17. package/dist/containerRuntime.js +15 -29
  18. package/dist/containerRuntime.js.map +1 -1
  19. package/dist/dataStoreContext.d.ts +5 -2
  20. package/dist/dataStoreContext.d.ts.map +1 -1
  21. package/dist/dataStoreContext.js +10 -3
  22. package/dist/dataStoreContext.js.map +1 -1
  23. package/dist/dataStores.d.ts +10 -3
  24. package/dist/dataStores.d.ts.map +1 -1
  25. package/dist/dataStores.js +51 -8
  26. package/dist/dataStores.js.map +1 -1
  27. package/dist/gc/garbageCollection.d.ts.map +1 -1
  28. package/dist/gc/garbageCollection.js +15 -4
  29. package/dist/gc/garbageCollection.js.map +1 -1
  30. package/dist/gc/gcConfigs.d.ts.map +1 -1
  31. package/dist/gc/gcConfigs.js +26 -19
  32. package/dist/gc/gcConfigs.js.map +1 -1
  33. package/dist/gc/gcDefinitions.d.ts +29 -6
  34. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  35. package/dist/gc/gcDefinitions.js +5 -3
  36. package/dist/gc/gcDefinitions.js.map +1 -1
  37. package/dist/gc/gcTelemetry.d.ts +13 -6
  38. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  39. package/dist/gc/gcTelemetry.js +18 -9
  40. package/dist/gc/gcTelemetry.js.map +1 -1
  41. package/dist/gc/index.d.ts +1 -1
  42. package/dist/gc/index.d.ts.map +1 -1
  43. package/dist/gc/index.js +2 -1
  44. package/dist/gc/index.js.map +1 -1
  45. package/dist/messageTypes.d.ts +1 -1
  46. package/dist/messageTypes.js +1 -1
  47. package/dist/messageTypes.js.map +1 -1
  48. package/dist/opLifecycle/definitions.d.ts +1 -1
  49. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  50. package/dist/opLifecycle/definitions.js.map +1 -1
  51. package/dist/opLifecycle/outbox.d.ts +4 -4
  52. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  53. package/dist/opLifecycle/outbox.js +4 -1
  54. package/dist/opLifecycle/outbox.js.map +1 -1
  55. package/dist/packageVersion.d.ts +1 -1
  56. package/dist/packageVersion.d.ts.map +1 -1
  57. package/dist/packageVersion.js +1 -1
  58. package/dist/packageVersion.js.map +1 -1
  59. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  60. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  61. package/dist/summary/runningSummarizer.d.ts +5 -0
  62. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  63. package/dist/summary/runningSummarizer.js +46 -17
  64. package/dist/summary/runningSummarizer.js.map +1 -1
  65. package/dist/summary/summarizer.d.ts +1 -1
  66. package/dist/summary/summarizer.js +1 -1
  67. package/dist/summary/summarizer.js.map +1 -1
  68. package/dist/summary/summarizerTypes.d.ts +3 -1
  69. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  70. package/dist/summary/summarizerTypes.js.map +1 -1
  71. package/dist/summary/summaryCollection.d.ts +7 -7
  72. package/dist/summary/summaryCollection.js +1 -1
  73. package/dist/summary/summaryCollection.js.map +1 -1
  74. package/lib/{batchTracker.d.ts → batchTracker.d.mts} +1 -1
  75. package/lib/batchTracker.d.mts.map +1 -0
  76. package/lib/{batchTracker.js → batchTracker.mjs} +1 -1
  77. package/lib/batchTracker.mjs.map +1 -0
  78. package/lib/{blobManager.d.ts → blobManager.d.mts} +9 -4
  79. package/lib/blobManager.d.mts.map +1 -0
  80. package/lib/{blobManager.js → blobManager.mjs} +17 -6
  81. package/lib/blobManager.mjs.map +1 -0
  82. package/lib/{connectionTelemetry.d.ts → connectionTelemetry.d.mts} +1 -1
  83. package/lib/connectionTelemetry.d.mts.map +1 -0
  84. package/lib/{connectionTelemetry.js → connectionTelemetry.mjs} +1 -1
  85. package/lib/connectionTelemetry.mjs.map +1 -0
  86. package/lib/{container-runtime-alpha.d.ts → container-runtime-alpha.d.mts} +265 -17
  87. package/lib/{container-runtime-beta.d.ts → container-runtime-beta.d.mts} +0 -42
  88. package/lib/{container-runtime-public.d.ts → container-runtime-public.d.mts} +0 -42
  89. package/lib/{container-runtime-untrimmed.d.ts → container-runtime-untrimmed.d.mts} +32 -17
  90. package/lib/{containerHandleContext.d.ts → containerHandleContext.d.mts} +2 -2
  91. package/lib/containerHandleContext.d.mts.map +1 -0
  92. package/lib/{containerHandleContext.js → containerHandleContext.mjs} +1 -1
  93. package/lib/containerHandleContext.mjs.map +1 -0
  94. package/lib/{containerRuntime.d.ts → containerRuntime.d.mts} +14 -14
  95. package/lib/containerRuntime.d.mts.map +1 -0
  96. package/lib/{containerRuntime.js → containerRuntime.mjs} +31 -22
  97. package/lib/containerRuntime.mjs.map +1 -0
  98. package/lib/{dataStore.d.ts → dataStore.d.mts} +3 -3
  99. package/lib/dataStore.d.mts.map +1 -0
  100. package/lib/{dataStore.js → dataStore.mjs} +1 -1
  101. package/lib/dataStore.mjs.map +1 -0
  102. package/lib/{dataStoreContext.d.ts → dataStoreContext.d.mts} +7 -4
  103. package/lib/dataStoreContext.d.mts.map +1 -0
  104. package/lib/{dataStoreContext.js → dataStoreContext.mjs} +13 -6
  105. package/lib/dataStoreContext.mjs.map +1 -0
  106. package/lib/{dataStoreContexts.d.ts → dataStoreContexts.d.mts} +2 -2
  107. package/lib/dataStoreContexts.d.mts.map +1 -0
  108. package/lib/{dataStoreContexts.js → dataStoreContexts.mjs} +1 -1
  109. package/lib/dataStoreContexts.mjs.map +1 -0
  110. package/lib/{dataStoreRegistry.d.ts → dataStoreRegistry.d.mts} +1 -1
  111. package/lib/dataStoreRegistry.d.mts.map +1 -0
  112. package/lib/{dataStoreRegistry.js → dataStoreRegistry.mjs} +1 -5
  113. package/lib/dataStoreRegistry.mjs.map +1 -0
  114. package/lib/{dataStores.d.ts → dataStores.d.mts} +17 -10
  115. package/lib/dataStores.d.mts.map +1 -0
  116. package/lib/{dataStores.js → dataStores.mjs} +58 -16
  117. package/lib/dataStores.mjs.map +1 -0
  118. package/lib/{deltaManagerProxyBase.d.ts → deltaManagerProxyBase.d.mts} +1 -1
  119. package/lib/deltaManagerProxyBase.d.mts.map +1 -0
  120. package/lib/{deltaManagerProxyBase.js → deltaManagerProxyBase.mjs} +1 -1
  121. package/lib/deltaManagerProxyBase.mjs.map +1 -0
  122. package/lib/{deltaManagerSummarizerProxy.d.ts → deltaManagerSummarizerProxy.d.mts} +2 -2
  123. package/lib/deltaManagerSummarizerProxy.d.mts.map +1 -0
  124. package/lib/{deltaManagerSummarizerProxy.js → deltaManagerSummarizerProxy.mjs} +3 -3
  125. package/lib/deltaManagerSummarizerProxy.mjs.map +1 -0
  126. package/lib/{deltaScheduler.d.ts → deltaScheduler.d.mts} +1 -1
  127. package/lib/deltaScheduler.d.mts.map +1 -0
  128. package/lib/{deltaScheduler.js → deltaScheduler.mjs} +1 -1
  129. package/lib/deltaScheduler.mjs.map +1 -0
  130. package/lib/{error.d.ts → error.d.mts} +1 -1
  131. package/lib/error.d.mts.map +1 -0
  132. package/lib/{error.js → error.mjs} +1 -1
  133. package/lib/error.mjs.map +1 -0
  134. package/lib/gc/{garbageCollection.d.ts → garbageCollection.d.mts} +5 -5
  135. package/lib/gc/garbageCollection.d.mts.map +1 -0
  136. package/lib/gc/{garbageCollection.js → garbageCollection.mjs} +28 -17
  137. package/lib/gc/garbageCollection.mjs.map +1 -0
  138. package/lib/gc/{gcConfigs.d.ts → gcConfigs.d.mts} +3 -3
  139. package/lib/gc/gcConfigs.d.mts.map +1 -0
  140. package/lib/gc/{gcConfigs.js → gcConfigs.mjs} +29 -22
  141. package/lib/gc/gcConfigs.mjs.map +1 -0
  142. package/lib/gc/{gcDefinitions.d.ts → gcDefinitions.d.mts} +33 -10
  143. package/lib/gc/gcDefinitions.d.mts.map +1 -0
  144. package/lib/gc/{gcDefinitions.js → gcDefinitions.mjs} +5 -3
  145. package/lib/gc/gcDefinitions.mjs.map +1 -0
  146. package/lib/gc/{gcHelpers.d.ts → gcHelpers.d.mts} +3 -3
  147. package/lib/gc/{gcHelpers.d.ts.map → gcHelpers.d.mts.map} +1 -1
  148. package/lib/gc/{gcHelpers.js → gcHelpers.mjs} +1 -1
  149. package/lib/gc/gcHelpers.mjs.map +1 -0
  150. package/lib/gc/{gcReferenceGraphAlgorithm.d.ts → gcReferenceGraphAlgorithm.d.mts} +2 -2
  151. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +1 -0
  152. package/lib/gc/{gcReferenceGraphAlgorithm.js → gcReferenceGraphAlgorithm.mjs} +1 -1
  153. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +1 -0
  154. package/lib/gc/{gcSummaryDefinitions.d.ts → gcSummaryDefinitions.d.mts} +1 -1
  155. package/lib/gc/gcSummaryDefinitions.d.mts.map +1 -0
  156. package/lib/gc/{gcSummaryDefinitions.js → gcSummaryDefinitions.mjs} +1 -1
  157. package/lib/gc/gcSummaryDefinitions.mjs.map +1 -0
  158. package/lib/gc/{gcSummaryStateTracker.d.ts → gcSummaryStateTracker.d.mts} +4 -4
  159. package/lib/gc/gcSummaryStateTracker.d.mts.map +1 -0
  160. package/lib/gc/{gcSummaryStateTracker.js → gcSummaryStateTracker.mjs} +2 -2
  161. package/lib/gc/gcSummaryStateTracker.mjs.map +1 -0
  162. package/lib/gc/{gcTelemetry.d.ts → gcTelemetry.d.mts} +18 -11
  163. package/lib/gc/gcTelemetry.d.mts.map +1 -0
  164. package/lib/gc/{gcTelemetry.js → gcTelemetry.mjs} +20 -11
  165. package/lib/gc/gcTelemetry.mjs.map +1 -0
  166. package/lib/gc/{gcUnreferencedStateTracker.d.ts → gcUnreferencedStateTracker.d.mts} +2 -2
  167. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +1 -0
  168. package/lib/gc/{gcUnreferencedStateTracker.js → gcUnreferencedStateTracker.mjs} +2 -2
  169. package/lib/gc/gcUnreferencedStateTracker.mjs.map +1 -0
  170. package/lib/gc/{index.d.ts → index.d.mts} +9 -9
  171. package/lib/gc/index.d.mts.map +1 -0
  172. package/lib/gc/{index.js → index.mjs} +8 -8
  173. package/lib/gc/index.mjs.map +1 -0
  174. package/lib/{index.d.ts → index.d.mts} +8 -8
  175. package/lib/index.d.mts.map +1 -0
  176. package/lib/{index.js → index.mjs} +7 -9
  177. package/lib/index.mjs.map +1 -0
  178. package/lib/{messageTypes.d.ts → messageTypes.d.mts} +5 -5
  179. package/lib/messageTypes.d.mts.map +1 -0
  180. package/lib/{messageTypes.js → messageTypes.mjs} +2 -2
  181. package/lib/messageTypes.mjs.map +1 -0
  182. package/lib/{metadata.d.ts → metadata.d.mts} +1 -1
  183. package/lib/metadata.d.mts.map +1 -0
  184. package/lib/{metadata.js → metadata.mjs} +1 -1
  185. package/lib/metadata.mjs.map +1 -0
  186. package/lib/opLifecycle/{batchManager.d.ts → batchManager.d.mts} +3 -3
  187. package/lib/opLifecycle/batchManager.d.mts.map +1 -0
  188. package/lib/opLifecycle/{batchManager.js → batchManager.mjs} +1 -1
  189. package/lib/opLifecycle/batchManager.mjs.map +1 -0
  190. package/lib/opLifecycle/{definitions.d.ts → definitions.d.mts} +3 -3
  191. package/lib/opLifecycle/definitions.d.mts.map +1 -0
  192. package/lib/opLifecycle/{definitions.js → definitions.mjs} +1 -1
  193. package/lib/opLifecycle/definitions.mjs.map +1 -0
  194. package/lib/opLifecycle/index.d.mts +13 -0
  195. package/lib/opLifecycle/index.d.mts.map +1 -0
  196. package/lib/opLifecycle/index.mjs +12 -0
  197. package/lib/opLifecycle/index.mjs.map +1 -0
  198. package/lib/opLifecycle/{opCompressor.d.ts → opCompressor.d.mts} +2 -2
  199. package/lib/opLifecycle/opCompressor.d.mts.map +1 -0
  200. package/lib/opLifecycle/{opCompressor.js → opCompressor.mjs} +3 -3
  201. package/lib/opLifecycle/opCompressor.mjs.map +1 -0
  202. package/lib/opLifecycle/{opDecompressor.d.ts → opDecompressor.d.mts} +2 -2
  203. package/lib/opLifecycle/opDecompressor.d.mts.map +1 -0
  204. package/lib/opLifecycle/{opDecompressor.js → opDecompressor.mjs} +2 -2
  205. package/lib/opLifecycle/opDecompressor.mjs.map +1 -0
  206. package/lib/opLifecycle/{opGroupingManager.d.ts → opGroupingManager.d.mts} +2 -2
  207. package/lib/opLifecycle/opGroupingManager.d.mts.map +1 -0
  208. package/lib/opLifecycle/{opGroupingManager.js → opGroupingManager.mjs} +1 -1
  209. package/lib/opLifecycle/opGroupingManager.mjs.map +1 -0
  210. package/lib/opLifecycle/{opSplitter.d.ts → opSplitter.d.mts} +2 -2
  211. package/lib/opLifecycle/opSplitter.d.mts.map +1 -0
  212. package/lib/opLifecycle/{opSplitter.js → opSplitter.mjs} +3 -3
  213. package/lib/opLifecycle/opSplitter.mjs.map +1 -0
  214. package/lib/opLifecycle/{outbox.d.ts → outbox.d.mts} +11 -11
  215. package/lib/opLifecycle/outbox.d.mts.map +1 -0
  216. package/lib/opLifecycle/{outbox.js → outbox.mjs} +6 -3
  217. package/lib/opLifecycle/outbox.mjs.map +1 -0
  218. package/lib/opLifecycle/{remoteMessageProcessor.d.ts → remoteMessageProcessor.d.mts} +5 -5
  219. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +1 -0
  220. package/lib/opLifecycle/{remoteMessageProcessor.js → remoteMessageProcessor.mjs} +2 -2
  221. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +1 -0
  222. package/lib/{opProperties.d.ts → opProperties.d.mts} +1 -1
  223. package/lib/opProperties.d.mts.map +1 -0
  224. package/lib/{opProperties.js → opProperties.mjs} +1 -1
  225. package/lib/opProperties.mjs.map +1 -0
  226. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +2 -2
  227. package/lib/packageVersion.d.mts.map +1 -0
  228. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  229. package/lib/packageVersion.mjs.map +1 -0
  230. package/lib/{pendingStateManager.d.ts → pendingStateManager.d.mts} +2 -2
  231. package/lib/pendingStateManager.d.mts.map +1 -0
  232. package/lib/{pendingStateManager.js → pendingStateManager.mjs} +2 -2
  233. package/lib/pendingStateManager.mjs.map +1 -0
  234. package/lib/{scheduleManager.d.ts → scheduleManager.d.mts} +1 -5
  235. package/lib/scheduleManager.d.mts.map +1 -0
  236. package/lib/{scheduleManager.js → scheduleManager.mjs} +3 -3
  237. package/lib/scheduleManager.mjs.map +1 -0
  238. package/lib/{storageServiceWithAttachBlobs.d.ts → storageServiceWithAttachBlobs.d.mts} +1 -1
  239. package/lib/storageServiceWithAttachBlobs.d.mts.map +1 -0
  240. package/lib/{storageServiceWithAttachBlobs.js → storageServiceWithAttachBlobs.mjs} +1 -1
  241. package/lib/storageServiceWithAttachBlobs.mjs.map +1 -0
  242. package/lib/summary/{index.d.ts → index.d.mts} +13 -13
  243. package/lib/summary/index.d.mts.map +1 -0
  244. package/lib/summary/{index.js → index.mjs} +12 -12
  245. package/lib/summary/index.mjs.map +1 -0
  246. package/lib/summary/{orderedClientElection.d.ts → orderedClientElection.d.mts} +1 -5
  247. package/lib/summary/orderedClientElection.d.mts.map +1 -0
  248. package/lib/summary/{orderedClientElection.js → orderedClientElection.mjs} +2 -2
  249. package/lib/summary/orderedClientElection.mjs.map +1 -0
  250. package/lib/summary/{runWhileConnectedCoordinator.d.ts → runWhileConnectedCoordinator.d.mts} +3 -3
  251. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +1 -0
  252. package/lib/summary/{runWhileConnectedCoordinator.js → runWhileConnectedCoordinator.mjs} +1 -1
  253. package/lib/summary/runWhileConnectedCoordinator.mjs.map +1 -0
  254. package/lib/summary/{runningSummarizer.d.ts → runningSummarizer.d.mts} +10 -5
  255. package/lib/summary/runningSummarizer.d.mts.map +1 -0
  256. package/lib/summary/{runningSummarizer.js → runningSummarizer.mjs} +50 -21
  257. package/lib/summary/runningSummarizer.mjs.map +1 -0
  258. package/lib/summary/{summarizer.d.ts → summarizer.d.mts} +6 -6
  259. package/lib/summary/summarizer.d.mts.map +1 -0
  260. package/lib/summary/{summarizer.js → summarizer.mjs} +5 -5
  261. package/lib/summary/summarizer.mjs.map +1 -0
  262. package/lib/summary/{summarizerClientElection.d.ts → summarizerClientElection.d.mts} +3 -3
  263. package/lib/summary/summarizerClientElection.d.mts.map +1 -0
  264. package/lib/summary/{summarizerClientElection.js → summarizerClientElection.mjs} +1 -1
  265. package/lib/summary/summarizerClientElection.mjs.map +1 -0
  266. package/lib/summary/{summarizerHeuristics.d.ts → summarizerHeuristics.d.mts} +4 -4
  267. package/lib/summary/summarizerHeuristics.d.mts.map +1 -0
  268. package/lib/summary/{summarizerHeuristics.js → summarizerHeuristics.mjs} +1 -1
  269. package/lib/summary/summarizerHeuristics.mjs.map +1 -0
  270. package/lib/summary/summarizerNode/{index.d.ts → index.d.mts} +4 -4
  271. package/lib/summary/summarizerNode/index.d.mts.map +1 -0
  272. package/lib/summary/summarizerNode/{index.js → index.mjs} +3 -3
  273. package/lib/summary/summarizerNode/index.mjs.map +1 -0
  274. package/lib/summary/summarizerNode/{summarizerNode.d.ts → summarizerNode.d.mts} +2 -2
  275. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +1 -0
  276. package/lib/summary/summarizerNode/{summarizerNode.js → summarizerNode.mjs} +2 -2
  277. package/lib/summary/summarizerNode/summarizerNode.mjs.map +1 -0
  278. package/lib/summary/summarizerNode/{summarizerNodeUtils.d.ts → summarizerNodeUtils.d.mts} +1 -1
  279. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +1 -0
  280. package/lib/summary/summarizerNode/{summarizerNodeUtils.js → summarizerNodeUtils.mjs} +1 -1
  281. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +1 -0
  282. package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.ts → summarizerNodeWithGc.d.mts} +3 -3
  283. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +1 -0
  284. package/lib/summary/summarizerNode/{summarizerNodeWithGc.js → summarizerNodeWithGc.mjs} +4 -4
  285. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +1 -0
  286. package/lib/summary/{summarizerTypes.d.ts → summarizerTypes.d.mts} +7 -5
  287. package/lib/summary/summarizerTypes.d.mts.map +1 -0
  288. package/lib/summary/{summarizerTypes.js → summarizerTypes.mjs} +1 -1
  289. package/lib/summary/summarizerTypes.mjs.map +1 -0
  290. package/lib/summary/{summaryCollection.d.ts → summaryCollection.d.mts} +8 -8
  291. package/lib/summary/summaryCollection.d.mts.map +1 -0
  292. package/lib/summary/{summaryCollection.js → summaryCollection.mjs} +2 -2
  293. package/lib/summary/summaryCollection.mjs.map +1 -0
  294. package/lib/summary/{summaryFormat.d.ts → summaryFormat.d.mts} +2 -2
  295. package/lib/summary/summaryFormat.d.mts.map +1 -0
  296. package/lib/summary/{summaryFormat.js → summaryFormat.mjs} +1 -1
  297. package/lib/summary/summaryFormat.mjs.map +1 -0
  298. package/lib/summary/{summaryGenerator.d.ts → summaryGenerator.d.mts} +3 -3
  299. package/lib/summary/summaryGenerator.d.mts.map +1 -0
  300. package/lib/summary/{summaryGenerator.js → summaryGenerator.mjs} +1 -1
  301. package/lib/summary/summaryGenerator.mjs.map +1 -0
  302. package/lib/summary/{summaryManager.d.ts → summaryManager.d.mts} +5 -5
  303. package/lib/summary/summaryManager.d.mts.map +1 -0
  304. package/lib/summary/{summaryManager.js → summaryManager.mjs} +2 -2
  305. package/lib/summary/summaryManager.mjs.map +1 -0
  306. package/lib/{throttler.d.ts → throttler.d.mts} +1 -1
  307. package/lib/throttler.d.mts.map +1 -0
  308. package/lib/{throttler.js → throttler.mjs} +1 -1
  309. package/lib/throttler.mjs.map +1 -0
  310. package/package.json +145 -39
  311. package/src/blobManager.ts +15 -4
  312. package/src/containerRuntime.ts +15 -4
  313. package/src/dataStoreContext.ts +11 -4
  314. package/src/dataStores.ts +61 -7
  315. package/src/gc/garbageCollection.ts +18 -4
  316. package/src/gc/gcConfigs.ts +28 -20
  317. package/src/gc/gcDefinitions.ts +30 -6
  318. package/src/gc/gcTelemetry.ts +19 -9
  319. package/src/gc/index.ts +3 -0
  320. package/src/messageTypes.ts +1 -1
  321. package/src/opLifecycle/definitions.ts +1 -1
  322. package/src/opLifecycle/outbox.ts +5 -2
  323. package/src/packageVersion.ts +1 -1
  324. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  325. package/src/summary/runningSummarizer.ts +58 -25
  326. package/src/summary/summarizer.ts +1 -1
  327. package/src/summary/summarizerTypes.ts +3 -1
  328. package/src/summary/summaryCollection.ts +7 -7
  329. package/tsconfig.json +6 -4
  330. package/lib/batchTracker.d.ts.map +0 -1
  331. package/lib/batchTracker.js.map +0 -1
  332. package/lib/blobManager.d.ts.map +0 -1
  333. package/lib/blobManager.js.map +0 -1
  334. package/lib/connectionTelemetry.d.ts.map +0 -1
  335. package/lib/connectionTelemetry.js.map +0 -1
  336. package/lib/containerHandleContext.d.ts.map +0 -1
  337. package/lib/containerHandleContext.js.map +0 -1
  338. package/lib/containerRuntime.d.ts.map +0 -1
  339. package/lib/containerRuntime.js.map +0 -1
  340. package/lib/dataStore.d.ts.map +0 -1
  341. package/lib/dataStore.js.map +0 -1
  342. package/lib/dataStoreContext.d.ts.map +0 -1
  343. package/lib/dataStoreContext.js.map +0 -1
  344. package/lib/dataStoreContexts.d.ts.map +0 -1
  345. package/lib/dataStoreContexts.js.map +0 -1
  346. package/lib/dataStoreRegistry.d.ts.map +0 -1
  347. package/lib/dataStoreRegistry.js.map +0 -1
  348. package/lib/dataStores.d.ts.map +0 -1
  349. package/lib/dataStores.js.map +0 -1
  350. package/lib/deltaManagerProxyBase.d.ts.map +0 -1
  351. package/lib/deltaManagerProxyBase.js.map +0 -1
  352. package/lib/deltaManagerSummarizerProxy.d.ts.map +0 -1
  353. package/lib/deltaManagerSummarizerProxy.js.map +0 -1
  354. package/lib/deltaScheduler.d.ts.map +0 -1
  355. package/lib/deltaScheduler.js.map +0 -1
  356. package/lib/error.d.ts.map +0 -1
  357. package/lib/error.js.map +0 -1
  358. package/lib/gc/garbageCollection.d.ts.map +0 -1
  359. package/lib/gc/garbageCollection.js.map +0 -1
  360. package/lib/gc/gcConfigs.d.ts.map +0 -1
  361. package/lib/gc/gcConfigs.js.map +0 -1
  362. package/lib/gc/gcDefinitions.d.ts.map +0 -1
  363. package/lib/gc/gcDefinitions.js.map +0 -1
  364. package/lib/gc/gcHelpers.js.map +0 -1
  365. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +0 -1
  366. package/lib/gc/gcReferenceGraphAlgorithm.js.map +0 -1
  367. package/lib/gc/gcSummaryDefinitions.d.ts.map +0 -1
  368. package/lib/gc/gcSummaryDefinitions.js.map +0 -1
  369. package/lib/gc/gcSummaryStateTracker.d.ts.map +0 -1
  370. package/lib/gc/gcSummaryStateTracker.js.map +0 -1
  371. package/lib/gc/gcTelemetry.d.ts.map +0 -1
  372. package/lib/gc/gcTelemetry.js.map +0 -1
  373. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +0 -1
  374. package/lib/gc/gcUnreferencedStateTracker.js.map +0 -1
  375. package/lib/gc/index.d.ts.map +0 -1
  376. package/lib/gc/index.js.map +0 -1
  377. package/lib/index.d.ts.map +0 -1
  378. package/lib/index.js.map +0 -1
  379. package/lib/messageTypes.d.ts.map +0 -1
  380. package/lib/messageTypes.js.map +0 -1
  381. package/lib/metadata.d.ts.map +0 -1
  382. package/lib/metadata.js.map +0 -1
  383. package/lib/opLifecycle/batchManager.d.ts.map +0 -1
  384. package/lib/opLifecycle/batchManager.js.map +0 -1
  385. package/lib/opLifecycle/definitions.d.ts.map +0 -1
  386. package/lib/opLifecycle/definitions.js.map +0 -1
  387. package/lib/opLifecycle/index.d.ts +0 -13
  388. package/lib/opLifecycle/index.d.ts.map +0 -1
  389. package/lib/opLifecycle/index.js +0 -12
  390. package/lib/opLifecycle/index.js.map +0 -1
  391. package/lib/opLifecycle/opCompressor.d.ts.map +0 -1
  392. package/lib/opLifecycle/opCompressor.js.map +0 -1
  393. package/lib/opLifecycle/opDecompressor.d.ts.map +0 -1
  394. package/lib/opLifecycle/opDecompressor.js.map +0 -1
  395. package/lib/opLifecycle/opGroupingManager.d.ts.map +0 -1
  396. package/lib/opLifecycle/opGroupingManager.js.map +0 -1
  397. package/lib/opLifecycle/opSplitter.d.ts.map +0 -1
  398. package/lib/opLifecycle/opSplitter.js.map +0 -1
  399. package/lib/opLifecycle/outbox.d.ts.map +0 -1
  400. package/lib/opLifecycle/outbox.js.map +0 -1
  401. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +0 -1
  402. package/lib/opLifecycle/remoteMessageProcessor.js.map +0 -1
  403. package/lib/opProperties.d.ts.map +0 -1
  404. package/lib/opProperties.js.map +0 -1
  405. package/lib/packageVersion.d.ts.map +0 -1
  406. package/lib/packageVersion.js.map +0 -1
  407. package/lib/pendingStateManager.d.ts.map +0 -1
  408. package/lib/pendingStateManager.js.map +0 -1
  409. package/lib/scheduleManager.d.ts.map +0 -1
  410. package/lib/scheduleManager.js.map +0 -1
  411. package/lib/storageServiceWithAttachBlobs.d.ts.map +0 -1
  412. package/lib/storageServiceWithAttachBlobs.js.map +0 -1
  413. package/lib/summary/index.d.ts.map +0 -1
  414. package/lib/summary/index.js.map +0 -1
  415. package/lib/summary/orderedClientElection.d.ts.map +0 -1
  416. package/lib/summary/orderedClientElection.js.map +0 -1
  417. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +0 -1
  418. package/lib/summary/runWhileConnectedCoordinator.js.map +0 -1
  419. package/lib/summary/runningSummarizer.d.ts.map +0 -1
  420. package/lib/summary/runningSummarizer.js.map +0 -1
  421. package/lib/summary/summarizer.d.ts.map +0 -1
  422. package/lib/summary/summarizer.js.map +0 -1
  423. package/lib/summary/summarizerClientElection.d.ts.map +0 -1
  424. package/lib/summary/summarizerClientElection.js.map +0 -1
  425. package/lib/summary/summarizerHeuristics.d.ts.map +0 -1
  426. package/lib/summary/summarizerHeuristics.js.map +0 -1
  427. package/lib/summary/summarizerNode/index.d.ts.map +0 -1
  428. package/lib/summary/summarizerNode/index.js.map +0 -1
  429. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +0 -1
  430. package/lib/summary/summarizerNode/summarizerNode.js.map +0 -1
  431. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +0 -1
  432. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +0 -1
  433. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +0 -1
  434. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +0 -1
  435. package/lib/summary/summarizerTypes.d.ts.map +0 -1
  436. package/lib/summary/summarizerTypes.js.map +0 -1
  437. package/lib/summary/summaryCollection.d.ts.map +0 -1
  438. package/lib/summary/summaryCollection.js.map +0 -1
  439. package/lib/summary/summaryFormat.d.ts.map +0 -1
  440. package/lib/summary/summaryFormat.js.map +0 -1
  441. package/lib/summary/summaryGenerator.d.ts.map +0 -1
  442. package/lib/summary/summaryGenerator.js.map +0 -1
  443. package/lib/summary/summaryManager.d.ts.map +0 -1
  444. package/lib/summary/summaryManager.js.map +0 -1
  445. package/lib/throttler.d.ts.map +0 -1
  446. package/lib/throttler.js.map +0 -1
  447. package/tsconfig.esnext.json +0 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/container-runtime",
3
- "version": "2.0.0-internal.8.0.1",
3
+ "version": "2.0.0-rc.1.0.1",
4
4
  "description": "Fluid container runtime",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -11,20 +11,132 @@
11
11
  "license": "MIT",
12
12
  "author": "Microsoft and contributors",
13
13
  "sideEffects": false,
14
+ "exports": {
15
+ ".": {
16
+ "import": {
17
+ "types": "./lib/index.d.mts",
18
+ "default": "./lib/index.mjs"
19
+ },
20
+ "require": {
21
+ "types": "./dist/index.d.ts",
22
+ "default": "./dist/index.js"
23
+ }
24
+ },
25
+ "./test/containerRuntime": {
26
+ "import": {
27
+ "types": "./lib/containerRuntime.d.mts",
28
+ "default": "./lib/containerRuntime.mjs"
29
+ },
30
+ "require": {
31
+ "types": "./dist/containerRuntime.d.ts",
32
+ "default": "./dist/containerRuntime.js"
33
+ }
34
+ },
35
+ "./test/deltaScheduler": {
36
+ "import": {
37
+ "types": "./lib/deltaScheduler.d.mts",
38
+ "default": "./lib/deltaScheduler.mjs"
39
+ },
40
+ "require": {
41
+ "types": "./dist/deltaScheduler.d.ts",
42
+ "default": "./dist/deltaScheduler.js"
43
+ }
44
+ },
45
+ "./test/scheduleManager": {
46
+ "import": {
47
+ "types": "./lib/scheduleManager.d.mts",
48
+ "default": "./lib/scheduleManager.mjs"
49
+ },
50
+ "require": {
51
+ "types": "./dist/scheduleManager.d.ts",
52
+ "default": "./dist/scheduleManager.js"
53
+ }
54
+ },
55
+ "./test/blobManager": {
56
+ "import": {
57
+ "types": "./lib/blobManager.d.mts",
58
+ "default": "./lib/blobManager.mjs"
59
+ },
60
+ "require": {
61
+ "types": "./dist/blobManager.d.ts",
62
+ "default": "./dist/blobManager.js"
63
+ }
64
+ },
65
+ "./test/summary": {
66
+ "import": {
67
+ "types": "./lib/summary/index.d.mts",
68
+ "default": "./lib/summary/index.mjs"
69
+ },
70
+ "require": {
71
+ "types": "./dist/summary/index.d.ts",
72
+ "default": "./dist/summary/index.js"
73
+ }
74
+ },
75
+ "./test/gc": {
76
+ "import": {
77
+ "types": "./lib/gc/index.d.mts",
78
+ "default": "./lib/gc/index.mjs"
79
+ },
80
+ "require": {
81
+ "types": "./gc/index.d.ts",
82
+ "default": "./gc/index.js"
83
+ }
84
+ },
85
+ "./alpha": {
86
+ "import": {
87
+ "types": "./lib/container-runtime-alpha.d.mts",
88
+ "default": "./lib/index.mjs"
89
+ },
90
+ "require": {
91
+ "types": "./dist/container-runtime-alpha.d.ts",
92
+ "default": "./dist/index.js"
93
+ }
94
+ },
95
+ "./beta": {
96
+ "import": {
97
+ "types": "./lib/container-runtime-beta.d.mts",
98
+ "default": "./lib/index.mjs"
99
+ },
100
+ "require": {
101
+ "types": "./dist/container-runtime-beta.d.ts",
102
+ "default": "./dist/index.js"
103
+ }
104
+ },
105
+ "./internal": {
106
+ "import": {
107
+ "types": "./lib/index.d.mts",
108
+ "default": "./lib/index.mjs"
109
+ },
110
+ "require": {
111
+ "types": "./dist/index.d.ts",
112
+ "default": "./dist/index.js"
113
+ }
114
+ },
115
+ "./public": {
116
+ "import": {
117
+ "types": "./lib/container-runtime-public.d.mts",
118
+ "default": "./lib/index.mjs"
119
+ },
120
+ "require": {
121
+ "types": "./dist/container-runtime-public.d.ts",
122
+ "default": "./dist/index.js"
123
+ }
124
+ }
125
+ },
14
126
  "main": "dist/index.js",
15
- "module": "lib/index.js",
127
+ "module": "lib/index.mjs",
16
128
  "types": "dist/index.d.ts",
17
129
  "c8": {
18
130
  "all": true,
19
131
  "cache-dir": "nyc/.cache",
20
132
  "exclude": [
21
- "src/test/**/*.ts",
22
- "dist/test/**/*.js"
133
+ "src/test/**/*.*ts",
134
+ "dist/test/**/*.*js"
23
135
  ],
24
136
  "exclude-after-remap": false,
25
137
  "include": [
26
- "src/**/*.ts",
27
- "dist/**/*.js"
138
+ "src/**/*.*ts",
139
+ "dist/**/*.*js"
28
140
  ],
29
141
  "report-dir": "nyc/report",
30
142
  "reporter": [
@@ -35,43 +147,43 @@
35
147
  "temp-directory": "nyc/.nyc_output"
36
148
  },
37
149
  "dependencies": {
38
- "@fluid-internal/client-utils": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
39
- "@fluidframework/container-definitions": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
40
- "@fluidframework/container-runtime-definitions": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
41
- "@fluidframework/core-interfaces": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
42
- "@fluidframework/core-utils": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
43
- "@fluidframework/datastore": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
44
- "@fluidframework/driver-definitions": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
45
- "@fluidframework/driver-utils": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
46
- "@fluidframework/id-compressor": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
47
- "@fluidframework/protocol-definitions": "^3.0.0",
48
- "@fluidframework/runtime-definitions": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
49
- "@fluidframework/runtime-utils": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
50
- "@fluidframework/telemetry-utils": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
150
+ "@fluid-internal/client-utils": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
151
+ "@fluidframework/container-definitions": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
152
+ "@fluidframework/container-runtime-definitions": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
153
+ "@fluidframework/core-interfaces": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
154
+ "@fluidframework/core-utils": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
155
+ "@fluidframework/datastore": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
156
+ "@fluidframework/driver-definitions": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
157
+ "@fluidframework/driver-utils": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
158
+ "@fluidframework/id-compressor": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
159
+ "@fluidframework/protocol-definitions": "^3.1.0",
160
+ "@fluidframework/runtime-definitions": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
161
+ "@fluidframework/runtime-utils": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
162
+ "@fluidframework/telemetry-utils": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
163
+ "@tylerbu/sorted-btree-es6": "^1.8.0",
51
164
  "double-ended-queue": "^2.1.0-0",
52
165
  "events": "^3.1.0",
53
166
  "lz4js": "^0.2.0",
54
- "sorted-btree": "^1.8.0",
55
167
  "uuid": "^9.0.0"
56
168
  },
57
169
  "devDependencies": {
58
170
  "@arethetypeswrong/cli": "^0.13.3",
59
- "@fluid-private/stochastic-test-utils": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
171
+ "@fluid-private/stochastic-test-utils": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
60
172
  "@fluid-tools/benchmark": "^0.48.0",
61
- "@fluid-tools/build-cli": "^0.28.0",
173
+ "@fluid-tools/build-cli": "^0.29.0",
62
174
  "@fluidframework/build-common": "^2.0.3",
63
- "@fluidframework/build-tools": "^0.28.0",
64
- "@fluidframework/container-runtime-previous": "npm:@fluidframework/container-runtime@2.0.0-internal.7.2.0",
65
- "@fluidframework/eslint-config-fluid": "^3.1.0",
66
- "@fluidframework/mocha-test-setup": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
67
- "@fluidframework/test-runtime-utils": ">=2.0.0-internal.8.0.1 <2.0.0-internal.8.1.0",
175
+ "@fluidframework/build-tools": "^0.29.0",
176
+ "@fluidframework/container-runtime-previous": "npm:@fluidframework/container-runtime@2.0.0-internal.8.0.0",
177
+ "@fluidframework/eslint-config-fluid": "^3.2.0",
178
+ "@fluidframework/mocha-test-setup": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
179
+ "@fluidframework/test-runtime-utils": ">=2.0.0-rc.1.0.1 <2.0.0-rc.1.1.0",
68
180
  "@microsoft/api-extractor": "^7.38.3",
69
181
  "@types/double-ended-queue": "^2.1.0",
70
182
  "@types/events": "^3.0.0",
71
183
  "@types/mocha": "^9.1.1",
72
184
  "@types/sinon": "^7.0.13",
73
185
  "@types/uuid": "^9.0.2",
74
- "c8": "^7.7.1",
186
+ "c8": "^8.0.1",
75
187
  "copyfiles": "^2.4.1",
76
188
  "cross-env": "^7.0.3",
77
189
  "eslint": "~8.50.0",
@@ -82,6 +194,7 @@
82
194
  "prettier": "~3.0.3",
83
195
  "rimraf": "^4.4.0",
84
196
  "sinon": "^7.4.2",
197
+ "tsc-multi": "^1.1.0",
85
198
  "typescript": "~5.1.6"
86
199
  },
87
200
  "fluidBuild": {
@@ -99,13 +212,6 @@
99
212
  "typeValidation": {
100
213
  "broken": {
101
214
  "ClassDeclaration_ContainerRuntime": {
102
- "backCompat": false
103
- },
104
- "RemovedFunctionDeclaration_TEST_requestSummarizer": {
105
- "forwardCompat": false,
106
- "backCompat": false
107
- },
108
- "InterfaceDeclaration_IGCStats": {
109
215
  "forwardCompat": false
110
216
  }
111
217
  }
@@ -113,15 +219,15 @@
113
219
  "scripts": {
114
220
  "api": "fluid-build . --task api",
115
221
  "api-extractor:commonjs": "api-extractor run --local",
116
- "api-extractor:esnext": "copyfiles -u 1 \"dist/**/*-@(alpha|beta|public|untrimmed).d.ts\" lib",
222
+ "api-extractor:esnext": "api-extractor run --config ./api-extractor-esm.json",
117
223
  "build": "fluid-build . --task build",
118
224
  "build:commonjs": "fluid-build . --task commonjs",
119
225
  "build:compile": "fluid-build . --task compile",
120
226
  "build:docs": "fluid-build . --task api",
121
- "build:esnext": "tsc --project ./tsconfig.esnext.json",
227
+ "build:esnext": "tsc-multi --config ../../../common/build/build-common/tsc-multi.esm.json",
122
228
  "build:genver": "gen-version",
123
229
  "build:test": "tsc --project ./src/test/tsconfig.json",
124
- "check:are-the-types-wrong": "attw --pack",
230
+ "check:are-the-types-wrong": "attw --pack . --entrypoints .",
125
231
  "check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
126
232
  "ci:build:docs": "api-extractor run",
127
233
  "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp nyc",
@@ -133,7 +239,7 @@
133
239
  "prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
134
240
  "prettier:fix": "prettier --write . --cache --ignore-path ../../../.prettierignore",
135
241
  "test": "npm run test:mocha",
136
- "test:benchmark:report": "mocha --timeout 999999 --perfMode --parentProcess --fgrep @Benchmark --reporter @fluid-tools/benchmark/dist/MochaReporter.js \"./dist/**/*.perf.spec.js\"",
242
+ "test:benchmark:report": "mocha --timeout 999999 --perfMode --parentProcess --fgrep @Benchmark --reporter @fluid-tools/benchmark/dist/MochaReporter.js \"./dist/**/*.perf.spec.*js\"",
137
243
  "test:coverage": "c8 npm test",
138
244
  "test:mocha": "mocha --ignore \"dist/test/types/*\" --recursive dist/test -r node_modules/@fluidframework/mocha-test-setup",
139
245
  "test:mocha:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test:mocha",
@@ -160,7 +160,9 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
160
160
 
161
161
  /**
162
162
  * This stores IDs of tombstoned blobs.
163
- * Tombstone is a temporary feature that imitates a blob getting swept by garbage collection.
163
+ *
164
+ * A Tombstoned object has been unreferenced long enough that GC knows it won't be referenced again.
165
+ * Tombstoned objects are eventually deleted by GC.
164
166
  */
165
167
  private readonly tombstonedBlobs: Set<string> = new Set();
166
168
 
@@ -770,10 +772,16 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
770
772
  const maybeUnusedStorageIds: Set<string> = new Set();
771
773
  for (const route of blobRoutes) {
772
774
  const blobId = getBlobIdFromGCNodePath(route);
775
+ // If the blob hasn't already been deleted, log an error because this should never happen.
776
+ // If the blob has already been deleted, log a telemetry event. This can happen because multiple GC
777
+ // sweep ops can contain the same data store. It would be interesting to track how often this happens.
778
+ const alreadyDeleted = this.isBlobDeleted(route);
773
779
  if (!this.redirectTable.has(blobId)) {
774
- this.mc.logger.sendErrorEvent({
780
+ this.mc.logger.sendTelemetryEvent({
775
781
  eventName: "DeletedAttachmentBlobNotFound",
782
+ category: alreadyDeleted ? "generic" : "error",
776
783
  blobId,
784
+ details: { alreadyDeleted },
777
785
  });
778
786
  continue;
779
787
  }
@@ -801,8 +809,11 @@ export class BlobManager extends TypedEventEmitter<IBlobManagerEvents> {
801
809
  }
802
810
 
803
811
  /**
804
- * This is called to update blobs whose routes are tombstones. Tombstoned blobs enable testing scenarios with
805
- * accessing deleted content without actually deleting content from summaries.
812
+ * This is called to update blobs whose routes are tombstones.
813
+ *
814
+ * A Tombstoned object has been unreferenced long enough that GC knows it won't be referenced again.
815
+ * Tombstoned objects are eventually deleted by GC.
816
+ *
806
817
  * @param tombstonedRoutes - The routes of blob nodes that are tombstones.
807
818
  */
808
819
  public updateTombstonedRoutes(tombstonedRoutes: readonly string[]) {
@@ -322,7 +322,7 @@ export type ISummaryConfiguration =
322
322
  | ISummaryConfigurationHeuristics;
323
323
 
324
324
  /**
325
- * @internal
325
+ * @alpha
326
326
  */
327
327
  export const DefaultSummaryConfiguration: ISummaryConfiguration = {
328
328
  state: "enabled",
@@ -478,7 +478,7 @@ export enum RuntimeHeaders {
478
478
  }
479
479
 
480
480
  /** True if a tombstoned object should be returned without erroring
481
- * @internal
481
+ * @alpha
482
482
  */
483
483
  export const AllowTombstoneRequestHeaderKey = "allowTombstone"; // Belongs in the enum above, but avoiding the breaking change
484
484
  /**
@@ -489,12 +489,12 @@ export const AllowInactiveRequestHeaderKey = "allowInactive"; // Belongs in the
489
489
 
490
490
  /**
491
491
  * Tombstone error responses will have this header set to true
492
- * @internal
492
+ * @alpha
493
493
  */
494
494
  export const TombstoneResponseHeaderKey = "isTombstoned";
495
495
  /**
496
496
  * Inactive error responses will have this header set to true
497
- * @internal
497
+ * @alpha
498
498
  */
499
499
  export const InactiveResponseHeaderKey = "isInactive";
500
500
 
@@ -2268,6 +2268,7 @@ export class ContainerRuntime
2268
2268
  messageWithContext.message,
2269
2269
  local,
2270
2270
  localOpMetadata,
2271
+ (from, to) => this.garbageCollector.addedOutboundReference(from, to),
2271
2272
  );
2272
2273
  break;
2273
2274
  case ContainerMessageType.BlobAttach:
@@ -2679,6 +2680,12 @@ export class ContainerRuntime
2679
2680
  this.blobManager.setRedirectTable(blobRedirectTable);
2680
2681
  }
2681
2682
 
2683
+ // We can finalize any allocated IDs since we're the only client
2684
+ const idRange = this.idCompressor?.takeNextCreationRange();
2685
+ if (idRange !== undefined) {
2686
+ this.idCompressor?.finalizeCreationRange(idRange);
2687
+ }
2688
+
2682
2689
  const summarizeResult = this.dataStores.createSummary(telemetryContext);
2683
2690
  // Wrap data store summaries in .channels subtree.
2684
2691
  wrapSummaryInChannelsTree(summarizeResult);
@@ -2860,6 +2867,10 @@ export class ContainerRuntime
2860
2867
 
2861
2868
  /**
2862
2869
  * This is called to update objects that are tombstones.
2870
+ *
2871
+ * A Tombstoned object has been unreferenced long enough that GC knows it won't be referenced again.
2872
+ * Tombstoned objects are eventually deleted by GC.
2873
+ *
2863
2874
  * @param tombstonedRoutes - Data store and attachment blob routes that are tombstones in this Container.
2864
2875
  */
2865
2876
  public updateTombstonedRoutes(tombstonedRoutes: readonly string[]) {
@@ -78,7 +78,7 @@ import {
78
78
  summarizerClientType,
79
79
  } from "./summary";
80
80
  import { ContainerRuntime } from "./containerRuntime";
81
- import { sendGCUnexpectedUsageEvent } from "./gc";
81
+ import { detectOutboundRoutesViaDDSKey, sendGCUnexpectedUsageEvent } from "./gc";
82
82
 
83
83
  function createAttributes(
84
84
  pkg: readonly string[],
@@ -200,8 +200,8 @@ export abstract class FluidDataStoreContext
200
200
  }
201
201
 
202
202
  /**
203
- * Tombstone is a temporary feature that prevents a data store from sending / receiving ops, signals and from
204
- * loading.
203
+ * A Tombstoned object has been unreferenced long enough that GC knows it won't be referenced again.
204
+ * Tombstoned objects are eventually deleted by GC.
205
205
  */
206
206
  private _tombstoned = false;
207
207
  public get tombstoned() {
@@ -650,13 +650,20 @@ export abstract class FluidDataStoreContext
650
650
  }
651
651
 
652
652
  /**
653
+ * @deprecated There is no replacement for this, its functionality is no longer needed.
654
+ * It will be removed in a future release, sometime after 2.0.0-internal.8.0.0
655
+ *
653
656
  * Called when a new outbound reference is added to another node. This is used by garbage collection to identify
654
657
  * all references added in the system.
655
658
  * @param srcHandle - The handle of the node that added the reference.
656
659
  * @param outboundHandle - The handle of the outbound node that is referenced.
657
660
  */
658
661
  public addedGCOutboundReference(srcHandle: IFluidHandle, outboundHandle: IFluidHandle) {
659
- this._containerRuntime.addedGCOutboundReference(srcHandle, outboundHandle);
662
+ // By default, skip this call since the ContainerRuntime will detect the outbound route directly.
663
+ if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) === true) {
664
+ // Note: The ContainerRuntime code will check this same setting to avoid double counting.
665
+ this._containerRuntime.addedGCOutboundReference(srcHandle, outboundHandle);
666
+ }
660
667
  }
661
668
 
662
669
  /**
package/src/dataStores.ts CHANGED
@@ -33,6 +33,7 @@ import {
33
33
  create404Response,
34
34
  createResponseError,
35
35
  GCDataBuilder,
36
+ isSerializedHandle,
36
37
  responseToException,
37
38
  SummaryTreeBuilder,
38
39
  unpackChildNodesUsedRoutes,
@@ -61,7 +62,7 @@ import {
61
62
  } from "./dataStoreContext";
62
63
  import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs";
63
64
  import { IDataStoreAliasMessage, isDataStoreAliasMessage } from "./dataStore";
64
- import { GCNodeType, disableDatastoreSweepKey } from "./gc";
65
+ import { GCNodeType, detectOutboundRoutesViaDDSKey, disableDatastoreSweepKey } from "./gc";
65
66
  import { IContainerRuntimeMetadata, nonDataStorePaths, rootHasIsolatedChannels } from "./summary";
66
67
 
67
68
  type PendingAliasResolve = (success: boolean) => void;
@@ -441,6 +442,7 @@ export class DataStores implements IDisposable {
441
442
  message: ISequencedDocumentMessage,
442
443
  local: boolean,
443
444
  localMessageMetadata: unknown,
445
+ addedOutboundReference: (fromNodePath: string, toNodePath: string) => void,
444
446
  ) {
445
447
  const envelope = message.contents as IEnvelope;
446
448
  const transformed = { ...message, contents: envelope.contents };
@@ -462,6 +464,13 @@ export class DataStores implements IDisposable {
462
464
  assert(!!context, 0x162 /* "There should be a store context for the op" */);
463
465
  context.process(transformed, local, localMessageMetadata);
464
466
 
467
+ // By default, we use the new behavior of detecting outbound routes here.
468
+ // If this setting is true, then DataStoreContext would be notifying GC instead.
469
+ if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true) {
470
+ // Notify GC of any outbound references that were added by this op.
471
+ detectOutboundReferences(envelope, addedOutboundReference);
472
+ }
473
+
465
474
  // Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
466
475
  // being used.
467
476
  this.gcNodeUpdated(
@@ -830,12 +839,15 @@ export class DataStores implements IDisposable {
830
839
 
831
840
  const dataStoreContext = this.contexts.get(dataStoreId);
832
841
  if (dataStoreContext === undefined) {
833
- this.mc.logger.sendErrorEvent({
842
+ // If the data store hasn't already been deleted, log an error because this should never happen.
843
+ // If the data store has already been deleted, log a telemetry event. This can happen because multiple GC
844
+ // sweep ops can contain the same data store. It would be interesting to track how often this happens.
845
+ const alreadyDeleted = this.isDataStoreDeleted(`/${dataStoreId}`);
846
+ this.mc.logger.sendTelemetryEvent({
834
847
  eventName: "DeletedDataStoreNotFound",
848
+ category: alreadyDeleted ? "generic" : "error",
835
849
  ...tagCodeArtifacts({ id: dataStoreId }),
836
- details: {
837
- alreadyDeleted: this.isDataStoreDeleted(dataStoreId),
838
- },
850
+ details: { alreadyDeleted },
839
851
  });
840
852
  continue;
841
853
  }
@@ -851,8 +863,11 @@ export class DataStores implements IDisposable {
851
863
  }
852
864
 
853
865
  /**
854
- * This is called to update objects whose routes are tombstones. Tombstoned datastore contexts enable testing
855
- * scenarios with accessing deleted content without actually deleting content from summaries.
866
+ * This is called to update objects whose routes are tombstones.
867
+ *
868
+ * A Tombstoned object has been unreferenced long enough that GC knows it won't be referenced again.
869
+ * Tombstoned objects are eventually deleted by GC.
870
+ *
856
871
  * @param tombstonedRoutes - The routes that are tombstones in all data stores in this Container.
857
872
  */
858
873
  public updateTombstonedRoutes(tombstonedRoutes: readonly string[]) {
@@ -944,3 +959,42 @@ export function getSummaryForDatastores(
944
959
  };
945
960
  }
946
961
  }
962
+
963
+ /**
964
+ * Traverse this op's contents and detect any outbound routes that were added by this op.
965
+ */
966
+ export function detectOutboundReferences(
967
+ envelope: IEnvelope,
968
+ addedOutboundReference: (fromNodePath: string, toNodePath: string) => void,
969
+ ): void {
970
+ // These will be built up as we traverse the envelope contents
971
+ const outboundPaths: string[] = [];
972
+ let ddsAddress: string | undefined;
973
+
974
+ function recursivelyFindHandles(obj: unknown) {
975
+ if (typeof obj === "object" && obj !== null) {
976
+ for (const [key, value] of Object.entries(obj)) {
977
+ // If 'value' is a serialized IFluidHandle, it represents a new outbound route.
978
+ if (isSerializedHandle(value)) {
979
+ outboundPaths.push(value.url);
980
+ }
981
+
982
+ // NOTE: This is taking a hard dependency on the fact that in our DataStore implementation,
983
+ // the address of the DDS is stored in a property called "address". This is not ideal.
984
+ // An alternative would be for the op envelope to include the absolute path (built up as it is submitted)
985
+ if (key === "address" && ddsAddress === undefined) {
986
+ ddsAddress = value;
987
+ }
988
+
989
+ recursivelyFindHandles(value);
990
+ }
991
+ }
992
+ }
993
+
994
+ recursivelyFindHandles(envelope.contents);
995
+
996
+ // GC node paths are all absolute paths, hence the "" prefix.
997
+ // e.g. this will yield "/dataStoreId/ddsId"
998
+ const fromPath = ["", envelope.address, ddsAddress].join("/");
999
+ outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
1000
+ }
@@ -20,6 +20,7 @@ import {
20
20
  ITelemetryLoggerExt,
21
21
  MonitoringContext,
22
22
  PerformanceEvent,
23
+ tagCodeArtifacts,
23
24
  } from "@fluidframework/telemetry-utils";
24
25
  import { BlobManager } from "../blobManager";
25
26
  import {
@@ -262,7 +263,7 @@ export class GarbageCollector implements IGarbageCollector {
262
263
  const currentReferenceTimestampMs = this.runtime.getCurrentReferenceTimestampMs();
263
264
  assert(
264
265
  currentReferenceTimestampMs !== undefined,
265
- "Trying to initialize GC state without current timestamp",
266
+ 0x8a4 /* Trying to initialize GC state without current timestamp */,
266
267
  );
267
268
 
268
269
  /**
@@ -289,7 +290,7 @@ export class GarbageCollector implements IGarbageCollector {
289
290
  nodeData.unreferencedTimestampMs,
290
291
  this.configs.inactiveTimeoutMs,
291
292
  currentReferenceTimestampMs,
292
- this.configs.sweepTimeoutMs,
293
+ this.configs.tombstoneTimeoutMs,
293
294
  this.configs.sweepGracePeriodMs,
294
295
  ),
295
296
  );
@@ -409,6 +410,7 @@ export class GarbageCollector implements IGarbageCollector {
409
410
  {
410
411
  eventName: "GCInitializationOrUpdateFailed",
411
412
  gcConfigs: JSON.stringify(this.configs),
413
+ clientId,
412
414
  },
413
415
  error,
414
416
  );
@@ -611,7 +613,7 @@ export class GarbageCollector implements IGarbageCollector {
611
613
  currentReferenceTimestampMs,
612
614
  this.configs.inactiveTimeoutMs,
613
615
  currentReferenceTimestampMs,
614
- this.configs.sweepTimeoutMs,
616
+ this.configs.tombstoneTimeoutMs,
615
617
  this.configs.sweepGracePeriodMs,
616
618
  ),
617
619
  );
@@ -837,7 +839,7 @@ export class GarbageCollector implements IGarbageCollector {
837
839
  gcFeatureMatrix: this.configs.persistedGcFeatureMatrix,
838
840
  sessionExpiryTimeoutMs: this.configs.sessionExpiryTimeoutMs,
839
841
  sweepEnabled: false, // DEPRECATED - to be removed
840
- sweepTimeoutMs: this.configs.sweepTimeoutMs,
842
+ tombstoneTimeoutMs: this.configs.tombstoneTimeoutMs,
841
843
  };
842
844
  }
843
845
 
@@ -1005,6 +1007,18 @@ export class GarbageCollector implements IGarbageCollector {
1005
1007
  return;
1006
1008
  }
1007
1009
 
1010
+ if (!toNodePath.startsWith("/")) {
1011
+ // A long time ago we stored handles with relatives paths. We don't expect to see these cases though
1012
+ // because GC was enabled only after we made the switch to always using absolute paths.
1013
+ this.mc.logger.sendErrorEvent({
1014
+ eventName: "InvalidRelativeOutboundRoute",
1015
+ ...tagCodeArtifacts({ fromId: fromNodePath, id: toNodePath }),
1016
+ });
1017
+ return;
1018
+ }
1019
+
1020
+ assert(fromNodePath.startsWith("/"), 0x8a5 /* fromNodePath must be an absolute path */);
1021
+
1008
1022
  const outboundRoutes = this.newReferencesSinceLastRun.get(fromNodePath) ?? [];
1009
1023
  outboundRoutes.push(toNodePath);
1010
1024
  this.newReferencesSinceLastRun.set(fromNodePath, outboundRoutes);