@fluidframework/container-runtime 2.0.0-dev.5.2.0.169897 → 2.0.0-dev.6.4.0.191258

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 (561) hide show
  1. package/CHANGELOG.md +147 -0
  2. package/README.md +4 -3
  3. package/dist/batchTracker.d.ts +3 -2
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +6 -5
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +15 -18
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +212 -171
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/connectionTelemetry.d.ts.map +1 -1
  12. package/dist/connectionTelemetry.js +33 -17
  13. package/dist/connectionTelemetry.js.map +1 -1
  14. package/dist/containerRuntime.d.ts +172 -35
  15. package/dist/containerRuntime.d.ts.map +1 -1
  16. package/dist/containerRuntime.js +722 -425
  17. package/dist/containerRuntime.js.map +1 -1
  18. package/dist/dataStore.d.ts.map +1 -1
  19. package/dist/dataStore.js +15 -7
  20. package/dist/dataStore.js.map +1 -1
  21. package/dist/dataStoreContext.d.ts +4 -4
  22. package/dist/dataStoreContext.d.ts.map +1 -1
  23. package/dist/dataStoreContext.js +87 -90
  24. package/dist/dataStoreContext.js.map +1 -1
  25. package/dist/dataStoreContexts.d.ts +1 -1
  26. package/dist/dataStoreContexts.d.ts.map +1 -1
  27. package/dist/dataStoreContexts.js +10 -10
  28. package/dist/dataStoreContexts.js.map +1 -1
  29. package/dist/dataStoreRegistry.js +2 -2
  30. package/dist/dataStoreRegistry.js.map +1 -1
  31. package/dist/dataStores.d.ts +23 -7
  32. package/dist/dataStores.d.ts.map +1 -1
  33. package/dist/dataStores.js +125 -82
  34. package/dist/dataStores.js.map +1 -1
  35. package/dist/deltaManagerProxyBase.d.ts +35 -0
  36. package/dist/deltaManagerProxyBase.d.ts.map +1 -0
  37. package/dist/deltaManagerProxyBase.js +77 -0
  38. package/dist/deltaManagerProxyBase.js.map +1 -0
  39. package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
  40. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  41. package/dist/deltaManagerSummarizerProxy.js +4 -2
  42. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  43. package/dist/deltaScheduler.d.ts.map +1 -1
  44. package/dist/deltaScheduler.js +10 -10
  45. package/dist/deltaScheduler.js.map +1 -1
  46. package/dist/error.d.ts +14 -0
  47. package/dist/error.d.ts.map +1 -0
  48. package/dist/error.js +21 -0
  49. package/dist/error.js.map +1 -0
  50. package/dist/gc/garbageCollection.d.ts +10 -9
  51. package/dist/gc/garbageCollection.d.ts.map +1 -1
  52. package/dist/gc/garbageCollection.js +65 -56
  53. package/dist/gc/garbageCollection.js.map +1 -1
  54. package/dist/gc/gcConfigs.d.ts.map +1 -1
  55. package/dist/gc/gcConfigs.js +18 -14
  56. package/dist/gc/gcConfigs.js.map +1 -1
  57. package/dist/gc/gcDefinitions.d.ts +17 -5
  58. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  59. package/dist/gc/gcDefinitions.js +14 -15
  60. package/dist/gc/gcDefinitions.js.map +1 -1
  61. package/dist/gc/gcHelpers.d.ts +0 -8
  62. package/dist/gc/gcHelpers.d.ts.map +1 -1
  63. package/dist/gc/gcHelpers.js +11 -24
  64. package/dist/gc/gcHelpers.js.map +1 -1
  65. package/dist/gc/gcSummaryStateTracker.d.ts +4 -7
  66. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  67. package/dist/gc/gcSummaryStateTracker.js +19 -58
  68. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  69. package/dist/gc/gcTelemetry.d.ts +1 -1
  70. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  71. package/dist/gc/gcTelemetry.js +45 -35
  72. package/dist/gc/gcTelemetry.js.map +1 -1
  73. package/dist/gc/gcUnreferencedStateTracker.js +4 -4
  74. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  75. package/dist/gc/index.d.ts +2 -2
  76. package/dist/gc/index.d.ts.map +1 -1
  77. package/dist/gc/index.js +3 -5
  78. package/dist/gc/index.js.map +1 -1
  79. package/dist/id-compressor/appendOnlySortedMap.d.ts +8 -30
  80. package/dist/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
  81. package/dist/id-compressor/appendOnlySortedMap.js +26 -68
  82. package/dist/id-compressor/appendOnlySortedMap.js.map +1 -1
  83. package/dist/id-compressor/finalSpace.d.ts +29 -0
  84. package/dist/id-compressor/finalSpace.d.ts.map +1 -0
  85. package/dist/id-compressor/finalSpace.js +62 -0
  86. package/dist/id-compressor/finalSpace.js.map +1 -0
  87. package/dist/id-compressor/idCompressor.d.ts +25 -250
  88. package/dist/id-compressor/idCompressor.d.ts.map +1 -1
  89. package/dist/id-compressor/idCompressor.js +390 -1153
  90. package/dist/id-compressor/idCompressor.js.map +1 -1
  91. package/dist/id-compressor/identifiers.d.ts +32 -0
  92. package/dist/id-compressor/identifiers.d.ts.map +1 -0
  93. package/dist/id-compressor/identifiers.js +15 -0
  94. package/dist/id-compressor/identifiers.js.map +1 -0
  95. package/dist/id-compressor/index.d.ts +5 -6
  96. package/dist/id-compressor/index.d.ts.map +1 -1
  97. package/dist/id-compressor/index.js +20 -26
  98. package/dist/id-compressor/index.js.map +1 -1
  99. package/dist/id-compressor/persistanceUtilities.d.ts +22 -0
  100. package/dist/id-compressor/persistanceUtilities.d.ts.map +1 -0
  101. package/dist/id-compressor/persistanceUtilities.js +43 -0
  102. package/dist/id-compressor/persistanceUtilities.js.map +1 -0
  103. package/dist/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
  104. package/dist/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
  105. package/dist/id-compressor/sessionSpaceNormalizer.js +80 -0
  106. package/dist/id-compressor/sessionSpaceNormalizer.js.map +1 -0
  107. package/dist/id-compressor/sessions.d.ts +115 -0
  108. package/dist/id-compressor/sessions.d.ts.map +1 -0
  109. package/dist/id-compressor/sessions.js +305 -0
  110. package/dist/id-compressor/sessions.js.map +1 -0
  111. package/dist/id-compressor/utilities.d.ts +49 -0
  112. package/dist/id-compressor/utilities.d.ts.map +1 -0
  113. package/dist/id-compressor/utilities.js +166 -0
  114. package/dist/id-compressor/utilities.js.map +1 -0
  115. package/dist/index.d.ts +3 -3
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +6 -4
  118. package/dist/index.js.map +1 -1
  119. package/dist/metadata.d.ts +18 -0
  120. package/dist/metadata.d.ts.map +1 -0
  121. package/dist/metadata.js +7 -0
  122. package/dist/metadata.js.map +1 -0
  123. package/dist/opLifecycle/batchManager.d.ts +2 -1
  124. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  125. package/dist/opLifecycle/batchManager.js +15 -7
  126. package/dist/opLifecycle/batchManager.js.map +1 -1
  127. package/dist/opLifecycle/definitions.d.ts +11 -0
  128. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  129. package/dist/opLifecycle/definitions.js.map +1 -1
  130. package/dist/opLifecycle/index.d.ts +1 -1
  131. package/dist/opLifecycle/index.d.ts.map +1 -1
  132. package/dist/opLifecycle/index.js +2 -1
  133. package/dist/opLifecycle/index.js.map +1 -1
  134. package/dist/opLifecycle/opCompressor.d.ts +2 -2
  135. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  136. package/dist/opLifecycle/opCompressor.js +12 -7
  137. package/dist/opLifecycle/opCompressor.js.map +1 -1
  138. package/dist/opLifecycle/opDecompressor.d.ts +2 -2
  139. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  140. package/dist/opLifecycle/opDecompressor.js +30 -21
  141. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  142. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  143. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  144. package/dist/opLifecycle/opGroupingManager.js +19 -13
  145. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  146. package/dist/opLifecycle/opSplitter.d.ts +2 -2
  147. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  148. package/dist/opLifecycle/opSplitter.js +24 -19
  149. package/dist/opLifecycle/opSplitter.js.map +1 -1
  150. package/dist/opLifecycle/outbox.d.ts +39 -6
  151. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  152. package/dist/opLifecycle/outbox.js +138 -61
  153. package/dist/opLifecycle/outbox.js.map +1 -1
  154. package/dist/opLifecycle/remoteMessageProcessor.d.ts +6 -1
  155. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  156. package/dist/opLifecycle/remoteMessageProcessor.js +22 -8
  157. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  158. package/dist/opProperties.js +1 -2
  159. package/dist/opProperties.js.map +1 -1
  160. package/dist/packageVersion.d.ts +1 -1
  161. package/dist/packageVersion.js +1 -1
  162. package/dist/packageVersion.js.map +1 -1
  163. package/dist/pendingStateManager.d.ts +25 -10
  164. package/dist/pendingStateManager.d.ts.map +1 -1
  165. package/dist/pendingStateManager.js +101 -64
  166. package/dist/pendingStateManager.js.map +1 -1
  167. package/dist/scheduleManager.d.ts.map +1 -1
  168. package/dist/scheduleManager.js +43 -33
  169. package/dist/scheduleManager.js.map +1 -1
  170. package/dist/summary/index.d.ts +4 -4
  171. package/dist/summary/index.d.ts.map +1 -1
  172. package/dist/summary/index.js +3 -1
  173. package/dist/summary/index.js.map +1 -1
  174. package/dist/summary/orderedClientElection.d.ts +3 -3
  175. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  176. package/dist/summary/orderedClientElection.js +26 -27
  177. package/dist/summary/orderedClientElection.js.map +1 -1
  178. package/dist/summary/runWhileConnectedCoordinator.js +3 -3
  179. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  180. package/dist/summary/runningSummarizer.d.ts +31 -10
  181. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  182. package/dist/summary/runningSummarizer.js +271 -139
  183. package/dist/summary/runningSummarizer.js.map +1 -1
  184. package/dist/summary/summarizer.d.ts +8 -7
  185. package/dist/summary/summarizer.d.ts.map +1 -1
  186. package/dist/summary/summarizer.js +79 -78
  187. package/dist/summary/summarizer.js.map +1 -1
  188. package/dist/summary/summarizerClientElection.d.ts +2 -2
  189. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  190. package/dist/summary/summarizerClientElection.js +7 -11
  191. package/dist/summary/summarizerClientElection.js.map +1 -1
  192. package/dist/summary/summarizerHeuristics.js +10 -14
  193. package/dist/summary/summarizerHeuristics.js.map +1 -1
  194. package/dist/summary/summarizerNode/index.d.ts +1 -1
  195. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  196. package/dist/summary/summarizerNode/index.js.map +1 -1
  197. package/dist/summary/summarizerNode/summarizerNode.d.ts +40 -23
  198. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  199. package/dist/summary/summarizerNode/summarizerNode.js +144 -149
  200. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  201. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +25 -29
  202. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  203. package/dist/summary/summarizerNode/summarizerNodeUtils.js +2 -4
  204. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  205. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +21 -16
  206. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  207. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +74 -123
  208. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  209. package/dist/summary/summarizerTypes.d.ts +44 -24
  210. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  211. package/dist/summary/summarizerTypes.js.map +1 -1
  212. package/dist/summary/summaryCollection.d.ts +2 -2
  213. package/dist/summary/summaryCollection.d.ts.map +1 -1
  214. package/dist/summary/summaryCollection.js +16 -13
  215. package/dist/summary/summaryCollection.js.map +1 -1
  216. package/dist/summary/summaryFormat.d.ts +4 -0
  217. package/dist/summary/summaryFormat.d.ts.map +1 -1
  218. package/dist/summary/summaryFormat.js +8 -5
  219. package/dist/summary/summaryFormat.js.map +1 -1
  220. package/dist/summary/summaryGenerator.d.ts +21 -6
  221. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  222. package/dist/summary/summaryGenerator.js +117 -54
  223. package/dist/summary/summaryGenerator.js.map +1 -1
  224. package/dist/summary/summaryManager.d.ts +8 -7
  225. package/dist/summary/summaryManager.d.ts.map +1 -1
  226. package/dist/summary/summaryManager.js +38 -28
  227. package/dist/summary/summaryManager.js.map +1 -1
  228. package/lib/batchTracker.d.ts +3 -2
  229. package/lib/batchTracker.d.ts.map +1 -1
  230. package/lib/batchTracker.js +5 -4
  231. package/lib/batchTracker.js.map +1 -1
  232. package/lib/blobManager.d.ts +15 -18
  233. package/lib/blobManager.d.ts.map +1 -1
  234. package/lib/blobManager.js +187 -146
  235. package/lib/blobManager.js.map +1 -1
  236. package/lib/connectionTelemetry.d.ts.map +1 -1
  237. package/lib/connectionTelemetry.js +23 -7
  238. package/lib/connectionTelemetry.js.map +1 -1
  239. package/lib/containerRuntime.d.ts +172 -35
  240. package/lib/containerRuntime.d.ts.map +1 -1
  241. package/lib/containerRuntime.js +678 -380
  242. package/lib/containerRuntime.js.map +1 -1
  243. package/lib/dataStore.d.ts.map +1 -1
  244. package/lib/dataStore.js +13 -5
  245. package/lib/dataStore.js.map +1 -1
  246. package/lib/dataStoreContext.d.ts +4 -4
  247. package/lib/dataStoreContext.d.ts.map +1 -1
  248. package/lib/dataStoreContext.js +49 -52
  249. package/lib/dataStoreContext.js.map +1 -1
  250. package/lib/dataStoreContexts.d.ts +1 -1
  251. package/lib/dataStoreContexts.d.ts.map +1 -1
  252. package/lib/dataStoreContexts.js +3 -3
  253. package/lib/dataStoreContexts.js.map +1 -1
  254. package/lib/dataStoreRegistry.js +1 -1
  255. package/lib/dataStoreRegistry.js.map +1 -1
  256. package/lib/dataStores.d.ts +23 -7
  257. package/lib/dataStores.d.ts.map +1 -1
  258. package/lib/dataStores.js +107 -64
  259. package/lib/dataStores.js.map +1 -1
  260. package/lib/deltaManagerProxyBase.d.ts +35 -0
  261. package/lib/deltaManagerProxyBase.d.ts.map +1 -0
  262. package/lib/deltaManagerProxyBase.js +73 -0
  263. package/lib/deltaManagerProxyBase.js.map +1 -0
  264. package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
  265. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
  266. package/lib/deltaManagerSummarizerProxy.js +3 -1
  267. package/lib/deltaManagerSummarizerProxy.js.map +1 -1
  268. package/lib/deltaScheduler.d.ts.map +1 -1
  269. package/lib/deltaScheduler.js +7 -7
  270. package/lib/deltaScheduler.js.map +1 -1
  271. package/lib/error.d.ts +14 -0
  272. package/lib/error.d.ts.map +1 -0
  273. package/lib/error.js +17 -0
  274. package/lib/error.js.map +1 -0
  275. package/lib/gc/garbageCollection.d.ts +10 -9
  276. package/lib/gc/garbageCollection.d.ts.map +1 -1
  277. package/lib/gc/garbageCollection.js +61 -52
  278. package/lib/gc/garbageCollection.js.map +1 -1
  279. package/lib/gc/gcConfigs.d.ts.map +1 -1
  280. package/lib/gc/gcConfigs.js +16 -12
  281. package/lib/gc/gcConfigs.js.map +1 -1
  282. package/lib/gc/gcDefinitions.d.ts +17 -5
  283. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  284. package/lib/gc/gcDefinitions.js +13 -14
  285. package/lib/gc/gcDefinitions.js.map +1 -1
  286. package/lib/gc/gcHelpers.d.ts +0 -8
  287. package/lib/gc/gcHelpers.d.ts.map +1 -1
  288. package/lib/gc/gcHelpers.js +5 -17
  289. package/lib/gc/gcHelpers.js.map +1 -1
  290. package/lib/gc/gcSummaryStateTracker.d.ts +4 -7
  291. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  292. package/lib/gc/gcSummaryStateTracker.js +20 -59
  293. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  294. package/lib/gc/gcTelemetry.d.ts +1 -1
  295. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  296. package/lib/gc/gcTelemetry.js +46 -36
  297. package/lib/gc/gcTelemetry.js.map +1 -1
  298. package/lib/gc/gcUnreferencedStateTracker.js +1 -1
  299. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  300. package/lib/gc/index.d.ts +2 -2
  301. package/lib/gc/index.d.ts.map +1 -1
  302. package/lib/gc/index.js +2 -2
  303. package/lib/gc/index.js.map +1 -1
  304. package/lib/id-compressor/appendOnlySortedMap.d.ts +8 -30
  305. package/lib/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
  306. package/lib/id-compressor/appendOnlySortedMap.js +25 -66
  307. package/lib/id-compressor/appendOnlySortedMap.js.map +1 -1
  308. package/lib/id-compressor/finalSpace.d.ts +29 -0
  309. package/lib/id-compressor/finalSpace.d.ts.map +1 -0
  310. package/lib/id-compressor/finalSpace.js +58 -0
  311. package/lib/id-compressor/finalSpace.js.map +1 -0
  312. package/lib/id-compressor/idCompressor.d.ts +25 -250
  313. package/lib/id-compressor/idCompressor.d.ts.map +1 -1
  314. package/lib/id-compressor/idCompressor.js +385 -1142
  315. package/lib/id-compressor/idCompressor.js.map +1 -1
  316. package/lib/id-compressor/identifiers.d.ts +32 -0
  317. package/lib/id-compressor/identifiers.d.ts.map +1 -0
  318. package/lib/id-compressor/identifiers.js +11 -0
  319. package/lib/id-compressor/identifiers.js.map +1 -0
  320. package/lib/id-compressor/index.d.ts +5 -6
  321. package/lib/id-compressor/index.d.ts.map +1 -1
  322. package/lib/id-compressor/index.js +5 -6
  323. package/lib/id-compressor/index.js.map +1 -1
  324. package/lib/id-compressor/persistanceUtilities.d.ts +22 -0
  325. package/lib/id-compressor/persistanceUtilities.d.ts.map +1 -0
  326. package/lib/id-compressor/persistanceUtilities.js +34 -0
  327. package/lib/id-compressor/persistanceUtilities.js.map +1 -0
  328. package/lib/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
  329. package/lib/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
  330. package/lib/id-compressor/sessionSpaceNormalizer.js +76 -0
  331. package/lib/id-compressor/sessionSpaceNormalizer.js.map +1 -0
  332. package/lib/id-compressor/sessions.d.ts +115 -0
  333. package/lib/id-compressor/sessions.d.ts.map +1 -0
  334. package/lib/id-compressor/sessions.js +290 -0
  335. package/lib/id-compressor/sessions.js.map +1 -0
  336. package/lib/id-compressor/utilities.d.ts +49 -0
  337. package/lib/id-compressor/utilities.d.ts.map +1 -0
  338. package/lib/id-compressor/utilities.js +148 -0
  339. package/lib/id-compressor/utilities.js.map +1 -0
  340. package/lib/index.d.ts +3 -3
  341. package/lib/index.d.ts.map +1 -1
  342. package/lib/index.js +2 -2
  343. package/lib/index.js.map +1 -1
  344. package/lib/metadata.d.ts +18 -0
  345. package/lib/metadata.d.ts.map +1 -0
  346. package/lib/metadata.js +6 -0
  347. package/lib/metadata.js.map +1 -0
  348. package/lib/opLifecycle/batchManager.d.ts +2 -1
  349. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  350. package/lib/opLifecycle/batchManager.js +15 -7
  351. package/lib/opLifecycle/batchManager.js.map +1 -1
  352. package/lib/opLifecycle/definitions.d.ts +11 -0
  353. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  354. package/lib/opLifecycle/definitions.js.map +1 -1
  355. package/lib/opLifecycle/index.d.ts +1 -1
  356. package/lib/opLifecycle/index.d.ts.map +1 -1
  357. package/lib/opLifecycle/index.js +1 -1
  358. package/lib/opLifecycle/index.js.map +1 -1
  359. package/lib/opLifecycle/opCompressor.d.ts +2 -2
  360. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  361. package/lib/opLifecycle/opCompressor.js +10 -5
  362. package/lib/opLifecycle/opCompressor.js.map +1 -1
  363. package/lib/opLifecycle/opDecompressor.d.ts +2 -2
  364. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  365. package/lib/opLifecycle/opDecompressor.js +22 -13
  366. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  367. package/lib/opLifecycle/opGroupingManager.d.ts +1 -1
  368. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  369. package/lib/opLifecycle/opGroupingManager.js +17 -11
  370. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  371. package/lib/opLifecycle/opSplitter.d.ts +2 -2
  372. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  373. package/lib/opLifecycle/opSplitter.js +15 -10
  374. package/lib/opLifecycle/opSplitter.js.map +1 -1
  375. package/lib/opLifecycle/outbox.d.ts +39 -6
  376. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  377. package/lib/opLifecycle/outbox.js +132 -56
  378. package/lib/opLifecycle/outbox.js.map +1 -1
  379. package/lib/opLifecycle/remoteMessageProcessor.d.ts +6 -1
  380. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  381. package/lib/opLifecycle/remoteMessageProcessor.js +23 -9
  382. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  383. package/lib/opProperties.js +1 -2
  384. package/lib/opProperties.js.map +1 -1
  385. package/lib/packageVersion.d.ts +1 -1
  386. package/lib/packageVersion.js +1 -1
  387. package/lib/packageVersion.js.map +1 -1
  388. package/lib/pendingStateManager.d.ts +25 -10
  389. package/lib/pendingStateManager.d.ts.map +1 -1
  390. package/lib/pendingStateManager.js +90 -53
  391. package/lib/pendingStateManager.js.map +1 -1
  392. package/lib/scheduleManager.d.ts.map +1 -1
  393. package/lib/scheduleManager.js +25 -15
  394. package/lib/scheduleManager.js.map +1 -1
  395. package/lib/summary/index.d.ts +4 -4
  396. package/lib/summary/index.d.ts.map +1 -1
  397. package/lib/summary/index.js +2 -2
  398. package/lib/summary/index.js.map +1 -1
  399. package/lib/summary/orderedClientElection.d.ts +3 -3
  400. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  401. package/lib/summary/orderedClientElection.js +21 -22
  402. package/lib/summary/orderedClientElection.js.map +1 -1
  403. package/lib/summary/runWhileConnectedCoordinator.js +1 -1
  404. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  405. package/lib/summary/runningSummarizer.d.ts +31 -10
  406. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  407. package/lib/summary/runningSummarizer.js +265 -133
  408. package/lib/summary/runningSummarizer.js.map +1 -1
  409. package/lib/summary/summarizer.d.ts +8 -7
  410. package/lib/summary/summarizer.d.ts.map +1 -1
  411. package/lib/summary/summarizer.js +75 -74
  412. package/lib/summary/summarizer.js.map +1 -1
  413. package/lib/summary/summarizerClientElection.d.ts +2 -2
  414. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  415. package/lib/summary/summarizerClientElection.js +6 -10
  416. package/lib/summary/summarizerClientElection.js.map +1 -1
  417. package/lib/summary/summarizerHeuristics.js +9 -13
  418. package/lib/summary/summarizerHeuristics.js.map +1 -1
  419. package/lib/summary/summarizerNode/index.d.ts +1 -1
  420. package/lib/summary/summarizerNode/index.d.ts.map +1 -1
  421. package/lib/summary/summarizerNode/index.js.map +1 -1
  422. package/lib/summary/summarizerNode/summarizerNode.d.ts +40 -23
  423. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  424. package/lib/summary/summarizerNode/summarizerNode.js +132 -137
  425. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  426. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +25 -29
  427. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  428. package/lib/summary/summarizerNode/summarizerNodeUtils.js +2 -4
  429. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  430. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +21 -16
  431. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  432. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +70 -119
  433. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  434. package/lib/summary/summarizerTypes.d.ts +44 -24
  435. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  436. package/lib/summary/summarizerTypes.js.map +1 -1
  437. package/lib/summary/summaryCollection.d.ts +2 -2
  438. package/lib/summary/summaryCollection.d.ts.map +1 -1
  439. package/lib/summary/summaryCollection.js +9 -6
  440. package/lib/summary/summaryCollection.js.map +1 -1
  441. package/lib/summary/summaryFormat.d.ts +4 -0
  442. package/lib/summary/summaryFormat.d.ts.map +1 -1
  443. package/lib/summary/summaryFormat.js +7 -4
  444. package/lib/summary/summaryFormat.js.map +1 -1
  445. package/lib/summary/summaryGenerator.d.ts +21 -6
  446. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  447. package/lib/summary/summaryGenerator.js +109 -47
  448. package/lib/summary/summaryGenerator.js.map +1 -1
  449. package/lib/summary/summaryManager.d.ts +8 -7
  450. package/lib/summary/summaryManager.d.ts.map +1 -1
  451. package/lib/summary/summaryManager.js +35 -25
  452. package/lib/summary/summaryManager.js.map +1 -1
  453. package/package.json +30 -32
  454. package/src/batchTracker.ts +7 -5
  455. package/src/blobManager.ts +235 -172
  456. package/src/connectionTelemetry.ts +19 -5
  457. package/src/containerRuntime.ts +853 -431
  458. package/src/dataStore.ts +12 -4
  459. package/src/dataStoreContext.ts +49 -46
  460. package/src/dataStoreContexts.ts +4 -4
  461. package/src/dataStoreRegistry.ts +1 -1
  462. package/src/dataStores.ts +119 -80
  463. package/src/deltaManagerProxyBase.ts +111 -0
  464. package/src/deltaManagerSummarizerProxy.ts +4 -1
  465. package/src/deltaScheduler.ts +7 -11
  466. package/src/error.ts +18 -0
  467. package/src/gc/garbageCollection.md +53 -5
  468. package/src/gc/garbageCollection.ts +58 -51
  469. package/src/gc/gcConfigs.ts +4 -2
  470. package/src/gc/gcDefinitions.ts +17 -21
  471. package/src/gc/gcEarlyAdoption.md +145 -0
  472. package/src/gc/gcHelpers.ts +1 -12
  473. package/src/gc/gcSummaryStateTracker.ts +19 -65
  474. package/src/gc/gcTelemetry.ts +15 -13
  475. package/src/gc/gcUnreferencedStateTracker.ts +1 -1
  476. package/src/gc/index.ts +2 -4
  477. package/src/id-compressor/appendOnlySortedMap.ts +26 -87
  478. package/src/id-compressor/finalSpace.ts +67 -0
  479. package/src/id-compressor/idCompressor.ts +458 -1682
  480. package/src/id-compressor/identifiers.ts +42 -0
  481. package/src/id-compressor/index.ts +11 -20
  482. package/src/id-compressor/persistanceUtilities.ts +58 -0
  483. package/src/id-compressor/sessionSpaceNormalizer.ts +83 -0
  484. package/src/id-compressor/sessions.ts +405 -0
  485. package/src/id-compressor/utilities.ts +187 -0
  486. package/src/index.ts +9 -2
  487. package/src/metadata.ts +19 -0
  488. package/src/opLifecycle/README.md +20 -0
  489. package/src/opLifecycle/batchManager.ts +9 -1
  490. package/src/opLifecycle/definitions.ts +11 -0
  491. package/src/opLifecycle/index.ts +1 -1
  492. package/src/opLifecycle/opCompressor.ts +6 -5
  493. package/src/opLifecycle/opDecompressor.ts +47 -17
  494. package/src/opLifecycle/opGroupingManager.ts +18 -8
  495. package/src/opLifecycle/opSplitter.ts +10 -7
  496. package/src/opLifecycle/outbox.ts +177 -72
  497. package/src/opLifecycle/remoteMessageProcessor.ts +32 -9
  498. package/src/packageVersion.ts +1 -1
  499. package/src/pendingStateManager.ts +123 -78
  500. package/src/scheduleManager.ts +22 -11
  501. package/src/summary/index.ts +7 -4
  502. package/src/summary/orderedClientElection.ts +10 -6
  503. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  504. package/src/summary/runningSummarizer.ts +291 -163
  505. package/src/summary/summarizer.ts +27 -16
  506. package/src/summary/summarizerClientElection.ts +2 -2
  507. package/src/summary/summarizerHeuristics.ts +1 -1
  508. package/src/summary/summarizerNode/index.ts +2 -2
  509. package/src/summary/summarizerNode/summarizerNode.ts +142 -184
  510. package/src/summary/summarizerNode/summarizerNodeUtils.ts +27 -35
  511. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +72 -148
  512. package/src/summary/summarizerTypes.ts +49 -24
  513. package/src/summary/summaryCollection.ts +9 -4
  514. package/src/summary/summaryFormat.ts +9 -2
  515. package/src/summary/summaryGenerator.ts +72 -49
  516. package/src/summary/summaryManager.ts +44 -16
  517. package/dist/id-compressor/idRange.d.ts +0 -11
  518. package/dist/id-compressor/idRange.d.ts.map +0 -1
  519. package/dist/id-compressor/idRange.js +0 -29
  520. package/dist/id-compressor/idRange.js.map +0 -1
  521. package/dist/id-compressor/numericUuid.d.ts +0 -59
  522. package/dist/id-compressor/numericUuid.d.ts.map +0 -1
  523. package/dist/id-compressor/numericUuid.js +0 -325
  524. package/dist/id-compressor/numericUuid.js.map +0 -1
  525. package/dist/id-compressor/sessionIdNormalizer.d.ts +0 -138
  526. package/dist/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
  527. package/dist/id-compressor/sessionIdNormalizer.js +0 -488
  528. package/dist/id-compressor/sessionIdNormalizer.js.map +0 -1
  529. package/dist/id-compressor/utils.d.ts +0 -57
  530. package/dist/id-compressor/utils.d.ts.map +0 -1
  531. package/dist/id-compressor/utils.js +0 -90
  532. package/dist/id-compressor/utils.js.map +0 -1
  533. package/dist/id-compressor/uuidUtilities.d.ts +0 -30
  534. package/dist/id-compressor/uuidUtilities.d.ts.map +0 -1
  535. package/dist/id-compressor/uuidUtilities.js +0 -106
  536. package/dist/id-compressor/uuidUtilities.js.map +0 -1
  537. package/lib/id-compressor/idRange.d.ts +0 -11
  538. package/lib/id-compressor/idRange.d.ts.map +0 -1
  539. package/lib/id-compressor/idRange.js +0 -25
  540. package/lib/id-compressor/idRange.js.map +0 -1
  541. package/lib/id-compressor/numericUuid.d.ts +0 -59
  542. package/lib/id-compressor/numericUuid.d.ts.map +0 -1
  543. package/lib/id-compressor/numericUuid.js +0 -315
  544. package/lib/id-compressor/numericUuid.js.map +0 -1
  545. package/lib/id-compressor/sessionIdNormalizer.d.ts +0 -138
  546. package/lib/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
  547. package/lib/id-compressor/sessionIdNormalizer.js +0 -484
  548. package/lib/id-compressor/sessionIdNormalizer.js.map +0 -1
  549. package/lib/id-compressor/utils.d.ts +0 -57
  550. package/lib/id-compressor/utils.d.ts.map +0 -1
  551. package/lib/id-compressor/utils.js +0 -79
  552. package/lib/id-compressor/utils.js.map +0 -1
  553. package/lib/id-compressor/uuidUtilities.d.ts +0 -30
  554. package/lib/id-compressor/uuidUtilities.d.ts.map +0 -1
  555. package/lib/id-compressor/uuidUtilities.js +0 -98
  556. package/lib/id-compressor/uuidUtilities.js.map +0 -1
  557. package/src/id-compressor/idRange.ts +0 -35
  558. package/src/id-compressor/numericUuid.ts +0 -383
  559. package/src/id-compressor/sessionIdNormalizer.ts +0 -609
  560. package/src/id-compressor/utils.ts +0 -114
  561. package/src/id-compressor/uuidUtilities.ts +0 -123
