@fluidframework/container-runtime 2.0.0-dev.2.3.0.115467 → 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 (563) hide show
  1. package/.eslintrc.js +21 -10
  2. package/.mocharc.js +2 -2
  3. package/api-extractor.json +2 -2
  4. package/dist/batchTracker.d.ts +1 -2
  5. package/dist/batchTracker.d.ts.map +1 -1
  6. package/dist/batchTracker.js +2 -1
  7. package/dist/batchTracker.js.map +1 -1
  8. package/dist/blobManager.d.ts +74 -42
  9. package/dist/blobManager.d.ts.map +1 -1
  10. package/dist/blobManager.js +321 -152
  11. package/dist/blobManager.js.map +1 -1
  12. package/dist/connectionTelemetry.d.ts.map +1 -1
  13. package/dist/connectionTelemetry.js +11 -9
  14. package/dist/connectionTelemetry.js.map +1 -1
  15. package/dist/containerHandleContext.d.ts.map +1 -1
  16. package/dist/containerHandleContext.js +3 -1
  17. package/dist/containerHandleContext.js.map +1 -1
  18. package/dist/containerRuntime.d.ts +148 -114
  19. package/dist/containerRuntime.d.ts.map +1 -1
  20. package/dist/containerRuntime.js +534 -342
  21. package/dist/containerRuntime.js.map +1 -1
  22. package/dist/dataStore.d.ts.map +1 -1
  23. package/dist/dataStore.js +11 -9
  24. package/dist/dataStore.js.map +1 -1
  25. package/dist/dataStoreContext.d.ts +40 -13
  26. package/dist/dataStoreContext.d.ts.map +1 -1
  27. package/dist/dataStoreContext.js +146 -66
  28. package/dist/dataStoreContext.js.map +1 -1
  29. package/dist/dataStoreContexts.d.ts.map +1 -1
  30. package/dist/dataStoreContexts.js +7 -3
  31. package/dist/dataStoreContexts.js.map +1 -1
  32. package/dist/dataStoreRegistry.d.ts.map +1 -1
  33. package/dist/dataStoreRegistry.js +3 -1
  34. package/dist/dataStoreRegistry.js.map +1 -1
  35. package/dist/dataStores.d.ts +39 -12
  36. package/dist/dataStores.d.ts.map +1 -1
  37. package/dist/dataStores.js +164 -76
  38. package/dist/dataStores.js.map +1 -1
  39. package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
  40. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
  41. package/dist/deltaManagerSummarizerProxy.js +40 -0
  42. package/dist/deltaManagerSummarizerProxy.js.map +1 -0
  43. package/dist/deltaScheduler.d.ts.map +1 -1
  44. package/dist/deltaScheduler.js +8 -3
  45. package/dist/deltaScheduler.js.map +1 -1
  46. package/dist/gc/garbageCollection.d.ts +204 -0
  47. package/dist/gc/garbageCollection.d.ts.map +1 -0
  48. package/dist/gc/garbageCollection.js +926 -0
  49. package/dist/gc/garbageCollection.js.map +1 -0
  50. package/dist/gc/gcConfigs.d.ts +22 -0
  51. package/dist/gc/gcConfigs.d.ts.map +1 -0
  52. package/dist/gc/gcConfigs.js +143 -0
  53. package/dist/gc/gcConfigs.js.map +1 -0
  54. package/dist/gc/gcDefinitions.d.ts +320 -0
  55. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  56. package/dist/gc/gcDefinitions.js +81 -0
  57. package/dist/gc/gcDefinitions.js.map +1 -0
  58. package/dist/gc/gcHelpers.d.ts +86 -0
  59. package/dist/gc/gcHelpers.d.ts.map +1 -0
  60. package/dist/gc/gcHelpers.js +268 -0
  61. package/dist/gc/gcHelpers.js.map +1 -0
  62. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  63. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  64. package/dist/gc/gcReferenceGraphAlgorithm.js +49 -0
  65. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  66. package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
  67. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
  68. package/dist/gc/gcSummaryDefinitions.js +7 -0
  69. package/dist/gc/gcSummaryDefinitions.js.map +1 -0
  70. package/dist/gc/gcSummaryStateTracker.d.ts +93 -0
  71. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  72. package/dist/gc/gcSummaryStateTracker.js +239 -0
  73. package/dist/gc/gcSummaryStateTracker.js.map +1 -0
  74. package/{lib → dist/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
  75. package/dist/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
  76. package/dist/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
  77. package/dist/gc/gcSweepReadyUsageDetection.js.map +1 -0
  78. package/dist/gc/gcUnreferencedStateTracker.d.ts +34 -0
  79. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  80. package/dist/gc/gcUnreferencedStateTracker.js +94 -0
  81. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -0
  82. package/dist/gc/index.d.ts +13 -0
  83. package/dist/gc/index.d.ts.map +1 -0
  84. package/dist/gc/index.js +50 -0
  85. package/dist/gc/index.js.map +1 -0
  86. package/dist/index.d.ts +3 -8
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +7 -13
  89. package/dist/index.js.map +1 -1
  90. package/dist/opLifecycle/batchManager.d.ts +10 -0
  91. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  92. package/dist/opLifecycle/batchManager.js +37 -8
  93. package/dist/opLifecycle/batchManager.js.map +1 -1
  94. package/dist/opLifecycle/definitions.d.ts +29 -1
  95. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  96. package/dist/opLifecycle/definitions.js.map +1 -1
  97. package/dist/opLifecycle/index.d.ts +3 -3
  98. package/dist/opLifecycle/index.d.ts.map +1 -1
  99. package/dist/opLifecycle/index.js +3 -1
  100. package/dist/opLifecycle/index.js.map +1 -1
  101. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  102. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  103. package/dist/opLifecycle/opCompressor.js +46 -17
  104. package/dist/opLifecycle/opCompressor.js.map +1 -1
  105. package/dist/opLifecycle/opDecompressor.d.ts +6 -1
  106. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  107. package/dist/opLifecycle/opDecompressor.js +72 -18
  108. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  109. package/dist/opLifecycle/opSplitter.d.ts +46 -2
  110. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  111. package/dist/opLifecycle/opSplitter.js +142 -5
  112. package/dist/opLifecycle/opSplitter.js.map +1 -1
  113. package/dist/opLifecycle/outbox.d.ts +23 -2
  114. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  115. package/dist/opLifecycle/outbox.js +101 -51
  116. package/dist/opLifecycle/outbox.js.map +1 -1
  117. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  118. package/dist/opLifecycle/remoteMessageProcessor.js +17 -2
  119. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  120. package/dist/opProperties.d.ts.map +1 -1
  121. package/dist/opProperties.js +1 -3
  122. package/dist/opProperties.js.map +1 -1
  123. package/dist/packageVersion.d.ts +1 -1
  124. package/dist/packageVersion.js +1 -1
  125. package/dist/packageVersion.js.map +1 -1
  126. package/dist/pendingStateManager.d.ts +6 -15
  127. package/dist/pendingStateManager.d.ts.map +1 -1
  128. package/dist/pendingStateManager.js +137 -165
  129. package/dist/pendingStateManager.js.map +1 -1
  130. package/dist/scheduleManager.d.ts +0 -1
  131. package/dist/scheduleManager.d.ts.map +1 -1
  132. package/dist/scheduleManager.js +11 -21
  133. package/dist/scheduleManager.js.map +1 -1
  134. package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
  135. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
  136. package/dist/storageServiceWithAttachBlobs.js +32 -0
  137. package/dist/storageServiceWithAttachBlobs.js.map +1 -0
  138. package/dist/summary/index.d.ts +17 -0
  139. package/dist/summary/index.d.ts.map +1 -0
  140. package/dist/summary/index.js +46 -0
  141. package/dist/summary/index.js.map +1 -0
  142. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  143. package/dist/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
  144. package/dist/summary/orderedClientElection.js.map +1 -0
  145. package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +3 -2
  146. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  147. package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
  148. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -0
  149. package/{lib → dist/summary}/runningSummarizer.d.ts +19 -18
  150. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  151. package/dist/{runningSummarizer.js → summary/runningSummarizer.js} +191 -77
  152. package/dist/summary/runningSummarizer.js.map +1 -0
  153. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +6 -12
  154. package/dist/summary/summarizer.d.ts.map +1 -0
  155. package/dist/{summarizer.js → summary/summarizer.js} +32 -76
  156. package/dist/summary/summarizer.js.map +1 -0
  157. package/dist/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +1 -2
  158. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  159. package/dist/{summarizerClientElection.js → summary/summarizerClientElection.js} +3 -30
  160. package/dist/summary/summarizerClientElection.js.map +1 -0
  161. package/dist/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +1 -1
  162. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  163. package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +9 -12
  164. package/dist/summary/summarizerHeuristics.js.map +1 -0
  165. package/dist/summary/summarizerNode/index.d.ts +8 -0
  166. package/dist/summary/summarizerNode/index.d.ts.map +1 -0
  167. package/dist/summary/summarizerNode/index.js +12 -0
  168. package/dist/summary/summarizerNode/index.js.map +1 -0
  169. package/dist/summary/summarizerNode/summarizerNode.d.ts +149 -0
  170. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  171. package/dist/summary/summarizerNode/summarizerNode.js +531 -0
  172. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -0
  173. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
  174. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  175. package/dist/summary/summarizerNode/summarizerNodeUtils.js +132 -0
  176. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  177. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
  178. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  179. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +423 -0
  180. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  181. package/{lib → dist/summary}/summarizerTypes.d.ts +29 -42
  182. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  183. package/dist/{summarizerTypes.js → summary/summarizerTypes.js} +0 -5
  184. package/dist/summary/summarizerTypes.js.map +1 -0
  185. package/dist/summary/summaryCollection.d.ts.map +1 -0
  186. package/dist/{summaryCollection.js → summary/summaryCollection.js} +18 -8
  187. package/dist/summary/summaryCollection.js.map +1 -0
  188. package/{lib → dist/summary}/summaryFormat.d.ts +3 -21
  189. package/dist/summary/summaryFormat.d.ts.map +1 -0
  190. package/dist/{summaryFormat.js → summary/summaryFormat.js} +19 -21
  191. package/dist/summary/summaryFormat.js.map +1 -0
  192. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  193. package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +34 -16
  194. package/dist/summary/summaryGenerator.js.map +1 -0
  195. package/dist/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
  196. package/dist/summary/summaryManager.d.ts.map +1 -0
  197. package/dist/{summaryManager.js → summary/summaryManager.js} +21 -9
  198. package/dist/summary/summaryManager.js.map +1 -0
  199. package/dist/throttler.d.ts +2 -2
  200. package/dist/throttler.d.ts.map +1 -1
  201. package/dist/throttler.js +4 -4
  202. package/dist/throttler.js.map +1 -1
  203. package/lib/batchTracker.d.ts +1 -2
  204. package/lib/batchTracker.d.ts.map +1 -1
  205. package/lib/batchTracker.js +2 -1
  206. package/lib/batchTracker.js.map +1 -1
  207. package/lib/blobManager.d.ts +74 -42
  208. package/lib/blobManager.d.ts.map +1 -1
  209. package/lib/blobManager.js +322 -153
  210. package/lib/blobManager.js.map +1 -1
  211. package/lib/connectionTelemetry.d.ts.map +1 -1
  212. package/lib/connectionTelemetry.js +11 -9
  213. package/lib/connectionTelemetry.js.map +1 -1
  214. package/lib/containerHandleContext.d.ts.map +1 -1
  215. package/lib/containerHandleContext.js +3 -1
  216. package/lib/containerHandleContext.js.map +1 -1
  217. package/lib/containerRuntime.d.ts +148 -114
  218. package/lib/containerRuntime.d.ts.map +1 -1
  219. package/lib/containerRuntime.js +506 -314
  220. package/lib/containerRuntime.js.map +1 -1
  221. package/lib/dataStore.d.ts.map +1 -1
  222. package/lib/dataStore.js +11 -9
  223. package/lib/dataStore.js.map +1 -1
  224. package/lib/dataStoreContext.d.ts +40 -13
  225. package/lib/dataStoreContext.d.ts.map +1 -1
  226. package/lib/dataStoreContext.js +136 -56
  227. package/lib/dataStoreContext.js.map +1 -1
  228. package/lib/dataStoreContexts.d.ts.map +1 -1
  229. package/lib/dataStoreContexts.js +7 -3
  230. package/lib/dataStoreContexts.js.map +1 -1
  231. package/lib/dataStoreRegistry.d.ts.map +1 -1
  232. package/lib/dataStoreRegistry.js +3 -1
  233. package/lib/dataStoreRegistry.js.map +1 -1
  234. package/lib/dataStores.d.ts +39 -12
  235. package/lib/dataStores.d.ts.map +1 -1
  236. package/lib/dataStores.js +162 -74
  237. package/lib/dataStores.js.map +1 -1
  238. package/lib/deltaManagerSummarizerProxy.d.ts +19 -0
  239. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  240. package/lib/deltaManagerSummarizerProxy.js +36 -0
  241. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  242. package/lib/deltaScheduler.d.ts.map +1 -1
  243. package/lib/deltaScheduler.js +9 -4
  244. package/lib/deltaScheduler.js.map +1 -1
  245. package/lib/gc/garbageCollection.d.ts +204 -0
  246. package/lib/gc/garbageCollection.d.ts.map +1 -0
  247. package/lib/gc/garbageCollection.js +922 -0
  248. package/lib/gc/garbageCollection.js.map +1 -0
  249. package/lib/gc/gcConfigs.d.ts +22 -0
  250. package/lib/gc/gcConfigs.d.ts.map +1 -0
  251. package/lib/gc/gcConfigs.js +139 -0
  252. package/lib/gc/gcConfigs.js.map +1 -0
  253. package/lib/gc/gcDefinitions.d.ts +320 -0
  254. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  255. package/lib/gc/gcDefinitions.js +78 -0
  256. package/lib/gc/gcDefinitions.js.map +1 -0
  257. package/lib/gc/gcHelpers.d.ts +86 -0
  258. package/lib/gc/gcHelpers.d.ts.map +1 -0
  259. package/lib/gc/gcHelpers.js +254 -0
  260. package/lib/gc/gcHelpers.js.map +1 -0
  261. package/lib/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  262. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  263. package/lib/gc/gcReferenceGraphAlgorithm.js +45 -0
  264. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  265. package/lib/gc/gcSummaryDefinitions.d.ts +52 -0
  266. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  267. package/lib/gc/gcSummaryDefinitions.js +6 -0
  268. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  269. package/lib/gc/gcSummaryStateTracker.d.ts +93 -0
  270. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  271. package/lib/gc/gcSummaryStateTracker.js +235 -0
  272. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  273. package/{dist → lib/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
  274. package/lib/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
  275. package/lib/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
  276. package/lib/gc/gcSweepReadyUsageDetection.js.map +1 -0
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts +34 -0
  278. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  279. package/lib/gc/gcUnreferencedStateTracker.js +90 -0
  280. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  281. package/lib/gc/index.d.ts +13 -0
  282. package/lib/gc/index.d.ts.map +1 -0
  283. package/lib/gc/index.js +12 -0
  284. package/lib/gc/index.js.map +1 -0
  285. package/lib/index.d.ts +3 -8
  286. package/lib/index.d.ts.map +1 -1
  287. package/lib/index.js +2 -6
  288. package/lib/index.js.map +1 -1
  289. package/lib/opLifecycle/batchManager.d.ts +10 -0
  290. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  291. package/lib/opLifecycle/batchManager.js +35 -7
  292. package/lib/opLifecycle/batchManager.js.map +1 -1
  293. package/lib/opLifecycle/definitions.d.ts +29 -1
  294. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  295. package/lib/opLifecycle/definitions.js.map +1 -1
  296. package/lib/opLifecycle/index.d.ts +3 -3
  297. package/lib/opLifecycle/index.d.ts.map +1 -1
  298. package/lib/opLifecycle/index.js +2 -2
  299. package/lib/opLifecycle/index.js.map +1 -1
  300. package/lib/opLifecycle/opCompressor.d.ts +1 -1
  301. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  302. package/lib/opLifecycle/opCompressor.js +47 -18
  303. package/lib/opLifecycle/opCompressor.js.map +1 -1
  304. package/lib/opLifecycle/opDecompressor.d.ts +6 -1
  305. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  306. package/lib/opLifecycle/opDecompressor.js +72 -18
  307. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  308. package/lib/opLifecycle/opSplitter.d.ts +46 -2
  309. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  310. package/lib/opLifecycle/opSplitter.js +141 -5
  311. package/lib/opLifecycle/opSplitter.js.map +1 -1
  312. package/lib/opLifecycle/outbox.d.ts +23 -2
  313. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  314. package/lib/opLifecycle/outbox.js +103 -53
  315. package/lib/opLifecycle/outbox.js.map +1 -1
  316. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  317. package/lib/opLifecycle/remoteMessageProcessor.js +17 -2
  318. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  319. package/lib/opProperties.d.ts.map +1 -1
  320. package/lib/opProperties.js +1 -3
  321. package/lib/opProperties.js.map +1 -1
  322. package/lib/packageVersion.d.ts +1 -1
  323. package/lib/packageVersion.js +1 -1
  324. package/lib/packageVersion.js.map +1 -1
  325. package/lib/pendingStateManager.d.ts +6 -15
  326. package/lib/pendingStateManager.d.ts.map +1 -1
  327. package/lib/pendingStateManager.js +137 -165
  328. package/lib/pendingStateManager.js.map +1 -1
  329. package/lib/scheduleManager.d.ts +0 -1
  330. package/lib/scheduleManager.d.ts.map +1 -1
  331. package/lib/scheduleManager.js +11 -21
  332. package/lib/scheduleManager.js.map +1 -1
  333. package/lib/storageServiceWithAttachBlobs.d.ts +17 -0
  334. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  335. package/lib/storageServiceWithAttachBlobs.js +28 -0
  336. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  337. package/lib/summary/index.d.ts +17 -0
  338. package/lib/summary/index.d.ts.map +1 -0
  339. package/lib/summary/index.js +15 -0
  340. package/lib/summary/index.js.map +1 -0
  341. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  342. package/lib/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
  343. package/lib/summary/orderedClientElection.js.map +1 -0
  344. package/{dist → lib/summary}/runWhileConnectedCoordinator.d.ts +3 -2
  345. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  346. package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +5 -4
  347. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  348. package/{dist → lib/summary}/runningSummarizer.d.ts +19 -18
  349. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  350. package/lib/{runningSummarizer.js → summary/runningSummarizer.js} +193 -79
  351. package/lib/summary/runningSummarizer.js.map +1 -0
  352. package/lib/{summarizer.d.ts → summary/summarizer.d.ts} +6 -12
  353. package/lib/summary/summarizer.d.ts.map +1 -0
  354. package/lib/{summarizer.js → summary/summarizer.js} +34 -78
  355. package/lib/summary/summarizer.js.map +1 -0
  356. package/lib/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +1 -2
  357. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  358. package/lib/{summarizerClientElection.js → summary/summarizerClientElection.js} +3 -30
  359. package/lib/summary/summarizerClientElection.js.map +1 -0
  360. package/lib/{summarizerHeuristics.d.ts → summary/summarizerHeuristics.d.ts} +1 -1
  361. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  362. package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +9 -12
  363. package/lib/summary/summarizerHeuristics.js.map +1 -0
  364. package/lib/summary/summarizerNode/index.d.ts +8 -0
  365. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  366. package/lib/summary/summarizerNode/index.js +7 -0
  367. package/lib/summary/summarizerNode/index.js.map +1 -0
  368. package/lib/summary/summarizerNode/summarizerNode.d.ts +149 -0
  369. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  370. package/lib/summary/summarizerNode/summarizerNode.js +526 -0
  371. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  372. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
  373. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  374. package/lib/summary/summarizerNode/summarizerNodeUtils.js +125 -0
  375. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  376. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
  377. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  378. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +419 -0
  379. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  380. package/{dist → lib/summary}/summarizerTypes.d.ts +29 -42
  381. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  382. package/lib/summary/summarizerTypes.js +6 -0
  383. package/lib/summary/summarizerTypes.js.map +1 -0
  384. package/lib/summary/summaryCollection.d.ts.map +1 -0
  385. package/lib/{summaryCollection.js → summary/summaryCollection.js} +18 -8
  386. package/lib/summary/summaryCollection.js.map +1 -0
  387. package/{dist → lib/summary}/summaryFormat.d.ts +3 -21
  388. package/lib/summary/summaryFormat.d.ts.map +1 -0
  389. package/lib/{summaryFormat.js → summary/summaryFormat.js} +20 -21
  390. package/lib/summary/summaryFormat.js.map +1 -0
  391. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  392. package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +34 -16
  393. package/lib/summary/summaryGenerator.js.map +1 -0
  394. package/lib/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
  395. package/lib/summary/summaryManager.d.ts.map +1 -0
  396. package/lib/{summaryManager.js → summary/summaryManager.js} +21 -9
  397. package/lib/summary/summaryManager.js.map +1 -0
  398. package/lib/throttler.d.ts +2 -2
  399. package/lib/throttler.d.ts.map +1 -1
  400. package/lib/throttler.js +4 -4
  401. package/lib/throttler.js.map +1 -1
  402. package/package.json +67 -61
  403. package/prettier.config.cjs +1 -1
  404. package/src/batchTracker.ts +55 -50
  405. package/src/blobManager.ts +863 -594
  406. package/src/connectionTelemetry.ts +280 -249
  407. package/src/containerHandleContext.ts +27 -29
  408. package/src/containerRuntime.ts +3174 -2805
  409. package/src/dataStore.ts +172 -159
  410. package/src/dataStoreContext.ts +1141 -993
  411. package/src/dataStoreContexts.ts +178 -161
  412. package/src/dataStoreRegistry.ts +25 -20
  413. package/src/dataStores.ts +887 -716
  414. package/src/deltaManagerSummarizerProxy.ts +46 -0
  415. package/src/deltaScheduler.ts +158 -150
  416. package/{garbageCollection.md → src/gc/garbageCollection.md} +16 -3
  417. package/src/gc/garbageCollection.ts +1250 -0
  418. package/src/gc/gcConfigs.ts +193 -0
  419. package/src/gc/gcDefinitions.ts +387 -0
  420. package/src/gc/gcHelpers.ts +332 -0
  421. package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
  422. package/src/gc/gcSummaryDefinitions.ts +54 -0
  423. package/src/gc/gcSummaryStateTracker.ts +329 -0
  424. package/src/gc/gcSweepReadyUsageDetection.ts +145 -0
  425. package/src/gc/gcUnreferencedStateTracker.ts +114 -0
  426. package/src/gc/index.ts +65 -0
  427. package/src/index.ts +61 -75
  428. package/src/opLifecycle/README.md +157 -0
  429. package/src/opLifecycle/batchManager.ts +119 -86
  430. package/src/opLifecycle/definitions.ts +49 -19
  431. package/src/opLifecycle/index.ts +7 -6
  432. package/src/opLifecycle/opCompressor.ts +78 -40
  433. package/src/opLifecycle/opDecompressor.ts +148 -64
  434. package/src/opLifecycle/opSplitter.ts +269 -66
  435. package/src/opLifecycle/outbox.ts +268 -184
  436. package/src/opLifecycle/remoteMessageProcessor.ts +63 -47
  437. package/src/opProperties.ts +11 -9
  438. package/src/packageVersion.ts +1 -1
  439. package/src/pendingStateManager.ts +386 -381
  440. package/src/scheduleManager.ts +299 -280
  441. package/src/storageServiceWithAttachBlobs.ts +38 -0
  442. package/src/summary/index.ts +105 -0
  443. package/src/summary/orderedClientElection.ts +564 -0
  444. package/src/summary/runWhileConnectedCoordinator.ts +113 -0
  445. package/src/summary/runningSummarizer.ts +788 -0
  446. package/src/summary/summarizer.ts +372 -0
  447. package/src/summary/summarizerClientElection.ts +139 -0
  448. package/src/summary/summarizerHeuristics.ts +224 -0
  449. package/src/summary/summarizerNode/index.ts +12 -0
  450. package/src/summary/summarizerNode/summarizerNode.ts +766 -0
  451. package/src/summary/summarizerNode/summarizerNodeUtils.ts +214 -0
  452. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +644 -0
  453. package/src/summary/summarizerTypes.ts +507 -0
  454. package/src/summary/summaryCollection.ts +450 -0
  455. package/src/summary/summaryFormat.ts +228 -0
  456. package/src/summary/summaryGenerator.ts +505 -0
  457. package/src/summary/summaryManager.ts +423 -0
  458. package/src/throttler.ts +131 -122
  459. package/tsconfig.esnext.json +6 -6
  460. package/tsconfig.json +9 -13
  461. package/dist/garbageCollection.d.ts +0 -387
  462. package/dist/garbageCollection.d.ts.map +0 -1
  463. package/dist/garbageCollection.js +0 -1138
  464. package/dist/garbageCollection.js.map +0 -1
  465. package/dist/garbageCollectionConstants.d.ts +0 -19
  466. package/dist/garbageCollectionConstants.d.ts.map +0 -1
  467. package/dist/garbageCollectionConstants.js +0 -34
  468. package/dist/garbageCollectionConstants.js.map +0 -1
  469. package/dist/gcSweepReadyUsageDetection.d.ts.map +0 -1
  470. package/dist/gcSweepReadyUsageDetection.js.map +0 -1
  471. package/dist/orderedClientElection.d.ts.map +0 -1
  472. package/dist/orderedClientElection.js.map +0 -1
  473. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  474. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  475. package/dist/runningSummarizer.d.ts.map +0 -1
  476. package/dist/runningSummarizer.js.map +0 -1
  477. package/dist/serializedSnapshotStorage.d.ts +0 -58
  478. package/dist/serializedSnapshotStorage.d.ts.map +0 -1
  479. package/dist/serializedSnapshotStorage.js +0 -108
  480. package/dist/serializedSnapshotStorage.js.map +0 -1
  481. package/dist/summarizer.d.ts.map +0 -1
  482. package/dist/summarizer.js.map +0 -1
  483. package/dist/summarizerClientElection.d.ts.map +0 -1
  484. package/dist/summarizerClientElection.js.map +0 -1
  485. package/dist/summarizerHandle.d.ts +0 -12
  486. package/dist/summarizerHandle.d.ts.map +0 -1
  487. package/dist/summarizerHandle.js +0 -22
  488. package/dist/summarizerHandle.js.map +0 -1
  489. package/dist/summarizerHeuristics.d.ts.map +0 -1
  490. package/dist/summarizerHeuristics.js.map +0 -1
  491. package/dist/summarizerTypes.d.ts.map +0 -1
  492. package/dist/summarizerTypes.js.map +0 -1
  493. package/dist/summaryCollection.d.ts.map +0 -1
  494. package/dist/summaryCollection.js.map +0 -1
  495. package/dist/summaryFormat.d.ts.map +0 -1
  496. package/dist/summaryFormat.js.map +0 -1
  497. package/dist/summaryGenerator.d.ts.map +0 -1
  498. package/dist/summaryGenerator.js.map +0 -1
  499. package/dist/summaryManager.d.ts.map +0 -1
  500. package/dist/summaryManager.js.map +0 -1
  501. package/lib/garbageCollection.d.ts +0 -387
  502. package/lib/garbageCollection.d.ts.map +0 -1
  503. package/lib/garbageCollection.js +0 -1133
  504. package/lib/garbageCollection.js.map +0 -1
  505. package/lib/garbageCollectionConstants.d.ts +0 -19
  506. package/lib/garbageCollectionConstants.d.ts.map +0 -1
  507. package/lib/garbageCollectionConstants.js +0 -31
  508. package/lib/garbageCollectionConstants.js.map +0 -1
  509. package/lib/gcSweepReadyUsageDetection.d.ts.map +0 -1
  510. package/lib/gcSweepReadyUsageDetection.js.map +0 -1
  511. package/lib/orderedClientElection.d.ts.map +0 -1
  512. package/lib/orderedClientElection.js.map +0 -1
  513. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  514. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  515. package/lib/runningSummarizer.d.ts.map +0 -1
  516. package/lib/runningSummarizer.js.map +0 -1
  517. package/lib/serializedSnapshotStorage.d.ts +0 -58
  518. package/lib/serializedSnapshotStorage.d.ts.map +0 -1
  519. package/lib/serializedSnapshotStorage.js +0 -104
  520. package/lib/serializedSnapshotStorage.js.map +0 -1
  521. package/lib/summarizer.d.ts.map +0 -1
  522. package/lib/summarizer.js.map +0 -1
  523. package/lib/summarizerClientElection.d.ts.map +0 -1
  524. package/lib/summarizerClientElection.js.map +0 -1
  525. package/lib/summarizerHandle.d.ts +0 -12
  526. package/lib/summarizerHandle.d.ts.map +0 -1
  527. package/lib/summarizerHandle.js +0 -18
  528. package/lib/summarizerHandle.js.map +0 -1
  529. package/lib/summarizerHeuristics.d.ts.map +0 -1
  530. package/lib/summarizerHeuristics.js.map +0 -1
  531. package/lib/summarizerTypes.d.ts.map +0 -1
  532. package/lib/summarizerTypes.js +0 -9
  533. package/lib/summarizerTypes.js.map +0 -1
  534. package/lib/summaryCollection.d.ts.map +0 -1
  535. package/lib/summaryCollection.js.map +0 -1
  536. package/lib/summaryFormat.d.ts.map +0 -1
  537. package/lib/summaryFormat.js.map +0 -1
  538. package/lib/summaryGenerator.d.ts.map +0 -1
  539. package/lib/summaryGenerator.js.map +0 -1
  540. package/lib/summaryManager.d.ts.map +0 -1
  541. package/lib/summaryManager.js.map +0 -1
  542. package/src/garbageCollection.ts +0 -1646
  543. package/src/garbageCollectionConstants.ts +0 -35
  544. package/src/gcSweepReadyUsageDetection.ts +0 -139
  545. package/src/orderedClientElection.ts +0 -532
  546. package/src/runWhileConnectedCoordinator.ts +0 -106
  547. package/src/runningSummarizer.ts +0 -611
  548. package/src/serializedSnapshotStorage.ts +0 -146
  549. package/src/summarizer.ts +0 -421
  550. package/src/summarizerClientElection.ts +0 -161
  551. package/src/summarizerHandle.ts +0 -21
  552. package/src/summarizerHeuristics.ts +0 -222
  553. package/src/summarizerTypes.ts +0 -510
  554. package/src/summaryCollection.ts +0 -421
  555. package/src/summaryFormat.ts +0 -235
  556. package/src/summaryGenerator.ts +0 -446
  557. package/src/summaryManager.ts +0 -394
  558. /package/dist/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
  559. /package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
  560. /package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
  561. /package/lib/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
  562. /package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
  563. /package/lib/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
@@ -3,16 +3,15 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { AttachState, } from "@fluidframework/container-definitions";
6
- import { assert, Deferred, LazyPromise, TypedEventEmitter, } from "@fluidframework/common-utils";
6
+ import { assert, Deferred, LazyPromise, TypedEventEmitter } from "@fluidframework/common-utils";
7
7
  import { readAndParse } from "@fluidframework/driver-utils";
8
8
  import { BlobTreeEntry } from "@fluidframework/protocol-base";
9
- import { BindState, channelsTreeName, } from "@fluidframework/runtime-definitions";
9
+ import { channelsTreeName, VisibilityState, } from "@fluidframework/runtime-definitions";
10
10
  import { addBlobToSummary, convertSummaryTreeToITree, packagePathToTelemetryProperty, } from "@fluidframework/runtime-utils";
11
- import { ChildLogger, loggerToMonitoringContext, LoggingError, TelemetryDataTag, ThresholdCounter, } from "@fluidframework/telemetry-utils";
11
+ import { ChildLogger, generateStack, loggerToMonitoringContext, LoggingError, TelemetryDataTag, ThresholdCounter, } from "@fluidframework/telemetry-utils";
12
12
  import { DataCorruptionError, DataProcessingError, extractSafePropertiesFromMessage, } from "@fluidframework/container-utils";
13
- import { dataStoreAttributesBlobName, hasIsolatedChannels, wrapSummaryInChannelsTree, getAttributesFormatVersion, getFluidDataStoreAttributes, } from "./summaryFormat";
14
- import { throwOnTombstoneUsageKey } from "./garbageCollectionConstants";
15
- import { summarizerClientType } from "./summarizerClientElection";
13
+ import { dataStoreAttributesBlobName, hasIsolatedChannels, wrapSummaryInChannelsTree, getAttributesFormatVersion, getFluidDataStoreAttributes, summarizerClientType, } from "./summary";
14
+ import { sendGCUnexpectedUsageEvent, throwOnTombstoneUsageKey } from "./gc";
16
15
  function createAttributes(pkg, isRootDataStore) {
17
16
  const stringifiedPkg = JSON.stringify(pkg);
18
17
  return {
@@ -29,11 +28,10 @@ export function createAttributesBlob(pkg, isRootDataStore) {
29
28
  * Represents the context for the store. This context is passed to the store runtime.
30
29
  */
31
30
  export class FluidDataStoreContext extends TypedEventEmitter {
32
- constructor(props, existing, bindState, // Used to assert for state tracking purposes
33
- isLocalDataStore, makeLocallyVisibleFn) {
31
+ constructor(props, existing, isLocalDataStore, makeLocallyVisibleFn) {
32
+ var _a;
34
33
  super();
35
34
  this.existing = existing;
36
- this.bindState = bindState;
37
35
  this.isLocalDataStore = isLocalDataStore;
38
36
  this.makeLocallyVisibleFn = makeLocallyVisibleFn;
39
37
  this._disposed = false;
@@ -42,6 +40,8 @@ export class FluidDataStoreContext extends TypedEventEmitter {
42
40
  * loading.
43
41
  */
44
42
  this._tombstoned = false;
43
+ /** If true, this means that this data store context and its children have been removed from the runtime */
44
+ this.deleted = false;
45
45
  this.detachedRuntimeCreation = false;
46
46
  this.loaded = false;
47
47
  this.pending = [];
@@ -54,23 +54,22 @@ export class FluidDataStoreContext extends TypedEventEmitter {
54
54
  // URIs use slashes as delimiters. Handles use URIs.
55
55
  // Thus having slashes in types almost guarantees trouble down the road!
56
56
  assert(!this.id.includes("/"), 0x13a /* Data store ID contains slash */);
57
- this._attachState = this.containerRuntime.attachState !== AttachState.Detached && this.existing ?
58
- this.containerRuntime.attachState : AttachState.Detached;
59
- this.bindToContext = () => {
60
- assert(this.bindState === BindState.NotBound, 0x13b /* "datastore context is already in bound state" */);
61
- this.bindState = BindState.Binding;
62
- assert(this.channel !== undefined, 0x13c /* "undefined channel on datastore context" */);
63
- this.makeLocallyVisible();
64
- this.bindState = BindState.Bound;
65
- };
57
+ this._attachState =
58
+ this.containerRuntime.attachState !== AttachState.Detached && this.existing
59
+ ? this.containerRuntime.attachState
60
+ : AttachState.Detached;
66
61
  const thisSummarizeInternal = async (fullTree, trackState, telemetryContext) => this.summarizeInternal(fullTree, trackState, telemetryContext);
67
- this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC), async () => this.getBaseGCDetails());
62
+ this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC));
68
63
  this.mc = loggerToMonitoringContext(ChildLogger.create(this.logger, "FluidDataStoreContext"));
69
64
  this.thresholdOpsCounter = new ThresholdCounter(FluidDataStoreContext.pendingOpsCountThreshold, this.mc.logger);
70
65
  // Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
71
66
  this.throwOnTombstoneUsage =
72
67
  this.mc.config.getBoolean(throwOnTombstoneUsageKey) === true &&
68
+ this._containerRuntime.gcTombstoneEnforcementAllowed &&
73
69
  this.clientDetails.type !== summarizerClientType;
70
+ // By default, a data store can log maximum 10 local changes telemetry in summarizer.
71
+ this.localChangesTelemetryCount =
72
+ (_a = this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount")) !== null && _a !== void 0 ? _a : 10;
74
73
  }
75
74
  get packagePath() {
76
75
  assert(this.pkg !== undefined, 0x139 /* "Undefined package path" */);
@@ -100,14 +99,21 @@ export class FluidDataStoreContext extends TypedEventEmitter {
100
99
  get containerRuntime() {
101
100
  return this._containerRuntime;
102
101
  }
102
+ ensureNoDataModelChanges(callback) {
103
+ return this._containerRuntime.ensureNoDataModelChanges(callback);
104
+ }
103
105
  get isLoaded() {
104
106
  return this.loaded;
105
107
  }
106
108
  get baseSnapshot() {
107
109
  return this._baseSnapshot;
108
110
  }
109
- get disposed() { return this._disposed; }
110
- get tombstoned() { return this._tombstoned; }
111
+ get disposed() {
112
+ return this._disposed;
113
+ }
114
+ get tombstoned() {
115
+ return this._tombstoned;
116
+ }
111
117
  get attachState() {
112
118
  return this._attachState;
113
119
  }
@@ -141,19 +147,32 @@ export class FluidDataStoreContext extends TypedEventEmitter {
141
147
  // Dispose any pending runtime after it gets fulfilled
142
148
  // Errors are logged where this.channelDeferred is consumed/generated (realizeCore(), bindRuntime())
143
149
  if (this.channelDeferred) {
144
- this.channelDeferred.promise.then((runtime) => {
150
+ this.channelDeferred.promise
151
+ .then((runtime) => {
145
152
  runtime.dispose();
146
- }).catch((error) => { });
153
+ })
154
+ .catch((error) => { });
147
155
  }
148
156
  }
157
+ /**
158
+ * When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries
159
+ * This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store
160
+ * should not receive any ops/signals.
161
+ */
162
+ delete() {
163
+ this.deleted = true;
164
+ }
149
165
  setTombstone(tombstone) {
150
166
  if (this.tombstoned === tombstone) {
151
167
  return;
152
168
  }
153
169
  this._tombstoned = tombstone;
154
170
  }
155
- rejectDeferredRealize(reason, packageName) {
156
- throw new LoggingError(reason, { packageName: { value: packageName, tag: TelemetryDataTag.CodeArtifact } });
171
+ rejectDeferredRealize(reason, failedPkgPath, fullPackageName) {
172
+ throw new LoggingError(reason, {
173
+ failedPkgPath: { value: failedPkgPath, tag: TelemetryDataTag.CodeArtifact },
174
+ fullPackageName: packagePathToTelemetryProperty(fullPackageName),
175
+ });
157
176
  }
158
177
  async realize() {
159
178
  assert(!this.detachedRuntimeCreation, 0x13d /* "Detached runtime creation on realize()" */);
@@ -167,6 +186,7 @@ export class FluidDataStoreContext extends TypedEventEmitter {
167
186
  value: this.id,
168
187
  tag: TelemetryDataTag.CodeArtifact,
169
188
  },
189
+ packageName: packagePathToTelemetryProperty(this.pkg),
170
190
  });
171
191
  (_a = this.channelDeferred) === null || _a === void 0 ? void 0 : _a.reject(errorWrapped);
172
192
  this.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
@@ -184,18 +204,18 @@ export class FluidDataStoreContext extends TypedEventEmitter {
184
204
  let lastPkg;
185
205
  for (const pkg of packages) {
186
206
  if (!registry) {
187
- this.rejectDeferredRealize("No registry for package", lastPkg);
207
+ this.rejectDeferredRealize("No registry for package", lastPkg, packages);
188
208
  }
189
209
  lastPkg = pkg;
190
210
  entry = await registry.get(pkg);
191
211
  if (!entry) {
192
- this.rejectDeferredRealize("Registry does not contain entry for the package", pkg);
212
+ this.rejectDeferredRealize("Registry does not contain entry for the package", pkg, packages);
193
213
  }
194
214
  registry = entry.IFluidDataStoreRegistry;
195
215
  }
196
216
  const factory = entry === null || entry === void 0 ? void 0 : entry.IFluidDataStoreFactory;
197
217
  if (factory === undefined) {
198
- this.rejectDeferredRealize("Can't find factory for package", lastPkg);
218
+ this.rejectDeferredRealize("Can't find factory for package", lastPkg, packages);
199
219
  }
200
220
  return { factory, registry };
201
221
  }
@@ -365,7 +385,9 @@ export class FluidDataStoreContext extends TypedEventEmitter {
365
385
  return;
366
386
  }
367
387
  // Remove the route to this data store, if it exists.
368
- const usedChannelRoutes = this.lastUsedRoutes.filter((id) => { return id !== "/" && id !== ""; });
388
+ const usedChannelRoutes = this.lastUsedRoutes.filter((id) => {
389
+ return id !== "/" && id !== "";
390
+ });
369
391
  this.channel.updateUsedRoutes(usedChannelRoutes);
370
392
  }
371
393
  /**
@@ -382,6 +404,8 @@ export class FluidDataStoreContext extends TypedEventEmitter {
382
404
  content,
383
405
  type,
384
406
  };
407
+ // Summarizer clients should not submit messages.
408
+ this.identifyLocalChangeInSummarizer("DataStoreMessageSubmittedInSummarizer", type);
385
409
  this._containerRuntime.submitDataStoreOp(this.id, fluidDataStoreContent, localOpMetadata);
386
410
  }
387
411
  /**
@@ -414,6 +438,11 @@ export class FluidDataStoreContext extends TypedEventEmitter {
414
438
  */
415
439
  makeLocallyVisible() {
416
440
  assert(this.channel !== undefined, 0x2cf /* "undefined channel on datastore context" */);
441
+ assert(this.channel.visibilityState === VisibilityState.LocallyVisible, 0x590 /* Channel must be locally visible */);
442
+ this.makeLocallyVisibleFn();
443
+ }
444
+ /** @deprecated - To be replaced by calling makeLocallyVisible directly */
445
+ bindToContext() {
417
446
  this.makeLocallyVisibleFn();
418
447
  }
419
448
  bindRuntime(channel) {
@@ -452,10 +481,13 @@ export class FluidDataStoreContext extends TypedEventEmitter {
452
481
  }
453
482
  catch (error) {
454
483
  (_a = this.channelDeferred) === null || _a === void 0 ? void 0 : _a.reject(error);
455
- this.logger.sendErrorEvent({ eventName: "BindRuntimeError", fluidDataStoreId: {
484
+ this.logger.sendErrorEvent({
485
+ eventName: "BindRuntimeError",
486
+ fluidDataStoreId: {
456
487
  value: this.id,
457
488
  tag: TelemetryDataTag.CodeArtifact,
458
- } }, error);
489
+ },
490
+ }, error);
459
491
  }
460
492
  }
461
493
  async getAbsoluteUrl(relativeUrl) {
@@ -472,6 +504,12 @@ export class FluidDataStoreContext extends TypedEventEmitter {
472
504
  setInMemoryRoot() {
473
505
  this._isInMemoryRoot = true;
474
506
  }
507
+ /**
508
+ * @deprecated - The functionality to get base GC details has been moved to summarizer node.
509
+ */
510
+ async getBaseGCDetails() {
511
+ return {};
512
+ }
475
513
  reSubmit(contents, localOpMetadata) {
476
514
  assert(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
477
515
  const innerContents = contents;
@@ -496,30 +534,63 @@ export class FluidDataStoreContext extends TypedEventEmitter {
496
534
  return this.channel.applyStashedOp(innerContents.content);
497
535
  }
498
536
  verifyNotClosed(callSite, checkTombstone = true, safeTelemetryProps = {}) {
537
+ if (this.deleted) {
538
+ const messageString = `Context is deleted! Call site [${callSite}]`;
539
+ const error = new DataCorruptionError(messageString, safeTelemetryProps);
540
+ this.mc.logger.sendErrorEvent({
541
+ eventName: "GC_Deleted_DataStore_Changed",
542
+ callSite,
543
+ }, error);
544
+ throw error;
545
+ }
499
546
  if (this._disposed) {
500
547
  throw new Error(`Context is closed! Call site [${callSite}]`);
501
548
  }
502
549
  if (checkTombstone && this.tombstoned) {
503
550
  const messageString = `Context is tombstoned! Call site [${callSite}]`;
504
- const error = new DataCorruptionError(messageString, Object.assign({ errorMessage: messageString }, safeTelemetryProps));
505
- // Always log an error when tombstoned data store is used. However, throw an error only if
506
- // throwOnTombstoneUsage is set.
507
- this.mc.logger.sendErrorEvent({
551
+ const error = new DataCorruptionError(messageString, safeTelemetryProps);
552
+ sendGCUnexpectedUsageEvent(this.mc, {
508
553
  eventName: "GC_Tombstone_DataStore_Changed",
554
+ category: this.throwOnTombstoneUsage ? "error" : "generic",
555
+ gcTombstoneEnforcementAllowed: this._containerRuntime.gcTombstoneEnforcementAllowed,
509
556
  callSite,
510
- pkg: packagePathToTelemetryProperty(this.pkg),
511
- }, error);
512
- // Always log an error when tombstoned data store is used. However, throw an error only if
513
- // throwOnTombstoneUsage is set and the client is not a summarizer.
557
+ }, this.pkg, error);
514
558
  if (this.throwOnTombstoneUsage) {
515
559
  throw error;
516
560
  }
517
561
  }
518
562
  }
563
+ /**
564
+ * Summarizer client should not have local changes. These changes can become part of the summary and can break
565
+ * eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas
566
+ * other clients that are up-to-date till seq# 100 may not have them yet.
567
+ */
568
+ identifyLocalChangeInSummarizer(eventName, type) {
569
+ var _a, _b;
570
+ if (this.clientDetails.type !== summarizerClientType ||
571
+ this.localChangesTelemetryCount <= 0) {
572
+ return;
573
+ }
574
+ // Log a telemetry if there are local changes in the summarizer. This will give us data on how often
575
+ // this is happening and which data stores do this. The eventual goal is to disallow local changes
576
+ // in the summarizer and the data will help us plan this.
577
+ this.mc.logger.sendTelemetryEvent({
578
+ eventName,
579
+ type,
580
+ fluidDataStoreId: {
581
+ value: this.id,
582
+ tag: TelemetryDataTag.CodeArtifact,
583
+ },
584
+ packageName: packagePathToTelemetryProperty(this.pkg),
585
+ isSummaryInProgress: (_b = (_a = this.summarizerNode).isSummaryInProgress) === null || _b === void 0 ? void 0 : _b.call(_a),
586
+ stack: generateStack(),
587
+ });
588
+ this.localChangesTelemetryCount--;
589
+ }
519
590
  getCreateChildSummarizerNodeFn(id, createParam) {
520
- return (summarizeInternal, getGCDataFn, getBaseGCDetailsFn) => this.summarizerNode.createChild(summarizeInternal, id, createParam,
591
+ return (summarizeInternal, getGCDataFn) => this.summarizerNode.createChild(summarizeInternal, id, createParam,
521
592
  // DDS will not create failure summaries
522
- { throwOnFailure: true }, getGCDataFn, getBaseGCDetailsFn);
593
+ { throwOnFailure: true }, getGCDataFn);
523
594
  }
524
595
  async uploadBlob(blob) {
525
596
  return this.containerRuntime.uploadBlob(blob);
@@ -528,7 +599,7 @@ export class FluidDataStoreContext extends TypedEventEmitter {
528
599
  FluidDataStoreContext.pendingOpsCountThreshold = 1000;
529
600
  export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
530
601
  constructor(props) {
531
- super(props, true /* existing */, BindState.Bound, false /* isLocalDataStore */, () => {
602
+ super(props, true /* existing */, false /* isLocalDataStore */, () => {
532
603
  throw new Error("Already attached");
533
604
  });
534
605
  this.initialSnapshotDetailsP = new LazyPromise(async () => {
@@ -543,9 +614,10 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
543
614
  // For snapshotFormatVersion = "0.1" (1) or above, pkg is jsonified, otherwise it is just a string.
544
615
  const formatVersion = getAttributesFormatVersion(attributes);
545
616
  if (formatVersion < 1) {
546
- pkgFromSnapshot = attributes.pkg.startsWith("[\"") && attributes.pkg.endsWith("\"]")
547
- ? JSON.parse(attributes.pkg)
548
- : [attributes.pkg];
617
+ pkgFromSnapshot =
618
+ attributes.pkg.startsWith('["') && attributes.pkg.endsWith('"]')
619
+ ? JSON.parse(attributes.pkg)
620
+ : [attributes.pkg];
549
621
  }
550
622
  else {
551
623
  pkgFromSnapshot = JSON.parse(attributes.pkg);
@@ -570,10 +642,6 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
570
642
  };
571
643
  });
572
644
  this.initSnapshotValue = props.snapshotTree;
573
- this.baseGCDetailsP = new LazyPromise(async () => {
574
- var _a;
575
- return (_a = (await props.getBaseGCDetails())) !== null && _a !== void 0 ? _a : {};
576
- });
577
645
  if (props.snapshotTree !== undefined) {
578
646
  this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
579
647
  }
@@ -581,9 +649,6 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
581
649
  async getInitialSnapshotDetails() {
582
650
  return this.initialSnapshotDetailsP;
583
651
  }
584
- async getBaseGCDetails() {
585
- return this.baseGCDetailsP;
586
- }
587
652
  generateAttachMessage() {
588
653
  throw new Error("Cannot attach remote store");
589
654
  }
@@ -593,7 +658,9 @@ export class RemoteFluidDataStoreContext extends FluidDataStoreContext {
593
658
  */
594
659
  export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
595
660
  constructor(props) {
596
- super(props, props.snapshotTree !== undefined ? true : false /* existing */, props.snapshotTree ? BindState.Bound : BindState.NotBound, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
661
+ super(props, props.snapshotTree !== undefined ? true : false /* existing */, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
662
+ // Summarizer client should not create local data stores.
663
+ this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
597
664
  this.snapshotTree = props.snapshotTree;
598
665
  if (props.isRootDataStore === true) {
599
666
  this.setInMemoryRoot();
@@ -660,9 +727,22 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
660
727
  snapshot,
661
728
  };
662
729
  }
663
- async getBaseGCDetails() {
664
- // Local data store does not have initial summary.
665
- return {};
730
+ /**
731
+ * A context should only be marked as deleted when its a remote context.
732
+ * Session Expiry at the runtime level should have closed the container creating the local data store context
733
+ * before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time
734
+ * it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote
735
+ * context.
736
+ */
737
+ delete() {
738
+ // TODO: GC:Validation - potentially prevent this from happening or asserting. Maybe throw here.
739
+ sendGCUnexpectedUsageEvent(this.mc, {
740
+ eventName: "GC_Deleted_DataStore_Unexpected_Delete",
741
+ message: "Unexpected deletion of a local data store context",
742
+ category: "error",
743
+ gcTombstoneEnforcementAllowed: undefined,
744
+ }, this.pkg);
745
+ super.delete();
666
746
  }
667
747
  }
668
748
  /**