@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
@@ -13,9 +13,8 @@ const runtime_definitions_1 = require("@fluidframework/runtime-definitions");
13
13
  const runtime_utils_1 = require("@fluidframework/runtime-utils");
14
14
  const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
15
15
  const container_utils_1 = require("@fluidframework/container-utils");
16
- const summaryFormat_1 = require("./summaryFormat");
17
- const garbageCollectionConstants_1 = require("./garbageCollectionConstants");
18
- const summarizerClientElection_1 = require("./summarizerClientElection");
16
+ const summary_1 = require("./summary");
17
+ const gc_1 = require("./gc");
19
18
  function createAttributes(pkg, isRootDataStore) {
20
19
  const stringifiedPkg = JSON.stringify(pkg);
21
20
  return {
@@ -26,18 +25,17 @@ function createAttributes(pkg, isRootDataStore) {
26
25
  }
27
26
  function createAttributesBlob(pkg, isRootDataStore) {
28
27
  const attributes = createAttributes(pkg, isRootDataStore);
29
- return new protocol_base_1.BlobTreeEntry(summaryFormat_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
28
+ return new protocol_base_1.BlobTreeEntry(summary_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
30
29
  }
31
30
  exports.createAttributesBlob = createAttributesBlob;
32
31
  /**
33
32
  * Represents the context for the store. This context is passed to the store runtime.
34
33
  */
35
34
  class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
36
- constructor(props, existing, bindState, // Used to assert for state tracking purposes
37
- isLocalDataStore, makeLocallyVisibleFn) {
35
+ constructor(props, existing, isLocalDataStore, makeLocallyVisibleFn) {
36
+ var _a;
38
37
  super();
39
38
  this.existing = existing;
40
- this.bindState = bindState;
41
39
  this.isLocalDataStore = isLocalDataStore;
42
40
  this.makeLocallyVisibleFn = makeLocallyVisibleFn;
43
41
  this._disposed = false;
@@ -46,6 +44,8 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
46
44
  * loading.
47
45
  */
48
46
  this._tombstoned = false;
47
+ /** If true, this means that this data store context and its children have been removed from the runtime */
48
+ this.deleted = false;
49
49
  this.detachedRuntimeCreation = false;
50
50
  this.loaded = false;
51
51
  this.pending = [];
@@ -58,23 +58,22 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
58
58
  // URIs use slashes as delimiters. Handles use URIs.
59
59
  // Thus having slashes in types almost guarantees trouble down the road!
60
60
  (0, common_utils_1.assert)(!this.id.includes("/"), 0x13a /* Data store ID contains slash */);
61
- this._attachState = this.containerRuntime.attachState !== container_definitions_1.AttachState.Detached && this.existing ?
62
- this.containerRuntime.attachState : container_definitions_1.AttachState.Detached;
63
- this.bindToContext = () => {
64
- (0, common_utils_1.assert)(this.bindState === runtime_definitions_1.BindState.NotBound, 0x13b /* "datastore context is already in bound state" */);
65
- this.bindState = runtime_definitions_1.BindState.Binding;
66
- (0, common_utils_1.assert)(this.channel !== undefined, 0x13c /* "undefined channel on datastore context" */);
67
- this.makeLocallyVisible();
68
- this.bindState = runtime_definitions_1.BindState.Bound;
69
- };
61
+ this._attachState =
62
+ this.containerRuntime.attachState !== container_definitions_1.AttachState.Detached && this.existing
63
+ ? this.containerRuntime.attachState
64
+ : container_definitions_1.AttachState.Detached;
70
65
  const thisSummarizeInternal = async (fullTree, trackState, telemetryContext) => this.summarizeInternal(fullTree, trackState, telemetryContext);
71
- this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC), async () => this.getBaseGCDetails());
66
+ this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC));
72
67
  this.mc = (0, telemetry_utils_1.loggerToMonitoringContext)(telemetry_utils_1.ChildLogger.create(this.logger, "FluidDataStoreContext"));
73
68
  this.thresholdOpsCounter = new telemetry_utils_1.ThresholdCounter(FluidDataStoreContext.pendingOpsCountThreshold, this.mc.logger);
74
69
  // Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
75
70
  this.throwOnTombstoneUsage =
76
- this.mc.config.getBoolean(garbageCollectionConstants_1.throwOnTombstoneUsageKey) === true &&
77
- this.clientDetails.type !== summarizerClientElection_1.summarizerClientType;
71
+ this.mc.config.getBoolean(gc_1.throwOnTombstoneUsageKey) === true &&
72
+ this._containerRuntime.gcTombstoneEnforcementAllowed &&
73
+ this.clientDetails.type !== summary_1.summarizerClientType;
74
+ // By default, a data store can log maximum 10 local changes telemetry in summarizer.
75
+ this.localChangesTelemetryCount =
76
+ (_a = this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount")) !== null && _a !== void 0 ? _a : 10;
78
77
  }
79
78
  get packagePath() {
80
79
  (0, common_utils_1.assert)(this.pkg !== undefined, 0x139 /* "Undefined package path" */);
@@ -104,14 +103,21 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
104
103
  get containerRuntime() {
105
104
  return this._containerRuntime;
106
105
  }
106
+ ensureNoDataModelChanges(callback) {
107
+ return this._containerRuntime.ensureNoDataModelChanges(callback);
108
+ }
107
109
  get isLoaded() {
108
110
  return this.loaded;
109
111
  }
110
112
  get baseSnapshot() {
111
113
  return this._baseSnapshot;
112
114
  }
113
- get disposed() { return this._disposed; }
114
- get tombstoned() { return this._tombstoned; }
115
+ get disposed() {
116
+ return this._disposed;
117
+ }
118
+ get tombstoned() {
119
+ return this._tombstoned;
120
+ }
115
121
  get attachState() {
116
122
  return this._attachState;
117
123
  }
@@ -145,19 +151,32 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
145
151
  // Dispose any pending runtime after it gets fulfilled
146
152
  // Errors are logged where this.channelDeferred is consumed/generated (realizeCore(), bindRuntime())
147
153
  if (this.channelDeferred) {
148
- this.channelDeferred.promise.then((runtime) => {
154
+ this.channelDeferred.promise
155
+ .then((runtime) => {
149
156
  runtime.dispose();
150
- }).catch((error) => { });
157
+ })
158
+ .catch((error) => { });
151
159
  }
152
160
  }
161
+ /**
162
+ * When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries
163
+ * This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store
164
+ * should not receive any ops/signals.
165
+ */
166
+ delete() {
167
+ this.deleted = true;
168
+ }
153
169
  setTombstone(tombstone) {
154
170
  if (this.tombstoned === tombstone) {
155
171
  return;
156
172
  }
157
173
  this._tombstoned = tombstone;
158
174
  }
159
- rejectDeferredRealize(reason, packageName) {
160
- throw new telemetry_utils_1.LoggingError(reason, { packageName: { value: packageName, tag: telemetry_utils_1.TelemetryDataTag.CodeArtifact } });
175
+ rejectDeferredRealize(reason, failedPkgPath, fullPackageName) {
176
+ throw new telemetry_utils_1.LoggingError(reason, {
177
+ failedPkgPath: { value: failedPkgPath, tag: telemetry_utils_1.TelemetryDataTag.CodeArtifact },
178
+ fullPackageName: (0, runtime_utils_1.packagePathToTelemetryProperty)(fullPackageName),
179
+ });
161
180
  }
162
181
  async realize() {
163
182
  (0, common_utils_1.assert)(!this.detachedRuntimeCreation, 0x13d /* "Detached runtime creation on realize()" */);
@@ -171,6 +190,7 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
171
190
  value: this.id,
172
191
  tag: telemetry_utils_1.TelemetryDataTag.CodeArtifact,
173
192
  },
193
+ packageName: (0, runtime_utils_1.packagePathToTelemetryProperty)(this.pkg),
174
194
  });
175
195
  (_a = this.channelDeferred) === null || _a === void 0 ? void 0 : _a.reject(errorWrapped);
176
196
  this.logger.sendErrorEvent({ eventName: "RealizeError" }, errorWrapped);
@@ -188,18 +208,18 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
188
208
  let lastPkg;
189
209
  for (const pkg of packages) {
190
210
  if (!registry) {
191
- this.rejectDeferredRealize("No registry for package", lastPkg);
211
+ this.rejectDeferredRealize("No registry for package", lastPkg, packages);
192
212
  }
193
213
  lastPkg = pkg;
194
214
  entry = await registry.get(pkg);
195
215
  if (!entry) {
196
- this.rejectDeferredRealize("Registry does not contain entry for the package", pkg);
216
+ this.rejectDeferredRealize("Registry does not contain entry for the package", pkg, packages);
197
217
  }
198
218
  registry = entry.IFluidDataStoreRegistry;
199
219
  }
200
220
  const factory = entry === null || entry === void 0 ? void 0 : entry.IFluidDataStoreFactory;
201
221
  if (factory === undefined) {
202
- this.rejectDeferredRealize("Can't find factory for package", lastPkg);
222
+ this.rejectDeferredRealize("Can't find factory for package", lastPkg, packages);
203
223
  }
204
224
  return { factory, registry };
205
225
  }
