@fluidframework/container-runtime 2.0.0-dev.3.1.0.125672 → 2.0.0-dev.4.1.0.148229

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 (465) hide show
  1. package/dist/blobManager.d.ts +24 -11
  2. package/dist/blobManager.d.ts.map +1 -1
  3. package/dist/blobManager.js +112 -55
  4. package/dist/blobManager.js.map +1 -1
  5. package/dist/containerRuntime.d.ts +60 -75
  6. package/dist/containerRuntime.d.ts.map +1 -1
  7. package/dist/containerRuntime.js +295 -256
  8. package/dist/containerRuntime.js.map +1 -1
  9. package/dist/dataStoreContext.d.ts +39 -13
  10. package/dist/dataStoreContext.d.ts.map +1 -1
  11. package/dist/dataStoreContext.js +112 -49
  12. package/dist/dataStoreContext.js.map +1 -1
  13. package/dist/dataStores.d.ts +28 -4
  14. package/dist/dataStores.d.ts.map +1 -1
  15. package/dist/dataStores.js +107 -41
  16. package/dist/dataStores.js.map +1 -1
  17. package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
  18. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
  19. package/dist/deltaManagerSummarizerProxy.js +40 -0
  20. package/dist/deltaManagerSummarizerProxy.js.map +1 -0
  21. package/dist/gc/garbageCollection.d.ts +204 -0
  22. package/dist/gc/garbageCollection.d.ts.map +1 -0
  23. package/dist/{garbageCollection.js → gc/garbageCollection.js} +190 -554
  24. package/dist/gc/garbageCollection.js.map +1 -0
  25. package/dist/gc/gcConfigs.d.ts +22 -0
  26. package/dist/gc/gcConfigs.d.ts.map +1 -0
  27. package/dist/gc/gcConfigs.js +143 -0
  28. package/dist/gc/gcConfigs.js.map +1 -0
  29. package/dist/gc/gcDefinitions.d.ts +320 -0
  30. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  31. package/dist/gc/gcDefinitions.js +81 -0
  32. package/dist/gc/gcDefinitions.js.map +1 -0
  33. package/dist/gc/gcHelpers.d.ts +86 -0
  34. package/dist/gc/gcHelpers.d.ts.map +1 -0
  35. package/dist/gc/gcHelpers.js +268 -0
  36. package/dist/gc/gcHelpers.js.map +1 -0
  37. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  38. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  39. package/dist/gc/gcReferenceGraphAlgorithm.js +49 -0
  40. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  41. package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
  42. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
  43. package/dist/gc/gcSummaryDefinitions.js +7 -0
  44. package/dist/gc/gcSummaryDefinitions.js.map +1 -0
  45. package/dist/gc/gcSummaryStateTracker.d.ts +93 -0
  46. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  47. package/dist/gc/gcSummaryStateTracker.js +239 -0
  48. package/dist/gc/gcSummaryStateTracker.js.map +1 -0
  49. package/dist/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
  50. package/dist/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +2 -2
  51. package/dist/gc/gcSweepReadyUsageDetection.js.map +1 -0
  52. package/dist/gc/gcUnreferencedStateTracker.d.ts +34 -0
  53. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  54. package/dist/gc/gcUnreferencedStateTracker.js +94 -0
  55. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -0
  56. package/dist/gc/index.d.ts +13 -0
  57. package/dist/gc/index.d.ts.map +1 -0
  58. package/dist/gc/index.js +50 -0
  59. package/dist/gc/index.js.map +1 -0
  60. package/dist/index.d.ts +3 -7
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +5 -9
  63. package/dist/index.js.map +1 -1
  64. package/dist/opLifecycle/batchManager.d.ts +11 -13
  65. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  66. package/dist/opLifecycle/batchManager.js +26 -38
  67. package/dist/opLifecycle/batchManager.js.map +1 -1
  68. package/dist/opLifecycle/definitions.d.ts +4 -0
  69. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  70. package/dist/opLifecycle/definitions.js.map +1 -1
  71. package/dist/opLifecycle/index.d.ts +1 -1
  72. package/dist/opLifecycle/index.d.ts.map +1 -1
  73. package/dist/opLifecycle/index.js +2 -1
  74. package/dist/opLifecycle/index.js.map +1 -1
  75. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  76. package/dist/opLifecycle/opCompressor.js +25 -10
  77. package/dist/opLifecycle/opCompressor.js.map +1 -1
  78. package/dist/opLifecycle/opDecompressor.d.ts +4 -0
  79. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  80. package/dist/opLifecycle/opDecompressor.js +42 -4
  81. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  82. package/dist/opLifecycle/opSplitter.d.ts +15 -3
  83. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  84. package/dist/opLifecycle/opSplitter.js +35 -10
  85. package/dist/opLifecycle/opSplitter.js.map +1 -1
  86. package/dist/opLifecycle/outbox.d.ts +19 -3
  87. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  88. package/dist/opLifecycle/outbox.js +88 -49
  89. package/dist/opLifecycle/outbox.js.map +1 -1
  90. package/dist/packageVersion.d.ts +1 -1
  91. package/dist/packageVersion.js +1 -1
  92. package/dist/packageVersion.js.map +1 -1
  93. package/dist/pendingStateManager.d.ts +3 -3
  94. package/dist/pendingStateManager.d.ts.map +1 -1
  95. package/dist/pendingStateManager.js +20 -21
  96. package/dist/pendingStateManager.js.map +1 -1
  97. package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
  98. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
  99. package/dist/storageServiceWithAttachBlobs.js +32 -0
  100. package/dist/storageServiceWithAttachBlobs.js.map +1 -0
  101. package/dist/summary/index.d.ts +17 -0
  102. package/dist/summary/index.d.ts.map +1 -0
  103. package/dist/summary/index.js +46 -0
  104. package/dist/summary/index.js.map +1 -0
  105. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  106. package/dist/summary/orderedClientElection.js.map +1 -0
  107. package/dist/{runWhileConnectedCoordinator.d.ts → summary/runWhileConnectedCoordinator.d.ts} +3 -2
  108. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  109. package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
  110. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -0
  111. package/{lib → dist/summary}/runningSummarizer.d.ts +19 -18
  112. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  113. package/dist/{runningSummarizer.js → summary/runningSummarizer.js} +158 -56
  114. package/dist/summary/runningSummarizer.js.map +1 -0
  115. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +4 -9
  116. package/dist/summary/summarizer.d.ts.map +1 -0
  117. package/dist/{summarizer.js → summary/summarizer.js} +9 -74
  118. package/dist/summary/summarizer.js.map +1 -0
  119. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  120. package/dist/summary/summarizerClientElection.js.map +1 -0
  121. package/{lib → dist/summary}/summarizerHeuristics.d.ts +1 -1
  122. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  123. package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +3 -3
  124. package/dist/summary/summarizerHeuristics.js.map +1 -0
  125. package/dist/summary/summarizerNode/index.d.ts +8 -0
  126. package/dist/summary/summarizerNode/index.d.ts.map +1 -0
  127. package/dist/summary/summarizerNode/index.js +12 -0
  128. package/dist/summary/summarizerNode/index.js.map +1 -0
  129. package/dist/summary/summarizerNode/summarizerNode.d.ts +149 -0
  130. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  131. package/dist/summary/summarizerNode/summarizerNode.js +531 -0
  132. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -0
  133. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
  134. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  135. package/dist/summary/summarizerNode/summarizerNodeUtils.js +132 -0
  136. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  137. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
  138. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  139. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +423 -0
  140. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  141. package/{lib → dist/summary}/summarizerTypes.d.ts +7 -17
  142. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  143. package/dist/{summarizerTypes.js → summary/summarizerTypes.js} +0 -5
  144. package/dist/summary/summarizerTypes.js.map +1 -0
  145. package/dist/summary/summaryCollection.d.ts.map +1 -0
  146. package/dist/summary/summaryCollection.js.map +1 -0
  147. package/{lib → dist/summary}/summaryFormat.d.ts +3 -21
  148. package/dist/summary/summaryFormat.d.ts.map +1 -0
  149. package/dist/{summaryFormat.js → summary/summaryFormat.js} +1 -10
  150. package/dist/summary/summaryFormat.js.map +1 -0
  151. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  152. package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +4 -4
  153. package/dist/summary/summaryGenerator.js.map +1 -0
  154. package/dist/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
  155. package/dist/summary/summaryManager.d.ts.map +1 -0
  156. package/dist/summary/summaryManager.js.map +1 -0
  157. package/lib/blobManager.d.ts +24 -11
  158. package/lib/blobManager.d.ts.map +1 -1
  159. package/lib/blobManager.js +109 -52
  160. package/lib/blobManager.js.map +1 -1
  161. package/lib/containerRuntime.d.ts +60 -75
  162. package/lib/containerRuntime.d.ts.map +1 -1
  163. package/lib/containerRuntime.js +267 -228
  164. package/lib/containerRuntime.js.map +1 -1
  165. package/lib/dataStoreContext.d.ts +39 -13
  166. package/lib/dataStoreContext.d.ts.map +1 -1
  167. package/lib/dataStoreContext.js +101 -38
  168. package/lib/dataStoreContext.js.map +1 -1
  169. package/lib/dataStores.d.ts +28 -4
  170. package/lib/dataStores.d.ts.map +1 -1
  171. package/lib/dataStores.js +100 -34
  172. package/lib/dataStores.js.map +1 -1
  173. package/lib/deltaManagerSummarizerProxy.d.ts +19 -0
  174. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  175. package/lib/deltaManagerSummarizerProxy.js +36 -0
  176. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  177. package/lib/gc/garbageCollection.d.ts +204 -0
  178. package/lib/gc/garbageCollection.d.ts.map +1 -0
  179. package/lib/{garbageCollection.js → gc/garbageCollection.js} +172 -535
  180. package/lib/gc/garbageCollection.js.map +1 -0
  181. package/lib/gc/gcConfigs.d.ts +22 -0
  182. package/lib/gc/gcConfigs.d.ts.map +1 -0
  183. package/lib/gc/gcConfigs.js +139 -0
  184. package/lib/gc/gcConfigs.js.map +1 -0
  185. package/lib/gc/gcDefinitions.d.ts +320 -0
  186. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  187. package/lib/gc/gcDefinitions.js +78 -0
  188. package/lib/gc/gcDefinitions.js.map +1 -0
  189. package/lib/gc/gcHelpers.d.ts +86 -0
  190. package/lib/gc/gcHelpers.d.ts.map +1 -0
  191. package/lib/gc/gcHelpers.js +254 -0
  192. package/lib/gc/gcHelpers.js.map +1 -0
  193. package/lib/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  194. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  195. package/lib/gc/gcReferenceGraphAlgorithm.js +45 -0
  196. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  197. package/lib/gc/gcSummaryDefinitions.d.ts +52 -0
  198. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  199. package/lib/gc/gcSummaryDefinitions.js +6 -0
  200. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  201. package/lib/gc/gcSummaryStateTracker.d.ts +93 -0
  202. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  203. package/lib/gc/gcSummaryStateTracker.js +235 -0
  204. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  205. package/lib/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
  206. package/lib/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +1 -1
  207. package/lib/gc/gcSweepReadyUsageDetection.js.map +1 -0
  208. package/lib/gc/gcUnreferencedStateTracker.d.ts +34 -0
  209. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  210. package/lib/gc/gcUnreferencedStateTracker.js +90 -0
  211. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  212. package/lib/gc/index.d.ts +13 -0
  213. package/lib/gc/index.d.ts.map +1 -0
  214. package/lib/gc/index.js +12 -0
  215. package/lib/gc/index.js.map +1 -0
  216. package/lib/index.d.ts +3 -7
  217. package/lib/index.d.ts.map +1 -1
  218. package/lib/index.js +1 -4
  219. package/lib/index.js.map +1 -1
  220. package/lib/opLifecycle/batchManager.d.ts +11 -13
  221. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  222. package/lib/opLifecycle/batchManager.js +24 -37
  223. package/lib/opLifecycle/batchManager.js.map +1 -1
  224. package/lib/opLifecycle/definitions.d.ts +4 -0
  225. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  226. package/lib/opLifecycle/definitions.js.map +1 -1
  227. package/lib/opLifecycle/index.d.ts +1 -1
  228. package/lib/opLifecycle/index.d.ts.map +1 -1
  229. package/lib/opLifecycle/index.js +1 -1
  230. package/lib/opLifecycle/index.js.map +1 -1
  231. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  232. package/lib/opLifecycle/opCompressor.js +26 -11
  233. package/lib/opLifecycle/opCompressor.js.map +1 -1
  234. package/lib/opLifecycle/opDecompressor.d.ts +4 -0
  235. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  236. package/lib/opLifecycle/opDecompressor.js +42 -4
  237. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  238. package/lib/opLifecycle/opSplitter.d.ts +15 -3
  239. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  240. package/lib/opLifecycle/opSplitter.js +35 -10
  241. package/lib/opLifecycle/opSplitter.js.map +1 -1
  242. package/lib/opLifecycle/outbox.d.ts +19 -3
  243. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  244. package/lib/opLifecycle/outbox.js +90 -51
  245. package/lib/opLifecycle/outbox.js.map +1 -1
  246. package/lib/packageVersion.d.ts +1 -1
  247. package/lib/packageVersion.js +1 -1
  248. package/lib/packageVersion.js.map +1 -1
  249. package/lib/pendingStateManager.d.ts +3 -3
  250. package/lib/pendingStateManager.d.ts.map +1 -1
  251. package/lib/pendingStateManager.js +20 -21
  252. package/lib/pendingStateManager.js.map +1 -1
  253. package/lib/storageServiceWithAttachBlobs.d.ts +17 -0
  254. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  255. package/lib/storageServiceWithAttachBlobs.js +28 -0
  256. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  257. package/lib/summary/index.d.ts +17 -0
  258. package/lib/summary/index.d.ts.map +1 -0
  259. package/lib/summary/index.js +15 -0
  260. package/lib/summary/index.js.map +1 -0
  261. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  262. package/lib/summary/orderedClientElection.js.map +1 -0
  263. package/lib/{runWhileConnectedCoordinator.d.ts → summary/runWhileConnectedCoordinator.d.ts} +3 -2
  264. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  265. package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
  266. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  267. package/{dist → lib/summary}/runningSummarizer.d.ts +19 -18
  268. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  269. package/lib/{runningSummarizer.js → summary/runningSummarizer.js} +159 -57
  270. package/lib/summary/runningSummarizer.js.map +1 -0
  271. package/lib/{summarizer.d.ts → summary/summarizer.d.ts} +4 -9
  272. package/lib/summary/summarizer.d.ts.map +1 -0
  273. package/lib/{summarizer.js → summary/summarizer.js} +11 -76
  274. package/lib/summary/summarizer.js.map +1 -0
  275. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  276. package/lib/summary/summarizerClientElection.js.map +1 -0
  277. package/{dist → lib/summary}/summarizerHeuristics.d.ts +1 -1
  278. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  279. package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +3 -3
  280. package/lib/summary/summarizerHeuristics.js.map +1 -0
  281. package/lib/summary/summarizerNode/index.d.ts +8 -0
  282. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  283. package/lib/summary/summarizerNode/index.js +7 -0
  284. package/lib/summary/summarizerNode/index.js.map +1 -0
  285. package/lib/summary/summarizerNode/summarizerNode.d.ts +149 -0
  286. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  287. package/lib/summary/summarizerNode/summarizerNode.js +526 -0
  288. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  289. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
  290. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  291. package/lib/summary/summarizerNode/summarizerNodeUtils.js +125 -0
  292. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  293. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
  294. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  295. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +419 -0
  296. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  297. package/{dist → lib/summary}/summarizerTypes.d.ts +7 -17
  298. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  299. package/lib/summary/summarizerTypes.js +6 -0
  300. package/{dist → lib/summary}/summarizerTypes.js.map +1 -1
  301. package/lib/summary/summaryCollection.d.ts.map +1 -0
  302. package/lib/summary/summaryCollection.js.map +1 -0
  303. package/{dist → lib/summary}/summaryFormat.d.ts +3 -21
  304. package/lib/summary/summaryFormat.d.ts.map +1 -0
  305. package/lib/{summaryFormat.js → summary/summaryFormat.js} +0 -8
  306. package/lib/summary/summaryFormat.js.map +1 -0
  307. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  308. package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +4 -4
  309. package/lib/summary/summaryGenerator.js.map +1 -0
  310. package/lib/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
  311. package/lib/summary/summaryManager.d.ts.map +1 -0
  312. package/lib/summary/summaryManager.js.map +1 -0
  313. package/package.json +63 -60
  314. package/src/blobManager.ts +132 -69
  315. package/src/containerRuntime.ts +421 -382
  316. package/src/dataStoreContext.ts +140 -49
  317. package/src/dataStores.ts +139 -41
  318. package/src/deltaManagerSummarizerProxy.ts +46 -0
  319. package/{garbageCollection.md → src/gc/garbageCollection.md} +2 -2
  320. package/src/{garbageCollection.ts → gc/garbageCollection.ts} +245 -890
  321. package/src/gc/gcConfigs.ts +193 -0
  322. package/src/gc/gcDefinitions.ts +387 -0
  323. package/src/gc/gcHelpers.ts +332 -0
  324. package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
  325. package/src/gc/gcSummaryDefinitions.ts +54 -0
  326. package/src/gc/gcSummaryStateTracker.ts +329 -0
  327. package/src/{gcSweepReadyUsageDetection.ts → gc/gcSweepReadyUsageDetection.ts} +1 -1
  328. package/src/gc/gcUnreferencedStateTracker.ts +114 -0
  329. package/src/gc/index.ts +65 -0
  330. package/src/index.ts +10 -22
  331. package/src/opLifecycle/README.md +157 -0
  332. package/src/opLifecycle/batchManager.ts +26 -55
  333. package/src/opLifecycle/definitions.ts +4 -0
  334. package/src/opLifecycle/index.ts +1 -1
  335. package/src/opLifecycle/opCompressor.ts +32 -12
  336. package/src/opLifecycle/opDecompressor.ts +49 -5
  337. package/src/opLifecycle/opSplitter.ts +55 -12
  338. package/src/opLifecycle/outbox.ts +120 -60
  339. package/src/packageVersion.ts +1 -1
  340. package/src/pendingStateManager.ts +34 -27
  341. package/src/storageServiceWithAttachBlobs.ts +38 -0
  342. package/src/summary/index.ts +105 -0
  343. package/src/{runWhileConnectedCoordinator.ts → summary/runWhileConnectedCoordinator.ts} +7 -7
  344. package/src/{runningSummarizer.ts → summary/runningSummarizer.ts} +279 -139
  345. package/src/{summarizer.ts → summary/summarizer.ts} +12 -97
  346. package/src/{summarizerHeuristics.ts → summary/summarizerHeuristics.ts} +9 -4
  347. package/src/summary/summarizerNode/index.ts +12 -0
  348. package/src/summary/summarizerNode/summarizerNode.ts +766 -0
  349. package/src/summary/summarizerNode/summarizerNodeUtils.ts +214 -0
  350. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +644 -0
  351. package/src/{summarizerTypes.ts → summary/summarizerTypes.ts} +8 -22
  352. package/src/{summaryFormat.ts → summary/summaryFormat.ts} +3 -29
  353. package/src/{summaryGenerator.ts → summary/summaryGenerator.ts} +12 -11
  354. package/src/{summaryManager.ts → summary/summaryManager.ts} +1 -1
  355. package/dist/garbageCollection.d.ts +0 -411
  356. package/dist/garbageCollection.d.ts.map +0 -1
  357. package/dist/garbageCollection.js.map +0 -1
  358. package/dist/garbageCollectionConstants.d.ts +0 -23
  359. package/dist/garbageCollectionConstants.d.ts.map +0 -1
  360. package/dist/garbageCollectionConstants.js +0 -36
  361. package/dist/garbageCollectionConstants.js.map +0 -1
  362. package/dist/garbageCollectionHelpers.d.ts +0 -15
  363. package/dist/garbageCollectionHelpers.d.ts.map +0 -1
  364. package/dist/garbageCollectionHelpers.js +0 -27
  365. package/dist/garbageCollectionHelpers.js.map +0 -1
  366. package/dist/gcSweepReadyUsageDetection.d.ts.map +0 -1
  367. package/dist/gcSweepReadyUsageDetection.js.map +0 -1
  368. package/dist/orderedClientElection.d.ts.map +0 -1
  369. package/dist/orderedClientElection.js.map +0 -1
  370. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  371. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  372. package/dist/runningSummarizer.d.ts.map +0 -1
  373. package/dist/runningSummarizer.js.map +0 -1
  374. package/dist/serializedSnapshotStorage.d.ts +0 -58
  375. package/dist/serializedSnapshotStorage.d.ts.map +0 -1
  376. package/dist/serializedSnapshotStorage.js +0 -110
  377. package/dist/serializedSnapshotStorage.js.map +0 -1
  378. package/dist/summarizer.d.ts.map +0 -1
  379. package/dist/summarizer.js.map +0 -1
  380. package/dist/summarizerClientElection.d.ts.map +0 -1
  381. package/dist/summarizerClientElection.js.map +0 -1
  382. package/dist/summarizerHandle.d.ts +0 -12
  383. package/dist/summarizerHandle.d.ts.map +0 -1
  384. package/dist/summarizerHandle.js +0 -22
  385. package/dist/summarizerHandle.js.map +0 -1
  386. package/dist/summarizerHeuristics.d.ts.map +0 -1
  387. package/dist/summarizerHeuristics.js.map +0 -1
  388. package/dist/summarizerTypes.d.ts.map +0 -1
  389. package/dist/summaryCollection.d.ts.map +0 -1
  390. package/dist/summaryCollection.js.map +0 -1
  391. package/dist/summaryFormat.d.ts.map +0 -1
  392. package/dist/summaryFormat.js.map +0 -1
  393. package/dist/summaryGenerator.d.ts.map +0 -1
  394. package/dist/summaryGenerator.js.map +0 -1
  395. package/dist/summaryManager.d.ts.map +0 -1
  396. package/dist/summaryManager.js.map +0 -1
  397. package/lib/garbageCollection.d.ts +0 -411
  398. package/lib/garbageCollection.d.ts.map +0 -1
  399. package/lib/garbageCollection.js.map +0 -1
  400. package/lib/garbageCollectionConstants.d.ts +0 -23
  401. package/lib/garbageCollectionConstants.d.ts.map +0 -1
  402. package/lib/garbageCollectionConstants.js +0 -33
  403. package/lib/garbageCollectionConstants.js.map +0 -1
  404. package/lib/garbageCollectionHelpers.d.ts +0 -15
  405. package/lib/garbageCollectionHelpers.d.ts.map +0 -1
  406. package/lib/garbageCollectionHelpers.js +0 -23
  407. package/lib/garbageCollectionHelpers.js.map +0 -1
  408. package/lib/gcSweepReadyUsageDetection.d.ts.map +0 -1
  409. package/lib/gcSweepReadyUsageDetection.js.map +0 -1
  410. package/lib/orderedClientElection.d.ts.map +0 -1
  411. package/lib/orderedClientElection.js.map +0 -1
  412. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  413. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  414. package/lib/runningSummarizer.d.ts.map +0 -1
  415. package/lib/runningSummarizer.js.map +0 -1
  416. package/lib/serializedSnapshotStorage.d.ts +0 -58
  417. package/lib/serializedSnapshotStorage.d.ts.map +0 -1
  418. package/lib/serializedSnapshotStorage.js +0 -106
  419. package/lib/serializedSnapshotStorage.js.map +0 -1
  420. package/lib/summarizer.d.ts.map +0 -1
  421. package/lib/summarizer.js.map +0 -1
  422. package/lib/summarizerClientElection.d.ts.map +0 -1
  423. package/lib/summarizerClientElection.js.map +0 -1
  424. package/lib/summarizerHandle.d.ts +0 -12
  425. package/lib/summarizerHandle.d.ts.map +0 -1
  426. package/lib/summarizerHandle.js +0 -18
  427. package/lib/summarizerHandle.js.map +0 -1
  428. package/lib/summarizerHeuristics.d.ts.map +0 -1
  429. package/lib/summarizerHeuristics.js.map +0 -1
  430. package/lib/summarizerTypes.d.ts.map +0 -1
  431. package/lib/summarizerTypes.js +0 -9
  432. package/lib/summarizerTypes.js.map +0 -1
  433. package/lib/summaryCollection.d.ts.map +0 -1
  434. package/lib/summaryCollection.js.map +0 -1
  435. package/lib/summaryFormat.d.ts.map +0 -1
  436. package/lib/summaryFormat.js.map +0 -1
  437. package/lib/summaryGenerator.d.ts.map +0 -1
  438. package/lib/summaryGenerator.js.map +0 -1
  439. package/lib/summaryManager.d.ts.map +0 -1
  440. package/lib/summaryManager.js.map +0 -1
  441. package/src/garbageCollectionConstants.ts +0 -38
  442. package/src/garbageCollectionHelpers.ts +0 -37
  443. package/src/serializedSnapshotStorage.ts +0 -151
  444. package/src/summarizerHandle.ts +0 -23
  445. /package/dist/{gcSweepReadyUsageDetection.d.ts → gc/gcSweepReadyUsageDetection.d.ts} +0 -0
  446. /package/dist/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
  447. /package/dist/{orderedClientElection.js → summary/orderedClientElection.js} +0 -0
  448. /package/dist/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +0 -0
  449. /package/dist/{summarizerClientElection.js → summary/summarizerClientElection.js} +0 -0
  450. /package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
  451. /package/dist/{summaryCollection.js → summary/summaryCollection.js} +0 -0
  452. /package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
  453. /package/dist/{summaryManager.js → summary/summaryManager.js} +0 -0
  454. /package/lib/{gcSweepReadyUsageDetection.d.ts → gc/gcSweepReadyUsageDetection.d.ts} +0 -0
  455. /package/lib/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
  456. /package/lib/{orderedClientElection.js → summary/orderedClientElection.js} +0 -0
  457. /package/lib/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +0 -0
  458. /package/lib/{summarizerClientElection.js → summary/summarizerClientElection.js} +0 -0
  459. /package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
  460. /package/lib/{summaryCollection.js → summary/summaryCollection.js} +0 -0
  461. /package/lib/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
  462. /package/lib/{summaryManager.js → summary/summaryManager.js} +0 -0
  463. /package/src/{orderedClientElection.ts → summary/orderedClientElection.ts} +0 -0
  464. /package/src/{summarizerClientElection.ts → summary/summarizerClientElection.ts} +0 -0
  465. /package/src/{summaryCollection.ts → summary/summaryCollection.ts} +0 -0
