@fluidframework/container-runtime 2.0.0-rc.1.0.3 → 2.0.0-rc.2.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 (690) hide show
  1. package/{.eslintrc.js → .eslintrc.cjs} +5 -5
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +54 -0
  4. package/README.md +45 -0
  5. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  6. package/api-extractor-lint.json +1 -1
  7. package/api-extractor.json +1 -1
  8. package/api-report/container-runtime.api.md +68 -30
  9. package/dist/batchTracker.d.ts +1 -2
  10. package/dist/batchTracker.d.ts.map +1 -1
  11. package/dist/batchTracker.js.map +1 -1
  12. package/dist/blobManager.js.map +1 -1
  13. package/dist/channelCollection.d.ts +223 -0
  14. package/dist/channelCollection.d.ts.map +1 -0
  15. package/dist/{dataStores.js → channelCollection.js} +399 -83
  16. package/dist/channelCollection.js.map +1 -0
  17. package/dist/connectionTelemetry.d.ts +11 -1
  18. package/dist/connectionTelemetry.d.ts.map +1 -1
  19. package/dist/connectionTelemetry.js +42 -4
  20. package/dist/connectionTelemetry.js.map +1 -1
  21. package/dist/container-runtime-alpha.d.ts +98 -40
  22. package/dist/container-runtime-beta.d.ts +27 -9
  23. package/dist/container-runtime-public.d.ts +27 -9
  24. package/dist/container-runtime-untrimmed.d.ts +123 -40
  25. package/dist/containerHandleContext.d.ts +1 -1
  26. package/dist/containerHandleContext.d.ts.map +1 -1
  27. package/dist/containerHandleContext.js.map +1 -1
  28. package/dist/containerRuntime.d.ts +79 -55
  29. package/dist/containerRuntime.d.ts.map +1 -1
  30. package/dist/containerRuntime.js +541 -411
  31. package/dist/containerRuntime.js.map +1 -1
  32. package/dist/dataStore.d.ts +2 -3
  33. package/dist/dataStore.d.ts.map +1 -1
  34. package/dist/dataStore.js +12 -11
  35. package/dist/dataStore.js.map +1 -1
  36. package/dist/dataStoreContext.d.ts +71 -30
  37. package/dist/dataStoreContext.d.ts.map +1 -1
  38. package/dist/dataStoreContext.js +182 -141
  39. package/dist/dataStoreContext.js.map +1 -1
  40. package/dist/dataStoreContexts.d.ts +1 -1
  41. package/dist/dataStoreContexts.d.ts.map +1 -1
  42. package/dist/dataStoreContexts.js.map +1 -1
  43. package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
  44. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  45. package/dist/deltaManagerSummarizerProxy.js +91 -5
  46. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  47. package/dist/gc/garbageCollection.d.ts +22 -5
  48. package/dist/gc/garbageCollection.d.ts.map +1 -1
  49. package/dist/gc/garbageCollection.js +134 -75
  50. package/dist/gc/garbageCollection.js.map +1 -1
  51. package/dist/gc/gcConfigs.d.ts +2 -2
  52. package/dist/gc/gcConfigs.d.ts.map +1 -1
  53. package/dist/gc/gcConfigs.js +21 -21
  54. package/dist/gc/gcConfigs.js.map +1 -1
  55. package/dist/gc/gcDefinitions.d.ts +29 -6
  56. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  57. package/dist/gc/gcDefinitions.js +5 -1
  58. package/dist/gc/gcDefinitions.js.map +1 -1
  59. package/dist/gc/gcHelpers.d.ts +2 -2
  60. package/dist/gc/gcHelpers.d.ts.map +1 -1
  61. package/dist/gc/gcHelpers.js.map +1 -1
  62. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
  63. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
  64. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  65. package/dist/gc/gcSummaryStateTracker.d.ts +12 -5
  66. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  67. package/dist/gc/gcSummaryStateTracker.js +18 -6
  68. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  69. package/dist/gc/gcTelemetry.d.ts +7 -7
  70. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  71. package/dist/gc/gcTelemetry.js +20 -20
  72. package/dist/gc/gcTelemetry.js.map +1 -1
  73. package/dist/gc/gcUnreferencedStateTracker.d.ts +6 -1
  74. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  75. package/dist/gc/gcUnreferencedStateTracker.js +22 -11
  76. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  77. package/dist/gc/index.d.ts +8 -8
  78. package/dist/gc/index.d.ts.map +1 -1
  79. package/dist/gc/index.js +40 -38
  80. package/dist/gc/index.js.map +1 -1
  81. package/dist/index.d.ts +8 -20
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +28 -40
  84. package/dist/index.js.map +1 -1
  85. package/dist/messageTypes.d.ts +4 -4
  86. package/dist/messageTypes.d.ts.map +1 -1
  87. package/dist/messageTypes.js.map +1 -1
  88. package/dist/opLifecycle/batchManager.d.ts +2 -2
  89. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  90. package/dist/opLifecycle/batchManager.js.map +1 -1
  91. package/dist/opLifecycle/definitions.d.ts +2 -2
  92. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  93. package/dist/opLifecycle/definitions.js.map +1 -1
  94. package/dist/opLifecycle/index.d.ts +8 -8
  95. package/dist/opLifecycle/index.d.ts.map +1 -1
  96. package/dist/opLifecycle/index.js +18 -18
  97. package/dist/opLifecycle/index.js.map +1 -1
  98. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  99. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  100. package/dist/opLifecycle/opCompressor.js +4 -4
  101. package/dist/opLifecycle/opCompressor.js.map +1 -1
  102. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  103. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  104. package/dist/opLifecycle/opDecompressor.js +3 -3
  105. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  106. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  107. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  108. package/dist/opLifecycle/opGroupingManager.js +1 -10
  109. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  110. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  111. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  112. package/dist/opLifecycle/opSplitter.js +5 -5
  113. package/dist/opLifecycle/opSplitter.js.map +1 -1
  114. package/dist/opLifecycle/outbox.d.ts +7 -7
  115. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  116. package/dist/opLifecycle/outbox.js +20 -12
  117. package/dist/opLifecycle/outbox.js.map +1 -1
  118. package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  119. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  120. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  121. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  122. package/dist/package.json +3 -0
  123. package/dist/packageVersion.d.ts +1 -1
  124. package/dist/packageVersion.js +1 -1
  125. package/dist/packageVersion.js.map +1 -1
  126. package/dist/pendingStateManager.d.ts +2 -1
  127. package/dist/pendingStateManager.d.ts.map +1 -1
  128. package/dist/pendingStateManager.js +18 -10
  129. package/dist/pendingStateManager.js.map +1 -1
  130. package/dist/scheduleManager.d.ts +1 -2
  131. package/dist/scheduleManager.d.ts.map +1 -1
  132. package/dist/scheduleManager.js +5 -5
  133. package/dist/scheduleManager.js.map +1 -1
  134. package/dist/summary/index.d.ts +12 -12
  135. package/dist/summary/index.d.ts.map +1 -1
  136. package/dist/summary/index.js +43 -43
  137. package/dist/summary/index.js.map +1 -1
  138. package/dist/summary/orderedClientElection.js +8 -8
  139. package/dist/summary/orderedClientElection.js.map +1 -1
  140. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  141. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  142. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  143. package/dist/summary/runningSummarizer.d.ts +11 -10
  144. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  145. package/dist/summary/runningSummarizer.js +114 -81
  146. package/dist/summary/runningSummarizer.js.map +1 -1
  147. package/dist/summary/summarizer.d.ts +4 -4
  148. package/dist/summary/summarizer.d.ts.map +1 -1
  149. package/dist/summary/summarizer.js +6 -6
  150. package/dist/summary/summarizer.js.map +1 -1
  151. package/dist/summary/summarizerClientElection.d.ts +2 -2
  152. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  153. package/dist/summary/summarizerClientElection.js.map +1 -1
  154. package/dist/summary/summarizerHeuristics.d.ts +3 -3
  155. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  156. package/dist/summary/summarizerHeuristics.js.map +1 -1
  157. package/dist/summary/summarizerNode/index.d.ts +3 -3
  158. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  159. package/dist/summary/summarizerNode/index.js +4 -4
  160. package/dist/summary/summarizerNode/index.js.map +1 -1
  161. package/dist/summary/summarizerNode/summarizerNode.d.ts +17 -7
  162. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  163. package/dist/summary/summarizerNode/summarizerNode.js +45 -57
  164. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  165. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +10 -19
  166. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  167. package/dist/summary/summarizerNode/summarizerNodeUtils.js +1 -21
  168. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  169. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +5 -6
  170. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +16 -16
  172. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  173. package/dist/summary/summarizerTypes.d.ts +10 -21
  174. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  175. package/dist/summary/summarizerTypes.js.map +1 -1
  176. package/dist/summary/summaryFormat.d.ts +15 -2
  177. package/dist/summary/summaryFormat.d.ts.map +1 -1
  178. package/dist/summary/summaryFormat.js.map +1 -1
  179. package/dist/summary/summaryGenerator.d.ts +6 -5
  180. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  181. package/dist/summary/summaryGenerator.js +10 -1
  182. package/dist/summary/summaryGenerator.js.map +1 -1
  183. package/dist/summary/summaryManager.d.ts +5 -6
  184. package/dist/summary/summaryManager.d.ts.map +1 -1
  185. package/dist/summary/summaryManager.js +4 -5
  186. package/dist/summary/summaryManager.js.map +1 -1
  187. package/dist/tsdoc-metadata.json +1 -1
  188. package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
  189. package/lib/batchTracker.d.ts.map +1 -0
  190. package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
  191. package/lib/batchTracker.js.map +1 -0
  192. package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -1
  193. package/lib/blobManager.d.ts.map +1 -0
  194. package/lib/{blobManager.mjs → blobManager.js} +1 -1
  195. package/lib/blobManager.js.map +1 -0
  196. package/lib/channelCollection.d.ts +223 -0
  197. package/lib/channelCollection.d.ts.map +1 -0
  198. package/lib/{dataStores.mjs → channelCollection.js} +384 -71
  199. package/lib/channelCollection.js.map +1 -0
  200. package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
  201. package/lib/connectionTelemetry.d.ts.map +1 -0
  202. package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
  203. package/lib/connectionTelemetry.js.map +1 -0
  204. package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +98 -40
  205. package/lib/{container-runtime-public.d.mts → container-runtime-beta.d.ts} +27 -9
  206. package/lib/{container-runtime-beta.d.mts → container-runtime-public.d.ts} +27 -9
  207. package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +123 -40
  208. package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
  209. package/lib/containerHandleContext.d.ts.map +1 -0
  210. package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
  211. package/lib/containerHandleContext.js.map +1 -0
  212. package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +84 -56
  213. package/lib/containerRuntime.d.ts.map +1 -0
  214. package/lib/{containerRuntime.mjs → containerRuntime.js} +460 -332
  215. package/lib/containerRuntime.js.map +1 -0
  216. package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
  217. package/lib/dataStore.d.ts.map +1 -0
  218. package/lib/{dataStore.mjs → dataStore.js} +13 -12
  219. package/lib/dataStore.js.map +1 -0
  220. package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +72 -31
  221. package/lib/dataStoreContext.d.ts.map +1 -0
  222. package/lib/{dataStoreContext.mjs → dataStoreContext.js} +174 -133
  223. package/lib/dataStoreContext.js.map +1 -0
  224. package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +2 -2
  225. package/lib/dataStoreContexts.d.ts.map +1 -0
  226. package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +1 -1
  227. package/lib/dataStoreContexts.js.map +1 -0
  228. package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
  229. package/lib/dataStoreRegistry.d.ts.map +1 -0
  230. package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
  231. package/lib/dataStoreRegistry.js.map +1 -0
  232. package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
  233. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  234. package/lib/deltaManagerSummarizerProxy.js +124 -0
  235. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  236. package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
  237. package/lib/deltaScheduler.d.ts.map +1 -0
  238. package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
  239. package/lib/deltaScheduler.js.map +1 -0
  240. package/lib/{error.d.mts → error.d.ts} +1 -1
  241. package/lib/error.d.ts.map +1 -0
  242. package/lib/{error.mjs → error.js} +1 -1
  243. package/lib/error.js.map +1 -0
  244. package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +23 -6
  245. package/lib/gc/garbageCollection.d.ts.map +1 -0
  246. package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +103 -44
  247. package/lib/gc/garbageCollection.js.map +1 -0
  248. package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
  249. package/lib/gc/gcConfigs.d.ts.map +1 -0
  250. package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +3 -3
  251. package/lib/gc/gcConfigs.js.map +1 -0
  252. package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +30 -7
  253. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  254. package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +5 -1
  255. package/lib/gc/gcDefinitions.js.map +1 -0
  256. package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
  257. package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
  258. package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
  259. package/lib/gc/gcHelpers.js.map +1 -0
  260. package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
  261. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  262. package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
  263. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  264. package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
  265. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  266. package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
  267. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  268. package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +13 -6
  269. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  270. package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
  271. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  272. package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +8 -8
  273. package/lib/gc/gcTelemetry.d.ts.map +1 -0
  274. package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -5
  275. package/lib/gc/gcTelemetry.js.map +1 -0
  276. package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +7 -2
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  278. package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +12 -2
  279. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  280. package/lib/gc/{index.d.mts → index.d.ts} +9 -9
  281. package/lib/gc/index.d.ts.map +1 -0
  282. package/lib/gc/{index.mjs → index.js} +8 -8
  283. package/lib/gc/index.js.map +1 -0
  284. package/lib/{index.d.mts → index.d.ts} +9 -21
  285. package/lib/index.d.ts.map +1 -0
  286. package/lib/index.js +12 -0
  287. package/lib/index.js.map +1 -0
  288. package/lib/{messageTypes.d.mts → messageTypes.d.ts} +5 -5
  289. package/lib/messageTypes.d.ts.map +1 -0
  290. package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
  291. package/lib/messageTypes.js.map +1 -0
  292. package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
  293. package/lib/metadata.d.ts.map +1 -0
  294. package/lib/{metadata.mjs → metadata.js} +1 -1
  295. package/lib/metadata.js.map +1 -0
  296. package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
  297. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  298. package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
  299. package/lib/opLifecycle/batchManager.js.map +1 -0
  300. package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
  301. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  302. package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
  303. package/lib/opLifecycle/definitions.js.map +1 -0
  304. package/lib/opLifecycle/index.d.ts +13 -0
  305. package/lib/opLifecycle/index.d.ts.map +1 -0
  306. package/lib/opLifecycle/index.js +12 -0
  307. package/lib/opLifecycle/index.js.map +1 -0
  308. package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
  309. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  310. package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
  311. package/lib/opLifecycle/opCompressor.js.map +1 -0
  312. package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
  313. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  314. package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
  315. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  316. package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
  317. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
  318. package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
  319. package/lib/opLifecycle/opGroupingManager.js.map +1 -0
  320. package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
  321. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  322. package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
  323. package/lib/opLifecycle/opSplitter.js.map +1 -0
  324. package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
  325. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  326. package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
  327. package/lib/opLifecycle/outbox.js.map +1 -0
  328. package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
  329. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  330. package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
  331. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  332. package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
  333. package/lib/opProperties.d.ts.map +1 -0
  334. package/lib/{opProperties.mjs → opProperties.js} +1 -1
  335. package/lib/opProperties.js.map +1 -0
  336. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  337. package/lib/packageVersion.d.ts.map +1 -0
  338. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  339. package/lib/packageVersion.js.map +1 -0
  340. package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
  341. package/lib/pendingStateManager.d.ts.map +1 -0
  342. package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
  343. package/lib/pendingStateManager.js.map +1 -0
  344. package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
  345. package/lib/scheduleManager.d.ts.map +1 -0
  346. package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
  347. package/lib/scheduleManager.js.map +1 -0
  348. package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
  349. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  350. package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
  351. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  352. package/lib/summary/{index.d.mts → index.d.ts} +13 -13
  353. package/lib/summary/index.d.ts.map +1 -0
  354. package/lib/summary/{index.mjs → index.js} +12 -12
  355. package/lib/summary/index.js.map +1 -0
  356. package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
  357. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  358. package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
  359. package/lib/summary/orderedClientElection.js.map +1 -0
  360. package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
  361. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  362. package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
  363. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  364. package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +12 -11
  365. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  366. package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +108 -75
  367. package/lib/summary/runningSummarizer.js.map +1 -0
  368. package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
  369. package/lib/summary/summarizer.d.ts.map +1 -0
  370. package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
  371. package/lib/summary/summarizer.js.map +1 -0
  372. package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
  373. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  374. package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
  375. package/lib/summary/summarizerClientElection.js.map +1 -0
  376. package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
  377. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  378. package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
  379. package/lib/summary/summarizerHeuristics.js.map +1 -0
  380. package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
  381. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  382. package/lib/summary/summarizerNode/index.js +7 -0
  383. package/lib/summary/summarizerNode/index.js.map +1 -0
  384. package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +18 -8
  385. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  386. package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +41 -53
  387. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  388. package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +11 -20
  389. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  390. package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -20
  391. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  392. package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +6 -7
  393. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  394. package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +12 -12
  395. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  396. package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +11 -22
  397. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  398. package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
  399. package/lib/summary/summarizerTypes.js.map +1 -0
  400. package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
  401. package/lib/summary/summaryCollection.d.ts.map +1 -0
  402. package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
  403. package/lib/summary/summaryCollection.js.map +1 -0
  404. package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
  405. package/lib/summary/summaryFormat.d.ts.map +1 -0
  406. package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
  407. package/lib/summary/summaryFormat.js.map +1 -0
  408. package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
  409. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  410. package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
  411. package/lib/summary/summaryGenerator.js.map +1 -0
  412. package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
  413. package/lib/summary/summaryManager.d.ts.map +1 -0
  414. package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
  415. package/lib/summary/summaryManager.js.map +1 -0
  416. package/lib/test/batchTracker.spec.js +88 -0
  417. package/lib/test/batchTracker.spec.js.map +1 -0
  418. package/lib/test/blobManager.spec.js +835 -0
  419. package/lib/test/blobManager.spec.js.map +1 -0
  420. package/lib/test/channelCollection.spec.js +141 -0
  421. package/lib/test/channelCollection.spec.js.map +1 -0
  422. package/lib/test/containerRuntime.spec.js +1748 -0
  423. package/lib/test/containerRuntime.spec.js.map +1 -0
  424. package/lib/test/dataStoreContext.spec.js +801 -0
  425. package/lib/test/dataStoreContext.spec.js.map +1 -0
  426. package/lib/test/dataStoreCreation.spec.js +312 -0
  427. package/lib/test/dataStoreCreation.spec.js.map +1 -0
  428. package/lib/test/dataStoreRegistry.spec.js +26 -0
  429. package/lib/test/dataStoreRegistry.spec.js.map +1 -0
  430. package/lib/test/fuzz/fuzzUtils.js +66 -0
  431. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  432. package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
  433. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
  434. package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
  435. package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
  436. package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
  437. package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
  438. package/lib/test/gc/garbageCollection.spec.js +1465 -0
  439. package/lib/test/gc/garbageCollection.spec.js.map +1 -0
  440. package/lib/test/gc/gcConfigs.spec.js +690 -0
  441. package/lib/test/gc/gcConfigs.spec.js.map +1 -0
  442. package/lib/test/gc/gcHelpers.spec.js +110 -0
  443. package/lib/test/gc/gcHelpers.spec.js.map +1 -0
  444. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
  445. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
  446. package/lib/test/gc/gcStats.spec.js +391 -0
  447. package/lib/test/gc/gcStats.spec.js.map +1 -0
  448. package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
  449. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
  450. package/lib/test/gc/gcTelemetry.spec.js +530 -0
  451. package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
  452. package/lib/test/gc/gcUnitTestHelpers.js +29 -0
  453. package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
  454. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
  455. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
  456. package/lib/test/getPendingBlobs.spec.js +193 -0
  457. package/lib/test/getPendingBlobs.spec.js.map +1 -0
  458. package/lib/test/hardwareStats.spec.js +93 -0
  459. package/lib/test/hardwareStats.spec.js.map +1 -0
  460. package/lib/test/index.js +6 -0
  461. package/lib/test/index.js.map +1 -0
  462. package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
  463. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
  464. package/lib/test/opLifecycle/batchManager.spec.js +189 -0
  465. package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
  466. package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
  467. package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
  468. package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
  469. package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
  470. package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
  471. package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
  472. package/lib/test/opLifecycle/outbox.spec.js +675 -0
  473. package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
  474. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
  475. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
  476. package/lib/test/pendingStateManager.spec.js +329 -0
  477. package/lib/test/pendingStateManager.spec.js.map +1 -0
  478. package/lib/test/scheduleManager.spec.js +270 -0
  479. package/lib/test/scheduleManager.spec.js.map +1 -0
  480. package/lib/test/summarizerNode.spec.js +326 -0
  481. package/lib/test/summarizerNode.spec.js.map +1 -0
  482. package/lib/test/summarizerNodeWithGc.spec.js +318 -0
  483. package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
  484. package/lib/test/summary/orderedClientElection.spec.js +535 -0
  485. package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
  486. package/lib/test/summary/runningSummarizer.spec.js +1349 -0
  487. package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
  488. package/lib/test/summary/summarizer.spec.js +29 -0
  489. package/lib/test/summary/summarizer.spec.js.map +1 -0
  490. package/lib/test/summary/summarizerClientElection.spec.js +436 -0
  491. package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
  492. package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
  493. package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
  494. package/lib/test/summary/summaryCollection.spec.js +200 -0
  495. package/lib/test/summary/summaryCollection.spec.js.map +1 -0
  496. package/lib/test/summary/summaryManager.spec.js +430 -0
  497. package/lib/test/summary/summaryManager.spec.js.map +1 -0
  498. package/lib/test/summary/testQuorumClients.js +34 -0
  499. package/lib/test/summary/testQuorumClients.js.map +1 -0
  500. package/lib/test/throttler.spec.js +175 -0
  501. package/lib/test/throttler.spec.js.map +1 -0
  502. package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
  503. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
  504. package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
  505. package/lib/throttler.d.ts.map +1 -0
  506. package/lib/{throttler.mjs → throttler.js} +1 -1
  507. package/lib/throttler.js.map +1 -0
  508. package/package.json +99 -88
  509. package/src/batchTracker.ts +1 -1
  510. package/src/blobManager.ts +1 -1
  511. package/src/{dataStores.ts → channelCollection.ts} +520 -84
  512. package/src/connectionTelemetry.ts +42 -3
  513. package/src/containerHandleContext.ts +1 -1
  514. package/src/containerRuntime.ts +661 -464
  515. package/src/dataStore.ts +13 -15
  516. package/src/dataStoreContext.ts +257 -184
  517. package/src/dataStoreContexts.ts +1 -1
  518. package/src/deltaManagerSummarizerProxy.ts +132 -7
  519. package/src/gc/garbageCollection.ts +121 -46
  520. package/src/gc/gcConfigs.ts +3 -3
  521. package/src/gc/gcDefinitions.ts +30 -7
  522. package/src/gc/gcHelpers.ts +2 -2
  523. package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
  524. package/src/gc/gcSummaryStateTracker.ts +19 -7
  525. package/src/gc/gcTelemetry.ts +10 -9
  526. package/src/gc/gcUnreferencedStateTracker.ts +12 -1
  527. package/src/gc/index.ts +10 -8
  528. package/src/index.ts +16 -27
  529. package/src/messageTypes.ts +4 -4
  530. package/src/opLifecycle/README.md +2 -4
  531. package/src/opLifecycle/batchManager.ts +2 -2
  532. package/src/opLifecycle/definitions.ts +2 -2
  533. package/src/opLifecycle/index.ts +8 -8
  534. package/src/opLifecycle/opCompressor.ts +3 -3
  535. package/src/opLifecycle/opDecompressor.ts +3 -3
  536. package/src/opLifecycle/opGroupingManager.ts +3 -12
  537. package/src/opLifecycle/opSplitter.ts +3 -3
  538. package/src/opLifecycle/outbox.ts +29 -9
  539. package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
  540. package/src/packageVersion.ts +1 -1
  541. package/src/pendingStateManager.ts +19 -13
  542. package/src/scheduleManager.ts +4 -4
  543. package/src/summary/index.ts +13 -12
  544. package/src/summary/orderedClientElection.ts +1 -1
  545. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  546. package/src/summary/runningSummarizer.ts +141 -93
  547. package/src/summary/summarizer.ts +7 -7
  548. package/src/summary/summarizerClientElection.ts +2 -2
  549. package/src/summary/summarizerHeuristics.ts +3 -3
  550. package/src/summary/summarizerNode/index.ts +6 -3
  551. package/src/summary/summarizerNode/summarizerNode.ts +54 -69
  552. package/src/summary/summarizerNode/summarizerNodeUtils.ts +16 -34
  553. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -17
  554. package/src/summary/summarizerTypes.ts +12 -24
  555. package/src/summary/summaryFormat.ts +16 -2
  556. package/src/summary/summaryGenerator.ts +16 -4
  557. package/src/summary/summaryManager.ts +6 -7
  558. package/tsconfig.cjs.json +7 -0
  559. package/tsconfig.json +2 -5
  560. package/dist/dataStores.d.ts +0 -149
  561. package/dist/dataStores.d.ts.map +0 -1
  562. package/dist/dataStores.js.map +0 -1
  563. package/dist/deltaManagerProxyBase.d.ts.map +0 -1
  564. package/dist/deltaManagerProxyBase.js +0 -77
  565. package/dist/deltaManagerProxyBase.js.map +0 -1
  566. package/lib/batchTracker.d.mts.map +0 -1
  567. package/lib/batchTracker.mjs.map +0 -1
  568. package/lib/blobManager.d.mts.map +0 -1
  569. package/lib/blobManager.mjs.map +0 -1
  570. package/lib/connectionTelemetry.d.mts.map +0 -1
  571. package/lib/connectionTelemetry.mjs.map +0 -1
  572. package/lib/containerHandleContext.d.mts.map +0 -1
  573. package/lib/containerHandleContext.mjs.map +0 -1
  574. package/lib/containerRuntime.d.mts.map +0 -1
  575. package/lib/containerRuntime.mjs.map +0 -1
  576. package/lib/dataStore.d.mts.map +0 -1
  577. package/lib/dataStore.mjs.map +0 -1
  578. package/lib/dataStoreContext.d.mts.map +0 -1
  579. package/lib/dataStoreContext.mjs.map +0 -1
  580. package/lib/dataStoreContexts.d.mts.map +0 -1
  581. package/lib/dataStoreContexts.mjs.map +0 -1
  582. package/lib/dataStoreRegistry.d.mts.map +0 -1
  583. package/lib/dataStoreRegistry.mjs.map +0 -1
  584. package/lib/dataStores.d.mts +0 -149
  585. package/lib/dataStores.d.mts.map +0 -1
  586. package/lib/dataStores.mjs.map +0 -1
  587. package/lib/deltaManagerProxyBase.d.mts +0 -35
  588. package/lib/deltaManagerProxyBase.d.mts.map +0 -1
  589. package/lib/deltaManagerProxyBase.mjs +0 -73
  590. package/lib/deltaManagerProxyBase.mjs.map +0 -1
  591. package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
  592. package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
  593. package/lib/deltaManagerSummarizerProxy.mjs +0 -38
  594. package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
  595. package/lib/deltaScheduler.d.mts.map +0 -1
  596. package/lib/deltaScheduler.mjs.map +0 -1
  597. package/lib/error.d.mts.map +0 -1
  598. package/lib/error.mjs.map +0 -1
  599. package/lib/gc/garbageCollection.d.mts.map +0 -1
  600. package/lib/gc/garbageCollection.mjs.map +0 -1
  601. package/lib/gc/gcConfigs.d.mts.map +0 -1
  602. package/lib/gc/gcConfigs.mjs.map +0 -1
  603. package/lib/gc/gcDefinitions.d.mts.map +0 -1
  604. package/lib/gc/gcDefinitions.mjs.map +0 -1
  605. package/lib/gc/gcHelpers.mjs.map +0 -1
  606. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
  607. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
  608. package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
  609. package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
  610. package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
  611. package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
  612. package/lib/gc/gcTelemetry.d.mts.map +0 -1
  613. package/lib/gc/gcTelemetry.mjs.map +0 -1
  614. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
  615. package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
  616. package/lib/gc/index.d.mts.map +0 -1
  617. package/lib/gc/index.mjs.map +0 -1
  618. package/lib/index.d.mts.map +0 -1
  619. package/lib/index.mjs +0 -24
  620. package/lib/index.mjs.map +0 -1
  621. package/lib/messageTypes.d.mts.map +0 -1
  622. package/lib/messageTypes.mjs.map +0 -1
  623. package/lib/metadata.d.mts.map +0 -1
  624. package/lib/metadata.mjs.map +0 -1
  625. package/lib/opLifecycle/batchManager.d.mts.map +0 -1
  626. package/lib/opLifecycle/batchManager.mjs.map +0 -1
  627. package/lib/opLifecycle/definitions.d.mts.map +0 -1
  628. package/lib/opLifecycle/definitions.mjs.map +0 -1
  629. package/lib/opLifecycle/index.d.mts +0 -13
  630. package/lib/opLifecycle/index.d.mts.map +0 -1
  631. package/lib/opLifecycle/index.mjs +0 -12
  632. package/lib/opLifecycle/index.mjs.map +0 -1
  633. package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
  634. package/lib/opLifecycle/opCompressor.mjs.map +0 -1
  635. package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
  636. package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
  637. package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
  638. package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
  639. package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
  640. package/lib/opLifecycle/opSplitter.mjs.map +0 -1
  641. package/lib/opLifecycle/outbox.d.mts.map +0 -1
  642. package/lib/opLifecycle/outbox.mjs.map +0 -1
  643. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
  644. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
  645. package/lib/opProperties.d.mts.map +0 -1
  646. package/lib/opProperties.mjs.map +0 -1
  647. package/lib/packageVersion.d.mts.map +0 -1
  648. package/lib/packageVersion.mjs.map +0 -1
  649. package/lib/pendingStateManager.d.mts.map +0 -1
  650. package/lib/pendingStateManager.mjs.map +0 -1
  651. package/lib/scheduleManager.d.mts.map +0 -1
  652. package/lib/scheduleManager.mjs.map +0 -1
  653. package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
  654. package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
  655. package/lib/summary/index.d.mts.map +0 -1
  656. package/lib/summary/index.mjs.map +0 -1
  657. package/lib/summary/orderedClientElection.d.mts.map +0 -1
  658. package/lib/summary/orderedClientElection.mjs.map +0 -1
  659. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
  660. package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
  661. package/lib/summary/runningSummarizer.d.mts.map +0 -1
  662. package/lib/summary/runningSummarizer.mjs.map +0 -1
  663. package/lib/summary/summarizer.d.mts.map +0 -1
  664. package/lib/summary/summarizer.mjs.map +0 -1
  665. package/lib/summary/summarizerClientElection.d.mts.map +0 -1
  666. package/lib/summary/summarizerClientElection.mjs.map +0 -1
  667. package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
  668. package/lib/summary/summarizerHeuristics.mjs.map +0 -1
  669. package/lib/summary/summarizerNode/index.d.mts.map +0 -1
  670. package/lib/summary/summarizerNode/index.mjs +0 -7
  671. package/lib/summary/summarizerNode/index.mjs.map +0 -1
  672. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
  673. package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
  674. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
  675. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
  676. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
  677. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
  678. package/lib/summary/summarizerTypes.d.mts.map +0 -1
  679. package/lib/summary/summarizerTypes.mjs.map +0 -1
  680. package/lib/summary/summaryCollection.d.mts.map +0 -1
  681. package/lib/summary/summaryCollection.mjs.map +0 -1
  682. package/lib/summary/summaryFormat.d.mts.map +0 -1
  683. package/lib/summary/summaryFormat.mjs.map +0 -1
  684. package/lib/summary/summaryGenerator.d.mts.map +0 -1
  685. package/lib/summary/summaryGenerator.mjs.map +0 -1
  686. package/lib/summary/summaryManager.d.mts.map +0 -1
  687. package/lib/summary/summaryManager.mjs.map +0 -1
  688. package/lib/throttler.d.mts.map +0 -1
  689. package/lib/throttler.mjs.map +0 -1
  690. package/src/deltaManagerProxyBase.ts +0 -111
