@fluidframework/container-runtime 2.0.0-internal.3.0.2 → 2.0.0-internal.3.2.0

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 (474) hide show
  1. package/.eslintrc.js +19 -19
  2. package/.mocharc.js +2 -2
  3. package/api-extractor.json +2 -2
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +2 -1
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +15 -2
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +109 -37
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/connectionTelemetry.d.ts.map +1 -1
  12. package/dist/connectionTelemetry.js +11 -9
  13. package/dist/connectionTelemetry.js.map +1 -1
  14. package/dist/containerHandleContext.d.ts.map +1 -1
  15. package/dist/containerHandleContext.js +3 -1
  16. package/dist/containerHandleContext.js.map +1 -1
  17. package/dist/containerRuntime.d.ts +23 -11
  18. package/dist/containerRuntime.d.ts.map +1 -1
  19. package/dist/containerRuntime.js +225 -132
  20. package/dist/containerRuntime.js.map +1 -1
  21. package/dist/dataStore.d.ts.map +1 -1
  22. package/dist/dataStore.js +11 -9
  23. package/dist/dataStore.js.map +1 -1
  24. package/dist/dataStoreContext.d.ts +27 -13
  25. package/dist/dataStoreContext.d.ts.map +1 -1
  26. package/dist/dataStoreContext.js +95 -56
  27. package/dist/dataStoreContext.js.map +1 -1
  28. package/dist/dataStoreContexts.d.ts.map +1 -1
  29. package/dist/dataStoreContexts.js +7 -3
  30. package/dist/dataStoreContexts.js.map +1 -1
  31. package/dist/dataStoreRegistry.d.ts.map +1 -1
  32. package/dist/dataStoreRegistry.js +3 -1
  33. package/dist/dataStoreRegistry.js.map +1 -1
  34. package/dist/dataStores.d.ts +28 -4
  35. package/dist/dataStores.d.ts.map +1 -1
  36. package/dist/dataStores.js +122 -44
  37. package/dist/dataStores.js.map +1 -1
  38. package/dist/deltaScheduler.d.ts.map +1 -1
  39. package/dist/deltaScheduler.js +8 -3
  40. package/dist/deltaScheduler.js.map +1 -1
  41. package/dist/{garbageCollection.d.ts → gc/garbageCollection.d.ts} +27 -203
  42. package/dist/gc/garbageCollection.d.ts.map +1 -0
  43. package/dist/{garbageCollection.js → gc/garbageCollection.js} +210 -400
  44. package/dist/gc/garbageCollection.js.map +1 -0
  45. package/dist/gc/gcDefinitions.d.ts +189 -0
  46. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  47. package/dist/{garbageCollectionConstants.js → gc/gcDefinitions.js} +27 -2
  48. package/dist/gc/gcDefinitions.js.map +1 -0
  49. package/dist/gc/gcHelpers.d.ts +30 -0
  50. package/dist/gc/gcHelpers.d.ts.map +1 -0
  51. package/dist/gc/gcHelpers.js +65 -0
  52. package/dist/gc/gcHelpers.js.map +1 -0
  53. package/dist/gc/gcSummaryStateTracker.d.ts +86 -0
  54. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  55. package/dist/gc/gcSummaryStateTracker.js +246 -0
  56. package/dist/gc/gcSummaryStateTracker.js.map +1 -0
  57. package/{lib → dist/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
  58. package/dist/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
  59. package/dist/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
  60. package/dist/gc/gcSweepReadyUsageDetection.js.map +1 -0
  61. package/dist/gc/gcUnreferencedStateTracker.d.ts +34 -0
  62. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  63. package/dist/gc/gcUnreferencedStateTracker.js +94 -0
  64. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -0
  65. package/dist/gc/index.d.ts +11 -0
  66. package/dist/gc/index.d.ts.map +1 -0
  67. package/dist/gc/index.js +40 -0
  68. package/dist/gc/index.js.map +1 -0
  69. package/dist/index.d.ts +2 -5
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +6 -9
  72. package/dist/index.js.map +1 -1
  73. package/dist/opLifecycle/batchManager.d.ts +2 -13
  74. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  75. package/dist/opLifecycle/batchManager.js +19 -41
  76. package/dist/opLifecycle/batchManager.js.map +1 -1
  77. package/dist/opLifecycle/definitions.d.ts +4 -0
  78. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  79. package/dist/opLifecycle/definitions.js.map +1 -1
  80. package/dist/opLifecycle/index.d.ts.map +1 -1
  81. package/dist/opLifecycle/index.js.map +1 -1
  82. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  83. package/dist/opLifecycle/opCompressor.js +1 -0
  84. package/dist/opLifecycle/opCompressor.js.map +1 -1
  85. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  86. package/dist/opLifecycle/opDecompressor.js +5 -2
  87. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  88. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  89. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  90. package/dist/opLifecycle/opSplitter.js +24 -13
  91. package/dist/opLifecycle/opSplitter.js.map +1 -1
  92. package/dist/opLifecycle/outbox.d.ts +19 -3
  93. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  94. package/dist/opLifecycle/outbox.js +78 -45
  95. package/dist/opLifecycle/outbox.js.map +1 -1
  96. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  97. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  98. package/dist/opProperties.d.ts.map +1 -1
  99. package/dist/opProperties.js +1 -3
  100. package/dist/opProperties.js.map +1 -1
  101. package/dist/packageVersion.d.ts +1 -1
  102. package/dist/packageVersion.js +1 -1
  103. package/dist/packageVersion.js.map +1 -1
  104. package/dist/pendingStateManager.d.ts +8 -2
  105. package/dist/pendingStateManager.d.ts.map +1 -1
  106. package/dist/pendingStateManager.js +21 -13
  107. package/dist/pendingStateManager.js.map +1 -1
  108. package/dist/scheduleManager.d.ts.map +1 -1
  109. package/dist/scheduleManager.js +3 -2
  110. package/dist/scheduleManager.js.map +1 -1
  111. package/dist/serializedSnapshotStorage.d.ts +2 -2
  112. package/dist/serializedSnapshotStorage.d.ts.map +1 -1
  113. package/dist/serializedSnapshotStorage.js +5 -3
  114. package/dist/serializedSnapshotStorage.js.map +1 -1
  115. package/dist/summary/index.d.ts +17 -0
  116. package/dist/summary/index.d.ts.map +1 -0
  117. package/dist/summary/index.js +47 -0
  118. package/dist/summary/index.js.map +1 -0
  119. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  120. package/dist/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
  121. package/dist/summary/orderedClientElection.js.map +1 -0
  122. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  123. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -0
  124. package/{lib → dist/summary}/runningSummarizer.d.ts +19 -18
  125. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  126. package/dist/{runningSummarizer.js → summary/runningSummarizer.js} +191 -76
  127. package/dist/summary/runningSummarizer.js.map +1 -0
  128. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +4 -6
  129. package/dist/summary/summarizer.d.ts.map +1 -0
  130. package/dist/{summarizer.js → summary/summarizer.js} +31 -71
  131. package/dist/summary/summarizer.js.map +1 -0
  132. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  133. package/dist/summary/summarizerClientElection.js.map +1 -0
  134. package/dist/summary/summarizerHandle.d.ts.map +1 -0
  135. package/dist/summary/summarizerHandle.js.map +1 -0
  136. package/{lib → dist/summary}/summarizerHeuristics.d.ts +1 -1
  137. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  138. package/dist/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +6 -9
  139. package/dist/summary/summarizerHeuristics.js.map +1 -0
  140. package/{lib → dist/summary}/summarizerTypes.d.ts +22 -22
  141. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  142. package/dist/summary/summarizerTypes.js.map +1 -0
  143. package/dist/summary/summaryCollection.d.ts.map +1 -0
  144. package/dist/{summaryCollection.js → summary/summaryCollection.js} +18 -8
  145. package/dist/summary/summaryCollection.js.map +1 -0
  146. package/{lib → dist/summary}/summaryFormat.d.ts +1 -40
  147. package/dist/summary/summaryFormat.d.ts.map +1 -0
  148. package/dist/{summaryFormat.js → summary/summaryFormat.js} +19 -20
  149. package/dist/summary/summaryFormat.js.map +1 -0
  150. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  151. package/dist/{summaryGenerator.js → summary/summaryGenerator.js} +33 -15
  152. package/dist/summary/summaryGenerator.js.map +1 -0
  153. package/dist/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
  154. package/dist/summary/summaryManager.d.ts.map +1 -0
  155. package/dist/{summaryManager.js → summary/summaryManager.js} +21 -9
  156. package/dist/summary/summaryManager.js.map +1 -0
  157. package/dist/throttler.d.ts +2 -2
  158. package/dist/throttler.d.ts.map +1 -1
  159. package/dist/throttler.js +4 -4
  160. package/dist/throttler.js.map +1 -1
  161. package/lib/batchTracker.d.ts.map +1 -1
  162. package/lib/batchTracker.js +2 -1
  163. package/lib/batchTracker.js.map +1 -1
  164. package/lib/blobManager.d.ts +15 -2
  165. package/lib/blobManager.d.ts.map +1 -1
  166. package/lib/blobManager.js +109 -37
  167. package/lib/blobManager.js.map +1 -1
  168. package/lib/connectionTelemetry.d.ts.map +1 -1
  169. package/lib/connectionTelemetry.js +11 -9
  170. package/lib/connectionTelemetry.js.map +1 -1
  171. package/lib/containerHandleContext.d.ts.map +1 -1
  172. package/lib/containerHandleContext.js +3 -1
  173. package/lib/containerHandleContext.js.map +1 -1
  174. package/lib/containerRuntime.d.ts +23 -11
  175. package/lib/containerRuntime.d.ts.map +1 -1
  176. package/lib/containerRuntime.js +201 -108
  177. package/lib/containerRuntime.js.map +1 -1
  178. package/lib/dataStore.d.ts.map +1 -1
  179. package/lib/dataStore.js +11 -9
  180. package/lib/dataStore.js.map +1 -1
  181. package/lib/dataStoreContext.d.ts +27 -13
  182. package/lib/dataStoreContext.d.ts.map +1 -1
  183. package/lib/dataStoreContext.js +84 -45
  184. package/lib/dataStoreContext.js.map +1 -1
  185. package/lib/dataStoreContexts.d.ts.map +1 -1
  186. package/lib/dataStoreContexts.js +7 -3
  187. package/lib/dataStoreContexts.js.map +1 -1
  188. package/lib/dataStoreRegistry.d.ts.map +1 -1
  189. package/lib/dataStoreRegistry.js +3 -1
  190. package/lib/dataStoreRegistry.js.map +1 -1
  191. package/lib/dataStores.d.ts +28 -4
  192. package/lib/dataStores.d.ts.map +1 -1
  193. package/lib/dataStores.js +120 -42
  194. package/lib/dataStores.js.map +1 -1
  195. package/lib/deltaScheduler.d.ts.map +1 -1
  196. package/lib/deltaScheduler.js +9 -4
  197. package/lib/deltaScheduler.js.map +1 -1
  198. package/lib/{garbageCollection.d.ts → gc/garbageCollection.d.ts} +27 -203
  199. package/lib/gc/garbageCollection.d.ts.map +1 -0
  200. package/lib/{garbageCollection.js → gc/garbageCollection.js} +190 -379
  201. package/lib/gc/garbageCollection.js.map +1 -0
  202. package/lib/gc/gcDefinitions.d.ts +189 -0
  203. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  204. package/lib/{garbageCollectionConstants.js → gc/gcDefinitions.js} +26 -1
  205. package/lib/gc/gcDefinitions.js.map +1 -0
  206. package/lib/gc/gcHelpers.d.ts +30 -0
  207. package/lib/gc/gcHelpers.d.ts.map +1 -0
  208. package/lib/gc/gcHelpers.js +58 -0
  209. package/lib/gc/gcHelpers.js.map +1 -0
  210. package/lib/gc/gcSummaryStateTracker.d.ts +86 -0
  211. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  212. package/lib/gc/gcSummaryStateTracker.js +242 -0
  213. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  214. package/{dist → lib/gc}/gcSweepReadyUsageDetection.d.ts +5 -5
  215. package/lib/gc/gcSweepReadyUsageDetection.d.ts.map +1 -0
  216. package/lib/{gcSweepReadyUsageDetection.js → gc/gcSweepReadyUsageDetection.js} +15 -11
  217. package/lib/gc/gcSweepReadyUsageDetection.js.map +1 -0
  218. package/lib/gc/gcUnreferencedStateTracker.d.ts +34 -0
  219. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  220. package/lib/gc/gcUnreferencedStateTracker.js +90 -0
  221. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  222. package/lib/gc/index.d.ts +11 -0
  223. package/lib/gc/index.d.ts.map +1 -0
  224. package/lib/gc/index.js +11 -0
  225. package/lib/gc/index.js.map +1 -0
  226. package/lib/index.d.ts +2 -5
  227. package/lib/index.d.ts.map +1 -1
  228. package/lib/index.js +1 -4
  229. package/lib/index.js.map +1 -1
  230. package/lib/opLifecycle/batchManager.d.ts +2 -13
  231. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  232. package/lib/opLifecycle/batchManager.js +19 -41
  233. package/lib/opLifecycle/batchManager.js.map +1 -1
  234. package/lib/opLifecycle/definitions.d.ts +4 -0
  235. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  236. package/lib/opLifecycle/definitions.js.map +1 -1
  237. package/lib/opLifecycle/index.d.ts.map +1 -1
  238. package/lib/opLifecycle/index.js.map +1 -1
  239. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  240. package/lib/opLifecycle/opCompressor.js +1 -0
  241. package/lib/opLifecycle/opCompressor.js.map +1 -1
  242. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  243. package/lib/opLifecycle/opDecompressor.js +5 -2
  244. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  245. package/lib/opLifecycle/opSplitter.d.ts +1 -1
  246. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  247. package/lib/opLifecycle/opSplitter.js +25 -14
  248. package/lib/opLifecycle/opSplitter.js.map +1 -1
  249. package/lib/opLifecycle/outbox.d.ts +19 -3
  250. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  251. package/lib/opLifecycle/outbox.js +79 -46
  252. package/lib/opLifecycle/outbox.js.map +1 -1
  253. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  254. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  255. package/lib/opProperties.d.ts.map +1 -1
  256. package/lib/opProperties.js +1 -3
  257. package/lib/opProperties.js.map +1 -1
  258. package/lib/packageVersion.d.ts +1 -1
  259. package/lib/packageVersion.js +1 -1
  260. package/lib/packageVersion.js.map +1 -1
  261. package/lib/pendingStateManager.d.ts +8 -2
  262. package/lib/pendingStateManager.d.ts.map +1 -1
  263. package/lib/pendingStateManager.js +21 -13
  264. package/lib/pendingStateManager.js.map +1 -1
  265. package/lib/scheduleManager.d.ts.map +1 -1
  266. package/lib/scheduleManager.js +3 -2
  267. package/lib/scheduleManager.js.map +1 -1
  268. package/lib/serializedSnapshotStorage.d.ts +2 -2
  269. package/lib/serializedSnapshotStorage.d.ts.map +1 -1
  270. package/lib/serializedSnapshotStorage.js +5 -3
  271. package/lib/serializedSnapshotStorage.js.map +1 -1
  272. package/lib/summary/index.d.ts +17 -0
  273. package/lib/summary/index.d.ts.map +1 -0
  274. package/lib/summary/index.js +16 -0
  275. package/lib/summary/index.js.map +1 -0
  276. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  277. package/lib/{orderedClientElection.js → summary/orderedClientElection.js} +10 -4
  278. package/lib/summary/orderedClientElection.js.map +1 -0
  279. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  280. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  281. package/{dist → lib/summary}/runningSummarizer.d.ts +19 -18
  282. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  283. package/lib/{runningSummarizer.js → summary/runningSummarizer.js} +193 -78
  284. package/lib/summary/runningSummarizer.js.map +1 -0
  285. package/lib/{summarizer.d.ts → summary/summarizer.d.ts} +4 -6
  286. package/lib/summary/summarizer.d.ts.map +1 -0
  287. package/lib/{summarizer.js → summary/summarizer.js} +33 -73
  288. package/lib/summary/summarizer.js.map +1 -0
  289. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  290. package/lib/summary/summarizerClientElection.js.map +1 -0
  291. package/lib/summary/summarizerHandle.d.ts.map +1 -0
  292. package/lib/summary/summarizerHandle.js.map +1 -0
  293. package/{dist → lib/summary}/summarizerHeuristics.d.ts +1 -1
  294. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  295. package/lib/{summarizerHeuristics.js → summary/summarizerHeuristics.js} +6 -9
  296. package/lib/summary/summarizerHeuristics.js.map +1 -0
  297. package/{dist → lib/summary}/summarizerTypes.d.ts +22 -22
  298. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  299. package/lib/summary/summarizerTypes.js.map +1 -0
  300. package/lib/summary/summaryCollection.d.ts.map +1 -0
  301. package/lib/{summaryCollection.js → summary/summaryCollection.js} +18 -8
  302. package/lib/summary/summaryCollection.js.map +1 -0
  303. package/{dist → lib/summary}/summaryFormat.d.ts +1 -40
  304. package/lib/summary/summaryFormat.d.ts.map +1 -0
  305. package/lib/{summaryFormat.js → summary/summaryFormat.js} +20 -20
  306. package/lib/summary/summaryFormat.js.map +1 -0
  307. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  308. package/lib/{summaryGenerator.js → summary/summaryGenerator.js} +33 -15
  309. package/lib/summary/summaryGenerator.js.map +1 -0
  310. package/lib/{summaryManager.d.ts → summary/summaryManager.d.ts} +1 -1
  311. package/lib/summary/summaryManager.d.ts.map +1 -0
  312. package/lib/{summaryManager.js → summary/summaryManager.js} +21 -9
  313. package/lib/summary/summaryManager.js.map +1 -0
  314. package/lib/throttler.d.ts +2 -2
  315. package/lib/throttler.d.ts.map +1 -1
  316. package/lib/throttler.js +4 -4
  317. package/lib/throttler.js.map +1 -1
  318. package/package.json +60 -51
  319. package/prettier.config.cjs +1 -1
  320. package/src/batchTracker.ts +54 -49
  321. package/src/blobManager.ts +825 -674
  322. package/src/connectionTelemetry.ts +280 -249
  323. package/src/containerHandleContext.ts +27 -29
  324. package/src/containerRuntime.ts +3249 -2978
  325. package/src/dataStore.ts +172 -159
  326. package/src/dataStoreContext.ts +1141 -1057
  327. package/src/dataStoreContexts.ts +178 -161
  328. package/src/dataStoreRegistry.ts +25 -20
  329. package/src/dataStores.ts +880 -731
  330. package/src/deltaScheduler.ts +158 -150
  331. package/{garbageCollection.md → src/gc/garbageCollection.md} +16 -3
  332. package/src/gc/garbageCollection.ts +1506 -0
  333. package/src/gc/gcDefinitions.ts +244 -0
  334. package/src/gc/gcHelpers.ts +86 -0
  335. package/src/gc/gcSummaryStateTracker.ts +339 -0
  336. package/src/gc/gcSweepReadyUsageDetection.ts +145 -0
  337. package/src/gc/gcUnreferencedStateTracker.ts +114 -0
  338. package/src/gc/index.ts +40 -0
  339. package/src/index.ts +67 -70
  340. package/src/opLifecycle/README.md +152 -0
  341. package/src/opLifecycle/batchManager.ts +101 -144
  342. package/src/opLifecycle/definitions.ts +33 -29
  343. package/src/opLifecycle/index.ts +5 -5
  344. package/src/opLifecycle/opCompressor.ts +55 -53
  345. package/src/opLifecycle/opDecompressor.ts +100 -81
  346. package/src/opLifecycle/opSplitter.ts +233 -188
  347. package/src/opLifecycle/outbox.ts +251 -195
  348. package/src/opLifecycle/remoteMessageProcessor.ts +62 -62
  349. package/src/opProperties.ts +11 -9
  350. package/src/packageVersion.ts +1 -1
  351. package/src/pendingStateManager.ts +396 -338
  352. package/src/scheduleManager.ts +299 -269
  353. package/src/serializedSnapshotStorage.ts +126 -112
  354. package/src/summary/index.ts +99 -0
  355. package/src/summary/orderedClientElection.ts +564 -0
  356. package/src/summary/runWhileConnectedCoordinator.ts +113 -0
  357. package/src/summary/runningSummarizer.ts +788 -0
  358. package/src/summary/summarizer.ts +386 -0
  359. package/src/summary/summarizerClientElection.ts +139 -0
  360. package/src/{summarizerHandle.ts → summary/summarizerHandle.ts} +11 -9
  361. package/src/summary/summarizerHeuristics.ts +219 -0
  362. package/src/summary/summarizerTypes.ts +521 -0
  363. package/src/summary/summaryCollection.ts +450 -0
  364. package/src/summary/summaryFormat.ts +226 -0
  365. package/src/summary/summaryGenerator.ts +505 -0
  366. package/src/summary/summaryManager.ts +423 -0
  367. package/src/throttler.ts +131 -122
  368. package/tsconfig.esnext.json +6 -6
  369. package/tsconfig.json +9 -13
  370. package/dist/garbageCollection.d.ts.map +0 -1
  371. package/dist/garbageCollection.js.map +0 -1
  372. package/dist/garbageCollectionConstants.d.ts +0 -25
  373. package/dist/garbageCollectionConstants.d.ts.map +0 -1
  374. package/dist/garbageCollectionConstants.js.map +0 -1
  375. package/dist/garbageCollectionTombstoneUtils.d.ts +0 -14
  376. package/dist/garbageCollectionTombstoneUtils.d.ts.map +0 -1
  377. package/dist/garbageCollectionTombstoneUtils.js +0 -23
  378. package/dist/garbageCollectionTombstoneUtils.js.map +0 -1
  379. package/dist/gcSweepReadyUsageDetection.d.ts.map +0 -1
  380. package/dist/gcSweepReadyUsageDetection.js.map +0 -1
  381. package/dist/orderedClientElection.d.ts.map +0 -1
  382. package/dist/orderedClientElection.js.map +0 -1
  383. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  384. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  385. package/dist/runningSummarizer.d.ts.map +0 -1
  386. package/dist/runningSummarizer.js.map +0 -1
  387. package/dist/summarizer.d.ts.map +0 -1
  388. package/dist/summarizer.js.map +0 -1
  389. package/dist/summarizerClientElection.d.ts.map +0 -1
  390. package/dist/summarizerClientElection.js.map +0 -1
  391. package/dist/summarizerHandle.d.ts.map +0 -1
  392. package/dist/summarizerHandle.js.map +0 -1
  393. package/dist/summarizerHeuristics.d.ts.map +0 -1
  394. package/dist/summarizerHeuristics.js.map +0 -1
  395. package/dist/summarizerTypes.d.ts.map +0 -1
  396. package/dist/summarizerTypes.js.map +0 -1
  397. package/dist/summaryCollection.d.ts.map +0 -1
  398. package/dist/summaryCollection.js.map +0 -1
  399. package/dist/summaryFormat.d.ts.map +0 -1
  400. package/dist/summaryFormat.js.map +0 -1
  401. package/dist/summaryGenerator.d.ts.map +0 -1
  402. package/dist/summaryGenerator.js.map +0 -1
  403. package/dist/summaryManager.d.ts.map +0 -1
  404. package/dist/summaryManager.js.map +0 -1
  405. package/lib/garbageCollection.d.ts.map +0 -1
  406. package/lib/garbageCollection.js.map +0 -1
  407. package/lib/garbageCollectionConstants.d.ts +0 -25
  408. package/lib/garbageCollectionConstants.d.ts.map +0 -1
  409. package/lib/garbageCollectionConstants.js.map +0 -1
  410. package/lib/garbageCollectionTombstoneUtils.d.ts +0 -14
  411. package/lib/garbageCollectionTombstoneUtils.d.ts.map +0 -1
  412. package/lib/garbageCollectionTombstoneUtils.js +0 -19
  413. package/lib/garbageCollectionTombstoneUtils.js.map +0 -1
  414. package/lib/gcSweepReadyUsageDetection.d.ts.map +0 -1
  415. package/lib/gcSweepReadyUsageDetection.js.map +0 -1
  416. package/lib/orderedClientElection.d.ts.map +0 -1
  417. package/lib/orderedClientElection.js.map +0 -1
  418. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  419. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  420. package/lib/runningSummarizer.d.ts.map +0 -1
  421. package/lib/runningSummarizer.js.map +0 -1
  422. package/lib/summarizer.d.ts.map +0 -1
  423. package/lib/summarizer.js.map +0 -1
  424. package/lib/summarizerClientElection.d.ts.map +0 -1
  425. package/lib/summarizerClientElection.js.map +0 -1
  426. package/lib/summarizerHandle.d.ts.map +0 -1
  427. package/lib/summarizerHandle.js.map +0 -1
  428. package/lib/summarizerHeuristics.d.ts.map +0 -1
  429. package/lib/summarizerHeuristics.js.map +0 -1
  430. package/lib/summarizerTypes.d.ts.map +0 -1
  431. package/lib/summarizerTypes.js.map +0 -1
  432. package/lib/summaryCollection.d.ts.map +0 -1
  433. package/lib/summaryCollection.js.map +0 -1
  434. package/lib/summaryFormat.d.ts.map +0 -1
  435. package/lib/summaryFormat.js.map +0 -1
  436. package/lib/summaryGenerator.d.ts.map +0 -1
  437. package/lib/summaryGenerator.js.map +0 -1
  438. package/lib/summaryManager.d.ts.map +0 -1
  439. package/lib/summaryManager.js.map +0 -1
  440. package/src/garbageCollection.ts +0 -1800
  441. package/src/garbageCollectionConstants.ts +0 -41
  442. package/src/garbageCollectionTombstoneUtils.ts +0 -28
  443. package/src/gcSweepReadyUsageDetection.ts +0 -139
  444. package/src/orderedClientElection.ts +0 -532
  445. package/src/runWhileConnectedCoordinator.ts +0 -106
  446. package/src/runningSummarizer.ts +0 -610
  447. package/src/summarizer.ts +0 -421
  448. package/src/summarizerClientElection.ts +0 -132
  449. package/src/summarizerHeuristics.ts +0 -222
  450. package/src/summarizerTypes.ts +0 -507
  451. package/src/summaryCollection.ts +0 -421
  452. package/src/summaryFormat.ts +0 -256
  453. package/src/summaryGenerator.ts +0 -450
  454. package/src/summaryManager.ts +0 -394
  455. /package/dist/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
  456. /package/dist/{runWhileConnectedCoordinator.d.ts → summary/runWhileConnectedCoordinator.d.ts} +0 -0
  457. /package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +0 -0
  458. /package/dist/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +0 -0
  459. /package/dist/{summarizerClientElection.js → summary/summarizerClientElection.js} +0 -0
  460. /package/dist/{summarizerHandle.d.ts → summary/summarizerHandle.d.ts} +0 -0
  461. /package/dist/{summarizerHandle.js → summary/summarizerHandle.js} +0 -0
  462. /package/dist/{summarizerTypes.js → summary/summarizerTypes.js} +0 -0
  463. /package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
  464. /package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
  465. /package/lib/{orderedClientElection.d.ts → summary/orderedClientElection.d.ts} +0 -0
  466. /package/lib/{runWhileConnectedCoordinator.d.ts → summary/runWhileConnectedCoordinator.d.ts} +0 -0
  467. /package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.js} +0 -0
  468. /package/lib/{summarizerClientElection.d.ts → summary/summarizerClientElection.d.ts} +0 -0
  469. /package/lib/{summarizerClientElection.js → summary/summarizerClientElection.js} +0 -0
  470. /package/lib/{summarizerHandle.d.ts → summary/summarizerHandle.d.ts} +0 -0
  471. /package/lib/{summarizerHandle.js → summary/summarizerHandle.js} +0 -0
  472. /package/lib/{summarizerTypes.js → summary/summarizerTypes.js} +0 -0
  473. /package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +0 -0
  474. /package/lib/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"dataStore.d.ts","sourceRoot":"","sources":["../src/dataStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAUtE,OAAO,EAAe,UAAU,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAEtG,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC,uCAAuC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,+BACJ,GAAG,yDAIlC,CAAC;AAEF,eAAO,MAAM,kBAAkB,0BACJ,sBAAsB,cACjC,MAAM,WACT,gBAAgB,cACb,UAAU,UACd,gBAAgB,KACzB,UAA2F,CAAC"}