@@ -29,7 +29,6 @@ import {
29
29
  } from "@fluidframework/protocol-definitions";
30
30
  import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
31
31
  import {
32
- BindState,
33
32
  channelsTreeName,
34
33
  CreateChildSummarizerNodeFn,
35
34
  CreateChildSummarizerNodeParam,
@@ -49,10 +48,16 @@ import {
49
48
  ISummarizerNodeWithGC,
50
49
  SummarizeInternalFn,
51
50
  ITelemetryContext,
51
+ VisibilityState,
52
52
  } from "@fluidframework/runtime-definitions";
53
- import { addBlobToSummary, convertSummaryTreeToITree } from "@fluidframework/runtime-utils";
53
+ import {
54
+ addBlobToSummary,
55
+ convertSummaryTreeToITree,
56
+ packagePathToTelemetryProperty,
57
+ } from "@fluidframework/runtime-utils";
54
58
  import {
55
59
  ChildLogger,
60
+ generateStack,
56
61
  loggerToMonitoringContext,
57
62
  LoggingError,
58
63
  MonitoringContext,
@@ -65,7 +70,6 @@ import {
65
70
  extractSafePropertiesFromMessage,
66
71
  } from "@fluidframework/container-utils";
67
72
 
68
- import { ContainerRuntime } from "./containerRuntime";
69
73
  import {
70
74
  dataStoreAttributesBlobName,
71
75
  hasIsolatedChannels,
@@ -74,10 +78,10 @@ import {
74
78
  WriteFluidDataStoreAttributes,
75
79
  getAttributesFormatVersion,
76
80
  getFluidDataStoreAttributes,
77
- } from "./summaryFormat";
78
- import { throwOnTombstoneUsageKey } from "./garbageCollectionConstants";
79
- import { sendGCUnexpectedUsageEvent } from "./garbageCollectionHelpers";
80
- import { summarizerClientType } from "./summarizerClientElection";
81
+ summarizerClientType,
82
+ } from "./summary";
83
+ import { ContainerRuntime } from "./containerRuntime";
84
+ import { sendGCUnexpectedUsageEvent, throwOnTombstoneUsageKey } from "./gc";
81
85
 
82
86
  function createAttributes(
83
87
  pkg: readonly string[],
@@ -131,7 +135,6 @@ export interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContext
131
135
  /** Properties necessary for creating a remote FluidDataStoreContext */
132
136
  export interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {
133
137
  readonly snapshotTree: ISnapshotTree | undefined;
134
- readonly getBaseGCDetails: () => Promise<IGarbageCollectionDetailsBase | undefined>;
135
138
  }
136
139
 
137
140
  /**
@@ -206,6 +209,9 @@ export abstract class FluidDataStoreContext
206
209
  /** If true, throw an error when a tombstone data store is used. */
207
210
  private readonly throwOnTombstoneUsage: boolean;
208
211
 
212
+ /** If true, this means that this data store context and its children have been removed from the runtime */
213
+ private deleted: boolean = false;
214
+
209
215
  public get attachState(): AttachState {
210
216
  return this._attachState;
211
217
  }
@@ -238,8 +244,6 @@ export abstract class FluidDataStoreContext
238
244
  protected registry: IFluidDataStoreRegistry | undefined;
239
245
 
240
246
  protected detachedRuntimeCreation = false;
241
- /** @deprecated - To be replaced by calling makeLocallyVisible directly */
242
- public readonly bindToContext: () => void;
243
247
  protected channel: IFluidDataStoreChannel | undefined;
244
248
  private loaded = false;
245
249
  protected pending: ISequencedDocumentMessage[] | undefined = [];
@@ -248,10 +252,17 @@ export abstract class FluidDataStoreContext
248
252
  protected _attachState: AttachState;
249
253
  private _isInMemoryRoot: boolean = false;
250
254
  protected readonly summarizerNode: ISummarizerNodeWithGC;
251
- private readonly mc: MonitoringContext;
255
+ protected readonly mc: MonitoringContext;
252
256
  private readonly thresholdOpsCounter: ThresholdCounter;
253
257
  private static readonly pendingOpsCountThreshold = 1000;
254
258
 
259
+ /**
260
+ * If the summarizer makes local changes, a telemetry event is logged. This has the potential to be very noisy.
261
+ * So, adding a count of how many telemetry events are logged per data store context. This can be
262
+ * controlled via feature flags.
263
+ */
264
+ private localChangesTelemetryCount: number;
265
+
255
266
  // The used routes of this node as per the last GC run. This is used to update the used routes of the channel
256
267
  // if it realizes after GC is run.
257
268
  private lastUsedRoutes: string[] | undefined;
@@ -265,7 +276,6 @@ export abstract class FluidDataStoreContext
265
276
  constructor(
266
277
  props: IFluidDataStoreContextProps,
267
278
  private readonly existing: boolean,
268
- private bindState: BindState, // Used to assert for state tracking purposes
269
279
  public readonly isLocalDataStore: boolean,
270
280
  private readonly makeLocallyVisibleFn: () => void,
271
281
  ) {
@@ -286,20 +296,6 @@ export abstract class FluidDataStoreContext
286
296
  ? this.containerRuntime.attachState
287
297
  : AttachState.Detached;
288
298
 
289
- this.bindToContext = () => {
290
- assert(
291
- this.bindState === BindState.NotBound,
292
- 0x13b /* "datastore context is already in bound state" */,
293
- );
294
- this.bindState = BindState.Binding;
295
- assert(
296
- this.channel !== undefined,
297
- 0x13c /* "undefined channel on datastore context" */,
298
- );
299
- this.makeLocallyVisible();
300
- this.bindState = BindState.Bound;
301
- };
302
-
303
299
  const thisSummarizeInternal = async (
304
300
  fullTree: boolean,
305
301
  trackState: boolean,
@@ -309,7 +305,6 @@ export abstract class FluidDataStoreContext
309
305
  this.summarizerNode = props.createSummarizerNodeFn(
310
306
  thisSummarizeInternal,
311
307
  async (fullGC?: boolean) => this.getGCDataInternal(fullGC),
312
- async () => this.getBaseGCDetails(),
313
308
  );
314
309
 
315
310
  this.mc = loggerToMonitoringContext(
@@ -323,7 +318,12 @@ export abstract class FluidDataStoreContext
323
318
  // Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
324
319
  this.throwOnTombstoneUsage =
325
320
  this.mc.config.getBoolean(throwOnTombstoneUsageKey) === true &&
321
+ this._containerRuntime.gcTombstoneEnforcementAllowed &&
326
322
  this.clientDetails.type !== summarizerClientType;
323
+
324
+ // By default, a data store can log maximum 10 local changes telemetry in summarizer.
325
+ this.localChangesTelemetryCount =
326
+ this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount") ?? 10;
327
327
  }
328
328
 
329
329
  public dispose(): void {
@@ -343,6 +343,15 @@ export abstract class FluidDataStoreContext
343
343
  }
344
344
  }
345
345
 
346
+ /**
347
+ * When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries
348
+ * This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store
349
+ * should not receive any ops/signals.
350
+ */
351
+ public delete() {
352
+ this.deleted = true;
353
+ }
354
+
346
355
  public setTombstone(tombstone: boolean) {
347
356
  if (this.tombstoned === tombstone) {
348
357
  return;
@@ -351,9 +360,14 @@ export abstract class FluidDataStoreContext
351
360
  this._tombstoned = tombstone;
352
361
  }
353
362
 
354
- private rejectDeferredRealize(reason: string, packageName?: string): never {
363
+ private rejectDeferredRealize(
364
+ reason: string,
365
+ failedPkgPath?: string,
366
+ fullPackageName?: readonly string[],
367
+ ): never {
355
368
  throw new LoggingError(reason, {
356
- packageName: { value: packageName, tag: TelemetryDataTag.CodeArtifact },
369
+ failedPkgPath: { value: failedPkgPath, tag: TelemetryDataTag.CodeArtifact },
370
+ fullPackageName: packagePathToTelemetryProperty(fullPackageName),
357
371
  });
358
372
  }
359
373
 
@@ -371,6 +385,7 @@ export abstract class FluidDataStoreContext
371
385
  value: this.id,
372
386
  tag: TelemetryDataTag.CodeArtifact,
373
387
  },
388
+ packageName: packagePathToTelemetryProperty(this.pkg),
374
389
  });
375
390
  this.channelDeferred?.reject(errorWrapped);
376
391
  this.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
@@ -391,18 +406,22 @@ export abstract class FluidDataStoreContext
391
406
  let lastPkg: string | undefined;
392
407
  for (const pkg of packages) {
393
408
  if (!registry) {
394
- this.rejectDeferredRealize("No registry for package", lastPkg);
409
+ this.rejectDeferredRealize("No registry for package", lastPkg, packages);
395
410
  }
396
411
  lastPkg = pkg;
397
412
  entry = await registry.get(pkg);
398
413
  if (!entry) {
399
- this.rejectDeferredRealize("Registry does not contain entry for the package", pkg);
414
+ this.rejectDeferredRealize(
415
+ "Registry does not contain entry for the package",
416
+ pkg,
417
+ packages,
418
+ );
400
419
  }
401
420
  registry = entry.IFluidDataStoreRegistry;
402
421
  }
403
422
  const factory = entry?.IFluidDataStoreFactory;
404
423
  if (factory === undefined) {
405
- this.rejectDeferredRealize("Can't find factory for package", lastPkg);
424
+ this.rejectDeferredRealize("Can't find factory for package", lastPkg, packages);
406
425
  }
407
426
 
408
427
  return { factory, registry };
@@ -658,6 +677,10 @@ export abstract class FluidDataStoreContext
658
677
  content,
659
678
  type,
660
679
  };
680
+
681
+ // Summarizer clients should not submit messages.
682
+ this.identifyLocalChangeInSummarizer("DataStoreMessageSubmittedInSummarizer", type);
683
+
661
684
  this._containerRuntime.submitDataStoreOp(this.id, fluidDataStoreContent, localOpMetadata);
662
685
  }
663
686
 
@@ -698,6 +721,15 @@ export abstract class FluidDataStoreContext
698
721
  */
699
722
  public makeLocallyVisible() {
700
723
  assert(this.channel !== undefined, 0x2cf /* "undefined channel on datastore context" */);
724
+ assert(
725
+ this.channel.visibilityState === VisibilityState.LocallyVisible,
726
+ 0x590 /* Channel must be locally visible */,
727
+ );
728
+ this.makeLocallyVisibleFn();
729
+ }
730
+
731
+ /** @deprecated - To be replaced by calling makeLocallyVisible directly */
732
+ public bindToContext() {
701
733
  this.makeLocallyVisibleFn();
702
734
  }
703
735
 
@@ -779,7 +811,12 @@ export abstract class FluidDataStoreContext
779
811
  this._isInMemoryRoot = true;
780
812
  }