@@ -279,13 +299,13 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
279
299
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
280
300
  const summarizeResult = await this.channel.summarize(fullTree, trackState, telemetryContext);
281
301
  // Wrap dds summaries in .channels subtree.
282
- (0, summaryFormat_1.wrapSummaryInChannelsTree)(summarizeResult);
302
+ (0, summary_1.wrapSummaryInChannelsTree)(summarizeResult);
283
303
  const pathPartsForChildren = [runtime_definitions_1.channelsTreeName];
284
304
  // Add data store's attributes to the summary.
285
305
  const { pkg } = await this.getInitialSnapshotDetails();
286
306
  const isRoot = await this.isRoot();
287
307
  const attributes = createAttributes(pkg, isRoot);
288
- (0, runtime_utils_1.addBlobToSummary)(summarizeResult, summaryFormat_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
308
+ (0, runtime_utils_1.addBlobToSummary)(summarizeResult, summary_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
289
309
  // If we are not referenced, mark the summary tree as unreferenced. Also, update unreferenced blob
290
310
  // size in the summary stats with the blobs size of this data store.
291
311
  if (!this.summarizerNode.isReferenced()) {
@@ -369,7 +389,9 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
369
389
  return;
370
390
  }
371
391
  // Remove the route to this data store, if it exists.
372
- const usedChannelRoutes = this.lastUsedRoutes.filter((id) => { return id !== "/" && id !== ""; });
392
+ const usedChannelRoutes = this.lastUsedRoutes.filter((id) => {
393
+ return id !== "/" && id !== "";
394
+ });
373
395
  this.channel.updateUsedRoutes(usedChannelRoutes);
374
396
  }
375
397
  /**
@@ -386,6 +408,8 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
386
408
  content,
387
409
  type,
388
410
  };
411
+ // Summarizer clients should not submit messages.
412
+ this.identifyLocalChangeInSummarizer("DataStoreMessageSubmittedInSummarizer", type);
389
413
  this._containerRuntime.submitDataStoreOp(this.id, fluidDataStoreContent, localOpMetadata);
390
414
  }
391
415
  /**
@@ -418,6 +442,11 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
418
442
  */
419
443
  makeLocallyVisible() {
420
444
  (0, common_utils_1.assert)(this.channel !== undefined, 0x2cf /* "undefined channel on datastore context" */);
445
+ (0, common_utils_1.assert)(this.channel.visibilityState === runtime_definitions_1.VisibilityState.LocallyVisible, 0x590 /* Channel must be locally visible */);
446
+ this.makeLocallyVisibleFn();
447
+ }
448
+ /** @deprecated - To be replaced by calling makeLocallyVisible directly */
449
+ bindToContext() {
421
450
  this.makeLocallyVisibleFn();
422
451
  }
423
452
  bindRuntime(channel) {
@@ -456,10 +485,13 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
456
485
  }
457
486
  catch (error) {
458
487
  (_a = this.channelDeferred) === null || _a === void 0 ? void 0 : _a.reject(error);
459
- this.logger.sendErrorEvent({ eventName: "BindRuntimeError", fluidDataStoreId: {
488
+ this.logger.sendErrorEvent({
489
+ eventName: "BindRuntimeError",
490
+ fluidDataStoreId: {
460
491
  value: this.id,
461
492
  tag: telemetry_utils_1.TelemetryDataTag.CodeArtifact,
462
- } }, error);
493
+ },
494
+ }, error);
463
495
  }
464
496
  }