1
+ {"version":3,"file":"dataStore.d.ts","sourceRoot":"","sources":["../src/dataStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAKtE,OAAO,EAEN,UAAU,EACV,sBAAsB,EACtB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACtC,uCAAuC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,+BACP,GAAG,yDAM/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,0BACP,sBAAsB,cACjC,MAAM,WACT,gBAAgB,cACb,UAAU,UACd,gBAAgB,KACtB,UAA2F,CAAC"}
package/dist/dataStore.js CHANGED
@@ -16,8 +16,8 @@ const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
16
16
  * @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise
17
17
  */
18
18
  const isDataStoreAliasMessage = (maybeDataStoreAliasMessage) => {
19
- return typeof (maybeDataStoreAliasMessage === null || maybeDataStoreAliasMessage === void 0 ? void 0 : maybeDataStoreAliasMessage.internalId) === "string"
20
- && typeof (maybeDataStoreAliasMessage === null || maybeDataStoreAliasMessage === void 0 ? void 0 : maybeDataStoreAliasMessage.alias) === "string";
19
+ return (typeof (maybeDataStoreAliasMessage === null || maybeDataStoreAliasMessage === void 0 ? void 0 : maybeDataStoreAliasMessage.internalId) === "string" &&
20
+ typeof (maybeDataStoreAliasMessage === null || maybeDataStoreAliasMessage === void 0 ? void 0 : maybeDataStoreAliasMessage.alias) === "string");
21
21
  };
22
22
  exports.isDataStoreAliasMessage = isDataStoreAliasMessage;
23
23
  const channelToDataStore = (fluidDataStoreChannel, internalId, runtime, datastores, logger) => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);