@@ -12,12 +12,11 @@ import {
12
12
  ISummarizeResult,
13
13
  ISummaryTreeWithStats,
14
14
  } from "@fluidframework/runtime-definitions";
15
- import { mergeStats, ReadAndParseBlob, SummaryTreeBuilder } from "@fluidframework/runtime-utils";
16
- import { IContainerRuntimeMetadata, metadataBlobName, RefreshSummaryResult } from "../summary";
17
- import { GCVersion, IGCStats } from "./gcDefinitions";
18
- import { getGCDataFromSnapshot, generateSortedGCState, getGCVersion } from "./gcHelpers";
15
+ import { mergeStats, SummaryTreeBuilder } from "@fluidframework/runtime-utils";
16
+ import { IRefreshSummaryResult } from "../summary";
17
+ import { GCVersion, IGarbageCollectorConfigs, IGCStats } from "./gcDefinitions";
18
+ import { generateSortedGCState } from "./gcHelpers";
19
19
  import { IGarbageCollectionSnapshotData, IGarbageCollectionState } from "./gcSummaryDefinitions";
20
- import { IGarbageCollectorConfigs } from ".";
21
20
 
22
21
  export const gcStateBlobKey = `${gcBlobPrefix}_root`;
23
22
 
@@ -264,72 +263,27 @@ export class GCSummaryStateTracker {
264
263
  }