781
813
 
782
- public abstract getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
814
+ /**
815
+ * @deprecated - The functionality to get base GC details has been moved to summarizer node.
816
+ */
817
+ public async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {
818
+ return {};
819
+ }
783
820
 
784
821
  public reSubmit(contents: any, localOpMetadata: unknown) {
785
822
  assert(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
@@ -812,6 +849,20 @@ export abstract class FluidDataStoreContext
812
849
  checkTombstone = true,
813
850
  safeTelemetryProps: ITelemetryProperties = {},
814
851
  ) {
852
+ if (this.deleted) {
853
+ const messageString = `Context is deleted! Call site [${callSite}]`;
854
+ const error = new DataCorruptionError(messageString, safeTelemetryProps);
855
+ this.mc.logger.sendErrorEvent(
856
+ {
857
+ eventName: "GC_Deleted_DataStore_Changed",
858
+ callSite,
859
+ },
860
+ error,
861
+ );
862
+
863
+ throw error;
864
+ }
865
+
815
866
  if (this._disposed) {
816
867
  throw new Error(`Context is closed! Call site [${callSite}]`);
817
868
  }
@@ -825,7 +876,8 @@ export abstract class FluidDataStoreContext
825
876
  {
826
877
  eventName: "GC_Tombstone_DataStore_Changed",
827
878
  category: this.throwOnTombstoneUsage ? "error" : "generic",
828
- isSummarizerClient: this.clientDetails.type === summarizerClientType,
879
+ gcTombstoneEnforcementAllowed:
880
+ this._containerRuntime.gcTombstoneEnforcementAllowed,
829
881
  callSite,
830
882
  },
831
883
  this.pkg,
@@ -837,11 +889,40 @@ export abstract class FluidDataStoreContext
837
889
  }
838
890
  }