@@ -64,7 +64,8 @@ class DataStore {
64
64
  // or for this alias, so it is safe to continue execution
65
65
  break;
66
66
  }
67
- default: (0, common_utils_1.unreachableCase)(this.aliasState);
67
+ default:
68
+ (0, common_utils_1.unreachableCase)(this.aliasState);
68
69
  }
69
70
  this.aliasState = AliasState.Aliasing;
70
71
  this.aliasResult = this.trySetAliasInternal(alias);
@@ -84,8 +85,7 @@ class DataStore {
84
85
  this.aliasState = AliasState.Aliased;
85
86
  return localResult ? "Success" : "Conflict";
86
87
  }
87
- const aliased = await this
88
- .ackBasedPromise((resolve) => {
88
+ const aliased = await this.ackBasedPromise((resolve) => {
89
89
  this.runtime.submitDataStoreAliasOp(message, resolve);
90
90
  })
91
91
  .catch((error) => {
@@ -101,7 +101,8 @@ class DataStore {
101
101
  },
102
102
  }, error);
103
103
  return false;
104
- }).finally(() => {
104
+ })
105
+ .finally(() => {
105
106
  this.pendingAliases.delete(alias);
106
107
  });
107
108
  if (!aliased) {
@@ -122,12 +123,13 @@ class DataStore {
122
123
  get entryPoint() {
123
124
  return this.fluidDataStoreChannel.entryPoint;
124
125
  }
125
- get IFluidRouter() { return this.fluidDataStoreChannel; }
126
+ get IFluidRouter() {
127
+ return this.fluidDataStoreChannel;
128
+ }
126
129
  async ackBasedPromise(executor) {
127
130
  let rejectBecauseDispose;
128
131
  return new Promise((resolve, reject) => {
129
- rejectBecauseDispose =
130
- () => reject(new Error("ContainerRuntime disposed while this ack-based Promise was pending"));
132
+ rejectBecauseDispose = () => reject(new Error("ContainerRuntime disposed while this ack-based Promise was pending"));
131
133
  if (this.runtime.disposed) {
132
134
  rejectBecauseDispose();
133
135
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"dataStore.js","sourceRoot":"","sources":["../src/dataStore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { assert, unreachableCase } from \"@fluidframework/common-utils\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { UsageError } from \"@fluidframework/container-utils\";\nimport {\n FluidObject,\n IFluidHandle,\n IRequest,\n IResponse,\n} from \"@fluidframework/core-interfaces\";\nimport { AliasResult, IDataStore, IFluidDataStoreChannel } from \"@fluidframework/runtime-definitions\";\nimport { TelemetryDataTag } from \"@fluidframework/telemetry-utils\";\nimport { ContainerRuntime } from \"./containerRuntime\";\nimport { DataStores } from \"./dataStores\";\n\n/**\n * Interface for an op to be used for assigning an\n * alias to a datastore\n */\nexport interface IDataStoreAliasMessage {\n /** The internal id of the datastore */\n readonly internalId: string;\n /** The alias name to be assigned to the datastore */\n readonly alias: string;\n}\n\n/**\n * Type guard that returns true if the given alias message is actually an instance of\n * a class which implements {@link IDataStoreAliasMessage}\n * @param maybeDataStoreAliasMessage - message object to be validated\n * @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise\n */\nexport const isDataStoreAliasMessage = (\n maybeDataStoreAliasMessage: any,\n): maybeDataStoreAliasMessage is IDataStoreAliasMessage => {\n return typeof maybeDataStoreAliasMessage?.internalId === \"string\"\n && typeof maybeDataStoreAliasMessage?.alias === \"string\";\n};\n\nexport const channelToDataStore = (\n fluidDataStoreChannel: IFluidDataStoreChannel,\n internalId: string,\n runtime: ContainerRuntime,\n datastores: DataStores,\n logger: ITelemetryLogger,\n): IDataStore => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);\n\nenum AliasState {\n Aliased = \"Aliased\",\n Aliasing = \"Aliasing\",\n None = \"None\",\n}\n\nclass DataStore implements IDataStore {\n private aliasState: AliasState = AliasState.None;\n private alias: string | undefined;\n private readonly pendingAliases: Map<string, Promise<AliasResult>>;\n private aliasResult: Promise<AliasResult> | undefined;\n\n async trySetAlias(alias: string): Promise<AliasResult> {\n if (alias.includes(\"/\")) {\n throw new UsageError(`The alias cannot contain slashes: '${alias}'`);\n }\n\n switch (this.aliasState) {\n // If we're already aliasing, check if it's for the same value and return\n // the stored promise, otherwise return 'AlreadyAliased'\n case AliasState.Aliasing:\n assert(this.aliasResult !== undefined,\n 0x316 /* There should be a cached promise of in-progress aliasing */);\n await this.aliasResult;\n return this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n // If this datastore is already aliased, return true only if this\n // is a repeated call for the same alias\n case AliasState.Aliased:\n return this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n case AliasState.None: {\n const existingAlias = this.pendingAliases.get(alias);\n if (existingAlias !== undefined) {\n // There is already another datastore which will be aliased\n // to the same name\n return \"Conflict\";\n }\n\n // There is no current or past alias operation for this datastore,\n // or for this alias, so it is safe to continue execution\n break;\n }\n\n default: unreachableCase(this.aliasState);\n }\n\n this.aliasState = AliasState.Aliasing;\n this.aliasResult = this.trySetAliasInternal(alias);\n this.pendingAliases.set(alias, this.aliasResult);\n return this.aliasResult;\n }\n\n async trySetAliasInternal(alias: string): Promise<AliasResult> {\n const message: IDataStoreAliasMessage = {\n internalId: this.internalId,\n alias,\n };\n\n this.fluidDataStoreChannel.makeVisibleAndAttachGraph();\n\n if (this.runtime.attachState === AttachState.Detached) {\n const localResult = this.datastores.processAliasMessageCore(message);\n // Explicitly lock-out future attempts of aliasing,\n // regardless of result\n this.aliasState = AliasState.Aliased;\n return localResult ? \"Success\" : \"Conflict\";\n }\n\n const aliased = await this\n .ackBasedPromise<boolean>((resolve) => {\n this.runtime.submitDataStoreAliasOp(message, resolve);\n })\n .catch((error) => {\n this.logger.sendErrorEvent({\n eventName: \"AliasingException\",\n alias: {\n value: alias,\n tag: TelemetryDataTag.UserData,\n },\n internalId: {\n value: this.internalId,\n tag: TelemetryDataTag.CodeArtifact,\n },\n }, error);\n\n return false;\n }).finally(() => {\n this.pendingAliases.delete(alias);\n });\n\n if (!aliased) {\n this.aliasState = AliasState.None;\n this.aliasResult = undefined;\n return \"Conflict\";\n }\n\n this.alias = alias;\n this.aliasState = AliasState.Aliased;\n return \"Success\";\n }\n\n async request(request: IRequest): Promise<IResponse> {\n return this.fluidDataStoreChannel.request(request);\n }\n\n /**\n * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.entryPoint}\n */\n get entryPoint(): IFluidHandle<FluidObject> | undefined {\n return this.fluidDataStoreChannel.entryPoint;\n }\n\n constructor(\n private readonly fluidDataStoreChannel: IFluidDataStoreChannel,\n private readonly internalId: string,\n private readonly runtime: ContainerRuntime,\n private readonly datastores: DataStores,\n private readonly logger: ITelemetryLogger,\n ) {\n this.pendingAliases = datastores.pendingAliases;\n }\n\n public get IFluidRouter() { return this.fluidDataStoreChannel; }\n\n private async ackBasedPromise<T>(\n executor: (resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void) => void,\n ): Promise<T> {\n let rejectBecauseDispose: () => void;\n return new Promise<T>((resolve, reject) => {\n rejectBecauseDispose =\n () => reject(new Error(\"ContainerRuntime disposed while this ack-based Promise was pending\"));\n\n if (this.runtime.disposed) {\n rejectBecauseDispose();\n return;\n }\n\n this.runtime.on(\"dispose\", rejectBecauseDispose);\n executor(resolve, reject);\n }).finally(() => {\n this.runtime.off(\"dispose\", rejectBecauseDispose);\n });\n }\n}\n"]}
1
+ {"version":3,"file":"dataStore.js","sourceRoot":"","sources":["../src/dataStore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { assert, unreachableCase } from \"@fluidframework/common-utils\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { UsageError } from \"@fluidframework/container-utils\";\nimport { FluidObject, IFluidHandle, IRequest, IResponse } from \"@fluidframework/core-interfaces\";\nimport {\n\tAliasResult,\n\tIDataStore,\n\tIFluidDataStoreChannel,\n} from \"@fluidframework/runtime-definitions\";\nimport { TelemetryDataTag } from \"@fluidframework/telemetry-utils\";\nimport { ContainerRuntime } from \"./containerRuntime\";\nimport { DataStores } from \"./dataStores\";\n\n/**\n * Interface for an op to be used for assigning an\n * alias to a datastore\n */\nexport interface IDataStoreAliasMessage {\n\t/** The internal id of the datastore */\n\treadonly internalId: string;\n\t/** The alias name to be assigned to the datastore */\n\treadonly alias: string;\n}\n\n/**\n * Type guard that returns true if the given alias message is actually an instance of\n * a class which implements {@link IDataStoreAliasMessage}\n * @param maybeDataStoreAliasMessage - message object to be validated\n * @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise\n */\nexport const isDataStoreAliasMessage = (\n\tmaybeDataStoreAliasMessage: any,\n): maybeDataStoreAliasMessage is IDataStoreAliasMessage => {\n\treturn (\n\t\ttypeof maybeDataStoreAliasMessage?.internalId === \"string\" &&\n\t\ttypeof maybeDataStoreAliasMessage?.alias === \"string\"\n\t);\n};\n\nexport const channelToDataStore = (\n\tfluidDataStoreChannel: IFluidDataStoreChannel,\n\tinternalId: string,\n\truntime: ContainerRuntime,\n\tdatastores: DataStores,\n\tlogger: ITelemetryLogger,\n): IDataStore => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);\n\nenum AliasState {\n\tAliased = \"Aliased\",\n\tAliasing = \"Aliasing\",\n\tNone = \"None\",\n}\n\nclass DataStore implements IDataStore {\n\tprivate aliasState: AliasState = AliasState.None;\n\tprivate alias: string | undefined;\n\tprivate readonly pendingAliases: Map<string, Promise<AliasResult>>;\n\tprivate aliasResult: Promise<AliasResult> | undefined;\n\n\tasync trySetAlias(alias: string): Promise<AliasResult> {\n\t\tif (alias.includes(\"/\")) {\n\t\t\tthrow new UsageError(`The alias cannot contain slashes: '${alias}'`);\n\t\t}\n\n\t\tswitch (this.aliasState) {\n\t\t\t// If we're already aliasing, check if it's for the same value and return\n\t\t\t// the stored promise, otherwise return 'AlreadyAliased'\n\t\t\tcase AliasState.Aliasing:\n\t\t\t\tassert(\n\t\t\t\t\tthis.aliasResult !== undefined,\n\t\t\t\t\t0x316 /* There should be a cached promise of in-progress aliasing */,\n\t\t\t\t);\n\t\t\t\tawait this.aliasResult;\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\t// If this datastore is already aliased, return true only if this\n\t\t\t// is a repeated call for the same alias\n\t\t\tcase AliasState.Aliased:\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\tcase AliasState.None: {\n\t\t\t\tconst existingAlias = this.pendingAliases.get(alias);\n\t\t\t\tif (existingAlias !== undefined) {\n\t\t\t\t\t// There is already another datastore which will be aliased\n\t\t\t\t\t// to the same name\n\t\t\t\t\treturn \"Conflict\";\n\t\t\t\t}\n\n\t\t\t\t// There is no current or past alias operation for this datastore,\n\t\t\t\t// or for this alias, so it is safe to continue execution\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tunreachableCase(this.aliasState);\n\t\t}\n\n\t\tthis.aliasState = AliasState.Aliasing;\n\t\tthis.aliasResult = this.trySetAliasInternal(alias);\n\t\tthis.pendingAliases.set(alias, this.aliasResult);\n\t\treturn this.aliasResult;\n\t}\n\n\tasync trySetAliasInternal(alias: string): Promise<AliasResult> {\n\t\tconst message: IDataStoreAliasMessage = {\n\t\t\tinternalId: this.internalId,\n\t\t\talias,\n\t\t};\n\n\t\tthis.fluidDataStoreChannel.makeVisibleAndAttachGraph();\n\n\t\tif (this.runtime.attachState === AttachState.Detached) {\n\t\t\tconst localResult = this.datastores.processAliasMessageCore(message);\n\t\t\t// Explicitly lock-out future attempts of aliasing,\n\t\t\t// regardless of result\n\t\t\tthis.aliasState = AliasState.Aliased;\n\t\t\treturn localResult ? \"Success\" : \"Conflict\";\n\t\t}\n\n\t\tconst aliased = await this.ackBasedPromise<boolean>((resolve) => {\n\t\t\tthis.runtime.submitDataStoreAliasOp(message, resolve);\n\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.logger.sendErrorEvent(\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"AliasingException\",\n\t\t\t\t\t\talias: {\n\t\t\t\t\t\t\tvalue: alias,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.UserData,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinternalId: {\n\t\t\t\t\t\t\tvalue: this.internalId,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\terror,\n\t\t\t\t);\n\n\t\t\t\treturn false;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.pendingAliases.delete(alias);\n\t\t\t});\n\n\t\tif (!aliased) {\n\t\t\tthis.aliasState = AliasState.None;\n\t\t\tthis.aliasResult = undefined;\n\t\t\treturn \"Conflict\";\n\t\t}\n\n\t\tthis.alias = alias;\n\t\tthis.aliasState = AliasState.Aliased;\n\t\treturn \"Success\";\n\t}\n\n\tasync request(request: IRequest): Promise<IResponse> {\n\t\treturn this.fluidDataStoreChannel.request(request);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.entryPoint}\n\t */\n\tget entryPoint(): IFluidHandle<FluidObject> | undefined {\n\t\treturn this.fluidDataStoreChannel.entryPoint;\n\t}\n\n\tconstructor(\n\t\tprivate readonly fluidDataStoreChannel: IFluidDataStoreChannel,\n\t\tprivate readonly internalId: string,\n\t\tprivate readonly runtime: ContainerRuntime,\n\t\tprivate readonly datastores: DataStores,\n\t\tprivate readonly logger: ITelemetryLogger,\n\t) {\n\t\tthis.pendingAliases = datastores.pendingAliases;\n\t}\n\n\tpublic get IFluidRouter() {\n\t\treturn this.fluidDataStoreChannel;\n\t}\n\n\tprivate async ackBasedPromise<T>(\n\t\texecutor: (\n\t\t\tresolve: (value: T | PromiseLike<T>) => void,\n\t\t\treject: (reason?: any) => void,\n\t\t) => void,\n\t): Promise<T> {\n\t\tlet rejectBecauseDispose: () => void;\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\trejectBecauseDispose = () =>\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\"ContainerRuntime disposed while this ack-based Promise was pending\"),\n\t\t\t\t);\n\n\t\t\tif (this.runtime.disposed) {\n\t\t\t\trejectBecauseDispose();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.runtime.on(\"dispose\", rejectBecauseDispose);\n\t\t\texecutor(resolve, reject);\n\t\t}).finally(() => {\n\t\t\tthis.runtime.off(\"dispose\", rejectBecauseDispose);\n\t\t});\n\t}\n}\n"]}
@@ -9,7 +9,8 @@ import { Deferred, TypedEventEmitter } from "@fluidframework/common-utils";
9
9
  import { IDocumentStorageService } from "@fluidframework/driver-definitions";
10
10
  import { IClientDetails, IDocumentMessage, IQuorumClients, ISequencedDocumentMessage, ISnapshotTree, ITreeEntry } from "@fluidframework/protocol-definitions";
11
11
  import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
12
- import { BindState, CreateChildSummarizerNodeFn, CreateChildSummarizerNodeParam, IAttachMessage, IFluidDataStoreChannel, IFluidDataStoreContext, IFluidDataStoreContextDetached, IFluidDataStoreContextEvents, IFluidDataStoreRegistry, IGarbageCollectionData, IGarbageCollectionDetailsBase, IInboundSignalMessage, IProvideFluidDataStoreFactory, ISummarizeResult, ISummarizerNodeWithGC, SummarizeInternalFn, ITelemetryContext } from "@fluidframework/runtime-definitions";
12
+ import { CreateChildSummarizerNodeFn, CreateChildSummarizerNodeParam, IAttachMessage, IFluidDataStoreChannel, IFluidDataStoreContext, IFluidDataStoreContextDetached, IFluidDataStoreContextEvents, IFluidDataStoreRegistry, IGarbageCollectionData, IGarbageCollectionDetailsBase, IInboundSignalMessage, IProvideFluidDataStoreFactory, ISummarizeResult, ISummarizerNodeWithGC, SummarizeInternalFn, ITelemetryContext } from "@fluidframework/runtime-definitions";
13
+ import { MonitoringContext } from "@fluidframework/telemetry-utils";
13
14
  import { ContainerRuntime } from "./containerRuntime";
14
15
  export declare function createAttributesBlob(pkg: readonly string[], isRootDataStore: boolean): ITreeEntry;
15
16
  interface ISnapshotDetails {
@@ -40,14 +41,12 @@ export interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContext
40
41
  /** Properties necessary for creating a remote FluidDataStoreContext */
41
42
  export interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {
42
43
  readonly snapshotTree: ISnapshotTree | undefined;
43
- readonly getBaseGCDetails: () => Promise<IGarbageCollectionDetailsBase | undefined>;
44
44
  }
45
45
  /**
46
46
  * Represents the context for the store. This context is passed to the store runtime.
47
47
  */
48
48
  export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IFluidDataStoreContextEvents> implements IFluidDataStoreContext, IDisposable {
49
49
  private readonly existing;
50
- private bindState;
51
50
  readonly isLocalDataStore: boolean;
52
51
  private readonly makeLocallyVisibleFn;
53
52
  get packagePath(): readonly string[];
@@ -72,6 +71,8 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
72
71
  get tombstoned(): boolean;
73
72
  /** If true, throw an error when a tombstone data store is used. */
74
73
  private readonly throwOnTombstoneUsage;
74
+ /** If true, this means that this data store context and its children have been removed from the runtime */
75
+ private deleted;
75
76
  get attachState(): AttachState;
76
77
  get IFluidDataStoreRegistry(): IFluidDataStoreRegistry | undefined;
77
78
  /**
@@ -91,8 +92,6 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
91
92
  protected isInMemoryRoot(): boolean;
92
93
  protected registry: IFluidDataStoreRegistry | undefined;
93
94
  protected detachedRuntimeCreation: boolean;
94
- /** @deprecated - To be replaced by calling makeLocallyVisible directly */
95
- readonly bindToContext: () => void;
96
95
  protected channel: IFluidDataStoreChannel | undefined;
97
96
  private loaded;
98
97
  protected pending: ISequencedDocumentMessage[] | undefined;
@@ -101,7 +100,7 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
101
100
  protected _attachState: AttachState;
102
101
  private _isInMemoryRoot;
103
102
  protected readonly summarizerNode: ISummarizerNodeWithGC;
104
- private readonly mc;
103
+ protected readonly mc: MonitoringContext;
105
104
  private readonly thresholdOpsCounter;
106
105
  private static readonly pendingOpsCountThreshold;
107
106
  /**
@@ -116,9 +115,14 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
116
115
  readonly storage: IDocumentStorageService;
117
116
  readonly scope: FluidObject;
118
117
  protected pkg?: readonly string[];
119
- constructor(props: IFluidDataStoreContextProps, existing: boolean, bindState: BindState, // Used to assert for state tracking purposes
120
- isLocalDataStore: boolean, makeLocallyVisibleFn: () => void);
118
+ constructor(props: IFluidDataStoreContextProps, existing: boolean, isLocalDataStore: boolean, makeLocallyVisibleFn: () => void);
121
119
  dispose(): void;
120
+ /**
121
+ * When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries
122
+ * This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store
123
+ * should not receive any ops/signals.
124
+ */
125
+ delete(): void;
122
126
  setTombstone(tombstone: boolean): void;
123
127
  private rejectDeferredRealize;
124
128
  realize(): Promise<IFluidDataStoreChannel>;
@@ -213,6 +217,8 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
213
217
  * globally visible now.
214
218
  */
215
219
  makeLocallyVisible(): void;
220
+ /** @deprecated - To be replaced by calling makeLocallyVisible directly */
221
+ bindToContext(): void;
216
222
  protected bindRuntime(channel: IFluidDataStoreChannel): void;
217
223
  getAbsoluteUrl(relativeUrl: string): Promise<string | undefined>;
218
224
  abstract generateAttachMessage(): IAttachMessage;
@@ -223,7 +229,10 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
223
229
  * It will be removed, as the source of truth for this flag will be the aliasing blob.
224
230
  */
225
231
  setInMemoryRoot(): void;
226
- abstract getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
232
+ /**
233
+ * @deprecated - The functionality to get base GC details has been moved to summarizer node.
234
+ */
235
+ getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
227
236
  reSubmit(contents: any, localOpMetadata: unknown): void;
228
237
  rollback(contents: any, localOpMetadata: unknown): void;
229
238
  applyStashedOp(contents: any): Promise<unknown>;
@@ -234,16 +243,14 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
234
243
  * other clients that are up-to-date till seq# 100 may not have them yet.
235
244
  */
236
245
  protected identifyLocalChangeInSummarizer(eventName: string, type?: string): void;
237
- getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam): (summarizeInternal: SummarizeInternalFn, getGCDataFn: (fullGC?: boolean | undefined) => Promise<IGarbageCollectionData>, getBaseGCDetailsFn?: (() => Promise<IGarbageCollectionDetailsBase>) | undefined) => ISummarizerNodeWithGC;
246
+ getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam): (summarizeInternal: SummarizeInternalFn, getGCDataFn: (fullGC?: boolean | undefined) => Promise<IGarbageCollectionData>) => ISummarizerNodeWithGC;
238
247
  uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>>;
239
248
  }
240
249
  export declare class RemoteFluidDataStoreContext extends FluidDataStoreContext {
241
250
  private readonly initSnapshotValue;
242
- private readonly baseGCDetailsP;
243
251
  constructor(props: IRemoteFluidDataStoreContextProps);
244
252
  private readonly initialSnapshotDetailsP;
245
253
  getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
246
- getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
247
254
  generateAttachMessage(): IAttachMessage;
248
255
  }
249
256
  /**
@@ -259,7 +266,14 @@ export declare class LocalFluidDataStoreContextBase extends FluidDataStoreContex
259
266
  private attachListeners;
260
267
  generateAttachMessage(): IAttachMessage;
261
268
  getInitialSnapshotDetails(): Promise<ISnapshotDetails>;
262
- getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
269
+ /**
270
+ * A context should only be marked as deleted when its a remote context.
271
+ * Session Expiry at the runtime level should have closed the container creating the local data store context
272
+ * before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time
273
+ * it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote
274
+ * context.
275
+ */
276
+ delete(): void;
263
277
  }
264
278
  /**
265
279
  * context implementation for "attached" data store runtime.
@@ -1 +1 @@
1
- {"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"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"}
@@ -13,10 +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 garbageCollectionTombstoneUtils_1 = require("./garbageCollectionTombstoneUtils");
19
- const summarizerClientElection_1 = require("./summarizerClientElection");
16
+ const summary_1 = require("./summary");
17
+ const gc_1 = require("./gc");
20
18
  function createAttributes(pkg, isRootDataStore) {
21
19
  const stringifiedPkg = JSON.stringify(pkg);
22
20
  return {
@@ -27,19 +25,17 @@ function createAttributes(pkg, isRootDataStore) {
27
25
  }
28
26
  function createAttributesBlob(pkg, isRootDataStore) {
29
27
  const attributes = createAttributes(pkg, isRootDataStore);
30
- 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));
31
29
  }
32
30
  exports.createAttributesBlob = createAttributesBlob;
33
31
  /**
34
32
  * Represents the context for the store. This context is passed to the store runtime.
35
33
  */
36
34
  class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
37
- constructor(props, existing, bindState, // Used to assert for state tracking purposes
38
- isLocalDataStore, makeLocallyVisibleFn) {
35
+ constructor(props, existing, isLocalDataStore, makeLocallyVisibleFn) {
39
36
  var _a;
40
37
  super();
41
38
  this.existing = existing;
42
- this.bindState = bindState;
43
39
  this.isLocalDataStore = isLocalDataStore;
44
40
  this.makeLocallyVisibleFn = makeLocallyVisibleFn;
45
41
  this._disposed = false;
@@ -48,6 +44,8 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
48
44
  * loading.
49
45
  */
50
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;
51
49
  this.detachedRuntimeCreation = false;
52
50
  this.loaded = false;
53
51
  this.pending = [];
@@ -60,23 +58,19 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
60
58
  // URIs use slashes as delimiters. Handles use URIs.
61
59
  // Thus having slashes in types almost guarantees trouble down the road!
62
60
  (0, common_utils_1.assert)(!this.id.includes("/"), 0x13a /* Data store ID contains slash */);
63
- this._attachState = this.containerRuntime.attachState !== container_definitions_1.AttachState.Detached && this.existing ?
64
- this.containerRuntime.attachState : container_definitions_1.AttachState.Detached;
65
- this.bindToContext = () => {
66
- (0, common_utils_1.assert)(this.bindState === runtime_definitions_1.BindState.NotBound, 0x13b /* "datastore context is already in bound state" */);
67
- this.bindState = runtime_definitions_1.BindState.Binding;
68
- (0, common_utils_1.assert)(this.channel !== undefined, 0x13c /* "undefined channel on datastore context" */);
69
- this.makeLocallyVisible();
70
- this.bindState = runtime_definitions_1.BindState.Bound;
71
- };
61
+ this._attachState =
62
+ this.containerRuntime.attachState !== container_definitions_1.AttachState.Detached && this.existing
63
+ ? this.containerRuntime.attachState
64
+ : container_definitions_1.AttachState.Detached;
72
65
  const thisSummarizeInternal = async (fullTree, trackState, telemetryContext) => this.summarizeInternal(fullTree, trackState, telemetryContext);
73
- this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC), async () => this.getBaseGCDetails());
66
+ this.summarizerNode = props.createSummarizerNodeFn(thisSummarizeInternal, async (fullGC) => this.getGCDataInternal(fullGC));
74
67
  this.mc = (0, telemetry_utils_1.loggerToMonitoringContext)(telemetry_utils_1.ChildLogger.create(this.logger, "FluidDataStoreContext"));
75
68
  this.thresholdOpsCounter = new telemetry_utils_1.ThresholdCounter(FluidDataStoreContext.pendingOpsCountThreshold, this.mc.logger);
76
69
  // Tombstone should only throw when the feature flag is enabled and the client isn't a summarizer
77
70
  this.throwOnTombstoneUsage =
78
- this.mc.config.getBoolean(garbageCollectionConstants_1.throwOnTombstoneUsageKey) === true &&
79
- 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;
80
74
  // By default, a data store can log maximum 10 local changes telemetry in summarizer.
81
75
  this.localChangesTelemetryCount =
82
76
  (_a = this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount")) !== null && _a !== void 0 ? _a : 10;
@@ -118,8 +112,12 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
118
112
  get baseSnapshot() {
119
113
  return this._baseSnapshot;
120
114
  }
121
- get disposed() { return this._disposed; }
122
- get tombstoned() { return this._tombstoned; }
115
+ get disposed() {
116
+ return this._disposed;
117
+ }
118
+ get tombstoned() {
119
+ return this._tombstoned;
120
+ }
123
121
  get attachState() {
124
122
  return this._attachState;
125
123
  }
@@ -153,11 +151,21 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
153
151
  // Dispose any pending runtime after it gets fulfilled
154
152
  // Errors are logged where this.channelDeferred is consumed/generated (realizeCore(), bindRuntime())
155
153
  if (this.channelDeferred) {
156
- this.channelDeferred.promise.then((runtime) => {
154
+ this.channelDeferred.promise
155
+ .then((runtime) => {
157
156
  runtime.dispose();
158
- }).catch((error) => { });
157
+ })
158
+ .catch((error) => { });
159
159
  }
160
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
+ }
161
169
  setTombstone(tombstone) {
162
170
  if (this.tombstoned === tombstone) {
163
171
  return;
@@ -291,13 +299,13 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
291
299
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
292
300
  const summarizeResult = await this.channel.summarize(fullTree, trackState, telemetryContext);
293
301
  // Wrap dds summaries in .channels subtree.
294
- (0, summaryFormat_1.wrapSummaryInChannelsTree)(summarizeResult);
302
+ (0, summary_1.wrapSummaryInChannelsTree)(summarizeResult);
295
303
  const pathPartsForChildren = [runtime_definitions_1.channelsTreeName];
296
304
  // Add data store's attributes to the summary.
297
305
  const { pkg } = await this.getInitialSnapshotDetails();
298
306
  const isRoot = await this.isRoot();
299
307
  const attributes = createAttributes(pkg, isRoot);
300
- (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));
301
309
  // If we are not referenced, mark the summary tree as unreferenced. Also, update unreferenced blob
302
310
  // size in the summary stats with the blobs size of this data store.
303
311
  if (!this.summarizerNode.isReferenced()) {
@@ -381,7 +389,9 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
381
389
  return;
382
390
  }
383
391
  // Remove the route to this data store, if it exists.
384
- const usedChannelRoutes = this.lastUsedRoutes.filter((id) => { return id !== "/" && id !== ""; });
392
+ const usedChannelRoutes = this.lastUsedRoutes.filter((id) => {
393
+ return id !== "/" && id !== "";
394
+ });
385
395
  this.channel.updateUsedRoutes(usedChannelRoutes);
386
396
  }
387
397
  /**
@@ -432,6 +442,11 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
432
442
  */
433
443
  makeLocallyVisible() {
434
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() {
435
450
  this.makeLocallyVisibleFn();
436
451
  }
437
452
  bindRuntime(channel) {
@@ -471,7 +486,8 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
471
486
  catch (error) {
472
487
  (_a = this.channelDeferred) === null || _a === void 0 ? void 0 : _a.reject(error);
473
488
  this.logger.sendErrorEvent({
474
- eventName: "BindRuntimeError", fluidDataStoreId: {
489
+ eventName: "BindRuntimeError",
490
+ fluidDataStoreId: {
475
491
  value: this.id,
476
492
  tag: telemetry_utils_1.TelemetryDataTag.CodeArtifact,
477
493
  },
@@ -492,6 +508,12 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
492
508
  setInMemoryRoot() {
493
509
  this._isInMemoryRoot = true;
494
510
  }
511
+ /**
512
+ * @deprecated - The functionality to get base GC details has been moved to summarizer node.
513
+ */
514
+ async getBaseGCDetails() {
515
+ return {};
516
+ }
495
517
  reSubmit(contents, localOpMetadata) {
496
518
  (0, common_utils_1.assert)(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
497
519
  const innerContents = contents;
@@ -516,16 +538,25 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
516
538
  return this.channel.applyStashedOp(innerContents.content);
517
539
  }
518
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
+ }
519
550
  if (this._disposed) {
520
551
  throw new Error(`Context is closed! Call site [${callSite}]`);
521
552
  }
522
553
  if (checkTombstone && this.tombstoned) {
523
554
  const messageString = `Context is tombstoned! Call site [${callSite}]`;
524
555
  const error = new container_utils_1.DataCorruptionError(messageString, safeTelemetryProps);
525
- (0, garbageCollectionTombstoneUtils_1.sendGCTombstoneEvent)(this.mc, {
556
+ (0, gc_1.sendGCUnexpectedUsageEvent)(this.mc, {
526
557
  eventName: "GC_Tombstone_DataStore_Changed",
527
558
  category: this.throwOnTombstoneUsage ? "error" : "generic",
528
- isSummarizerClient: this.clientDetails.type === summarizerClientElection_1.summarizerClientType,
559
+ gcTombstoneEnforcementAllowed: this._containerRuntime.gcTombstoneEnforcementAllowed,
529
560
  callSite,
530
561
  }, this.pkg, error);
531
562
  if (this.throwOnTombstoneUsage) {
@@ -540,7 +571,8 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
540
571
  */
541
572
  identifyLocalChangeInSummarizer(eventName, type) {
542
573
  var _a, _b;
543
- if (this.clientDetails.type !== summarizerClientElection_1.summarizerClientType || this.localChangesTelemetryCount <= 0) {
574
+ if (this.clientDetails.type !== summary_1.summarizerClientType ||
575
+ this.localChangesTelemetryCount <= 0) {
544
576
  return;
545
577
  }
546
578
  // Log a telemetry if there are local changes in the summarizer. This will give us data on how often
@@ -560,9 +592,9 @@ class FluidDataStoreContext extends common_utils_1.TypedEventEmitter {
560
592
  this.localChangesTelemetryCount--;
561
593
  }
562
594
  getCreateChildSummarizerNodeFn(id, createParam) {
563
- return (summarizeInternal, getGCDataFn, getBaseGCDetailsFn) => this.summarizerNode.createChild(summarizeInternal, id, createParam,
595
+ return (summarizeInternal, getGCDataFn) => this.summarizerNode.createChild(summarizeInternal, id, createParam,
564
596
  // DDS will not create failure summaries
565
- { throwOnFailure: true }, getGCDataFn, getBaseGCDetailsFn);
597
+ { throwOnFailure: true }, getGCDataFn);
566
598
  }
567
599
  async uploadBlob(blob) {
568
600
  return this.containerRuntime.uploadBlob(blob);
@@ -572,24 +604,25 @@ exports.FluidDataStoreContext = FluidDataStoreContext;
572
604
  FluidDataStoreContext.pendingOpsCountThreshold = 1000;
573
605
  class RemoteFluidDataStoreContext extends FluidDataStoreContext {
574
606
  constructor(props) {
575
- super(props, true /* existing */, runtime_definitions_1.BindState.Bound, false /* isLocalDataStore */, () => {
607
+ super(props, true /* existing */, false /* isLocalDataStore */, () => {
576
608
  throw new Error("Already attached");
577
609
  });
578
610
  this.initialSnapshotDetailsP = new common_utils_1.LazyPromise(async () => {
579
611
  var _a;
580
612
  let tree = this.initSnapshotValue;
581
613
  let isRootDataStore = true;
582
- if (!!tree && tree.blobs[summaryFormat_1.dataStoreAttributesBlobName] !== undefined) {
614
+ if (!!tree && tree.blobs[summary_1.dataStoreAttributesBlobName] !== undefined) {
583
615
  // Need to get through snapshot and use that to populate extraBlobs
584
- 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]);
585
617
  let pkgFromSnapshot;
586
618
  // Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.
587
619
  // For snapshotFormatVersion = "0.1" (1) or above, pkg is jsonified, otherwise it is just a string.
588
- const formatVersion = (0, summaryFormat_1.getAttributesFormatVersion)(attributes);
620
+ const formatVersion = (0, summary_1.getAttributesFormatVersion)(attributes);
589
621
  if (formatVersion < 1) {
590
- pkgFromSnapshot = attributes.pkg.startsWith("[\"") && attributes.pkg.endsWith("\"]")
591
- ? JSON.parse(attributes.pkg)
592
- : [attributes.pkg];
622
+ pkgFromSnapshot =
623
+ attributes.pkg.startsWith('["') && attributes.pkg.endsWith('"]')
624
+ ? JSON.parse(attributes.pkg)
625
+ : [attributes.pkg];
593
626
  }
594
627
  else {
595
628
  pkgFromSnapshot = JSON.parse(attributes.pkg);
@@ -601,7 +634,7 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
601
634
  * roots in the document but they won't break.
602
635
  */
603
636
  isRootDataStore = (_a = attributes.isRootDataStore) !== null && _a !== void 0 ? _a : true;
604
- if ((0, summaryFormat_1.hasIsolatedChannels)(attributes)) {
637
+ if ((0, summary_1.hasIsolatedChannels)(attributes)) {
605
638
  tree = tree.trees[runtime_definitions_1.channelsTreeName];
606
639
  (0, common_utils_1.assert)(tree !== undefined, 0x1fe /* "isolated channels subtree should exist in remote datastore snapshot" */);
607
640
  }
@@ -614,10 +647,6 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
614
647
  };
615
648
  });
616
649
  this.initSnapshotValue = props.snapshotTree;
617
- this.baseGCDetailsP = new common_utils_1.LazyPromise(async () => {
618
- var _a;
619
- return (_a = (await props.getBaseGCDetails())) !== null && _a !== void 0 ? _a : {};
620
- });
621
650
  if (props.snapshotTree !== undefined) {
622
651
  this.summarizerNode.updateBaseSummaryState(props.snapshotTree);
623
652
  }
@@ -625,9 +654,6 @@ class RemoteFluidDataStoreContext extends FluidDataStoreContext {
625
654
  async getInitialSnapshotDetails() {
626
655
  return this.initialSnapshotDetailsP;
627
656
  }
628
- async getBaseGCDetails() {
629
- return this.baseGCDetailsP;
630
- }
631
657
  generateAttachMessage() {
632
658
  throw new Error("Cannot attach remote store");
633
659
  }
@@ -638,7 +664,7 @@ exports.RemoteFluidDataStoreContext = RemoteFluidDataStoreContext;
638
664
  */
639
665
  class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
640
666
  constructor(props) {
641
- 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);
642
668
  // Summarizer client should not create local data stores.
643
669
  this.identifyLocalChangeInSummarizer("DataStoreCreatedInSummarizer");
644
670
  this.snapshotTree = props.snapshotTree;
@@ -663,10 +689,10 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
663
689
  (0, common_utils_1.assert)(this.pkg !== undefined, 0x150 /* "pkg should be available in local data store context" */);
664
690
  const summarizeResult = this.channel.getAttachSummary();
665
691
  // Wrap dds summaries in .channels subtree.
666
- (0, summaryFormat_1.wrapSummaryInChannelsTree)(summarizeResult);
692
+ (0, summary_1.wrapSummaryInChannelsTree)(summarizeResult);
667
693
  // Add data store's attributes to the summary.
668
694
  const attributes = createAttributes(this.pkg, this.isInMemoryRoot());
669
- (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));
670
696
  // Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
671
697
  const snapshot = (0, runtime_utils_1.convertSummaryTreeToITree)(summarizeResult.summary);
672
698
  const message = {
@@ -684,8 +710,8 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
684
710
  if (snapshot !== undefined) {
685
711
  // Get the dataStore attributes.
686
712
  // Note: storage can be undefined in special case while detached.
687
- attributes = await (0, summaryFormat_1.getFluidDataStoreAttributes)(this.storage, snapshot);
688
- if ((0, summaryFormat_1.hasIsolatedChannels)(attributes)) {
713
+ attributes = await (0, summary_1.getFluidDataStoreAttributes)(this.storage, snapshot);
714
+ if ((0, summary_1.hasIsolatedChannels)(attributes)) {
689
715
  snapshot = snapshot.trees[runtime_definitions_1.channelsTreeName];
690
716
  (0, common_utils_1.assert)(snapshot !== undefined, 0x1ff /* "isolated channels subtree should exist in local datastore snapshot" */);
691
717
  }
@@ -707,9 +733,22 @@ class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
707
733
  snapshot,
708
734
  };
709
735
  }
710
- async getBaseGCDetails() {
711
- // Local data store does not have initial summary.
712
- 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();
713
752
  }
714
753
  }
715
754
  exports.LocalFluidDataStoreContextBase = LocalFluidDataStoreContextBase;