465
497
  async getAbsoluteUrl(relativeUrl) {
@@ -476,6 +508,12 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
476
508
  setInMemoryRoot() {
477
509
  this._isInMemoryRoot = true;
478
510
  }
511
+ /**
512
+ * @deprecated - The functionality to get base GC details has been moved to summarizer node.
513
+ */
514
+ async getBaseGCDetails() {
515
+ return {};
516
+ }
479
517
  reSubmit(contents, localOpMetadata) {
480
518
  (0, common_utils_1.assert)(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
481
519
  const innerContents = contents;
@@ -500,30 +538,63 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
500
538
  return this.channel.applyStashedOp(innerContents.content);
501
539
  }
502
540
  verifyNotClosed(callSite, checkTombstone = true, safeTelemetryProps = {}) {
541
+ if (this.deleted) {
542
+ const messageString = `Context is deleted! Call site [${callSite}]`;
543
+ const error = new container_utils_1.DataCorruptionError(messageString, safeTelemetryProps);
544
+ this.mc.logger.sendErrorEvent({
545
+ eventName: "GC_Deleted_DataStore_Changed",
546
+ callSite,
547
+ }, error);
548
+ throw error;
549
+ }
503
550
  if (this._disposed) {
504
551
  throw new Error(`Context is closed! Call site [${callSite}]`);
505
552
  }
506
553
  if (checkTombstone && this.tombstoned) {
507
554
  const messageString = `Context is tombstoned! Call site [${callSite}]`;
508
- const error = new container_utils_1.DataCorruptionError(messageString, Object.assign({ errorMessage: messageString }, safeTelemetryProps));
509
- // Always log an error when tombstoned data store is used. However, throw an error only if
510
- // throwOnTombstoneUsage is set.
511
- this.mc.logger.sendErrorEvent({
555
+ const error = new container_utils_1.DataCorruptionError(messageString, safeTelemetryProps);
556
+ (0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
512
557
  eventName: "GC_Tombstone_DataStore_Changed",
558
+ category: this.throwOnTombstoneUsage ? "error" : "generic",
559
+ gcTombstoneEnforcementAllowed: this._containerRuntime.gcTombstoneEnforcementAllowed,
513
560
  callSite,
514
- pkg: (0, runtime_utils_1.packagePathToTelemetryProperty)(this.pkg),
515
- }, error);
516
- // Always log an error when tombstoned data store is used. However, throw an error only if
517
- // throwOnTombstoneUsage is set and the client is not a summarizer.
561
+ }, this.pkg, error);
518
562
  if (this.throwOnTombstoneUsage) {
519
563
  throw error;
520
564
  }
521
565
  }
522
566
  }
567
+ /**
568
+ * Summarizer client should not have local changes. These changes can become part of the summary and can break
569
+ * eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas
570
+ * other clients that are up-to-date till seq# 100 may not have them yet.
571
+ */
572
+ identifyLocalChangeInSummarizer(eventName, type) {
573
+ var _a, _b;
574
+ if (this.clientDetails.type !== summary_1.summarizerClientType ||
575
+ this.localChangesTelemetryCount <= 0) {
576
+ return;
577
+ }
578
+ // Log a telemetry if there are local changes in the summarizer. This will give us data on how often
579
+ // this is happening and which data stores do this. The eventual goal is to disallow local changes
580
+ // in the summarizer and the data will help us plan this.
581
+ this.mc.logger.sendTelemetryEvent({
582
+ eventName,
583
+ type,
584
+ fluidDataStoreId: {
585
+ value: this.id,
586
+ tag: telemetry_utils_1.TelemetryDataTag.CodeArtifact,
587
+ },
588
+ packageName: (0, runtime_utils_1.packagePathToTelemetryProperty)(this.pkg),
589
+ isSummaryInProgress: (_b = (_a = this.summarizerNode).isSummaryInProgress) === null || _b === void 0 ? void 0 : _b.call(_a),
590
+ stack: (0, telemetry_utils_1.generateStack)(),
591
+ });
592
+ this.localChangesTelemetryCount--;
593
+ }
523
594
  getCreateChildSummarizerNodeFn(id, createParam) {
524
- return (summarizeInternal, getGCDataFn, getBaseGCDetailsFn) => this.summarizerNode.createChild(summarizeInternal, id, createParam,
595
+ return (summarizeInternal, getGCDataFn) => this.summarizerNode.createChild(summarizeInternal, id, createParam,
525
596
  // DDS will not create failure summaries
526
- { throwOnFailure: true }, getGCDataFn, getBaseGCDetailsFn);
597
+ { throwOnFailure: true }, getGCDataFn);
527
598
  }
528
599
  async uploadBlob(blob) {
529
600
  return this.containerRuntime.uploadBlob(blob);
@@ -533,24 +604,25 @@ exports.FluidDataStoreContext = FluidDataStoreContext;
533
604
  FluidDataStoreContext.pendingOpsCountThreshold = 1000;
534
605
  class RemoteFluidDataStoreContext extends FluidDataStoreContext {
535
606
  constructor(props) {
536
- super(props, true /* existing */, runtime_definitions_1.BindState.Bound, false /* isLocalDataStore */, () => {
607
+ super(props, true /* existing */, false /* isLocalDataStore */, () => {
537
608
  throw new Error("Already attached");
538
609
  });
539
610
  this.initialSnapshotDetailsP = new common_utils_1.LazyPromise(async () => {
540
611
  var _a;
541
612
  let tree = this.initSnapshotValue;
542
613
  let isRootDataStore = true;
543
- if (!!tree && tree.blobs[summaryFormat_1.dataStoreAttributesBlobName] !== undefined) {
614
+ if (!!tree && tree.blobs[summary_1.dataStoreAttributesBlobName] !== undefined) {
544
615
  // Need to get through snapshot and use that to populate extraBlobs
545
- const attributes = await (0, driver_utils_1.readAndParse)(this.storage, tree.blobs[summaryFormat_1.dataStoreAttributesBlobName]);
616
+ const attributes = await (0, driver_utils_1.readAndParse)(this.storage, tree.blobs[summary_1.dataStoreAttributesBlobName]);
546
617
  let pkgFromSnapshot;
547
618
  // Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.
548
619
  // For snapshotFormatVersion = "0.1" (1) or above, pkg is jsonified, otherwise it is just a string.
549
- const formatVersion = (0, summaryFormat_1.getAttributesFormatVersion)(attributes);
620
+ const formatVersion = (0, summary_1.getAttributesFormatVersion)(attributes);
550
621
  if (formatVersion < 1) {
551
- pkgFromSnapshot = attributes.pkg.startsWith("[\"") && attributes.pkg.endsWith("\"]")
552
- ? JSON.parse(attributes.pkg)
553
- : [attributes.pkg];
622
+ pkgFromSnapshot =
623
+ attributes.pkg.startsWith('["') && attributes.pkg.endsWith('"]')
624
+ ? JSON.parse(attributes.pkg)
625
+ : [attributes.pkg];
554
626
  }
555
627
  else {
556
628
  pkgFromSnapshot = JSON.parse(attributes.pkg);
@@ -562,7 +634,7 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
562
634
  * roots in the document but they won't break.
563
635
  */
564
636
  isRootDataStore = (_a = attributes.isRootDataStore) !== null && _a !== void 0 ? _a : true;
565
- if ((0, summaryFormat_1.hasIsolatedChannels)(attributes)) {
637
+ if ((0, summary_1.hasIsolatedChannels)(attributes)) {
566
638
  tree = tree.trees[runtime_definitions_1.channelsTreeName];
567
639
  (0, common_utils_1.assert)(tree !== undefined, 0x1fe /* "isolated channels subtree should exist in remote datastore snapshot" */);
568
640
  }
@@ -575,10 +647,6 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
575
647
  };
576
648
  });
577
649
  this.initSnapshotValue = props.snapshotTree;
578
- this.baseGCDetailsP = new common_utils_1.LazyPromise(async () => {
579
- var _a;
580
- return (_a = (await props.getBaseGCDetails())) !== null && _a !== void 0 ? _a : {};
581
- });
582
650
  if (props.snapshotTree !== undefined) {
583
651
  this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
584
652
  }
@@ -586,9 +654,6 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
586
654
  async getInitialSnapshotDetails() {
587
655
  return this.initialSnapshotDetailsP;
588
656
  }
589
- async getBaseGCDetails() {
590
- return this.baseGCDetailsP;
591
- }
592
657
  generateAttachMessage() {
593
658
  throw new Error("Cannot attach remote store");
594
659
  }
@@ -599,7 +664,9 @@ exports.RemoteFluidDataStoreContext = RemoteFluidDataStoreContext;
599
664
  */
600
665
  class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
601
666
  constructor(props) {
602
- super(props, props.snapshotTree !== undefined ? true : false /* existing */, props.snapshotTree ? runtime_definitions_1.BindState.Bound : runtime_definitions_1.BindState.NotBound, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
667
+ super(props, props.snapshotTree !== undefined ? true : false /* existing */, true /* isLocalDataStore */, props.makeLocallyVisibleFn);
668
+ // Summarizer client should not create local data stores.
669
+ this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
603
670
  this.snapshotTree = props.snapshotTree;
604
671
  if (props.isRootDataStore === true) {
605
672
  this.setInMemoryRoot();
@@ -622,10 +689,10 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
622
689
  (0, common_utils_1.assert)(this.pkg !== undefined, 0x150 /* "pkg should be available in local data store context" */);
623
690
  const summarizeResult = this.channel.getAttachSummary();
624
691
  // Wrap dds summaries in .channels subtree.
625
- (0, summaryFormat_1.wrapSummaryInChannelsTree)(summarizeResult);
692
+ (0, summary_1.wrapSummaryInChannelsTree)(summarizeResult);
626
693
  // Add data store's attributes to the summary.
627
694
  const attributes = createAttributes(this.pkg, this.isInMemoryRoot());
628
- (0, runtime_utils_1.addBlobToSummary)(summarizeResult, summaryFormat_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
695
+ (0, runtime_utils_1.addBlobToSummary)(summarizeResult, summary_1.dataStoreAttributesBlobName, JSON.stringify(attributes));
629
696
  // Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
630
697
  const snapshot = (0, runtime_utils_1.convertSummaryTreeToITree)(summarizeResult.summary);
631
698
  const message = {
@@ -643,8 +710,8 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
643
710
  if (snapshot !== undefined) {
644
711
  // Get the dataStore attributes.
645
712
  // Note: storage can be undefined in special case while detached.
646
- attributes = await (0, summaryFormat_1.getFluidDataStoreAttributes)(this.storage, snapshot);
647
- if ((0, summaryFormat_1.hasIsolatedChannels)(attributes)) {
713
+ attributes = await (0, summary_1.getFluidDataStoreAttributes)(this.storage, snapshot);
714
+ if ((0, summary_1.hasIsolatedChannels)(attributes)) {
648
715
  snapshot = snapshot.trees[runtime_definitions_1.channelsTreeName];
649
716
  (0, common_utils_1.assert)(snapshot !== undefined, 0x1ff /* "isolated channels subtree should exist in local datastore snapshot" */);
650
717
  }
@@ -666,9 +733,22 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
666
733
  snapshot,
667
734
  };
668
735
  }
669
- async getBaseGCDetails() {
670
- // Local data store does not have initial summary.
671
- return {};
736
+ /**
737
+ * A context should only be marked as deleted when its a remote context.
738
+ * Session Expiry at the runtime level should have closed the container creating the local data store context
739
+ * before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time
740
+ * it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote
741
+ * context.
742
+ */
743
+ delete() {
744
+ // TODO: GC:Validation - potentially prevent this from happening or asserting. Maybe throw here.
745
+ (0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
746
+ eventName: "GC_Deleted_DataStore_Unexpected_Delete",
747
+ message: "Unexpected deletion of a local data store context",
748
+ category: "error",
749
+ gcTombstoneEnforcementAllowed: undefined,
750
+ }, this.pkg);
751
+ super.delete();
672
752
  }
673
753
  }
674
754
  exports.LocalFluidDataStoreContextBase = LocalFluidDataStoreContextBase;