839
891
 
892
+ /**
893
+ * Summarizer client should not have local changes. These changes can become part of the summary and can break
894
+ * eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas
895
+ * other clients that are up-to-date till seq# 100 may not have them yet.
896
+ */
897
+ protected identifyLocalChangeInSummarizer(eventName: string, type?: string) {
898
+ if (
899
+ this.clientDetails.type !== summarizerClientType ||
900
+ this.localChangesTelemetryCount <= 0
901
+ ) {
902
+ return;
903
+ }
904
+
905
+ // Log a telemetry if there are local changes in the summarizer. This will give us data on how often
906
+ // this is happening and which data stores do this. The eventual goal is to disallow local changes
907
+ // in the summarizer and the data will help us plan this.
908
+ this.mc.logger.sendTelemetryEvent({
909
+ eventName,
910
+ type,
911
+ fluidDataStoreId: {
912
+ value: this.id,
913
+ tag: TelemetryDataTag.CodeArtifact,
914
+ },
915
+ packageName: packagePathToTelemetryProperty(this.pkg),
916
+ isSummaryInProgress: this.summarizerNode.isSummaryInProgress?.(),
917
+ stack: generateStack(),
918
+ });
919
+ this.localChangesTelemetryCount--;
920
+ }
921
+
840
922
  public getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam) {
841
923
  return (
842
924
  summarizeInternal: SummarizeInternalFn,
843
925
  getGCDataFn: (fullGC?: boolean) => Promise<IGarbageCollectionData>,
844
- getBaseGCDetailsFn?: () => Promise<IGarbageCollectionDetailsBase>,
845
926
  ) =>
846
927
  this.summarizerNode.createChild(
847
928
  summarizeInternal,
@@ -850,7 +931,6 @@ export abstract class FluidDataStoreContext
850
931
  // DDS will not create failure summaries
851
932
  { throwOnFailure: true },
852
933
  getGCDataFn,
853
- getBaseGCDetailsFn,
854
934
  );
855
935
  }
