@fluidframework/container-runtime 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.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 (554) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/api-report/container-runtime.api.md +471 -52
  3. package/dist/batchTracker.d.ts +1 -1
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +4 -4
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +33 -30
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +82 -107
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/channelCollection.d.ts +27 -22
  12. package/dist/channelCollection.d.ts.map +1 -1
  13. package/dist/channelCollection.js +155 -165
  14. package/dist/channelCollection.js.map +1 -1
  15. package/dist/connectionTelemetry.d.ts +3 -3
  16. package/dist/connectionTelemetry.d.ts.map +1 -1
  17. package/dist/connectionTelemetry.js +17 -17
  18. package/dist/connectionTelemetry.js.map +1 -1
  19. package/dist/containerHandleContext.d.ts.map +1 -1
  20. package/dist/containerHandleContext.js +2 -2
  21. package/dist/containerHandleContext.js.map +1 -1
  22. package/dist/containerRuntime.d.ts +42 -39
  23. package/dist/containerRuntime.d.ts.map +1 -1
  24. package/dist/containerRuntime.js +425 -292
  25. package/dist/containerRuntime.js.map +1 -1
  26. package/dist/dataStore.d.ts +1 -1
  27. package/dist/dataStore.d.ts.map +1 -1
  28. package/dist/dataStore.js +8 -8
  29. package/dist/dataStore.js.map +1 -1
  30. package/dist/dataStoreContext.d.ts +58 -19
  31. package/dist/dataStoreContext.d.ts.map +1 -1
  32. package/dist/dataStoreContext.js +169 -114
  33. package/dist/dataStoreContext.js.map +1 -1
  34. package/dist/dataStoreContexts.d.ts +1 -0
  35. package/dist/dataStoreContexts.d.ts.map +1 -1
  36. package/dist/dataStoreContexts.js +12 -11
  37. package/dist/dataStoreContexts.js.map +1 -1
  38. package/dist/dataStoreRegistry.d.ts +5 -1
  39. package/dist/dataStoreRegistry.d.ts.map +1 -1
  40. package/dist/dataStoreRegistry.js +4 -4
  41. package/dist/dataStoreRegistry.js.map +1 -1
  42. package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
  43. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  44. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  45. package/dist/deltaScheduler.d.ts +1 -1
  46. package/dist/deltaScheduler.d.ts.map +1 -1
  47. package/dist/deltaScheduler.js +6 -6
  48. package/dist/deltaScheduler.js.map +1 -1
  49. package/dist/error.d.ts +1 -1
  50. package/dist/error.d.ts.map +1 -1
  51. package/dist/error.js +4 -4
  52. package/dist/error.js.map +1 -1
  53. package/dist/gc/garbageCollection.d.ts +3 -2
  54. package/dist/gc/garbageCollection.d.ts.map +1 -1
  55. package/dist/gc/garbageCollection.js +23 -23
  56. package/dist/gc/garbageCollection.js.map +1 -1
  57. package/dist/gc/gcConfigs.d.ts +2 -2
  58. package/dist/gc/gcConfigs.d.ts.map +1 -1
  59. package/dist/gc/gcConfigs.js +4 -5
  60. package/dist/gc/gcConfigs.js.map +1 -1
  61. package/dist/gc/gcDefinitions.d.ts +4 -5
  62. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  63. package/dist/gc/gcDefinitions.js.map +1 -1
  64. package/dist/gc/gcHelpers.d.ts +5 -1
  65. package/dist/gc/gcHelpers.d.ts.map +1 -1
  66. package/dist/gc/gcHelpers.js +21 -12
  67. package/dist/gc/gcHelpers.js.map +1 -1
  68. package/dist/gc/gcSummaryStateTracker.d.ts +2 -2
  69. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  70. package/dist/gc/gcSummaryStateTracker.js +11 -11
  71. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  72. package/dist/gc/gcTelemetry.d.ts +2 -1
  73. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  74. package/dist/gc/gcTelemetry.js +11 -9
  75. package/dist/gc/gcTelemetry.js.map +1 -1
  76. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  77. package/dist/gc/gcUnreferencedStateTracker.js +6 -6
  78. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  79. package/dist/gc/index.d.ts +1 -1
  80. package/dist/gc/index.d.ts.map +1 -1
  81. package/dist/gc/index.js +2 -1
  82. package/dist/gc/index.js.map +1 -1
  83. package/dist/index.d.ts +5 -2
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +12 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/legacy.d.ts +91 -0
  88. package/dist/messageTypes.d.ts +11 -5
  89. package/dist/messageTypes.d.ts.map +1 -1
  90. package/dist/messageTypes.js +4 -0
  91. package/dist/messageTypes.js.map +1 -1
  92. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  93. package/dist/opLifecycle/batchManager.js.map +1 -1
  94. package/dist/opLifecycle/definitions.d.ts +2 -20
  95. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  96. package/dist/opLifecycle/definitions.js.map +1 -1
  97. package/dist/opLifecycle/index.d.ts +3 -3
  98. package/dist/opLifecycle/index.d.ts.map +1 -1
  99. package/dist/opLifecycle/index.js +3 -1
  100. package/dist/opLifecycle/index.js.map +1 -1
  101. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  102. package/dist/opLifecycle/opCompressor.js +5 -6
  103. package/dist/opLifecycle/opCompressor.js.map +1 -1
  104. package/dist/opLifecycle/opDecompressor.d.ts +15 -4
  105. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  106. package/dist/opLifecycle/opDecompressor.js +62 -63
  107. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  108. package/dist/opLifecycle/opGroupingManager.d.ts +2 -1
  109. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  110. package/dist/opLifecycle/opGroupingManager.js +14 -16
  111. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  112. package/dist/opLifecycle/opSplitter.d.ts +12 -4
  113. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  114. package/dist/opLifecycle/opSplitter.js +63 -53
  115. package/dist/opLifecycle/opSplitter.js.map +1 -1
  116. package/dist/opLifecycle/outbox.d.ts +2 -1
  117. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  118. package/dist/opLifecycle/outbox.js +30 -29
  119. package/dist/opLifecycle/outbox.js.map +1 -1
  120. package/dist/opLifecycle/remoteMessageProcessor.d.ts +8 -0
  121. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  122. package/dist/opLifecycle/remoteMessageProcessor.js +36 -32
  123. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  124. package/dist/packageVersion.d.ts +1 -1
  125. package/dist/packageVersion.js +1 -1
  126. package/dist/packageVersion.js.map +1 -1
  127. package/dist/pendingStateManager.d.ts +1 -1
  128. package/dist/pendingStateManager.d.ts.map +1 -1
  129. package/dist/pendingStateManager.js +18 -18
  130. package/dist/pendingStateManager.js.map +1 -1
  131. package/dist/public.d.ts +12 -0
  132. package/dist/scheduleManager.d.ts +1 -1
  133. package/dist/scheduleManager.d.ts.map +1 -1
  134. package/dist/scheduleManager.js +28 -24
  135. package/dist/scheduleManager.js.map +1 -1
  136. package/dist/storageServiceWithAttachBlobs.d.ts +2 -2
  137. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -1
  138. package/dist/storageServiceWithAttachBlobs.js +2 -2
  139. package/dist/storageServiceWithAttachBlobs.js.map +1 -1
  140. package/dist/summary/documentSchema.d.ts +209 -0
  141. package/dist/summary/documentSchema.d.ts.map +1 -0
  142. package/dist/summary/documentSchema.js +390 -0
  143. package/dist/summary/documentSchema.js.map +1 -0
  144. package/dist/summary/index.d.ts +2 -1
  145. package/dist/summary/index.d.ts.map +1 -1
  146. package/dist/summary/index.js +4 -1
  147. package/dist/summary/index.js.map +1 -1
  148. package/dist/summary/orderedClientElection.d.ts +2 -2
  149. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  150. package/dist/summary/orderedClientElection.js +12 -7
  151. package/dist/summary/orderedClientElection.js.map +1 -1
  152. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  153. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  154. package/dist/summary/runWhileConnectedCoordinator.js +3 -3
  155. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  156. package/dist/summary/runningSummarizer.d.ts +3 -3
  157. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  158. package/dist/summary/runningSummarizer.js +16 -16
  159. package/dist/summary/runningSummarizer.js.map +1 -1
  160. package/dist/summary/summarizer.d.ts +3 -2
  161. package/dist/summary/summarizer.d.ts.map +1 -1
  162. package/dist/summary/summarizer.js +13 -13
  163. package/dist/summary/summarizer.js.map +1 -1
  164. package/dist/summary/summarizerClientElection.d.ts +2 -2
  165. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  166. package/dist/summary/summarizerClientElection.js.map +1 -1
  167. package/dist/summary/summarizerHeuristics.d.ts +1 -1
  168. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  169. package/dist/summary/summarizerHeuristics.js +2 -2
  170. package/dist/summary/summarizerHeuristics.js.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNode.d.ts +3 -2
  172. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  173. package/dist/summary/summarizerNode/summarizerNode.js +28 -28
  174. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  175. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
  176. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  177. package/dist/summary/summarizerNode/summarizerNodeUtils.js +3 -3
  178. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  179. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
  180. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  181. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +14 -14
  182. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  183. package/dist/summary/summarizerTypes.d.ts +5 -3
  184. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  185. package/dist/summary/summarizerTypes.js.map +1 -1
  186. package/dist/summary/summaryCollection.d.ts +2 -2
  187. package/dist/summary/summaryCollection.d.ts.map +1 -1
  188. package/dist/summary/summaryCollection.js +7 -7
  189. package/dist/summary/summaryCollection.js.map +1 -1
  190. package/dist/summary/summaryFormat.d.ts +6 -17
  191. package/dist/summary/summaryFormat.d.ts.map +1 -1
  192. package/dist/summary/summaryFormat.js +8 -8
  193. package/dist/summary/summaryFormat.js.map +1 -1
  194. package/dist/summary/summaryGenerator.d.ts +4 -3
  195. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  196. package/dist/summary/summaryGenerator.js +17 -17
  197. package/dist/summary/summaryGenerator.js.map +1 -1
  198. package/dist/summary/summaryManager.d.ts +1 -1
  199. package/dist/summary/summaryManager.d.ts.map +1 -1
  200. package/dist/summary/summaryManager.js +15 -14
  201. package/dist/summary/summaryManager.js.map +1 -1
  202. package/internal.d.ts +11 -0
  203. package/legacy.d.ts +11 -0
  204. package/lib/batchTracker.d.ts +1 -1
  205. package/lib/batchTracker.d.ts.map +1 -1
  206. package/lib/batchTracker.js +2 -2
  207. package/lib/batchTracker.js.map +1 -1
  208. package/lib/blobManager.d.ts +33 -30
  209. package/lib/blobManager.d.ts.map +1 -1
  210. package/lib/blobManager.js +48 -73
  211. package/lib/blobManager.js.map +1 -1
  212. package/lib/channelCollection.d.ts +27 -22
  213. package/lib/channelCollection.d.ts.map +1 -1
  214. package/lib/channelCollection.js +96 -106
  215. package/lib/channelCollection.js.map +1 -1
  216. package/lib/connectionTelemetry.d.ts +3 -3
  217. package/lib/connectionTelemetry.d.ts.map +1 -1
  218. package/lib/connectionTelemetry.js +3 -3
  219. package/lib/connectionTelemetry.js.map +1 -1
  220. package/lib/containerHandleContext.d.ts.map +1 -1
  221. package/lib/containerHandleContext.js +1 -1
  222. package/lib/containerHandleContext.js.map +1 -1
  223. package/lib/containerRuntime.d.ts +42 -39
  224. package/lib/containerRuntime.d.ts.map +1 -1
  225. package/lib/containerRuntime.js +276 -141
  226. package/lib/containerRuntime.js.map +1 -1
  227. package/lib/dataStore.d.ts +1 -1
  228. package/lib/dataStore.d.ts.map +1 -1
  229. package/lib/dataStore.js +3 -3
  230. package/lib/dataStore.js.map +1 -1
  231. package/lib/dataStoreContext.d.ts +58 -19
  232. package/lib/dataStoreContext.d.ts.map +1 -1
  233. package/lib/dataStoreContext.js +107 -52
  234. package/lib/dataStoreContext.js.map +1 -1
  235. package/lib/dataStoreContexts.d.ts +1 -0
  236. package/lib/dataStoreContexts.d.ts.map +1 -1
  237. package/lib/dataStoreContexts.js +3 -2
  238. package/lib/dataStoreContexts.js.map +1 -1
  239. package/lib/dataStoreRegistry.d.ts +5 -1
  240. package/lib/dataStoreRegistry.d.ts.map +1 -1
  241. package/lib/dataStoreRegistry.js +1 -1
  242. package/lib/dataStoreRegistry.js.map +1 -1
  243. package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
  244. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
  245. package/lib/deltaManagerSummarizerProxy.js.map +1 -1
  246. package/lib/deltaScheduler.d.ts +1 -1
  247. package/lib/deltaScheduler.d.ts.map +1 -1
  248. package/lib/deltaScheduler.js +1 -1
  249. package/lib/deltaScheduler.js.map +1 -1
  250. package/lib/error.d.ts +1 -1
  251. package/lib/error.d.ts.map +1 -1
  252. package/lib/error.js +2 -2
  253. package/lib/error.js.map +1 -1
  254. package/lib/gc/garbageCollection.d.ts +3 -2
  255. package/lib/gc/garbageCollection.d.ts.map +1 -1
  256. package/lib/gc/garbageCollection.js +8 -8
  257. package/lib/gc/garbageCollection.js.map +1 -1
  258. package/lib/gc/gcConfigs.d.ts +2 -2
  259. package/lib/gc/gcConfigs.d.ts.map +1 -1
  260. package/lib/gc/gcConfigs.js +4 -5
  261. package/lib/gc/gcConfigs.js.map +1 -1
  262. package/lib/gc/gcDefinitions.d.ts +4 -5
  263. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  264. package/lib/gc/gcDefinitions.js.map +1 -1
  265. package/lib/gc/gcHelpers.d.ts +5 -1
  266. package/lib/gc/gcHelpers.d.ts.map +1 -1
  267. package/lib/gc/gcHelpers.js +10 -2
  268. package/lib/gc/gcHelpers.js.map +1 -1
  269. package/lib/gc/gcSummaryStateTracker.d.ts +2 -2
  270. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  271. package/lib/gc/gcSummaryStateTracker.js +2 -2
  272. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  273. package/lib/gc/gcTelemetry.d.ts +2 -1
  274. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  275. package/lib/gc/gcTelemetry.js +4 -2
  276. package/lib/gc/gcTelemetry.js.map +1 -1
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  278. package/lib/gc/gcUnreferencedStateTracker.js +2 -2
  279. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  280. package/lib/gc/index.d.ts +1 -1
  281. package/lib/gc/index.d.ts.map +1 -1
  282. package/lib/gc/index.js +1 -1
  283. package/lib/gc/index.js.map +1 -1
  284. package/lib/index.d.ts +5 -2
  285. package/lib/index.d.ts.map +1 -1
  286. package/lib/index.js +5 -2
  287. package/lib/index.js.map +1 -1
  288. package/lib/legacy.d.ts +91 -0
  289. package/lib/messageTypes.d.ts +11 -5
  290. package/lib/messageTypes.d.ts.map +1 -1
  291. package/lib/messageTypes.js +4 -0
  292. package/lib/messageTypes.js.map +1 -1
  293. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  294. package/lib/opLifecycle/batchManager.js.map +1 -1
  295. package/lib/opLifecycle/definitions.d.ts +2 -20
  296. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  297. package/lib/opLifecycle/definitions.js.map +1 -1
  298. package/lib/opLifecycle/index.d.ts +3 -3
  299. package/lib/opLifecycle/index.d.ts.map +1 -1
  300. package/lib/opLifecycle/index.js +2 -2
  301. package/lib/opLifecycle/index.js.map +1 -1
  302. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  303. package/lib/opLifecycle/opCompressor.js +2 -3
  304. package/lib/opLifecycle/opCompressor.js.map +1 -1
  305. package/lib/opLifecycle/opDecompressor.d.ts +15 -4
  306. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  307. package/lib/opLifecycle/opDecompressor.js +61 -62
  308. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  309. package/lib/opLifecycle/opGroupingManager.d.ts +2 -1
  310. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  311. package/lib/opLifecycle/opGroupingManager.js +9 -12
  312. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  313. package/lib/opLifecycle/opSplitter.d.ts +12 -4
  314. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  315. package/lib/opLifecycle/opSplitter.js +47 -38
  316. package/lib/opLifecycle/opSplitter.js.map +1 -1
  317. package/lib/opLifecycle/outbox.d.ts +2 -1
  318. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  319. package/lib/opLifecycle/outbox.js +19 -18
  320. package/lib/opLifecycle/outbox.js.map +1 -1
  321. package/lib/opLifecycle/remoteMessageProcessor.d.ts +8 -0
  322. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  323. package/lib/opLifecycle/remoteMessageProcessor.js +36 -32
  324. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  325. package/lib/packageVersion.d.ts +1 -1
  326. package/lib/packageVersion.js +1 -1
  327. package/lib/packageVersion.js.map +1 -1
  328. package/lib/pendingStateManager.d.ts +1 -1
  329. package/lib/pendingStateManager.d.ts.map +1 -1
  330. package/lib/pendingStateManager.js +2 -2
  331. package/lib/pendingStateManager.js.map +1 -1
  332. package/lib/public.d.ts +12 -0
  333. package/lib/scheduleManager.d.ts +1 -1
  334. package/lib/scheduleManager.d.ts.map +1 -1
  335. package/lib/scheduleManager.js +7 -3
  336. package/lib/scheduleManager.js.map +1 -1
  337. package/lib/storageServiceWithAttachBlobs.d.ts +2 -2
  338. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -1
  339. package/lib/storageServiceWithAttachBlobs.js +1 -1
  340. package/lib/storageServiceWithAttachBlobs.js.map +1 -1
  341. package/lib/summary/documentSchema.d.ts +209 -0
  342. package/lib/summary/documentSchema.d.ts.map +1 -0
  343. package/lib/summary/documentSchema.js +386 -0
  344. package/lib/summary/documentSchema.js.map +1 -0
  345. package/lib/summary/index.d.ts +2 -1
  346. package/lib/summary/index.d.ts.map +1 -1
  347. package/lib/summary/index.js +1 -0
  348. package/lib/summary/index.js.map +1 -1
  349. package/lib/summary/orderedClientElection.d.ts +2 -2
  350. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  351. package/lib/summary/orderedClientElection.js +7 -2
  352. package/lib/summary/orderedClientElection.js.map +1 -1
  353. package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -1
  354. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  355. package/lib/summary/runWhileConnectedCoordinator.js +1 -1
  356. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  357. package/lib/summary/runningSummarizer.d.ts +3 -3
  358. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  359. package/lib/summary/runningSummarizer.js +3 -3
  360. package/lib/summary/runningSummarizer.js.map +1 -1
  361. package/lib/summary/summarizer.d.ts +3 -2
  362. package/lib/summary/summarizer.d.ts.map +1 -1
  363. package/lib/summary/summarizer.js +3 -3
  364. package/lib/summary/summarizer.js.map +1 -1
  365. package/lib/summary/summarizerClientElection.d.ts +2 -2
  366. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  367. package/lib/summary/summarizerClientElection.js.map +1 -1
  368. package/lib/summary/summarizerHeuristics.d.ts +1 -1
  369. package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
  370. package/lib/summary/summarizerHeuristics.js +1 -1
  371. package/lib/summary/summarizerHeuristics.js.map +1 -1
  372. package/lib/summary/summarizerNode/summarizerNode.d.ts +3 -2
  373. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  374. package/lib/summary/summarizerNode/summarizerNode.js +5 -5
  375. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  376. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
  377. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  378. package/lib/summary/summarizerNode/summarizerNodeUtils.js +1 -1
  379. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  380. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
  381. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  382. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -3
  383. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  384. package/lib/summary/summarizerTypes.d.ts +5 -3
  385. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  386. package/lib/summary/summarizerTypes.js.map +1 -1
  387. package/lib/summary/summaryCollection.d.ts +2 -2
  388. package/lib/summary/summaryCollection.d.ts.map +1 -1
  389. package/lib/summary/summaryCollection.js +1 -1
  390. package/lib/summary/summaryCollection.js.map +1 -1
  391. package/lib/summary/summaryFormat.d.ts +6 -17
  392. package/lib/summary/summaryFormat.d.ts.map +1 -1
  393. package/lib/summary/summaryFormat.js +3 -3
  394. package/lib/summary/summaryFormat.js.map +1 -1
  395. package/lib/summary/summaryGenerator.d.ts +4 -3
  396. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  397. package/lib/summary/summaryGenerator.js +4 -4
  398. package/lib/summary/summaryGenerator.js.map +1 -1
  399. package/lib/summary/summaryManager.d.ts +1 -1
  400. package/lib/summary/summaryManager.d.ts.map +1 -1
  401. package/lib/summary/summaryManager.js +9 -8
  402. package/lib/summary/summaryManager.js.map +1 -1
  403. package/package.json +57 -65
  404. package/src/batchTracker.ts +4 -3
  405. package/src/blobManager.ts +100 -77
  406. package/src/channelCollection.ts +180 -165
  407. package/src/connectionTelemetry.ts +12 -12
  408. package/src/containerHandleContext.ts +3 -2
  409. package/src/containerRuntime.ts +481 -277
  410. package/src/dataStore.ts +9 -4
  411. package/src/dataStoreContext.ts +195 -93
  412. package/src/dataStoreContexts.ts +5 -2
  413. package/src/dataStoreRegistry.ts +3 -2
  414. package/src/deltaManagerSummarizerProxy.ts +1 -1
  415. package/src/deltaScheduler.ts +2 -1
  416. package/src/error.ts +2 -2
  417. package/src/gc/garbageCollection.ts +21 -20
  418. package/src/gc/gcConfigs.ts +15 -18
  419. package/src/gc/gcDefinitions.ts +6 -8
  420. package/src/gc/gcHelpers.ts +22 -5
  421. package/src/gc/gcSummaryStateTracker.ts +7 -5
  422. package/src/gc/gcTelemetry.ts +13 -7
  423. package/src/gc/gcUnreferencedStateTracker.ts +3 -2
  424. package/src/gc/index.ts +1 -0
  425. package/src/index.ts +22 -1
  426. package/src/messageTypes.ts +20 -6
  427. package/src/opLifecycle/README.md +89 -0
  428. package/src/opLifecycle/batchManager.ts +1 -0
  429. package/src/opLifecycle/definitions.ts +3 -21
  430. package/src/opLifecycle/index.ts +3 -9
  431. package/src/opLifecycle/opCompressor.ts +6 -5
  432. package/src/opLifecycle/opDecompressor.ts +90 -100
  433. package/src/opLifecycle/opGroupingManager.ts +12 -14
  434. package/src/opLifecycle/opSplitter.ts +76 -48
  435. package/src/opLifecycle/outbox.ts +30 -38
  436. package/src/opLifecycle/remoteMessageProcessor.ts +43 -55
  437. package/src/packageVersion.ts +1 -1
  438. package/src/pendingStateManager.ts +6 -6
  439. package/src/scheduleManager.ts +10 -8
  440. package/src/storageServiceWithAttachBlobs.ts +2 -2
  441. package/src/summary/documentSchema.ts +631 -0
  442. package/src/summary/index.ts +10 -1
  443. package/src/summary/orderedClientElection.ts +7 -7
  444. package/src/summary/runWhileConnectedCoordinator.ts +3 -2
  445. package/src/summary/runningSummarizer.ts +22 -20
  446. package/src/summary/summarizer.ts +17 -15
  447. package/src/summary/summarizerClientElection.ts +3 -2
  448. package/src/summary/summarizerHeuristics.ts +4 -2
  449. package/src/summary/summarizerNode/summarizerNode.ts +20 -18
  450. package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -2
  451. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +16 -8
  452. package/src/summary/summarizerTypes.ts +7 -3
  453. package/src/summary/summaryCollection.ts +3 -3
  454. package/src/summary/summaryFormat.ts +14 -26
  455. package/src/summary/summaryGenerator.ts +12 -15
  456. package/src/summary/summaryManager.ts +16 -13
  457. package/api-extractor-cjs.json +0 -8
  458. package/dist/container-runtime-alpha.d.ts +0 -1753
  459. package/dist/container-runtime-beta.d.ts +0 -268
  460. package/dist/container-runtime-public.d.ts +0 -268
  461. package/dist/container-runtime-untrimmed.d.ts +0 -1893
  462. package/lib/container-runtime-alpha.d.ts +0 -1753
  463. package/lib/container-runtime-beta.d.ts +0 -268
  464. package/lib/container-runtime-public.d.ts +0 -268
  465. package/lib/container-runtime-untrimmed.d.ts +0 -1893
  466. package/lib/test/batchTracker.spec.js +0 -88
  467. package/lib/test/batchTracker.spec.js.map +0 -1
  468. package/lib/test/blobManager.spec.js +0 -835
  469. package/lib/test/blobManager.spec.js.map +0 -1
  470. package/lib/test/channelCollection.spec.js +0 -141
  471. package/lib/test/channelCollection.spec.js.map +0 -1
  472. package/lib/test/containerRuntime.spec.js +0 -1748
  473. package/lib/test/containerRuntime.spec.js.map +0 -1
  474. package/lib/test/dataStoreContext.spec.js +0 -801
  475. package/lib/test/dataStoreContext.spec.js.map +0 -1
  476. package/lib/test/dataStoreCreation.spec.js +0 -312
  477. package/lib/test/dataStoreCreation.spec.js.map +0 -1
  478. package/lib/test/dataStoreRegistry.spec.js +0 -26
  479. package/lib/test/dataStoreRegistry.spec.js.map +0 -1
  480. package/lib/test/fuzz/fuzzUtils.js +0 -66
  481. package/lib/test/fuzz/fuzzUtils.js.map +0 -1
  482. package/lib/test/fuzz/summarizer.fuzz.spec.js +0 -31
  483. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +0 -1
  484. package/lib/test/fuzz/summarizerFuzzMocks.js +0 -162
  485. package/lib/test/fuzz/summarizerFuzzMocks.js.map +0 -1
  486. package/lib/test/fuzz/summarizerFuzzSuite.js +0 -106
  487. package/lib/test/fuzz/summarizerFuzzSuite.js.map +0 -1
  488. package/lib/test/gc/garbageCollection.spec.js +0 -1465
  489. package/lib/test/gc/garbageCollection.spec.js.map +0 -1
  490. package/lib/test/gc/gcConfigs.spec.js +0 -690
  491. package/lib/test/gc/gcConfigs.spec.js.map +0 -1
  492. package/lib/test/gc/gcHelpers.spec.js +0 -110
  493. package/lib/test/gc/gcHelpers.spec.js.map +0 -1
  494. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +0 -68
  495. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +0 -1
  496. package/lib/test/gc/gcStats.spec.js +0 -391
  497. package/lib/test/gc/gcStats.spec.js.map +0 -1
  498. package/lib/test/gc/gcSummaryStateTracker.spec.js +0 -228
  499. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +0 -1
  500. package/lib/test/gc/gcTelemetry.spec.js +0 -530
  501. package/lib/test/gc/gcTelemetry.spec.js.map +0 -1
  502. package/lib/test/gc/gcUnitTestHelpers.js +0 -29
  503. package/lib/test/gc/gcUnitTestHelpers.js.map +0 -1
  504. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +0 -192
  505. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +0 -1
  506. package/lib/test/getPendingBlobs.spec.js +0 -193
  507. package/lib/test/getPendingBlobs.spec.js.map +0 -1
  508. package/lib/test/hardwareStats.spec.js +0 -93
  509. package/lib/test/hardwareStats.spec.js.map +0 -1
  510. package/lib/test/index.js +0 -6
  511. package/lib/test/index.js.map +0 -1
  512. package/lib/test/opLifecycle/OpGroupingManager.spec.js +0 -225
  513. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +0 -1
  514. package/lib/test/opLifecycle/batchManager.spec.js +0 -189
  515. package/lib/test/opLifecycle/batchManager.spec.js.map +0 -1
  516. package/lib/test/opLifecycle/opCompressor.spec.js +0 -74
  517. package/lib/test/opLifecycle/opCompressor.spec.js.map +0 -1
  518. package/lib/test/opLifecycle/opDecompressor.spec.js +0 -218
  519. package/lib/test/opLifecycle/opDecompressor.spec.js.map +0 -1
  520. package/lib/test/opLifecycle/opSplitter.spec.js +0 -272
  521. package/lib/test/opLifecycle/opSplitter.spec.js.map +0 -1
  522. package/lib/test/opLifecycle/outbox.spec.js +0 -675
  523. package/lib/test/opLifecycle/outbox.spec.js.map +0 -1
  524. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +0 -196
  525. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +0 -1
  526. package/lib/test/pendingStateManager.spec.js +0 -329
  527. package/lib/test/pendingStateManager.spec.js.map +0 -1
  528. package/lib/test/scheduleManager.spec.js +0 -270
  529. package/lib/test/scheduleManager.spec.js.map +0 -1
  530. package/lib/test/summarizerNode.spec.js +0 -326
  531. package/lib/test/summarizerNode.spec.js.map +0 -1
  532. package/lib/test/summarizerNodeWithGc.spec.js +0 -318
  533. package/lib/test/summarizerNodeWithGc.spec.js.map +0 -1
  534. package/lib/test/summary/orderedClientElection.spec.js +0 -535
  535. package/lib/test/summary/orderedClientElection.spec.js.map +0 -1
  536. package/lib/test/summary/runningSummarizer.spec.js +0 -1349
  537. package/lib/test/summary/runningSummarizer.spec.js.map +0 -1
  538. package/lib/test/summary/summarizer.spec.js +0 -29
  539. package/lib/test/summary/summarizer.spec.js.map +0 -1
  540. package/lib/test/summary/summarizerClientElection.spec.js +0 -436
  541. package/lib/test/summary/summarizerClientElection.spec.js.map +0 -1
  542. package/lib/test/summary/summarizerHeuristics.spec.js +0 -289
  543. package/lib/test/summary/summarizerHeuristics.spec.js.map +0 -1
  544. package/lib/test/summary/summaryCollection.spec.js +0 -200
  545. package/lib/test/summary/summaryCollection.spec.js.map +0 -1
  546. package/lib/test/summary/summaryManager.spec.js +0 -430
  547. package/lib/test/summary/summaryManager.spec.js.map +0 -1
  548. package/lib/test/summary/testQuorumClients.js +0 -34
  549. package/lib/test/summary/testQuorumClients.js.map +0 -1
  550. package/lib/test/throttler.spec.js +0 -175
  551. package/lib/test/throttler.spec.js.map +0 -1
  552. package/lib/test/types/validateContainerRuntimePrevious.generated.js +0 -180
  553. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +0 -1
  554. /package/{dist → lib}/tsdoc-metadata.json +0 -0