@@ -0,0 +1,675 @@
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 { MockLogger } from "@fluidframework/telemetry-utils";
7
+ import { OpGroupingManager, Outbox, } from "../../opLifecycle/index.js";
8
+ import { CompressionAlgorithms, makeLegacySendBatchFn, } from "../../containerRuntime.js";
9
+ import { ContainerMessageType } from "../../messageTypes.js";
10
+ describe("Outbox", () => {
11
+ const maxBatchSizeInBytes = 1024;
12
+ const state = {
13
+ deltaManagerFlushCalls: 0,
14
+ canSendOps: true,
15
+ batchesSubmitted: [],
16
+ batchesCompressed: [],
17
+ batchesSplit: [],
18
+ individualOpsSubmitted: [],
19
+ pendingOpContents: [],
20
+ opsSubmitted: 0,
21
+ };
22
+ const mockLogger = new MockLogger();
23
+ const getMockDeltaManager = () => ({
24
+ flush() {
25
+ state.deltaManagerFlushCalls++;
26
+ },
27
+ });
28
+ const getMockContext = () => ({
29
+ deltaManager: getMockDeltaManager(),
30
+ clientDetails: { capabilities: { interactive: true } },
31
+ updateDirtyContainerState: (_dirty) => { },
32
+ submitFn: (type, contents, batch, appData) => {
33
+ state.individualOpsSubmitted.push({ type, contents, batch, appData });
34
+ state.opsSubmitted++;
35
+ return state.opsSubmitted;
36
+ },
37
+ submitBatchFn: (batch, referenceSequenceNumber) => {
38
+ state.batchesSubmitted.push({ messages: batch, referenceSequenceNumber });
39
+ state.opsSubmitted += batch.length;
40
+ return state.opsSubmitted;
41
+ },
42
+ });
43
+ const getMockLegacyContext = () => ({
44
+ deltaManager: getMockDeltaManager(),
45
+ clientDetails: { capabilities: { interactive: true } },
46
+ updateDirtyContainerState: (_dirty) => { },
47
+ submitFn: (type, contents, batch, appData) => {
48
+ state.individualOpsSubmitted.push({ type, contents, batch, appData });
49
+ state.opsSubmitted++;
50
+ return state.opsSubmitted;
51
+ },
52
+ connected: true,
53
+ });
54
+ const getMockCompressor = () => ({
55
+ compressBatch: (batch) => {
56
+ state.batchesCompressed.push(batch);
57
+ return batch;
58
+ },
59
+ });
60
+ const getMockSplitter = (enabled, chunkSizeInBytes) => ({
61
+ chunkSizeInBytes,
62
+ isBatchChunkingEnabled: enabled,
63
+ splitFirstBatchMessage: (batch) => {
64
+ state.batchesSplit.push(batch);
65
+ return batch;
66
+ },
67
+ });
68
+ const getMockPendingStateManager = () => ({
69
+ onSubmitMessage: (content, referenceSequenceNumber, _localOpMetadata, opMetadata) => {
70
+ state.pendingOpContents.push({ content, referenceSequenceNumber, opMetadata });
71
+ },
72
+ });
73
+ const createMessage = (type, contents) => ({
74
+ contents: JSON.stringify({ type, contents }),
75
+ type,
76
+ metadata: { test: true },
77
+ localOpMetadata: {},
78
+ referenceSequenceNumber: Number.POSITIVE_INFINITY,
79
+ });
80
+ const batchedMessage = (message, batchMarker = undefined) => ({
81
+ contents: message.contents,
82
+ metadata: batchMarker === undefined
83
+ ? message.metadata
84
+ : { ...message.metadata, batch: batchMarker },
85
+ compression: undefined,
86
+ referenceSequenceNumber: message.referenceSequenceNumber,
87
+ });
88
+ const addBatchMetadata = (messages) => {
89
+ if (messages.length > 1) {
90
+ messages[0].metadata = {
91
+ ...messages[0].metadata,
92
+ batch: true,
93
+ };
94
+ messages[messages.length - 1].metadata = {
95
+ ...messages[messages.length - 1].metadata,
96
+ batch: false,
97
+ };
98
+ }
99
+ return messages;
100
+ };
101
+ const toBatch = (messages) => ({
102
+ content: addBatchMetadata(messages),
103
+ contentSizeInBytes: messages
104
+ .map((message) => message.contents?.length ?? 0)
105
+ .reduce((a, b) => a + b, 0),
106
+ referenceSequenceNumber: messages.length === 0 ? undefined : messages[0].referenceSequenceNumber,
107
+ hasReentrantOps: false,
108
+ });
109
+ const DefaultCompressionOptions = {
110
+ minimumBatchSizeInBytes: Number.POSITIVE_INFINITY,
111
+ compressionAlgorithm: CompressionAlgorithms.lz4,
112
+ };
113
+ let currentSeqNumbers = {};
114
+ const getOutbox = (params) => {
115
+ const { submitFn, submitBatchFn, deltaManager } = params.context;
116
+ const legacySendBatchFn = makeLegacySendBatchFn(submitFn, deltaManager);
117
+ return new Outbox({
118
+ shouldSend: () => state.canSendOps,
119
+ pendingStateManager: getMockPendingStateManager(),
120
+ submitBatchFn,
121
+ legacySendBatchFn,
122
+ compressor: getMockCompressor(),
123
+ splitter: getMockSplitter(params.enableChunking ?? false, params.chunkSizeInBytes ?? Number.POSITIVE_INFINITY),
124
+ config: {
125
+ maxBatchSizeInBytes: params.maxBatchSize ?? maxBatchSizeInBytes,
126
+ compressionOptions: params.compressionOptions ?? DefaultCompressionOptions,
127
+ disablePartialFlush: params.disablePartialFlush ?? false,
128
+ },
129
+ logger: mockLogger,
130
+ groupingManager: new OpGroupingManager({
131
+ groupedBatchingEnabled: false,
132
+ opCountThreshold: Infinity,
133
+ reentrantBatchGroupingEnabled: false,
134
+ }, mockLogger),
135
+ getCurrentSequenceNumbers: () => currentSeqNumbers,
136
+ reSubmit: (message) => { },
137
+ opReentrancy: () => false,
138
+ closeContainer: (error) => { },
139
+ });
140
+ };
141
+ beforeEach(() => {
142
+ state.deltaManagerFlushCalls = 0;
143
+ state.canSendOps = true;
144
+ state.batchesSubmitted.splice(0);
145
+ state.batchesCompressed.splice(0);
146
+ state.batchesSplit.splice(0);
147
+ state.individualOpsSubmitted.splice(0);
148
+ state.pendingOpContents.splice(0);
149
+ state.opsSubmitted = 0;
150
+ currentSeqNumbers = {};
151
+ mockLogger.clear();
152
+ });
153
+ it("Sending batches", () => {
154
+ const outbox = getOutbox({ context: getMockContext() });
155
+ const messages = [
156
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
157
+ createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
158
+ createMessage(ContainerMessageType.Attach, "2"),
159
+ createMessage(ContainerMessageType.Attach, "3"),
160
+ createMessage(ContainerMessageType.FluidDataStoreOp, "4"),
161
+ createMessage(ContainerMessageType.FluidDataStoreOp, "5"),
162
+ ];
163
+ outbox.submit(messages[0]);
164
+ outbox.submit(messages[1]);
165
+ outbox.submitAttach(messages[2]);
166
+ outbox.submitAttach(messages[3]);
167
+ outbox.flush();
168
+ outbox.submit(messages[4]);
169
+ outbox.flush();
170
+ outbox.submit(messages[5]);
171
+ assert.equal(state.opsSubmitted, messages.length - 1);
172
+ assert.equal(state.individualOpsSubmitted.length, 0);
173
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.messages), [
174
+ [batchedMessage(messages[2], true), batchedMessage(messages[3], false)],
175
+ [batchedMessage(messages[0], true), batchedMessage(messages[1], false)],
176
+ [batchedMessage(messages[4])], // The last message was not batched
177
+ ]);
178
+ assert.equal(state.deltaManagerFlushCalls, 0);
179
+ const rawMessagesInFlushOrder = [
180
+ messages[2],
181
+ messages[3],
182
+ messages[0],
183
+ messages[1],
184
+ messages[4],
185
+ ];
186
+ assert.deepEqual(state.pendingOpContents, rawMessagesInFlushOrder.map((message) => ({
187
+ content: message.contents,
188
+ referenceSequenceNumber: message.referenceSequenceNumber,
189
+ opMetadata: message.metadata,
190
+ })));
191
+ });
192
+ it("Will send messages only when allowed, but will store them in the pending state", () => {
193
+ const outbox = getOutbox({ context: getMockContext() });
194
+ const messages = [
195
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
196
+ createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
197
+ ];
198
+ outbox.submit(messages[0]);
199
+ outbox.flush();
200
+ outbox.submit(messages[1]);
201
+ state.canSendOps = false;
202
+ outbox.flush();
203
+ assert.equal(state.opsSubmitted, 1);
204
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.messages), [[batchedMessage(messages[0])]]);
205
+ assert.deepEqual(state.pendingOpContents, messages.map((message) => ({
206
+ content: message.contents,
207
+ referenceSequenceNumber: message.referenceSequenceNumber,
208
+ opMetadata: message.metadata,
209
+ })));
210
+ });
211
+ it("Uses legacy path for legacy contexts", () => {
212
+ const outbox = getOutbox({ context: getMockLegacyContext() });
213
+ const messages = [
214
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
215
+ createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
216
+ createMessage(ContainerMessageType.Attach, "2"),
217
+ createMessage(ContainerMessageType.FluidDataStoreOp, "3"),
218
+ ];
219
+ outbox.submit(messages[0]);
220
+ outbox.submit(messages[1]);
221
+ outbox.submitAttach(messages[2]);
222
+ outbox.submit(messages[3]);
223
+ outbox.flush();
224
+ assert.equal(state.opsSubmitted, messages.length);
225
+ assert.equal(state.batchesSubmitted.length, 0);
226
+ assert.deepEqual(state.individualOpsSubmitted.length, messages.length);
227
+ assert.equal(state.deltaManagerFlushCalls, 2);
228
+ const rawMessagesInFlushOrder = [messages[2], messages[0], messages[1], messages[3]];
229
+ assert.deepEqual(state.pendingOpContents, rawMessagesInFlushOrder.map((message) => ({
230
+ content: message.contents,
231
+ referenceSequenceNumber: message.referenceSequenceNumber,
232
+ opMetadata: message.metadata,
233
+ })));
234
+ });
235
+ it("Compress only if compression is enabled", () => {
236
+ const outbox = getOutbox({
237
+ context: getMockContext(),
238
+ compressionOptions: {
239
+ minimumBatchSizeInBytes: 1,
240
+ compressionAlgorithm: CompressionAlgorithms.lz4,
241
+ },
242
+ });
243
+ const messages = [
244
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
245
+ createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
246
+ createMessage(ContainerMessageType.Attach, "2"),
247
+ createMessage(ContainerMessageType.FluidDataStoreOp, "3"),
248
+ ];
249
+ outbox.submit(messages[0]);
250
+ outbox.submit(messages[1]);
251
+ outbox.submitAttach(messages[2]);
252
+ outbox.submit(messages[3]);
253
+ outbox.flush();
254
+ assert.equal(state.opsSubmitted, messages.length);
255
+ assert.equal(state.batchesSubmitted.length, 2);
256
+ assert.equal(state.individualOpsSubmitted.length, 0);
257
+ assert.equal(state.deltaManagerFlushCalls, 0);
258
+ assert.deepEqual(state.batchesCompressed, [
259
+ toBatch([messages[2]]),
260
+ toBatch([messages[0], messages[1], messages[3]]),
261
+ ]);
262
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.messages), [
263
+ [batchedMessage(messages[2])],
264
+ [
265
+ batchedMessage(messages[0], true),
266
+ batchedMessage(messages[1]),
267
+ batchedMessage(messages[3], false),
268
+ ],
269
+ ]);
270
+ const rawMessagesInFlushOrder = [messages[2], messages[0], messages[1], messages[3]];
271
+ assert.deepEqual(state.pendingOpContents, rawMessagesInFlushOrder.map((message) => ({
272
+ content: message.contents,
273
+ referenceSequenceNumber: message.referenceSequenceNumber,
274
+ opMetadata: message.metadata,
275
+ })));
276
+ });
277
+ it("Compress only if the batch is larger than the configured limit", () => {
278
+ const outbox = getOutbox({
279
+ context: getMockContext(),
280
+ maxBatchSize: 1,
281
+ compressionOptions: {
282
+ minimumBatchSizeInBytes: 1024,
283
+ compressionAlgorithm: CompressionAlgorithms.lz4,
284
+ },
285
+ });
286
+ const messages = [
287
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
288
+ createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
289
+ createMessage(ContainerMessageType.Attach, "2"),
290
+ createMessage(ContainerMessageType.FluidDataStoreOp, "3"),
291
+ ];
292
+ outbox.submit(messages[0]);
293
+ outbox.submit(messages[1]);
294
+ outbox.submitAttach(messages[2]);
295
+ outbox.submit(messages[3]);
296
+ outbox.flush();
297
+ assert.equal(state.opsSubmitted, messages.length);
298
+ assert.equal(state.batchesSubmitted.length, 2);
299
+ assert.equal(state.individualOpsSubmitted.length, 0);
300
+ assert.equal(state.deltaManagerFlushCalls, 0);
301
+ assert.deepEqual(state.batchesCompressed, []);
302
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.messages), [
303
+ [batchedMessage(messages[2])],
304
+ [
305
+ batchedMessage(messages[0], true),
306
+ batchedMessage(messages[1]),
307
+ batchedMessage(messages[3], false),
308
+ ],
309
+ ]);
310
+ const rawMessagesInFlushOrder = [messages[2], messages[0], messages[1], messages[3]];
311
+ assert.deepEqual(state.pendingOpContents, rawMessagesInFlushOrder.map((message) => ({
312
+ content: message.contents,
313
+ referenceSequenceNumber: message.referenceSequenceNumber,
314
+ opMetadata: message.metadata,
315
+ })));
316
+ });
317
+ it("Compress and send (only) attachment ops if compression is enabled and their size exceed the compression threshold", () => {
318
+ const messages = [
319
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
320
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
321
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
322
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
323
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
324
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
325
+ createMessage(ContainerMessageType.Attach, "2"),
326
+ createMessage(ContainerMessageType.Attach, "3"),
327
+ createMessage(ContainerMessageType.Attach, "4"),
328
+ createMessage(ContainerMessageType.Attach, "5"),
329
+ createMessage(ContainerMessageType.Attach, "6"),
330
+ createMessage(ContainerMessageType.Attach, "7"),
331
+ ];
332
+ const attachMessages = messages.filter((x) => x.type === ContainerMessageType.Attach);
333
+ assert.ok(attachMessages.length > 0 && attachMessages[0].contents !== undefined);
334
+ const outbox = getOutbox({
335
+ context: getMockContext(),
336
+ compressionOptions: {
337
+ minimumBatchSizeInBytes: attachMessages[0].contents.length * 3,
338
+ compressionAlgorithm: CompressionAlgorithms.lz4,
339
+ },
340
+ });
341
+ for (const message of messages) {
342
+ if (message.type === ContainerMessageType.Attach) {
343
+ outbox.submitAttach(message);
344
+ }
345
+ else {
346
+ outbox.submit(message);
347
+ }
348
+ }
349
+ // Although there was no explicit flush, the attach messages will get flushed
350
+ // as their size have exceeded the compression threshold.
351
+ assert.equal(state.opsSubmitted, attachMessages.length);
352
+ assert.equal(state.batchesSubmitted.length, 2); // 6 messages in 2 batches
353
+ assert.equal(state.individualOpsSubmitted.length, 0);
354
+ assert.equal(state.deltaManagerFlushCalls, 0);
355
+ assert.deepEqual(state.batchesCompressed, [
356
+ toBatch(attachMessages.slice(0, 3)),
357
+ toBatch(attachMessages.slice(3)),
358
+ ]);
359
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.messages), [
360
+ toBatch(attachMessages.slice(0, 3)).content.map((x) => batchedMessage(x)),
361
+ toBatch(attachMessages.slice(3)).content.map((x) => batchedMessage(x)),
362
+ ]);
363
+ assert.deepEqual(state.pendingOpContents, attachMessages.map((message) => ({
364
+ content: message.contents,
365
+ referenceSequenceNumber: message.referenceSequenceNumber,
366
+ opMetadata: message.metadata,
367
+ })));
368
+ });
369
+ it("Throws at flush, when compression is enabled and the compressed batch is still larger than the threshold", () => {
370
+ const outbox = getOutbox({
371
+ context: getMockContext(),
372
+ maxBatchSize: 1,
373
+ compressionOptions: {
374
+ minimumBatchSizeInBytes: 1,
375
+ compressionAlgorithm: CompressionAlgorithms.lz4,
376
+ },
377
+ });
378
+ const messages = [
379
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
380
+ createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
381
+ createMessage(ContainerMessageType.FluidDataStoreOp, "2"),
382
+ ];
383
+ outbox.submit(messages[0]);
384
+ outbox.submit(messages[1]);
385
+ outbox.submit(messages[2]);
386
+ assert.throws(() => outbox.flush());
387
+ // The batch is compressed
388
+ assert.deepEqual(state.batchesCompressed, [toBatch(messages)]);
389
+ // The batch is not persisted
390
+ assert.deepEqual(state.pendingOpContents, []);
391
+ });
392
+ it("Chunks when compression is enabled, compressed batch is larger than the threshold and chunking is enabled", () => {
393
+ const outbox = getOutbox({
394
+ context: getMockContext(),
395
+ maxBatchSize: 1,
396
+ compressionOptions: {
397
+ minimumBatchSizeInBytes: 1,
398
+ compressionAlgorithm: CompressionAlgorithms.lz4,
399
+ },
400
+ enableChunking: true,
401
+ chunkSizeInBytes: 2,
402
+ });
403
+ const messages = [
404
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
405
+ createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
406
+ createMessage(ContainerMessageType.Attach, "2"),
407
+ createMessage(ContainerMessageType.FluidDataStoreOp, "3"),
408
+ ];
409
+ outbox.submit(messages[0]);
410
+ outbox.submit(messages[1]);
411
+ outbox.submitAttach(messages[2]);
412
+ outbox.submit(messages[3]);
413
+ outbox.flush();
414
+ assert.deepEqual(state.batchesCompressed, [
415
+ toBatch([messages[2]]),
416
+ toBatch([messages[0], messages[1], messages[3]]),
417
+ ]);
418
+ assert.deepEqual(state.batchesSplit, [
419
+ toBatch([messages[2]]),
420
+ toBatch([messages[0], messages[1], messages[3]]),
421
+ ]);
422
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.messages), [
423
+ [batchedMessage(messages[2])],
424
+ [
425
+ batchedMessage(messages[0], true),
426
+ batchedMessage(messages[1]),
427
+ batchedMessage(messages[3], false),
428
+ ],
429
+ ]);
430
+ const rawMessagesInFlushOrder = [messages[2], messages[0], messages[1], messages[3]];
431
+ assert.deepEqual(state.pendingOpContents, rawMessagesInFlushOrder.map((message) => ({
432
+ content: message.contents,
433
+ referenceSequenceNumber: message.referenceSequenceNumber,
434
+ opMetadata: message.metadata,
435
+ })));
436
+ });
437
+ it("Does not chunk when compression is enabled, compressed batch is smaller than the threshold and chunking is enabled", () => {
438
+ const outbox = getOutbox({
439
+ context: getMockContext(),
440
+ maxBatchSize: 1,
441
+ compressionOptions: {
442
+ minimumBatchSizeInBytes: 1,
443
+ compressionAlgorithm: CompressionAlgorithms.lz4,
444
+ },
445
+ enableChunking: true,
446
+ chunkSizeInBytes: 10000,
447
+ });
448
+ const messages = [
449
+ createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
450
+ createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
451
+ createMessage(ContainerMessageType.Attach, "2"),
452
+ createMessage(ContainerMessageType.FluidDataStoreOp, "3"),
453
+ ];
454
+ outbox.submit(messages[0]);
455
+ outbox.submit(messages[1]);
456
+ outbox.submitAttach(messages[2]);
457
+ outbox.submit(messages[3]);
458
+ outbox.flush();
459
+ assert.deepEqual(state.batchesCompressed, [
460
+ toBatch([messages[2]]),
461
+ toBatch([messages[0], messages[1], messages[3]]),
462
+ ]);
463
+ assert.deepEqual(state.batchesSplit, []);
464
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.messages), [
465
+ [batchedMessage(messages[2])],
466
+ [
467
+ batchedMessage(messages[0], true),
468
+ batchedMessage(messages[1]),
469
+ batchedMessage(messages[3], false),
470
+ ],
471
+ ]);
472
+ });
473
+ it("Throws at submit, when compression is enabled and the attached compressed batch is still larger than the threshold", () => {
474
+ const outbox = getOutbox({
475
+ context: getMockContext(),
476
+ maxBatchSize: 1,
477
+ compressionOptions: {
478
+ minimumBatchSizeInBytes: 1,
479
+ compressionAlgorithm: CompressionAlgorithms.lz4,
480
+ },
481
+ });
482
+ const messages = [createMessage(ContainerMessageType.Attach, "0")];
483
+ assert.throws(() => outbox.submitAttach(messages[0]));
484
+ // The batch is compressed
485
+ assert.deepEqual(state.batchesCompressed, [toBatch(messages)]);
486
+ // The batch is not persisted
487
+ assert.deepEqual(state.pendingOpContents, []);
488
+ });
489
+ it("Splits the batch when an out of order message is detected", () => {
490
+ const outbox = getOutbox({ context: getMockContext() });
491
+ const messages = [
492
+ {
493
+ ...createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
494
+ referenceSequenceNumber: 0,
495
+ },
496
+ {
497
+ ...createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
498
+ referenceSequenceNumber: 1,
499
+ },
500
+ ];
501
+ currentSeqNumbers.referenceSequenceNumber = 1;
502
+ outbox.submit(messages[0]);
503
+ outbox.submit(messages[1]);
504
+ outbox.flush();
505
+ assert.equal(state.opsSubmitted, messages.length);
506
+ assert.equal(state.individualOpsSubmitted.length, 0);
507
+ assert.equal(state.batchesSubmitted.length, 2);
508
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.messages), [[batchedMessage(messages[0])], [batchedMessage(messages[1])]]);
509
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.referenceSequenceNumber), [0, 1]);
510
+ assert.equal(state.deltaManagerFlushCalls, 0);
511
+ const rawMessagesInFlushOrder = [messages[0], messages[1]];
512
+ assert.deepEqual(state.pendingOpContents, rawMessagesInFlushOrder.map((message) => ({
513
+ content: message.contents,
514
+ referenceSequenceNumber: message.referenceSequenceNumber,
515
+ opMetadata: message.metadata,
516
+ })));
517
+ mockLogger.assertMatch([
518
+ {
519
+ eventName: "Outbox:ReferenceSequenceNumberMismatch",
520
+ },
521
+ ]);
522
+ });
523
+ [
524
+ [
525
+ {
526
+ ...createMessage(ContainerMessageType.Attach, "0"),
527
+ referenceSequenceNumber: 0,
528
+ },
529
+ {
530
+ ...createMessage(ContainerMessageType.Attach, "0"),
531
+ referenceSequenceNumber: 0,
532
+ },
533
+ {
534
+ ...createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
535
+ referenceSequenceNumber: 1,
536
+ },
537
+ ],
538
+ [
539
+ {
540
+ ...createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
541
+ referenceSequenceNumber: 0,
542
+ },
543
+ {
544
+ ...createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
545
+ referenceSequenceNumber: 0,
546
+ },
547
+ {
548
+ ...createMessage(ContainerMessageType.Attach, "0"),
549
+ referenceSequenceNumber: 1,
550
+ },
551
+ ],
552
+ ].forEach((ops) => {
553
+ it("Flushes all batches when an out of order message is detected in either flows", () => {
554
+ const outbox = getOutbox({ context: getMockContext() });
555
+ for (const op of ops) {
556
+ currentSeqNumbers.referenceSequenceNumber = op.referenceSequenceNumber;
557
+ if (op.type === ContainerMessageType.Attach) {
558
+ outbox.submitAttach(op);
559
+ }
560
+ else {
561
+ outbox.submit(op);
562
+ }
563
+ }
564
+ assert.equal(state.opsSubmitted, ops.length - 1);
565
+ assert.equal(state.individualOpsSubmitted.length, 0);
566
+ assert.equal(state.batchesSubmitted.length, 1);
567
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.messages), [[batchedMessage(ops[0]), batchedMessage(ops[1])]]);
568
+ mockLogger.assertMatch([
569
+ {
570
+ eventName: "Outbox:ReferenceSequenceNumberMismatch",
571
+ },
572
+ ]);
573
+ });
574
+ });
575
+ it("Does not flush the batch when an out of order message is detected, if configured", () => {
576
+ const outbox = getOutbox({
577
+ context: getMockContext(),
578
+ disablePartialFlush: true,
579
+ });
580
+ const messages = [
581
+ {
582
+ ...createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
583
+ referenceSequenceNumber: 0,
584
+ },
585
+ {
586
+ ...createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
587
+ referenceSequenceNumber: 1,
588
+ },
589
+ {
590
+ ...createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
591
+ referenceSequenceNumber: 2,
592
+ },
593
+ {
594
+ ...createMessage(ContainerMessageType.Attach, "1"),
595
+ referenceSequenceNumber: 3,
596
+ },
597
+ {
598
+ ...createMessage(ContainerMessageType.Attach, "1"),
599
+ referenceSequenceNumber: 3,
600
+ },
601
+ ];
602
+ for (const message of messages) {
603
+ currentSeqNumbers.referenceSequenceNumber = message.referenceSequenceNumber;
604
+ if (message.type === ContainerMessageType.Attach) {
605
+ outbox.submitAttach(message);
606
+ }
607
+ else {
608
+ outbox.submit(message);
609
+ }
610
+ }
611
+ assert.equal(state.opsSubmitted, 0);
612
+ assert.equal(state.individualOpsSubmitted.length, 0);
613
+ assert.equal(state.batchesSubmitted.length, 0);
614
+ mockLogger.assertMatch([
615
+ {
616
+ eventName: "Outbox:ReferenceSequenceNumberMismatch",
617
+ },
618
+ ]);
619
+ });
620
+ it("Log at most 3 reference sequence number mismatch events", () => {
621
+ const outbox = getOutbox({ context: getMockContext() });
622
+ for (let i = 0; i < 10; i++) {
623
+ currentSeqNumbers.referenceSequenceNumber = 0;
624
+ outbox.submit({
625
+ ...createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
626
+ referenceSequenceNumber: 0,
627
+ });
628
+ currentSeqNumbers.referenceSequenceNumber = 1;
629
+ outbox.submit({
630
+ ...createMessage(ContainerMessageType.FluidDataStoreOp, "0"),
631
+ referenceSequenceNumber: 1,
632
+ });
633
+ }
634
+ mockLogger.assertMatch(new Array(3).fill({
635
+ eventName: "Outbox:ReferenceSequenceNumberMismatch",
636
+ }));
637
+ });
638
+ it("blobAttach ops always flush before regular ops", () => {
639
+ const outbox = getOutbox({ context: getMockContext() });
640
+ const messages = [
641
+ createMessage(ContainerMessageType.BlobAttach, "0"),
642
+ createMessage(ContainerMessageType.FluidDataStoreOp, "1"),
643
+ createMessage(ContainerMessageType.BlobAttach, "2"),
644
+ createMessage(ContainerMessageType.FluidDataStoreOp, "3"),
645
+ createMessage(ContainerMessageType.BlobAttach, "4"),
646
+ ];
647
+ outbox.submitBlobAttach(messages[0]);
648
+ outbox.submit(messages[1]);
649
+ outbox.submitBlobAttach(messages[2]);
650
+ outbox.submit(messages[3]);
651
+ outbox.submitBlobAttach(messages[4]);
652
+ outbox.flush();
653
+ assert.deepEqual(state.batchesSubmitted.map((x) => x.messages), [
654
+ [
655
+ batchedMessage(messages[0], true),
656
+ batchedMessage(messages[2]),
657
+ batchedMessage(messages[4], false),
658
+ ],
659
+ [batchedMessage(messages[1], true), batchedMessage(messages[3], false)],
660
+ ]);
661
+ const rawMessagesInFlushOrder = [
662
+ messages[0],
663
+ messages[2],
664
+ messages[4],
665
+ messages[1],
666
+ messages[3],
667
+ ];
668
+ assert.deepEqual(state.pendingOpContents, rawMessagesInFlushOrder.map((message) => ({
669
+ content: message.contents,
670
+ referenceSequenceNumber: message.referenceSequenceNumber,
671
+ opMetadata: message.metadata,
672
+ })));
673
+ });
674
+ });
675
+ //# sourceMappingURL=outbox.spec.js.map