856
936
 
@@ -861,17 +941,13 @@ export abstract class FluidDataStoreContext
861
941
 
862
942
  export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
863
943
  private readonly initSnapshotValue: ISnapshotTree | undefined;
864
- private readonly baseGCDetailsP: Promise<IGarbageCollectionDetailsBase>;
865
944
 
866
945
  constructor(props: IRemoteFluidDataStoreContextProps) {
867
- super(props, true /* existing */, BindState.Bound, false /* isLocalDataStore */, () => {
946
+ super(props, true /* existing */, false /* isLocalDataStore */, () => {
868
947
  throw new Error("Already attached");
869
948
  });
870
949
 
871
950
  this.initSnapshotValue = props.snapshotTree;
872
- this.baseGCDetailsP = new LazyPromise<IGarbageCollectionDetailsBase>(async () => {
873
- return (await props.getBaseGCDetails()) ?? {};
874
- });
875
951
 
876
952
  if (props.snapshotTree !== undefined) {
877
953
  this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
@@ -931,10 +1007,6 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
931
1007
  return this.initialSnapshotDetailsP;
932
1008
  }
933
1009
 
934
- public async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {
935
- return this.baseGCDetailsP;
936
- }
937
-
938
1010
  public generateAttachMessage(): IAttachMessage {
939
1011
  throw new Error("Cannot attach remote store");
940
1012
  }
@@ -954,11 +1026,13 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
954
1026
  super(
955
1027
  props,
956
1028
  props.snapshotTree !== undefined ? true : false /* existing */,
957
- props.snapshotTree ? BindState.Bound : BindState.NotBound,
958
1029
  true /* isLocalDataStore */,
959
1030
  props.makeLocallyVisibleFn,
960
1031
  );
961
1032
 
1033
+ // Summarizer client should not create local data stores.
1034
+ this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
1035
+
962
1036
  this.snapshotTree = props.snapshotTree;
963
1037
  if (props.isRootDataStore === true) {
964
1038
  this.setInMemoryRoot();
@@ -1050,9 +1124,26 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
1050
1124
  };
1051
1125
  }
1052
1126
 
1053
- public async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {
1054
- // Local data store does not have initial summary.
1055
- return {};
1127
+ /**
1128
+ * A context should only be marked as deleted when its a remote context.
1129
+ * Session Expiry at the runtime level should have closed the container creating the local data store context
1130
+ * before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time
1131
+ * it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote
1132
+ * context.
1133
+ */
1134
+ public delete() {
1135
+ // TODO: GC:Validation - potentially prevent this from happening or asserting. Maybe throw here.
1136
+ sendGCUnexpectedUsageEvent(
1137
+ this.mc,
1138
+ {
1139
+ eventName: "GC_Deleted_DataStore_Unexpected_Delete",
1140
+ message: "Unexpected deletion of a local data store context",
1141
+ category: "error",
1142
+ gcTombstoneEnforcementAllowed: undefined,
1143
+ },
1144
+ this.pkg,
1145
+ );
1146
+ super.delete();
1056
1147
  }
1057
1148
  }
1058
1149