@@ -1,228 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { strict as assert } from "assert";
6
- import { SummaryType } from "@fluidframework/protocol-definitions";
7
- import { gcDeletedBlobKey, gcTombstoneBlobKey } from "@fluidframework/runtime-definitions";
8
- import { nextGCVersion, gcStateBlobKey, GCSummaryStateTracker, } from "../../gc/index.js";
9
- describe("GCSummaryStateTracker tests", () => {
10
- describe("Summary state reset", () => {
11
- // In these tests, Persisted = gcVersionInBaseSnapshot. Current = gcVersionInEffect.
12
- it("Persisted < Current: Do Need Reset", async () => {
13
- const tracker = new GCSummaryStateTracker({
14
- shouldRunGC: true,
15
- tombstoneMode: false,
16
- gcVersionInBaseSnapshot: 0,
17
- gcVersionInEffect: 1,
18
- }, true /* wasGCRunInBaseSnapshot */);
19
- assert.equal(tracker.doesGCStateNeedReset, false, "Precondition 1");
20
- assert.equal(tracker.doesSummaryStateNeedReset, true, "Should need reset: Persisted GC Version was old");
21
- // After the first summary succeeds (refreshLatestSummary called), the state should not need reset.
22
- await tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });
23
- assert.equal(tracker.doesSummaryStateNeedReset, false, "Shouldn't need reset after first summary");
24
- });
25
- it("Persisted === Current: Don't Need Reset", () => {
26
- const tracker = new GCSummaryStateTracker({
27
- shouldRunGC: true,
28
- tombstoneMode: false,
29
- gcVersionInBaseSnapshot: 1,
30
- gcVersionInEffect: 1,
31
- }, true /* wasGCRunInBaseSnapshot */);
32
- assert.equal(tracker.doesGCStateNeedReset, false, "Precondition 1");
33
- assert.equal(tracker.doesSummaryStateNeedReset, false, "Shouldn't need reset: GC Versions match");
34
- });
35
- it("Persisted > Current: Do Need Reset", async () => {
36
- const tracker = new GCSummaryStateTracker({
37
- shouldRunGC: true,
38
- tombstoneMode: false,
39
- gcVersionInBaseSnapshot: 2,
40
- gcVersionInEffect: 1,
41
- }, true /* wasGCRunInBaseSnapshot */);
42
- assert.equal(tracker.doesGCStateNeedReset, false, "Precondition 1");
43
- // This covers the case where we rolled back an upgrade. Containers that successfully "upgraded" (reset)
44
- // shouldn't need to do it again.
45
- assert.equal(tracker.doesSummaryStateNeedReset, true, "Should need reset: Persisted GC Version is not old");
46
- // After the first summary succeeds (refreshLatestSummary called), the state should not need reset.
47
- await tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });
48
- assert.equal(tracker.doesSummaryStateNeedReset, false, "Shouldn't need reset after first summary");
49
- });
50
- });
51
- describe("GC state reset", () => {
52
- it("wasGCRunInBaseSnapshot = false, shouldRunGC = false: Don't Need Reset", () => {
53
- const tracker = new GCSummaryStateTracker({
54
- shouldRunGC: false,
55
- tombstoneMode: false,
56
- gcVersionInBaseSnapshot: 1,
57
- gcVersionInEffect: 1,
58
- }, false /* wasGCRunInBaseSnapshot */);
59
- assert.equal(tracker.doesGCStateNeedReset, false, "Shouldn't need reset");
60
- });
61
- it("wasGCRunInBaseSnapshot = true, shouldRunGC = false: Do Need Reset", async () => {
62
- const tracker = new GCSummaryStateTracker({
63
- shouldRunGC: false,
64
- tombstoneMode: false,
65
- gcVersionInBaseSnapshot: 1,
66
- gcVersionInEffect: 1,
67
- }, true /* wasGCRunInBaseSnapshot */);
68
- assert.equal(tracker.doesGCStateNeedReset, true, "Should need reset");
69
- // After the first summary succeeds (refreshLatestSummary called), the state should not need reset.
70
- await tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });
71
- assert.equal(tracker.doesGCStateNeedReset, false, "Shouldn't need reset after first summary");
72
- });
73
- it("wasGCRunInBaseSnapshot = false, shouldRunGC = true: Do Need Reset", async () => {
74
- const tracker = new GCSummaryStateTracker({
75
- shouldRunGC: true,
76
- tombstoneMode: false,
77
- gcVersionInBaseSnapshot: 1,
78
- gcVersionInEffect: 1,
79
- }, false /* wasGCRunInBaseSnapshot */);
80
- assert.equal(tracker.doesGCStateNeedReset, true, "Should need reset");
81
- // After the first summary succeeds (refreshLatestSummary called), the state should not need reset.
82
- await tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });
83
- assert.equal(tracker.doesGCStateNeedReset, false, "Shouldn't need reset after first summary");
84
- });
85
- it("wasGCRunInBaseSnapshot = true, shouldRunGC = true: Don't Need Reset", () => {
86
- const tracker = new GCSummaryStateTracker({
87
- shouldRunGC: true,
88
- tombstoneMode: false,
89
- gcVersionInBaseSnapshot: 1,
90
- gcVersionInEffect: 1,
91
- }, true /* wasGCRunInBaseSnapshot */);
92
- assert.equal(tracker.doesGCStateNeedReset, false, "Shouldn't need reset");
93
- });
94
- });
95
- it("Autorecovery: requesting Full GC", async () => {
96
- const tracker = new GCSummaryStateTracker({
97
- shouldRunGC: true,
98
- tombstoneMode: false,
99
- gcVersionInBaseSnapshot: 1,
100
- gcVersionInEffect: 1,
101
- }, false /* wasGCRunInBaseSnapshot */);
102
- assert.equal(tracker.autoRecovery.fullGCRequested(), false, "Should be false by default");
103
- tracker.autoRecovery.requestFullGCOnNextRun();
104
- assert.equal(tracker.autoRecovery.fullGCRequested(), true, "Should be true after requesting full GC");
105
- // After the first summary succeeds (refreshLatestSummary called), the state should be reset.
106
- await tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });
107
- assert.equal(tracker.autoRecovery.fullGCRequested(), false, "Should be false after Summary Ack");
108
- });
109
- /**
110
- * These tests validate that the GC data is written in summary incrementally. Basically, only parts of the GC
111
- * data that has changed since the last successful summary is re-written, rest is written as SummaryHandle.
112
- */
113
- describe("Incremental summary of GC data", () => {
114
- const nodes = ["node1", "node2", "node3"];
115
- const initialGCState = {
116
- gcNodes: {
117
- "/": { outboundRoutes: [] },
118
- [nodes[0]]: { outboundRoutes: [] },
119
- [nodes[1]]: { outboundRoutes: [] },
120
- },
121
- };
122
- const initialTombstones = [nodes[0], nodes[1]];
123
- const initialDeletedNodes = new Set([nodes[1]]);
124
- let summaryStateTracker;
125
- beforeEach(async () => {
126
- // Creates a summary state tracker and initialize it.
127
- summaryStateTracker = new GCSummaryStateTracker({
128
- shouldRunGC: true,
129
- tombstoneMode: true,
130
- gcVersionInBaseSnapshot: nextGCVersion,
131
- gcVersionInEffect: nextGCVersion,
132
- }, false /* wasGCRunInBaseSnapshot */);
133
- summaryStateTracker.initializeBaseState({
134
- gcState: initialGCState,
135
- tombstones: initialTombstones,
136
- deletedNodes: Array.from(initialDeletedNodes),
137
- });
138
- });
139
- it("does incremental summary when nothing changes", async () => {
140
- // Summarize with the same GC state, tombstone state and deleted nodes as in the initial state.
141
- // The GC data should be summarized as a summary handle.
142
- const summary = summaryStateTracker.summarize(true /* trackState */, initialGCState, initialDeletedNodes, initialTombstones);
143
- assert(summary?.summary.type === SummaryType.Handle, "GC summary should be a handle");
144
- });
145
- it("does incremental summary when only GC state changes", async () => {
146
- // Summarize with the same tombstone state and deleted nodes but different GC state as in the initial.
147
- // state. The GC state should be summarized as a summary handle.
148
- const newGCState = {
149
- gcNodes: {
150
- ...initialGCState.gcNodes,
151
- [nodes[2]]: { outboundRoutes: [] },
152
- },
153
- };
154
- const summary = summaryStateTracker.summarize(true /* trackState */, newGCState, initialDeletedNodes, initialTombstones);
155
- assert(summary?.summary.type === SummaryType.Tree, "GC summary should be a tree");
156
- assert(summary.summary.tree[gcStateBlobKey].type === SummaryType.Blob, "GC state should be written as a blob");
157
- assert(summary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Handle, "Tombstone state should be written as handle");
158
- assert(summary.summary.tree[gcDeletedBlobKey].type === SummaryType.Handle, "Deleted nodes should be written as handle");
159
- });
160
- it("does incremental summary when only tombstone state changes", async () => {
161
- // Summarize with the same GC state and deleted nodes but different tombstone state as in the initial.
162
- // state. The tombstone state should be summarized as a summary handle.
163
- const newTombstones = Array.from([...initialTombstones, nodes[2]]);
164
- const summary = summaryStateTracker.summarize(true /* trackState */, initialGCState, initialDeletedNodes, newTombstones);
165
- assert(summary?.summary.type === SummaryType.Tree, "GC summary should be a tree");
166
- assert(summary.summary.tree[gcStateBlobKey].type === SummaryType.Handle, "GC state should be written as handle");
167
- assert(summary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Blob, "Tombstone state should be written as a blob");
168
- assert(summary.summary.tree[gcDeletedBlobKey].type === SummaryType.Handle, "Deleted nodes should be written as handle");
169
- });
170
- it("does incremental summary when only deleted nodes change", async () => {
171
- // Summarize with the same GC state and tombstone state but different deleted nodes as in the initial.
172
- // state. The deleted nodes should be summarized as a summary handle.
173
- const newDeletedNodes = new Set(...initialDeletedNodes, nodes[2]);
174
- const summary = summaryStateTracker.summarize(true /* trackState */, initialGCState, newDeletedNodes, initialTombstones);
175
- assert(summary?.summary.type === SummaryType.Tree, "GC summary should be a tree");
176
- assert(summary.summary.tree[gcStateBlobKey].type === SummaryType.Handle, "GC state should be written as handle");
177
- assert(summary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Handle, "Tombstone state should be written as handle");
178
- assert(summary.summary.tree[gcDeletedBlobKey].type === SummaryType.Blob, "Deleted nodes should be written as a blob");
179
- });
180
- });
181
- it("updates state updated data store count correctly", async () => {
182
- const updatedDataStoreCount = 10;
183
- const gcStats = {
184
- nodeCount: 0,
185
- unrefNodeCount: 0,
186
- updatedNodeCount: 0,
187
- dataStoreCount: 0,
188
- unrefDataStoreCount: 0,
189
- updatedDataStoreCount,
190
- attachmentBlobCount: 0,
191
- unrefAttachmentBlobCount: 0,
192
- updatedAttachmentBlobCount: 0,
193
- lifetimeNodeCount: 0,
194
- lifetimeDataStoreCount: 0,
195
- lifetimeAttachmentBlobCount: 0,
196
- deletedNodeCount: 0,
197
- deletedDataStoreCount: 0,
198
- deletedAttachmentBlobCount: 0,
199
- };
200
- const summaryStateTracker = new GCSummaryStateTracker({
201
- shouldRunGC: true,
202
- tombstoneMode: true,
203
- gcVersionInBaseSnapshot: nextGCVersion,
204
- gcVersionInEffect: nextGCVersion,
205
- }, false /* wasGCRunInBaseSnapshot */);
206
- let expectedUpdatedDataStoreCount = updatedDataStoreCount;
207
- // Update the state from GC stats and validate it's the same as updatedDataStoreCount.
208
- summaryStateTracker.updateStateFromGCRunStats(gcStats);
209
- assert.strictEqual(summaryStateTracker.updatedDSCountSinceLastSummary, expectedUpdatedDataStoreCount, "Updated DS count is not correct");
210
- // Call summarize but do not refresh latest summary. This mimics scenarios where summary generation fails
211
- // sometime after summarize. This means updatedDSCountSinceLastSummary should be updated incrementally
212
- // without resetting it.
213
- summaryStateTracker.summarize(true /* trackState */, { gcNodes: {} }, new Set(), []);
214
- // Update the stat from GC state again mimicking a GC run after a failed summary.
215
- expectedUpdatedDataStoreCount += updatedDataStoreCount;
216
- summaryStateTracker.updateStateFromGCRunStats(gcStats);
217
- assert.strictEqual(summaryStateTracker.updatedDSCountSinceLastSummary, expectedUpdatedDataStoreCount, "Updated DS count should have been incrementally updated");
218
- // Call summarize and refresh latest summary. This mimics a successful summary after a failed one. After
219
- // this, updatedDSCountSinceLastSummary should be reset to 0.
220
- summaryStateTracker.summarize(true /* trackState */, { gcNodes: {} }, new Set(), []);
221
- await summaryStateTracker.refreshLatestSummary({
222
- isSummaryTracked: true,
223
- isSummaryNewer: true,
224
- });
225
- assert.strictEqual(summaryStateTracker.updatedDSCountSinceLastSummary, 0, "Updated DS count should be reset after refresh latest summary");
226
- });
227
- });
228
- //# sourceMappingURL=gcSummaryStateTracker.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gcSummaryStateTracker.spec.js","sourceRoot":"","sources":["../../../src/test/gc/gcSummaryStateTracker.spec.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 { strict as assert } from \"assert\";\nimport { SummaryType } from \"@fluidframework/protocol-definitions\";\nimport { gcDeletedBlobKey, gcTombstoneBlobKey } from \"@fluidframework/runtime-definitions\";\nimport {\n\tnextGCVersion,\n\tgcStateBlobKey,\n\tGCSummaryStateTracker,\n\tGCVersion,\n\tIGarbageCollectionState,\n\tIGCStats,\n} from \"../../gc/index.js\";\n\ntype GCSummaryStateTrackerWithPrivates = Omit<GCSummaryStateTracker, \"latestSummaryGCVersion\"> & {\n\tlatestSummaryGCVersion: GCVersion;\n};\n\ndescribe(\"GCSummaryStateTracker tests\", () => {\n\tdescribe(\"Summary state reset\", () => {\n\t\t// In these tests, Persisted = gcVersionInBaseSnapshot. Current = gcVersionInEffect.\n\t\tit(\"Persisted < Current: Do Need Reset\", async () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 0,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\ttrue /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, false, \"Precondition 1\");\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesSummaryStateNeedReset,\n\t\t\t\ttrue,\n\t\t\t\t\"Should need reset: Persisted GC Version was old\",\n\t\t\t);\n\n\t\t\t// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.\n\t\t\tawait tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });\n\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesSummaryStateNeedReset,\n\t\t\t\tfalse,\n\t\t\t\t\"Shouldn't need reset after first summary\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"Persisted === Current: Don't Need Reset\", () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\ttrue /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, false, \"Precondition 1\");\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesSummaryStateNeedReset,\n\t\t\t\tfalse,\n\t\t\t\t\"Shouldn't need reset: GC Versions match\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"Persisted > Current: Do Need Reset\", async () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 2,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\ttrue /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, false, \"Precondition 1\");\n\n\t\t\t// This covers the case where we rolled back an upgrade. Containers that successfully \"upgraded\" (reset)\n\t\t\t// shouldn't need to do it again.\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesSummaryStateNeedReset,\n\t\t\t\ttrue,\n\t\t\t\t\"Should need reset: Persisted GC Version is not old\",\n\t\t\t);\n\n\t\t\t// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.\n\t\t\tawait tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesSummaryStateNeedReset,\n\t\t\t\tfalse,\n\t\t\t\t\"Shouldn't need reset after first summary\",\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"GC state reset\", () => {\n\t\tit(\"wasGCRunInBaseSnapshot = false, shouldRunGC = false: Don't Need Reset\", () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: false,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\tfalse /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, false, \"Shouldn't need reset\");\n\t\t});\n\n\t\tit(\"wasGCRunInBaseSnapshot = true, shouldRunGC = false: Do Need Reset\", async () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: false,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\ttrue /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, true, \"Should need reset\");\n\n\t\t\t// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.\n\t\t\tawait tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesGCStateNeedReset,\n\t\t\t\tfalse,\n\t\t\t\t\"Shouldn't need reset after first summary\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"wasGCRunInBaseSnapshot = false, shouldRunGC = true: Do Need Reset\", async () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\tfalse /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, true, \"Should need reset\");\n\n\t\t\t// After the first summary succeeds (refreshLatestSummary called), the state should not need reset.\n\t\t\tawait tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });\n\n\t\t\tassert.equal(\n\t\t\t\ttracker.doesGCStateNeedReset,\n\t\t\t\tfalse,\n\t\t\t\t\"Shouldn't need reset after first summary\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"wasGCRunInBaseSnapshot = true, shouldRunGC = true: Don't Need Reset\", () => {\n\t\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: false,\n\t\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\t\tgcVersionInEffect: 1,\n\t\t\t\t},\n\t\t\t\ttrue /* wasGCRunInBaseSnapshot */,\n\t\t\t) as any;\n\t\t\tassert.equal(tracker.doesGCStateNeedReset, false, \"Shouldn't need reset\");\n\t\t});\n\t});\n\n\tit(\"Autorecovery: requesting Full GC\", async () => {\n\t\tconst tracker: GCSummaryStateTrackerWithPrivates = new GCSummaryStateTracker(\n\t\t\t{\n\t\t\t\tshouldRunGC: true,\n\t\t\t\ttombstoneMode: false,\n\t\t\t\tgcVersionInBaseSnapshot: 1,\n\t\t\t\tgcVersionInEffect: 1,\n\t\t\t},\n\t\t\tfalse /* wasGCRunInBaseSnapshot */,\n\t\t) as any;\n\t\tassert.equal(tracker.autoRecovery.fullGCRequested(), false, \"Should be false by default\");\n\n\t\ttracker.autoRecovery.requestFullGCOnNextRun();\n\n\t\tassert.equal(\n\t\t\ttracker.autoRecovery.fullGCRequested(),\n\t\t\ttrue,\n\t\t\t\"Should be true after requesting full GC\",\n\t\t);\n\n\t\t// After the first summary succeeds (refreshLatestSummary called), the state should be reset.\n\t\tawait tracker.refreshLatestSummary({ isSummaryTracked: true, isSummaryNewer: true });\n\n\t\tassert.equal(\n\t\t\ttracker.autoRecovery.fullGCRequested(),\n\t\t\tfalse,\n\t\t\t\"Should be false after Summary Ack\",\n\t\t);\n\t});\n\n\t/**\n\t * These tests validate that the GC data is written in summary incrementally. Basically, only parts of the GC\n\t * data that has changed since the last successful summary is re-written, rest is written as SummaryHandle.\n\t */\n\tdescribe(\"Incremental summary of GC data\", () => {\n\t\tconst nodes = [\"node1\", \"node2\", \"node3\"];\n\t\tconst initialGCState: IGarbageCollectionState = {\n\t\t\tgcNodes: {\n\t\t\t\t\"/\": { outboundRoutes: [] },\n\t\t\t\t[nodes[0]]: { outboundRoutes: [] },\n\t\t\t\t[nodes[1]]: { outboundRoutes: [] },\n\t\t\t},\n\t\t};\n\t\tconst initialTombstones: string[] = [nodes[0], nodes[1]];\n\t\tconst initialDeletedNodes: Set<string> = new Set([nodes[1]]);\n\t\tlet summaryStateTracker: GCSummaryStateTracker;\n\n\t\tbeforeEach(async () => {\n\t\t\t// Creates a summary state tracker and initialize it.\n\t\t\tsummaryStateTracker = new GCSummaryStateTracker(\n\t\t\t\t{\n\t\t\t\t\tshouldRunGC: true,\n\t\t\t\t\ttombstoneMode: true,\n\t\t\t\t\tgcVersionInBaseSnapshot: nextGCVersion,\n\t\t\t\t\tgcVersionInEffect: nextGCVersion,\n\t\t\t\t},\n\t\t\t\tfalse /* wasGCRunInBaseSnapshot */,\n\t\t\t);\n\n\t\t\tsummaryStateTracker.initializeBaseState({\n\t\t\t\tgcState: initialGCState,\n\t\t\t\ttombstones: initialTombstones,\n\t\t\t\tdeletedNodes: Array.from(initialDeletedNodes),\n\t\t\t});\n\t\t});\n\n\t\tit(\"does incremental summary when nothing changes\", async () => {\n\t\t\t// Summarize with the same GC state, tombstone state and deleted nodes as in the initial state.\n\t\t\t// The GC data should be summarized as a summary handle.\n\t\t\tconst summary = summaryStateTracker.summarize(\n\t\t\t\ttrue /* trackState */,\n\t\t\t\tinitialGCState,\n\t\t\t\tinitialDeletedNodes,\n\t\t\t\tinitialTombstones,\n\t\t\t);\n\t\t\tassert(summary?.summary.type === SummaryType.Handle, \"GC summary should be a handle\");\n\t\t});\n\n\t\tit(\"does incremental summary when only GC state changes\", async () => {\n\t\t\t// Summarize with the same tombstone state and deleted nodes but different GC state as in the initial.\n\t\t\t// state. The GC state should be summarized as a summary handle.\n\t\t\tconst newGCState: IGarbageCollectionState = {\n\t\t\t\tgcNodes: {\n\t\t\t\t\t...initialGCState.gcNodes,\n\t\t\t\t\t[nodes[2]]: { outboundRoutes: [] },\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst summary = summaryStateTracker.summarize(\n\t\t\t\ttrue /* trackState */,\n\t\t\t\tnewGCState,\n\t\t\t\tinitialDeletedNodes,\n\t\t\t\tinitialTombstones,\n\t\t\t);\n\t\t\tassert(summary?.summary.type === SummaryType.Tree, \"GC summary should be a tree\");\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcStateBlobKey].type === SummaryType.Blob,\n\t\t\t\t\"GC state should be written as a blob\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"Tombstone state should be written as handle\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcDeletedBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"Deleted nodes should be written as handle\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"does incremental summary when only tombstone state changes\", async () => {\n\t\t\t// Summarize with the same GC state and deleted nodes but different tombstone state as in the initial.\n\t\t\t// state. The tombstone state should be summarized as a summary handle.\n\t\t\tconst newTombstones: string[] = Array.from([...initialTombstones, nodes[2]]);\n\t\t\tconst summary = summaryStateTracker.summarize(\n\t\t\t\ttrue /* trackState */,\n\t\t\t\tinitialGCState,\n\t\t\t\tinitialDeletedNodes,\n\t\t\t\tnewTombstones,\n\t\t\t);\n\t\t\tassert(summary?.summary.type === SummaryType.Tree, \"GC summary should be a tree\");\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcStateBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"GC state should be written as handle\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Blob,\n\t\t\t\t\"Tombstone state should be written as a blob\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcDeletedBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"Deleted nodes should be written as handle\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"does incremental summary when only deleted nodes change\", async () => {\n\t\t\t// Summarize with the same GC state and tombstone state but different deleted nodes as in the initial.\n\t\t\t// state. The deleted nodes should be summarized as a summary handle.\n\t\t\tconst newDeletedNodes: Set<string> = new Set(...initialDeletedNodes, nodes[2]);\n\t\t\tconst summary = summaryStateTracker.summarize(\n\t\t\t\ttrue /* trackState */,\n\t\t\t\tinitialGCState,\n\t\t\t\tnewDeletedNodes,\n\t\t\t\tinitialTombstones,\n\t\t\t);\n\t\t\tassert(summary?.summary.type === SummaryType.Tree, \"GC summary should be a tree\");\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcStateBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"GC state should be written as handle\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcTombstoneBlobKey].type === SummaryType.Handle,\n\t\t\t\t\"Tombstone state should be written as handle\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tsummary.summary.tree[gcDeletedBlobKey].type === SummaryType.Blob,\n\t\t\t\t\"Deleted nodes should be written as a blob\",\n\t\t\t);\n\t\t});\n\t});\n\n\tit(\"updates state updated data store count correctly\", async () => {\n\t\tconst updatedDataStoreCount = 10;\n\t\tconst gcStats: IGCStats = {\n\t\t\tnodeCount: 0,\n\t\t\tunrefNodeCount: 0,\n\t\t\tupdatedNodeCount: 0,\n\t\t\tdataStoreCount: 0,\n\t\t\tunrefDataStoreCount: 0,\n\t\t\tupdatedDataStoreCount,\n\t\t\tattachmentBlobCount: 0,\n\t\t\tunrefAttachmentBlobCount: 0,\n\t\t\tupdatedAttachmentBlobCount: 0,\n\t\t\tlifetimeNodeCount: 0,\n\t\t\tlifetimeDataStoreCount: 0,\n\t\t\tlifetimeAttachmentBlobCount: 0,\n\t\t\tdeletedNodeCount: 0,\n\t\t\tdeletedDataStoreCount: 0,\n\t\t\tdeletedAttachmentBlobCount: 0,\n\t\t};\n\n\t\tconst summaryStateTracker = new GCSummaryStateTracker(\n\t\t\t{\n\t\t\t\tshouldRunGC: true,\n\t\t\t\ttombstoneMode: true,\n\t\t\t\tgcVersionInBaseSnapshot: nextGCVersion,\n\t\t\t\tgcVersionInEffect: nextGCVersion,\n\t\t\t},\n\t\t\tfalse /* wasGCRunInBaseSnapshot */,\n\t\t);\n\n\t\tlet expectedUpdatedDataStoreCount = updatedDataStoreCount;\n\t\t// Update the state from GC stats and validate it's the same as updatedDataStoreCount.\n\t\tsummaryStateTracker.updateStateFromGCRunStats(gcStats);\n\t\tassert.strictEqual(\n\t\t\tsummaryStateTracker.updatedDSCountSinceLastSummary,\n\t\t\texpectedUpdatedDataStoreCount,\n\t\t\t\"Updated DS count is not correct\",\n\t\t);\n\n\t\t// Call summarize but do not refresh latest summary. This mimics scenarios where summary generation fails\n\t\t// sometime after summarize. This means updatedDSCountSinceLastSummary should be updated incrementally\n\t\t// without resetting it.\n\t\tsummaryStateTracker.summarize(true /* trackState */, { gcNodes: {} }, new Set(), []);\n\n\t\t// Update the stat from GC state again mimicking a GC run after a failed summary.\n\t\texpectedUpdatedDataStoreCount += updatedDataStoreCount;\n\t\tsummaryStateTracker.updateStateFromGCRunStats(gcStats);\n\t\tassert.strictEqual(\n\t\t\tsummaryStateTracker.updatedDSCountSinceLastSummary,\n\t\t\texpectedUpdatedDataStoreCount,\n\t\t\t\"Updated DS count should have been incrementally updated\",\n\t\t);\n\n\t\t// Call summarize and refresh latest summary. This mimics a successful summary after a failed one. After\n\t\t// this, updatedDSCountSinceLastSummary should be reset to 0.\n\t\tsummaryStateTracker.summarize(true /* trackState */, { gcNodes: {} }, new Set(), []);\n\n\t\tawait summaryStateTracker.refreshLatestSummary({\n\t\t\tisSummaryTracked: true,\n\t\t\tisSummaryNewer: true,\n\t\t});\n\t\tassert.strictEqual(\n\t\t\tsummaryStateTracker.updatedDSCountSinceLastSummary,\n\t\t\t0,\n\t\t\t\"Updated DS count should be reset after refresh latest summary\",\n\t\t);\n\t});\n});\n"]}