@fluidframework/container-runtime 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.1

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,675 +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 { 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