265
264
 
266
265
  /**
267
- * Called to refresh the latest summary state. This happens when either a pending summary is acked or a snapshot
268
- * is downloaded and should be used to update the state.
266
+ * Called to refresh the latest summary state. This happens when either a pending summary is acked.
269
267
  */
270
- public async refreshLatestSummary(
271
- proposalHandle: string | undefined,
272
- result: RefreshSummaryResult,
273
- readAndParseBlob: ReadAndParseBlob,
274
- ): Promise<IGarbageCollectionSnapshotData | undefined> {
275
- // If the latest summary was updated and the summary was tracked, this client is the one that generated this
276
- // summary. So, update wasGCRunInLatestSummary.
277
- // Note that this has to be updated if GC did not run too. Otherwise, `gcStateNeedsReset` will always return
278
- // true in scenarios where GC is disabled but enabled in the snapshot we loaded from.
279
- if (result.latestSummaryUpdated && result.wasSummaryTracked) {
280
- this.wasGCRunInLatestSummary = this.configs.shouldRunGC;
281
- }
282
-
283
- if (!result.latestSummaryUpdated || !this.configs.shouldRunGC) {
284
- return undefined;
285
- }
286
-
287
- // If the summary was tracked by this client, it was the one that generated the summary in the first place.
288
- // Update latest state from pending.
289
- if (result.wasSummaryTracked) {
290
- this.latestSummaryGCVersion = this.configs.gcVersionInEffect;
291
- this.latestSummaryData = this.pendingSummaryData;
292
- this.pendingSummaryData = undefined;
293
- this.updatedDSCountSinceLastSummary = 0;
294
- return undefined;
295
- }
296
-
297
- // If the summary was not tracked by this client, the state should be updated from the downloaded snapshot.
298
- const snapshotTree = result.snapshotTree;
299
- const metadataBlobId = snapshotTree.blobs[metadataBlobName];
300
- const metadata = metadataBlobId
301
- ? await readAndParseBlob<IContainerRuntimeMetadata>(metadataBlobId)
302
- : undefined;
303
- this.latestSummaryGCVersion = getGCVersion(metadata);
304
-
305
- const gcSnapshotTree = snapshotTree.trees[gcTreeKey];
306
- // If GC ran in the container that generated this snapshot, it will have a GC tree.
307
- this.wasGCRunInLatestSummary = gcSnapshotTree !== undefined;
308
-
309
- if (gcSnapshotTree === undefined) {
310
- return undefined;
268
+ public async refreshLatestSummary(result: IRefreshSummaryResult): Promise<void> {
269
+ if (!result.isSummaryTracked) {
270
+ return;
311
271
  }
312
272
 
313
- let snapshotData = await getGCDataFromSnapshot(gcSnapshotTree, readAndParseBlob);
273
+ // If the summary is tracked, this client is the one that generated it. So, update wasGCRunInLatestSummary.
274
+ // Note that this has to be updated if GC did not run too. Otherwise, `gcStateNeedsReset` will always return
275
+ // true in scenarios where GC is currently disabled but enabled in the snapshot we loaded from.
276
+ this.wasGCRunInLatestSummary = this.configs.shouldRunGC;
314
277
 
315
- // If the GC version in the snapshot does not match the GC version currently in effect, the GC data
316
- // in the snapshot cannot be interpreted correctly. Set everything to undefined except for deletedNodes
317
- // because irrespective of GC versions, these nodes have been deleted and cannot be brought back. The
318
- // deletedNodes info is needed to identify when these nodes are used.
319
- if (getGCVersion(metadata) !== this.configs.gcVersionInEffect) {
320
- snapshotData = {
321
- gcState: undefined,
322
- tombstones: undefined,
323
- deletedNodes: snapshotData.deletedNodes,
324
- };
278
+ if (!this.configs.shouldRunGC) {
279
+ return;
325
280
  }
326
281
 
327
- this.latestSummaryData = {
328
- serializedGCState: JSON.stringify(snapshotData.gcState),
329
- serializedTombstones: JSON.stringify(snapshotData.tombstones),
330
- serializedDeletedNodes: JSON.stringify(snapshotData.deletedNodes),
331
- };
332
- return snapshotData;
282
+ this.latestSummaryGCVersion = this.configs.gcVersionInEffect;
283
+ this.latestSummaryData = this.pendingSummaryData;
284
+ this.pendingSummaryData = undefined;
285
+ this.updatedDSCountSinceLastSummary = 0;
286
+ return;
333
287
  }
334
288
 
335
289
  /**
@@ -3,13 +3,13 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryGenericEvent } from "@fluidframework/common-definitions";
6
+ import { ITelemetryGenericEvent } from "@fluidframework/core-interfaces";
7
7
  import { IGarbageCollectionData } from "@fluidframework/runtime-definitions";
8
- import { packagePathToTelemetryProperty } from "@fluidframework/runtime-utils";
9
8
  import {
10
9
  generateStack,
11
10
  ITelemetryLoggerExt,
12
11
  MonitoringContext,
12
+ tagCodeArtifacts,
13
13
  } from "@fluidframework/telemetry-utils";
14
14
  import { ICreateContainerMetadata } from "../summary";
15
15
  import {
@@ -23,7 +23,6 @@ import {
23
23
  runSweepKey,
24
24
  } from "./gcDefinitions";
25
25
  import { UnreferencedStateTracker } from "./gcUnreferencedStateTracker";
26
- import { tagAsCodeArtifact } from "./gcHelpers";
27
26
 
28
27
  type NodeUsageType = "Changed" | "Loaded" | "Revived";
29
28
 
@@ -161,7 +160,6 @@ export class GCTelemetryTracker {
161
160
  const { usageType, currentReferenceTimestampMs, packagePath, id, fromId, ...propsToLog } =
162
161
  nodeUsageProps;
163
162
  const eventProps: Omit<IUnreferencedEventProps, "state" | "usageType"> = {
164
- id: tagAsCodeArtifact(id),
165
163
  type: nodeType,
166
164
  unrefTime: nodeStateTracker.unreferencedTimestampMs,
167
165
  age:
@@ -171,7 +169,7 @@ export class GCTelemetryTracker {
171
169
  state === UnreferencedState.Inactive
172
170
  ? this.configs.inactiveTimeoutMs
173
171
  : this.configs.sweepTimeoutMs,
174
- fromId: fromId ? tagAsCodeArtifact(fromId) : undefined,
172
+ ...tagCodeArtifacts({ id, fromId }),
175
173
  ...propsToLog,
176
174
  ...this.createContainerMetadata,
177
175
  };
@@ -184,7 +182,7 @@ export class GCTelemetryTracker {
184
182
  {
185
183
  eventName: `GC_Tombstone_${nodeType}_Revived`,
186
184
  category: "generic",
187
- url: tagAsCodeArtifact(id),
185
+ ...tagCodeArtifacts({ url: id }),
188
186
  gcTombstoneEnforcementAllowed: this.gcTombstoneEnforcementAllowed,
189
187
  },
190
188
  undefined /* packagePath */,
@@ -211,7 +209,7 @@ export class GCTelemetryTracker {
211
209
  const { id: taggedId, fromId: taggedFromId, ...otherProps } = eventProps;
212
210
  const event = {
213
211
  eventName: `${state}Object_${nodeUsageProps.usageType}`,
214
- pkg: packagePathToTelemetryProperty(nodeUsageProps.packagePath),
212
+ pkg: tagCodeArtifacts({ pkg: nodeUsageProps.packagePath?.join("/") }).pkg,
215
213
  stack: generateStack(),
216
214
  id: taggedId,
217
215
  fromId: taggedFromId,
@@ -277,8 +275,10 @@ export class GCTelemetryTracker {
277
275
  if (missingExplicitRoutes.length > 0) {
278
276
  logger.sendErrorEvent({
279
277
  eventName: "gcUnknownOutboundReferences",
280
- id: tagAsCodeArtifact(nodeId),
281
- routes: tagAsCodeArtifact(JSON.stringify(missingExplicitRoutes)),
278
+ ...tagCodeArtifacts({
279
+ id: nodeId,
280
+ routes: JSON.stringify(missingExplicitRoutes),
281
+ }),
282
282
  });
283
283
  }
284
284
  }
@@ -318,8 +318,10 @@ export class GCTelemetryTracker {
318
318
  }),
319
319
  id,
320
320
  fromId,
321
- pkg: pkg ? tagAsCodeArtifact(pkg.join("/")) : undefined,
322
- fromPkg: fromPkg ? tagAsCodeArtifact(fromPkg.join("/")) : undefined,
321
+ ...tagCodeArtifacts({
322
+ pkg: pkg?.join("/"),
323
+ fromPkg: fromPkg?.join("/"),
324
+ }),
323
325
  };
324
326
 
325
327
  if (state === UnreferencedState.Inactive) {
@@ -379,7 +381,7 @@ export class GCTelemetryTracker {
379
381
  lastSummaryTime,
380
382
  ...this.createContainerMetadata,
381
383
  }),
382
- id: tagAsCodeArtifact(JSON.stringify(deletedNodeIds)),
384
+ ...tagCodeArtifacts({ id: JSON.stringify(deletedNodeIds) }),
383
385
  });
384
386
  }
385
387
  }
@@ -398,7 +400,7 @@ export function sendGCUnexpectedUsageEvent(
398
400
  packagePath: readonly string[] | undefined,
399
401
  error?: unknown,
400
402
  ) {
401
- event.pkg = packagePathToTelemetryProperty(packagePath);
403
+ event.pkg = tagCodeArtifacts({ pkg: packagePath?.join("/") })?.pkg;
402
404
  event.tombstoneFlags = JSON.stringify({
403
405
  DisableTombstone: mc.config.getBoolean(disableTombstoneKey),
404
406
  ThrowOnTombstoneUsage: mc.config.getBoolean(throwOnTombstoneUsageKey),
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert, Timer } from "@fluidframework/common-utils";
6
+ import { assert, Timer } from "@fluidframework/core-utils";
7
7
  import { UnreferencedState } from "./gcDefinitions";
8
8
 
9
9
  /** A wrapper around common-utils Timer that requires the timeout when calling start/restart */
package/src/gc/index.ts CHANGED
@@ -29,8 +29,8 @@ export {
29
29
  runSessionExpiryKey,
30
30
  runSweepKey,
31
31
  stableGCVersion,
32
- sweepAttachmentBlobsKey,
33
- sweepDatastoresKey,
32
+ disableAttachmentBlobSweepKey,
33
+ disableDatastoreSweepKey,
34
34
  throwOnTombstoneLoadKey,
35
35
  throwOnTombstoneUsageKey,
36
36
  UnreferencedState,
@@ -38,12 +38,10 @@ export {
38
38
  export {
39
39
  cloneGCData,
40
40
  concatGarbageCollectionStates,
41
- getGCDataFromSnapshot,
42
41
  shouldAllowGcTombstoneEnforcement,
43
42
  shouldAllowGcSweep,
44
43
  trimLeadingAndTrailingSlashes,
45
44
  unpackChildNodesGCDetails,
46
- tagAsCodeArtifact,
47
45
  } from "./gcHelpers";
48
46
  export { runGarbageCollection } from "./gcReferenceGraphAlgorithm";
49
47
  export {
@@ -3,10 +3,9 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ /* eslint-disable tsdoc/syntax */
6
7
  /* eslint-disable no-bitwise */
7
-
8
- import { assert } from "@fluidframework/common-utils";
9
- import { fail } from "./utils";
8
+ import { assert } from "@fluidframework/core-utils";
10
9
 
11
10
  /**
12
11
  * A map in which entries are always added in key-sorted order.
@@ -133,7 +132,7 @@ export class AppendOnlySortedMap<K, V> {
133
132
  }
134
133
 
135
134
  /**
136
- * Adds a new key/value pair to the map. `key` must be \> to all keys in the map.
135
+ * Adds a new key/value pair to the map. `key` must be > to all keys in the map.
137
136
  * @param key - the key to add.
138
137
  * @param value - the value to add.
139
138
  */
@@ -141,7 +140,27 @@ export class AppendOnlySortedMap<K, V> {
141
140
  const { elements } = this;
142
141
  const { length } = elements;
143
142
  if (length !== 0 && this.comparator(key, this.maxKey() as K) <= 0) {
144
- fail("Inserted key must be > all others in the map.");
143
+ throw new Error("Inserted key must be > all others in the map.");
144
+ }
145
+ elements.push(key);
146
+ elements.push(value);
147
+ }
148
+
149
+ /**
150
+ * Replaces the last key/value pair with the given one. If the map is empty, it simply appends.
151
+ * `key` must be > to all keys in the map prior to the one replaced.
152
+ * @param key - the key to add.
153
+ * @param value - the value to add.
154
+ */
155
+ public replaceLast(key: K, value: V): void {
156
+ const { elements, comparator } = this;
157
+ const { length } = elements;
158
+ if (length !== 0) {
159
+ elements.pop();
160
+ elements.pop();
161
+ if (comparator(key, this.maxKey() as K) <= 0) {
162
+ throw new Error("Inserted key must be > all others in the map.");
163
+ }
145
164
  }
146
165
  elements.push(key);
147
166
  elements.push(value);
@@ -217,7 +236,7 @@ export class AppendOnlySortedMap<K, V> {
217
236
  if (prev !== undefined) {
218
237
  assert(
219
238
  this.comparator(kv[0], prev[0]) > 0,
220
- 0x47f /* Keys in map must be sorted. */,
239
+ 0x752 /* Keys in map must be sorted. */,
221
240
  );
222
241
  }
223
242
  prev = kv;
@@ -338,90 +357,10 @@ export class AppendOnlySortedMap<K, V> {
338
357
  } else if (c === 0) {
339
358
  return keyIndex;
340
359
  } else {
341
- fail("Invalid comparator.");
360
+ throw new Error("Invalid comparator.");
342
361
  }
343
362
  mid = (low + high) >> 1;
344
363
  }
345
364
  return (mid * 2) ^ AppendOnlySortedMap.failureXor;
346
365
  }
347
366
  }
348
-
349
- /**
350
- * A map in which entries are always added in both key-sorted and value-sorted order.
351
- * Supports appending and searching.
352
- */
353
- export class AppendOnlyDoublySortedMap<K, V, S> extends AppendOnlySortedMap<K, V> {
354
- public constructor(
355
- keyComparator: (a: K, b: K) => number,
356
- private readonly extractSearchValue: (value: V) => S,
357
- private readonly valueComparator: (search: S, value: S) => number,
358
- ) {
359
- super(keyComparator);
360
- }
361
-
362
- public override append(key: K, value: V): void {
363
- if (
364
- this.elements.length !== 0 &&
365
- this.valueComparator(
366
- this.extractSearchValue(value),
367
- this.extractSearchValue(this.maxValue() as V),
368
- ) <= 0
369
- ) {
370
- fail("Inserted value must be > all others in the map.");
371
- }
372
- super.append(key, value);
373
- }
374
-
375
- private readonly compareValues = (search: S, _: K, value: V): number => {
376
- return this.valueComparator(search, this.extractSearchValue(value));
377
- };
378
-
379
- // /**
380
- // * @param value - the value to lookup.
381
- // * @returns the key associated with `value` if such an entry exists, and undefined otherwise.
382
- // */
383
- // public getByValue(value: S): K | undefined {
384
- // const index = AppendOnlySortedMap.keyIndexOf(this.elements, value, this.compareValues);
385
- // return this.elements[index]?.[0];
386
- // }
387
-
388
- /**
389
- * @param searchValue - the search value to lookup.
390
- * @returns the entry who's value, when run through the extractor provided to the constructor, matches
391
- * `searchValue`. If no such entry exists, this method returns the next lower entry as determined by the value
392
- * comparator provided to the constructor. If no such entry exists, this method returns undefined.
393
- */
394
- public getPairOrNextLowerByValue(searchValue: S): readonly [K, V] | undefined {
395
- return this.getPairOrNextLowerBy(searchValue, this.compareValues);
396
- }
397
-
398
- /**
399
- * @param searchValue - the search value to lookup.
400
- * @returns the entry who's value, when run through the extractor provided to the constructor, matches `searchValue`. If no such entry
401
- * exists, this method returns the next higher entry as determined by the value comparator provided to the constructor. If no such entry
402
- * exists, this method returns undefined.
403
- */
404
- public getPairOrNextHigherByValue(searchValue: S): readonly [K, V] | undefined {
405
- return this.getPairOrNextHigherBy(searchValue, this.compareValues);
406
- }
407
-
408
- /**
409
- * Test-only expensive assertions to check the internal validity of the data structure.
410
- */
411
- public override assertValid(): void {
412
- super.assertValid();
413
- let prev: readonly [unknown, V] | undefined;
414
- for (const kv of this.entries()) {
415
- if (prev !== undefined) {
416
- assert(
417
- this.valueComparator(
418
- this.extractSearchValue(kv[1]),
419
- this.extractSearchValue(prev[1]),
420
- ) > 0,
421
- 0x480 /* Values in map must be sorted. */,
422
- );
423
- }
424
- prev = kv;
425
- }
426
- }
427
- }
@@ -0,0 +1,67 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { assert } from "@fluidframework/core-utils";
7
+ import { IdCluster, clustersEqual, lastAllocatedFinal, lastFinalizedFinal } from "./sessions";
8
+ import { FinalCompressedId } from "./identifiers";
9
+
10
+ /**
11
+ * All IDs that have been finalized (acked), grouped into clusters sorted by their base final IDs.
12
+ * These clusters span the positive integer space and are not sparse, meaning a cluster's base final
13
+ * ID will always be one greater than the last final ID in the previous cluster (or 0 if there is not one).
14
+ */
15
+ export class FinalSpace {
16
+ private readonly clusterList: IdCluster[] = [];
17
+
18
+ public get clusters(): readonly IdCluster[] {
19
+ return this.clusterList;
20
+ }
21
+
22
+ public getLastCluster(): IdCluster | undefined {
23
+ return this.clusterList[this.clusterList.length - 1];
24
+ }
25
+
26
+ public addCluster(newCluster: IdCluster) {
27
+ const lastCluster = this.getLastCluster();
28
+ assert(
29
+ lastCluster === undefined ||
30
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
31
+ newCluster.baseFinalId === lastCluster.baseFinalId + lastCluster.capacity,
32
+ 0x753 /* Cluster insert to final_space is out of order. */,
33
+ );
34
+ this.clusterList.push(newCluster);
35
+ }
36
+
37
+ /**
38
+ * @returns the upper bound (exclusive) of finalized IDs in final space, i.e. one greater than the last final ID in the last cluster.
39
+ * Note: this does not include allocated but unfinalized space in clusters.
40
+ */
41
+ public getFinalizedIdLimit(): FinalCompressedId {
42
+ const lastCluster = this.getLastCluster();
43
+ return lastCluster === undefined
44
+ ? (0 as FinalCompressedId)
45
+ : (((lastFinalizedFinal(lastCluster) as number) + 1) as FinalCompressedId);
46
+ }
47
+
48
+ /**
49
+ * @returns the upper bound (exclusive) of allocated IDs in final space, i.e. one greater than the last final ID in the last cluster.
50
+ * Note: this does includes all allocated IDs in clusters.
51
+ */
52
+ public getAllocatedIdLimit(): FinalCompressedId {
53
+ const lastCluster = this.getLastCluster();
54
+ return lastCluster === undefined
55
+ ? (0 as FinalCompressedId)
56
+ : (((lastAllocatedFinal(lastCluster) as number) + 1) as FinalCompressedId);
57
+ }
58
+
59
+ public equals(other: FinalSpace): boolean {
60
+ for (let i = 0; i < this.clusterList.length; i++) {
61
+ if (!clustersEqual(this.clusterList[i], other.clusterList[i])) {
62
+ return false;
63
+ }
64
+ }
65
+ return this.clusterList.length === other.clusterList.length;
66
+ }
67
+ }