@fluidframework/container-runtime 2.0.0-internal.6.1.1 → 2.0.0-internal.6.3.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 (477) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +4 -3
  3. package/dist/batchTracker.d.ts +1 -1
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +5 -4
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +4 -21
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +119 -185
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/connectionTelemetry.d.ts.map +1 -1
  12. package/dist/connectionTelemetry.js +13 -12
  13. package/dist/connectionTelemetry.js.map +1 -1
  14. package/dist/containerRuntime.d.ts +99 -16
  15. package/dist/containerRuntime.d.ts.map +1 -1
  16. package/dist/containerRuntime.js +380 -242
  17. package/dist/containerRuntime.js.map +1 -1
  18. package/dist/dataStore.d.ts.map +1 -1
  19. package/dist/dataStore.js +4 -5
  20. package/dist/dataStore.js.map +1 -1
  21. package/dist/dataStoreContext.d.ts +2 -1
  22. package/dist/dataStoreContext.d.ts.map +1 -1
  23. package/dist/dataStoreContext.js +40 -41
  24. package/dist/dataStoreContext.js.map +1 -1
  25. package/dist/dataStoreContexts.d.ts +1 -2
  26. package/dist/dataStoreContexts.d.ts.map +1 -1
  27. package/dist/dataStoreContexts.js +7 -8
  28. package/dist/dataStoreContexts.js.map +1 -1
  29. package/dist/dataStoreRegistry.js +2 -2
  30. package/dist/dataStoreRegistry.js.map +1 -1
  31. package/dist/dataStores.d.ts.map +1 -1
  32. package/dist/dataStores.js +23 -25
  33. package/dist/dataStores.js.map +1 -1
  34. package/dist/deltaManagerProxyBase.d.ts +1 -1
  35. package/dist/deltaManagerProxyBase.js +2 -2
  36. package/dist/deltaManagerProxyBase.js.map +1 -1
  37. package/dist/deltaScheduler.js +6 -6
  38. package/dist/deltaScheduler.js.map +1 -1
  39. package/dist/error.d.ts +14 -0
  40. package/dist/error.d.ts.map +1 -0
  41. package/dist/error.js +21 -0
  42. package/dist/error.js.map +1 -0
  43. package/dist/gc/garbageCollection.d.ts +4 -6
  44. package/dist/gc/garbageCollection.d.ts.map +1 -1
  45. package/dist/gc/garbageCollection.js +26 -25
  46. package/dist/gc/garbageCollection.js.map +1 -1
  47. package/dist/gc/gcConfigs.d.ts.map +1 -1
  48. package/dist/gc/gcConfigs.js +5 -3
  49. package/dist/gc/gcConfigs.js.map +1 -1
  50. package/dist/gc/gcDefinitions.d.ts +4 -2
  51. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  52. package/dist/gc/gcDefinitions.js.map +1 -1
  53. package/dist/gc/gcHelpers.js +7 -7
  54. package/dist/gc/gcHelpers.js.map +1 -1
  55. package/dist/gc/gcSummaryStateTracker.d.ts +4 -7
  56. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  57. package/dist/gc/gcSummaryStateTracker.js +15 -52
  58. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  59. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  60. package/dist/gc/gcTelemetry.js +2 -0
  61. package/dist/gc/gcTelemetry.js.map +1 -1
  62. package/dist/gc/gcUnreferencedStateTracker.js +4 -4
  63. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  64. package/dist/gc/index.d.ts +1 -1
  65. package/dist/gc/index.d.ts.map +1 -1
  66. package/dist/gc/index.js +1 -2
  67. package/dist/gc/index.js.map +1 -1
  68. package/dist/id-compressor/appendOnlySortedMap.d.ts +8 -30
  69. package/dist/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
  70. package/dist/id-compressor/appendOnlySortedMap.js +26 -68
  71. package/dist/id-compressor/appendOnlySortedMap.js.map +1 -1
  72. package/dist/id-compressor/finalSpace.d.ts +29 -0
  73. package/dist/id-compressor/finalSpace.d.ts.map +1 -0
  74. package/dist/id-compressor/finalSpace.js +62 -0
  75. package/dist/id-compressor/finalSpace.js.map +1 -0
  76. package/dist/id-compressor/idCompressor.d.ts +25 -250
  77. package/dist/id-compressor/idCompressor.d.ts.map +1 -1
  78. package/dist/id-compressor/idCompressor.js +387 -1150
  79. package/dist/id-compressor/idCompressor.js.map +1 -1
  80. package/dist/id-compressor/identifiers.d.ts +32 -0
  81. package/dist/id-compressor/identifiers.d.ts.map +1 -0
  82. package/dist/id-compressor/identifiers.js +15 -0
  83. package/dist/id-compressor/identifiers.js.map +1 -0
  84. package/dist/id-compressor/index.d.ts +5 -6
  85. package/dist/id-compressor/index.d.ts.map +1 -1
  86. package/dist/id-compressor/index.js +20 -26
  87. package/dist/id-compressor/index.js.map +1 -1
  88. package/dist/id-compressor/persistanceUtilities.d.ts +22 -0
  89. package/dist/id-compressor/persistanceUtilities.d.ts.map +1 -0
  90. package/dist/id-compressor/persistanceUtilities.js +43 -0
  91. package/dist/id-compressor/persistanceUtilities.js.map +1 -0
  92. package/dist/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
  93. package/dist/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
  94. package/dist/id-compressor/sessionSpaceNormalizer.js +80 -0
  95. package/dist/id-compressor/sessionSpaceNormalizer.js.map +1 -0
  96. package/dist/id-compressor/sessions.d.ts +115 -0
  97. package/dist/id-compressor/sessions.d.ts.map +1 -0
  98. package/dist/id-compressor/sessions.js +305 -0
  99. package/dist/id-compressor/sessions.js.map +1 -0
  100. package/dist/id-compressor/utilities.d.ts +49 -0
  101. package/dist/id-compressor/utilities.d.ts.map +1 -0
  102. package/dist/id-compressor/utilities.js +166 -0
  103. package/dist/id-compressor/utilities.js.map +1 -0
  104. package/dist/index.d.ts +3 -3
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +6 -4
  107. package/dist/index.js.map +1 -1
  108. package/dist/opLifecycle/opCompressor.js +5 -5
  109. package/dist/opLifecycle/opCompressor.js.map +1 -1
  110. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  111. package/dist/opLifecycle/opDecompressor.js +11 -10
  112. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  113. package/dist/opLifecycle/opGroupingManager.js +3 -3
  114. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  115. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  116. package/dist/opLifecycle/opSplitter.js +14 -15
  117. package/dist/opLifecycle/opSplitter.js.map +1 -1
  118. package/dist/opLifecycle/outbox.d.ts +1 -0
  119. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  120. package/dist/opLifecycle/outbox.js +16 -17
  121. package/dist/opLifecycle/outbox.js.map +1 -1
  122. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  123. package/dist/opLifecycle/remoteMessageProcessor.js +11 -5
  124. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  125. package/dist/packageVersion.d.ts +1 -1
  126. package/dist/packageVersion.js +1 -1
  127. package/dist/packageVersion.js.map +1 -1
  128. package/dist/pendingStateManager.d.ts +12 -5
  129. package/dist/pendingStateManager.d.ts.map +1 -1
  130. package/dist/pendingStateManager.js +36 -23
  131. package/dist/pendingStateManager.js.map +1 -1
  132. package/dist/scheduleManager.d.ts.map +1 -1
  133. package/dist/scheduleManager.js +23 -23
  134. package/dist/scheduleManager.js.map +1 -1
  135. package/dist/summary/index.d.ts +3 -3
  136. package/dist/summary/index.d.ts.map +1 -1
  137. package/dist/summary/index.js +2 -1
  138. package/dist/summary/index.js.map +1 -1
  139. package/dist/summary/orderedClientElection.d.ts +2 -3
  140. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  141. package/dist/summary/orderedClientElection.js +8 -8
  142. package/dist/summary/orderedClientElection.js.map +1 -1
  143. package/dist/summary/runWhileConnectedCoordinator.js +3 -3
  144. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  145. package/dist/summary/runningSummarizer.d.ts +27 -4
  146. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  147. package/dist/summary/runningSummarizer.js +246 -74
  148. package/dist/summary/runningSummarizer.js.map +1 -1
  149. package/dist/summary/summarizer.d.ts +6 -5
  150. package/dist/summary/summarizer.d.ts.map +1 -1
  151. package/dist/summary/summarizer.js +73 -69
  152. package/dist/summary/summarizer.js.map +1 -1
  153. package/dist/summary/summarizerClientElection.d.ts +2 -2
  154. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  155. package/dist/summary/summarizerClientElection.js +2 -2
  156. package/dist/summary/summarizerClientElection.js.map +1 -1
  157. package/dist/summary/summarizerHeuristics.js +2 -2
  158. package/dist/summary/summarizerHeuristics.js.map +1 -1
  159. package/dist/summary/summarizerNode/index.d.ts +1 -1
  160. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  161. package/dist/summary/summarizerNode/index.js.map +1 -1
  162. package/dist/summary/summarizerNode/summarizerNode.d.ts +5 -14
  163. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  164. package/dist/summary/summarizerNode/summarizerNode.js +32 -109
  165. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  166. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +6 -30
  167. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  168. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  169. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +0 -11
  170. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +5 -88
  172. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  173. package/dist/summary/summarizerTypes.d.ts +38 -25
  174. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  175. package/dist/summary/summarizerTypes.js.map +1 -1
  176. package/dist/summary/summaryCollection.d.ts +2 -3
  177. package/dist/summary/summaryCollection.d.ts.map +1 -1
  178. package/dist/summary/summaryCollection.js +9 -8
  179. package/dist/summary/summaryCollection.js.map +1 -1
  180. package/dist/summary/summaryFormat.js +2 -2
  181. package/dist/summary/summaryFormat.js.map +1 -1
  182. package/dist/summary/summaryGenerator.d.ts +10 -4
  183. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  184. package/dist/summary/summaryGenerator.js +52 -48
  185. package/dist/summary/summaryGenerator.js.map +1 -1
  186. package/dist/summary/summaryManager.d.ts +7 -6
  187. package/dist/summary/summaryManager.d.ts.map +1 -1
  188. package/dist/summary/summaryManager.js +30 -22
  189. package/dist/summary/summaryManager.js.map +1 -1
  190. package/lib/batchTracker.d.ts +1 -1
  191. package/lib/batchTracker.d.ts.map +1 -1
  192. package/lib/batchTracker.js +3 -2
  193. package/lib/batchTracker.js.map +1 -1
  194. package/lib/blobManager.d.ts +4 -21
  195. package/lib/blobManager.d.ts.map +1 -1
  196. package/lib/blobManager.js +91 -157
  197. package/lib/blobManager.js.map +1 -1
  198. package/lib/connectionTelemetry.d.ts.map +1 -1
  199. package/lib/connectionTelemetry.js +2 -1
  200. package/lib/connectionTelemetry.js.map +1 -1
  201. package/lib/containerRuntime.d.ts +99 -16
  202. package/lib/containerRuntime.d.ts.map +1 -1
  203. package/lib/containerRuntime.js +332 -192
  204. package/lib/containerRuntime.js.map +1 -1
  205. package/lib/dataStore.d.ts.map +1 -1
  206. package/lib/dataStore.js +2 -3
  207. package/lib/dataStore.js.map +1 -1
  208. package/lib/dataStoreContext.d.ts +2 -1
  209. package/lib/dataStoreContext.d.ts.map +1 -1
  210. package/lib/dataStoreContext.js +3 -4
  211. package/lib/dataStoreContext.js.map +1 -1
  212. package/lib/dataStoreContexts.d.ts +1 -2
  213. package/lib/dataStoreContexts.d.ts.map +1 -1
  214. package/lib/dataStoreContexts.js +1 -2
  215. package/lib/dataStoreContexts.js.map +1 -1
  216. package/lib/dataStoreRegistry.js +1 -1
  217. package/lib/dataStoreRegistry.js.map +1 -1
  218. package/lib/dataStores.d.ts.map +1 -1
  219. package/lib/dataStores.js +2 -4
  220. package/lib/dataStores.js.map +1 -1
  221. package/lib/deltaManagerProxyBase.d.ts +1 -1
  222. package/lib/deltaManagerProxyBase.js +1 -1
  223. package/lib/deltaManagerProxyBase.js.map +1 -1
  224. package/lib/deltaScheduler.js +1 -1
  225. package/lib/deltaScheduler.js.map +1 -1
  226. package/lib/error.d.ts +14 -0
  227. package/lib/error.d.ts.map +1 -0
  228. package/lib/error.js +17 -0
  229. package/lib/error.js.map +1 -0
  230. package/lib/gc/garbageCollection.d.ts +4 -6
  231. package/lib/gc/garbageCollection.d.ts.map +1 -1
  232. package/lib/gc/garbageCollection.js +26 -25
  233. package/lib/gc/garbageCollection.js.map +1 -1
  234. package/lib/gc/gcConfigs.d.ts.map +1 -1
  235. package/lib/gc/gcConfigs.js +3 -1
  236. package/lib/gc/gcConfigs.js.map +1 -1
  237. package/lib/gc/gcDefinitions.d.ts +4 -2
  238. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  239. package/lib/gc/gcDefinitions.js.map +1 -1
  240. package/lib/gc/gcHelpers.js +1 -1
  241. package/lib/gc/gcHelpers.js.map +1 -1
  242. package/lib/gc/gcSummaryStateTracker.d.ts +4 -7
  243. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  244. package/lib/gc/gcSummaryStateTracker.js +16 -53
  245. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  246. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  247. package/lib/gc/gcTelemetry.js +2 -0
  248. package/lib/gc/gcTelemetry.js.map +1 -1
  249. package/lib/gc/gcUnreferencedStateTracker.js +1 -1
  250. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  251. package/lib/gc/index.d.ts +1 -1
  252. package/lib/gc/index.d.ts.map +1 -1
  253. package/lib/gc/index.js +1 -1
  254. package/lib/gc/index.js.map +1 -1
  255. package/lib/id-compressor/appendOnlySortedMap.d.ts +8 -30
  256. package/lib/id-compressor/appendOnlySortedMap.d.ts.map +1 -1
  257. package/lib/id-compressor/appendOnlySortedMap.js +25 -66
  258. package/lib/id-compressor/appendOnlySortedMap.js.map +1 -1
  259. package/lib/id-compressor/finalSpace.d.ts +29 -0
  260. package/lib/id-compressor/finalSpace.d.ts.map +1 -0
  261. package/lib/id-compressor/finalSpace.js +58 -0
  262. package/lib/id-compressor/finalSpace.js.map +1 -0
  263. package/lib/id-compressor/idCompressor.d.ts +25 -250
  264. package/lib/id-compressor/idCompressor.d.ts.map +1 -1
  265. package/lib/id-compressor/idCompressor.js +382 -1139
  266. package/lib/id-compressor/idCompressor.js.map +1 -1
  267. package/lib/id-compressor/identifiers.d.ts +32 -0
  268. package/lib/id-compressor/identifiers.d.ts.map +1 -0
  269. package/lib/id-compressor/identifiers.js +11 -0
  270. package/lib/id-compressor/identifiers.js.map +1 -0
  271. package/lib/id-compressor/index.d.ts +5 -6
  272. package/lib/id-compressor/index.d.ts.map +1 -1
  273. package/lib/id-compressor/index.js +5 -6
  274. package/lib/id-compressor/index.js.map +1 -1
  275. package/lib/id-compressor/persistanceUtilities.d.ts +22 -0
  276. package/lib/id-compressor/persistanceUtilities.d.ts.map +1 -0
  277. package/lib/id-compressor/persistanceUtilities.js +34 -0
  278. package/lib/id-compressor/persistanceUtilities.js.map +1 -0
  279. package/lib/id-compressor/sessionSpaceNormalizer.d.ts +46 -0
  280. package/lib/id-compressor/sessionSpaceNormalizer.d.ts.map +1 -0
  281. package/lib/id-compressor/sessionSpaceNormalizer.js +76 -0
  282. package/lib/id-compressor/sessionSpaceNormalizer.js.map +1 -0
  283. package/lib/id-compressor/sessions.d.ts +115 -0
  284. package/lib/id-compressor/sessions.d.ts.map +1 -0
  285. package/lib/id-compressor/sessions.js +290 -0
  286. package/lib/id-compressor/sessions.js.map +1 -0
  287. package/lib/id-compressor/utilities.d.ts +49 -0
  288. package/lib/id-compressor/utilities.d.ts.map +1 -0
  289. package/lib/id-compressor/utilities.js +148 -0
  290. package/lib/id-compressor/utilities.js.map +1 -0
  291. package/lib/index.d.ts +3 -3
  292. package/lib/index.d.ts.map +1 -1
  293. package/lib/index.js +2 -2
  294. package/lib/index.js.map +1 -1
  295. package/lib/opLifecycle/opCompressor.js +3 -3
  296. package/lib/opLifecycle/opCompressor.js.map +1 -1
  297. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  298. package/lib/opLifecycle/opDecompressor.js +2 -1
  299. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  300. package/lib/opLifecycle/opGroupingManager.js +1 -1
  301. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  302. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  303. package/lib/opLifecycle/opSplitter.js +2 -3
  304. package/lib/opLifecycle/opSplitter.js.map +1 -1
  305. package/lib/opLifecycle/outbox.d.ts +1 -0
  306. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  307. package/lib/opLifecycle/outbox.js +7 -8
  308. package/lib/opLifecycle/outbox.js.map +1 -1
  309. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  310. package/lib/opLifecycle/remoteMessageProcessor.js +12 -6
  311. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  312. package/lib/packageVersion.d.ts +1 -1
  313. package/lib/packageVersion.js +1 -1
  314. package/lib/packageVersion.js.map +1 -1
  315. package/lib/pendingStateManager.d.ts +12 -5
  316. package/lib/pendingStateManager.d.ts.map +1 -1
  317. package/lib/pendingStateManager.js +21 -8
  318. package/lib/pendingStateManager.js.map +1 -1
  319. package/lib/scheduleManager.d.ts.map +1 -1
  320. package/lib/scheduleManager.js +3 -3
  321. package/lib/scheduleManager.js.map +1 -1
  322. package/lib/summary/index.d.ts +3 -3
  323. package/lib/summary/index.d.ts.map +1 -1
  324. package/lib/summary/index.js +1 -1
  325. package/lib/summary/index.js.map +1 -1
  326. package/lib/summary/orderedClientElection.d.ts +2 -3
  327. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  328. package/lib/summary/orderedClientElection.js +3 -3
  329. package/lib/summary/orderedClientElection.js.map +1 -1
  330. package/lib/summary/runWhileConnectedCoordinator.js +1 -1
  331. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  332. package/lib/summary/runningSummarizer.d.ts +27 -4
  333. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  334. package/lib/summary/runningSummarizer.js +240 -68
  335. package/lib/summary/runningSummarizer.js.map +1 -1
  336. package/lib/summary/summarizer.d.ts +6 -5
  337. package/lib/summary/summarizer.d.ts.map +1 -1
  338. package/lib/summary/summarizer.js +69 -65
  339. package/lib/summary/summarizer.js.map +1 -1
  340. package/lib/summary/summarizerClientElection.d.ts +2 -2
  341. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  342. package/lib/summary/summarizerClientElection.js +1 -1
  343. package/lib/summary/summarizerClientElection.js.map +1 -1
  344. package/lib/summary/summarizerHeuristics.js +1 -1
  345. package/lib/summary/summarizerHeuristics.js.map +1 -1
  346. package/lib/summary/summarizerNode/index.d.ts +1 -1
  347. package/lib/summary/summarizerNode/index.d.ts.map +1 -1
  348. package/lib/summary/summarizerNode/index.js.map +1 -1
  349. package/lib/summary/summarizerNode/summarizerNode.d.ts +5 -14
  350. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  351. package/lib/summary/summarizerNode/summarizerNode.js +16 -93
  352. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  353. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +6 -30
  354. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  355. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  356. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +0 -11
  357. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  358. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -86
  359. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  360. package/lib/summary/summarizerTypes.d.ts +38 -25
  361. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  362. package/lib/summary/summarizerTypes.js.map +1 -1
  363. package/lib/summary/summaryCollection.d.ts +2 -3
  364. package/lib/summary/summaryCollection.d.ts.map +1 -1
  365. package/lib/summary/summaryCollection.js +2 -1
  366. package/lib/summary/summaryCollection.js.map +1 -1
  367. package/lib/summary/summaryFormat.js +1 -1
  368. package/lib/summary/summaryFormat.js.map +1 -1
  369. package/lib/summary/summaryGenerator.d.ts +10 -4
  370. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  371. package/lib/summary/summaryGenerator.js +46 -42
  372. package/lib/summary/summaryGenerator.js.map +1 -1
  373. package/lib/summary/summaryManager.d.ts +7 -6
  374. package/lib/summary/summaryManager.d.ts.map +1 -1
  375. package/lib/summary/summaryManager.js +26 -18
  376. package/lib/summary/summaryManager.js.map +1 -1
  377. package/package.json +30 -29
  378. package/src/batchTracker.ts +3 -2
  379. package/src/blobManager.ts +105 -185
  380. package/src/connectionTelemetry.ts +2 -1
  381. package/src/containerRuntime.ts +481 -267
  382. package/src/dataStore.ts +2 -3
  383. package/src/dataStoreContext.ts +5 -8
  384. package/src/dataStoreContexts.ts +2 -4
  385. package/src/dataStoreRegistry.ts +1 -1
  386. package/src/dataStores.ts +4 -7
  387. package/src/deltaManagerProxyBase.ts +1 -1
  388. package/src/deltaScheduler.ts +1 -1
  389. package/src/error.ts +18 -0
  390. package/src/gc/garbageCollection.ts +39 -41
  391. package/src/gc/gcConfigs.ts +4 -2
  392. package/src/gc/gcDefinitions.ts +4 -6
  393. package/src/gc/gcHelpers.ts +1 -1
  394. package/src/gc/gcSummaryStateTracker.ts +19 -65
  395. package/src/gc/gcTelemetry.ts +2 -0
  396. package/src/gc/gcUnreferencedStateTracker.ts +1 -1
  397. package/src/gc/index.ts +0 -1
  398. package/src/id-compressor/appendOnlySortedMap.ts +26 -87
  399. package/src/id-compressor/finalSpace.ts +67 -0
  400. package/src/id-compressor/idCompressor.ts +456 -1681
  401. package/src/id-compressor/identifiers.ts +42 -0
  402. package/src/id-compressor/index.ts +11 -20
  403. package/src/id-compressor/persistanceUtilities.ts +58 -0
  404. package/src/id-compressor/sessionSpaceNormalizer.ts +83 -0
  405. package/src/id-compressor/sessions.ts +405 -0
  406. package/src/id-compressor/utilities.ts +187 -0
  407. package/src/index.ts +7 -1
  408. package/src/opLifecycle/opCompressor.ts +3 -3
  409. package/src/opLifecycle/opDecompressor.ts +2 -1
  410. package/src/opLifecycle/opGroupingManager.ts +1 -1
  411. package/src/opLifecycle/opSplitter.ts +4 -4
  412. package/src/opLifecycle/outbox.ts +14 -11
  413. package/src/opLifecycle/remoteMessageProcessor.ts +19 -6
  414. package/src/packageVersion.ts +1 -1
  415. package/src/pendingStateManager.ts +50 -29
  416. package/src/scheduleManager.ts +6 -4
  417. package/src/summary/index.ts +4 -3
  418. package/src/summary/orderedClientElection.ts +8 -5
  419. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  420. package/src/summary/runningSummarizer.ts +273 -97
  421. package/src/summary/summarizer.ts +23 -12
  422. package/src/summary/summarizerClientElection.ts +2 -2
  423. package/src/summary/summarizerHeuristics.ts +1 -1
  424. package/src/summary/summarizerNode/index.ts +1 -2
  425. package/src/summary/summarizerNode/summarizerNode.ts +23 -145
  426. package/src/summary/summarizerNode/summarizerNodeUtils.ts +7 -38
  427. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +3 -123
  428. package/src/summary/summarizerTypes.ts +40 -25
  429. package/src/summary/summaryCollection.ts +3 -3
  430. package/src/summary/summaryFormat.ts +1 -1
  431. package/src/summary/summaryGenerator.ts +52 -55
  432. package/src/summary/summaryManager.ts +36 -13
  433. package/dist/id-compressor/idRange.d.ts +0 -11
  434. package/dist/id-compressor/idRange.d.ts.map +0 -1
  435. package/dist/id-compressor/idRange.js +0 -29
  436. package/dist/id-compressor/idRange.js.map +0 -1
  437. package/dist/id-compressor/numericUuid.d.ts +0 -59
  438. package/dist/id-compressor/numericUuid.d.ts.map +0 -1
  439. package/dist/id-compressor/numericUuid.js +0 -325
  440. package/dist/id-compressor/numericUuid.js.map +0 -1
  441. package/dist/id-compressor/sessionIdNormalizer.d.ts +0 -138
  442. package/dist/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
  443. package/dist/id-compressor/sessionIdNormalizer.js +0 -483
  444. package/dist/id-compressor/sessionIdNormalizer.js.map +0 -1
  445. package/dist/id-compressor/utils.d.ts +0 -57
  446. package/dist/id-compressor/utils.d.ts.map +0 -1
  447. package/dist/id-compressor/utils.js +0 -90
  448. package/dist/id-compressor/utils.js.map +0 -1
  449. package/dist/id-compressor/uuidUtilities.d.ts +0 -28
  450. package/dist/id-compressor/uuidUtilities.d.ts.map +0 -1
  451. package/dist/id-compressor/uuidUtilities.js +0 -104
  452. package/dist/id-compressor/uuidUtilities.js.map +0 -1
  453. package/lib/id-compressor/idRange.d.ts +0 -11
  454. package/lib/id-compressor/idRange.d.ts.map +0 -1
  455. package/lib/id-compressor/idRange.js +0 -25
  456. package/lib/id-compressor/idRange.js.map +0 -1
  457. package/lib/id-compressor/numericUuid.d.ts +0 -59
  458. package/lib/id-compressor/numericUuid.d.ts.map +0 -1
  459. package/lib/id-compressor/numericUuid.js +0 -315
  460. package/lib/id-compressor/numericUuid.js.map +0 -1
  461. package/lib/id-compressor/sessionIdNormalizer.d.ts +0 -138
  462. package/lib/id-compressor/sessionIdNormalizer.d.ts.map +0 -1
  463. package/lib/id-compressor/sessionIdNormalizer.js +0 -479
  464. package/lib/id-compressor/sessionIdNormalizer.js.map +0 -1
  465. package/lib/id-compressor/utils.d.ts +0 -57
  466. package/lib/id-compressor/utils.d.ts.map +0 -1
  467. package/lib/id-compressor/utils.js +0 -79
  468. package/lib/id-compressor/utils.js.map +0 -1
  469. package/lib/id-compressor/uuidUtilities.d.ts +0 -28
  470. package/lib/id-compressor/uuidUtilities.d.ts.map +0 -1
  471. package/lib/id-compressor/uuidUtilities.js +0 -96
  472. package/lib/id-compressor/uuidUtilities.js.map +0 -1
  473. package/src/id-compressor/idRange.ts +0 -35
  474. package/src/id-compressor/numericUuid.ts +0 -383
  475. package/src/id-compressor/sessionIdNormalizer.ts +0 -609
  476. package/src/id-compressor/utils.ts +0 -114
  477. package/src/id-compressor/uuidUtilities.ts +0 -120
@@ -0,0 +1,187 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /* eslint-disable no-bitwise */
7
+ import { assert } from "@fluidframework/core-utils";
8
+ import { SessionId, StableId } from "@fluidframework/runtime-definitions";
9
+ import { v4 } from "uuid";
10
+ import { LocalCompressedId, NumericUuid } from "./identifiers";
11
+
12
+ const hexadecimalCharCodes = Array.from("09afAF").map((c) => c.charCodeAt(0)) as [
13
+ zero: number,
14
+ nine: number,
15
+ a: number,
16
+ f: number,
17
+ A: number,
18
+ F: number,
19
+ ];
20
+
21
+ function isHexadecimalCharacter(charCode: number): boolean {
22
+ return (
23
+ (charCode >= hexadecimalCharCodes[0] && charCode <= hexadecimalCharCodes[1]) ||
24
+ (charCode >= hexadecimalCharCodes[2] && charCode <= hexadecimalCharCodes[3]) ||
25
+ (charCode >= hexadecimalCharCodes[4] && charCode <= hexadecimalCharCodes[5])
26
+ );
27
+ }
28
+
29
+ /**
30
+ * Generate a random session ID
31
+ */
32
+ export function createSessionId(): SessionId {
33
+ return assertIsStableId(v4()) as SessionId;
34
+ }
35
+
36
+ /**
37
+ * Asserts that the given string is a stable ID.
38
+ */
39
+ export function assertIsStableId(stableId: string): StableId {
40
+ assert(isStableId(stableId), 0x4a3 /* Expected a StableId */);
41
+ return stableId;
42
+ }
43
+
44
+ /**
45
+ * Asserts that the given string is a stable ID.
46
+ */
47
+ export function assertIsSessionId(stableId: string): SessionId {
48
+ assertIsStableId(stableId);
49
+ return stableId as SessionId;
50
+ }
51
+
52
+ /**
53
+ * Generate a random stable ID
54
+ */
55
+ export function generateStableId(): StableId {
56
+ return assertIsStableId(v4());
57
+ }
58
+
59
+ /**
60
+ * Returns true iff the given string is a valid Version 4, variant 2 UUID
61
+ * 'xxxxxxxx-xxxx-4xxx-vxxx-xxxxxxxxxxxx'
62
+ */
63
+ export function isStableId(str: string): str is StableId {
64
+ if (str.length !== 36) {
65
+ return false;
66
+ }
67
+
68
+ for (let i = 0; i < str.length; i++) {
69
+ switch (i) {
70
+ case 8:
71
+ case 13:
72
+ case 18:
73
+ case 23:
74
+ if (str.charAt(i) !== "-") {
75
+ return false;
76
+ }
77
+ break;
78
+
79
+ case 14:
80
+ if (str.charAt(i) !== "4") {
81
+ return false;
82
+ }
83
+ break;
84
+
85
+ case 19: {
86
+ const char = str.charAt(i);
87
+ if (char !== "8" && char !== "9" && char !== "a" && char !== "b") {
88
+ return false;
89
+ }
90
+ break;
91
+ }
92
+
93
+ default:
94
+ if (!isHexadecimalCharacter(str.charCodeAt(i))) {
95
+ return false;
96
+ }
97
+ break;
98
+ }
99
+ }
100
+
101
+ return true;
102
+ }
103
+
104
+ /**
105
+ * A numeric comparator used for sorting in ascending order.
106
+ *
107
+ * Handles +/-0 like Map: -0 is equal to +0.
108
+ */
109
+ export function compareFiniteNumbers<T extends number>(a: T, b: T): number {
110
+ return a - b;
111
+ }
112
+
113
+ /**
114
+ * Compares strings lexically to form a strict partial ordering.
115
+ */
116
+ export function compareStrings<T extends string>(a: T, b: T): number {
117
+ return a > b ? 1 : a === b ? 0 : -1;
118
+ }
119
+
120
+ /**
121
+ * Compares bigints to form a strict partial ordering.
122
+ */
123
+ export function compareBigints<T extends bigint>(a: T, b: T): number {
124
+ return a > b ? 1 : a === b ? 0 : -1;
125
+ }
126
+
127
+ export function genCountFromLocalId(localId: LocalCompressedId): number {
128
+ return -localId;
129
+ }
130
+
131
+ export function localIdFromGenCount(genCount: number): LocalCompressedId {
132
+ return -genCount as LocalCompressedId;
133
+ }
134
+
135
+ // xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
136
+ const versionMask = 0x4n << (19n * 4n); // Version 4
137
+ const variantMask = 0x8n << (15n * 4n); // Variant RFC4122 (1 0 x x)
138
+ const upperMask = 0xffffffffffffn << (20n * 4n);
139
+ // Upper mask when version/variant bits are removed
140
+ const strippedUpperMask = upperMask >> 6n;
141
+ const middieBittiesMask = 0xfffn << (16n * 4n);
142
+ // Middie mask when version/variant bits are removed
143
+ const strippedMiddieBittiesMask = middieBittiesMask >> 2n;
144
+ // Note: leading character should be 3 to mask at 0011
145
+ // The more-significant half of the N nibble is used to denote the variant (10xx)
146
+ const lowerMask = 0x3fffffffffffffffn;
147
+
148
+ export function numericUuidFromStableId(stableId: StableId): NumericUuid {
149
+ const uuidU128 = BigInt(`0x${stableId.replace(/-/g, "")}`);
150
+ const upperMasked = uuidU128 & upperMask;
151
+ const middieBittiesMasked = uuidU128 & middieBittiesMask;
152
+ const lowerMasked = uuidU128 & lowerMask;
153
+
154
+ const upperMaskedPlaced = upperMasked >> 6n;
155
+ const middieBittiesMaskedPlaced = middieBittiesMasked >> 2n;
156
+
157
+ const id = upperMaskedPlaced | middieBittiesMaskedPlaced | lowerMasked;
158
+ return id as NumericUuid;
159
+ }
160
+
161
+ export function stableIdFromNumericUuid(numericUuid: NumericUuid): StableId {
162
+ // bitwise reverse transform
163
+ const upperMasked = (numericUuid & strippedUpperMask) << 6n;
164
+ const middieBittiesMasked = (numericUuid & strippedMiddieBittiesMask) << 2n;
165
+ const lowerMasked = numericUuid & lowerMask;
166
+ const uuidU128 = upperMasked | versionMask | middieBittiesMasked | variantMask | lowerMasked;
167
+ // Pad to 32 characters, inserting leading zeroes if needed
168
+ const uuidString = uuidU128.toString(16).padStart(32, "0");
169
+ return `${uuidString.substring(0, 8)}-${uuidString.substring(8, 12)}-${uuidString.substring(
170
+ 12,
171
+ 16,
172
+ )}-${uuidString.substring(16, 20)}-${uuidString.substring(20, 32)}` as StableId;
173
+ }
174
+
175
+ export function offsetNumericUuid(numericUuid: NumericUuid, offset: number): NumericUuid {
176
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
177
+ return (numericUuid + BigInt(offset)) as NumericUuid;
178
+ }
179
+
180
+ export function subtractNumericUuids(a: NumericUuid, b: NumericUuid): NumericUuid {
181
+ return (a - b) as NumericUuid;
182
+ }
183
+
184
+ export function addNumericUuids(a: NumericUuid, b: NumericUuid): NumericUuid {
185
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
186
+ return (a + b) as NumericUuid;
187
+ }
package/src/index.ts CHANGED
@@ -6,6 +6,8 @@
6
6
  export {
7
7
  ContainerMessageType,
8
8
  ContainerRuntimeMessage,
9
+ IContainerRuntimeMessageCompatDetails,
10
+ CompatModeBehavior,
9
11
  ISummaryRuntimeOptions,
10
12
  ISummaryBaseConfiguration,
11
13
  ISummaryConfigurationHeuristics,
@@ -18,7 +20,9 @@ export {
18
20
  ContainerRuntime,
19
21
  RuntimeHeaders,
20
22
  AllowTombstoneRequestHeaderKey,
23
+ AllowInactiveRequestHeaderKey,
21
24
  TombstoneResponseHeaderKey,
25
+ InactiveResponseHeaderKey,
22
26
  ISummaryConfiguration,
23
27
  DefaultSummaryConfiguration,
24
28
  ICompressionRuntimeOptions,
@@ -68,6 +72,8 @@ export {
68
72
  ICancellableSummarizerController,
69
73
  SubmitSummaryFailureData,
70
74
  SummaryStage,
75
+ IRetriableFailureResult,
76
+ ISummarizeEventProps,
71
77
  } from "./summary";
78
+ export { isStableId, generateStableId, assertIsStableId } from "./id-compressor";
72
79
  export { IChunkedOp, unpackRuntimeMessage } from "./opLifecycle";
73
- export { generateStableId, isStableId, assertIsStableId } from "./id-compressor";
@@ -3,9 +3,9 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { createChildLogger } from "@fluidframework/telemetry-utils";
7
- import { assert, IsoBuffer } from "@fluidframework/common-utils";
8
- import { UsageError } from "@fluidframework/container-utils";
6
+ import { createChildLogger, UsageError } from "@fluidframework/telemetry-utils";
7
+ import { assert } from "@fluidframework/core-utils";
8
+ import { IsoBuffer } from "@fluid-internal/client-utils";
9
9
  import { compress } from "lz4js";
10
10
  import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
11
11
  import { CompressionAlgorithms } from "../containerRuntime";
@@ -5,7 +5,8 @@
5
5
 
6
6
  import { decompress } from "lz4js";
7
7
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
8
- import { assert, IsoBuffer, Uint8ArrayToString } from "@fluidframework/common-utils";
8
+ import { assert } from "@fluidframework/core-utils";
9
+ import { IsoBuffer, Uint8ArrayToString } from "@fluid-internal/client-utils";
9
10
  import { createChildLogger } from "@fluidframework/telemetry-utils";
10
11
  import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
11
12
  import { CompressionAlgorithms } from "../containerRuntime";
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert } from "@fluidframework/common-utils";
6
+ import { assert } from "@fluidframework/core-utils";
7
7
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
8
8
  import { ContainerMessageType } from "..";
9
9
  import { IBatch } from "./definitions";
@@ -3,13 +3,13 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { createChildLogger } from "@fluidframework/telemetry-utils";
7
- import { assert } from "@fluidframework/common-utils";
8
- import { IBatchMessage } from "@fluidframework/container-definitions";
9
6
  import {
7
+ createChildLogger,
10
8
  DataCorruptionError,
11
9
  extractSafePropertiesFromMessage,
12
- } from "@fluidframework/container-utils";
10
+ } from "@fluidframework/telemetry-utils";
11
+ import { assert } from "@fluidframework/core-utils";
12
+ import { IBatchMessage } from "@fluidframework/container-definitions";
13
13
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
14
14
  import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
15
15
  import { ContainerMessageType, ContainerRuntimeMessage } from "../containerRuntime";
@@ -3,10 +3,14 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { createChildMonitoringContext, MonitoringContext } from "@fluidframework/telemetry-utils";
7
- import { assert } from "@fluidframework/common-utils";
6
+ import {
7
+ createChildMonitoringContext,
8
+ GenericError,
9
+ MonitoringContext,
10
+ UsageError,
11
+ } from "@fluidframework/telemetry-utils";
12
+ import { assert } from "@fluidframework/core-utils";
8
13
  import { IBatchMessage, ICriticalContainerError } from "@fluidframework/container-definitions";
9
- import { GenericError, UsageError } from "@fluidframework/container-utils";
10
14
  import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
11
15
  import { ICompressionRuntimeOptions } from "../containerRuntime";
12
16
  import { IPendingBatchMessage, PendingStateManager } from "../pendingStateManager";
@@ -63,9 +67,8 @@ export function getLongStack<T>(action: () => T, length: number = 50): T {
63
67
  if (
64
68
  (
65
69
  Object.getOwnPropertyDescriptor(errorObj, "stackTraceLimit") ||
66
- Object.getOwnPropertyDescriptor(Object.getPrototypeOf(errorObj), "stackTraceLimit") ||
67
- {}
68
- ).writable !== true
70
+ Object.getOwnPropertyDescriptor(Object.getPrototypeOf(errorObj), "stackTraceLimit")
71
+ )?.writable !== true
69
72
  ) {
70
73
  return action();
71
74
  }
@@ -111,12 +114,12 @@ export class Outbox {
111
114
  this.blobAttachBatch = new BatchManager({ hardLimit });
112
115
  }
113
116
 
117
+ public get messageCount(): number {
118
+ return this.attachFlowBatch.length + this.mainBatch.length + this.blobAttachBatch.length;
119
+ }
120
+
114
121
  public get isEmpty(): boolean {
115
- return (
116
- this.attachFlowBatch.length === 0 &&
117
- this.mainBatch.length === 0 &&
118
- this.blobAttachBatch.length === 0
119
- );
122
+ return this.messageCount === 0;
120
123
  }
121
124
 
122
125
  /**
@@ -4,7 +4,11 @@
4
4
  */
5
5
 
6
6
  import { ISequencedDocumentMessage, MessageType } from "@fluidframework/protocol-definitions";
7
- import { ContainerMessageType, ContainerRuntimeMessage } from "../containerRuntime";
7
+ import {
8
+ ContainerMessageType,
9
+ ContainerRuntimeMessage,
10
+ SequencedContainerRuntimeMessage,
11
+ } from "../containerRuntime";
8
12
  import { OpDecompressor } from "./opDecompressor";
9
13
  import { OpGroupingManager } from "./opGroupingManager";
10
14
  import { OpSplitter } from "./opSplitter";
@@ -98,14 +102,23 @@ const copy = (remoteMessage: ISequencedDocumentMessage): ISequencedDocumentMessa
98
102
  };
99
103
 
100
104
  /**
101
- * For a given message, it moves the nested contents and type on level up.
105
+ * For a given message, it moves the nested ContainerRuntimeMessage props one level up.
102
106
  *
107
+ * The return type illustrates the assumption that the message param
108
+ * becomes a ContainerRuntimeMessage by the time the function returns
109
+ * (but there is no runtime validation of the 'type' or 'compatDetails' values)
103
110
  */
104
- const unpack = (message: ISequencedDocumentMessage) => {
111
+ function unpack(
112
+ message: ISequencedDocumentMessage,
113
+ ): asserts message is SequencedContainerRuntimeMessage {
105
114
  const innerContents = message.contents as ContainerRuntimeMessage;
106
- message.type = innerContents.type;
107
- message.contents = innerContents.contents;
108
- };
115
+
116
+ // We're going to turn message into a SequencedContainerRuntimeMessage in-place
117
+ const sequencedContainerRuntimeMessage = message as SequencedContainerRuntimeMessage;
118
+ sequencedContainerRuntimeMessage.type = innerContents.type;
119
+ sequencedContainerRuntimeMessage.contents = innerContents.contents;
120
+ sequencedContainerRuntimeMessage.compatDetails = innerContents.compatDetails;
121
+ }
109
122
 
110
123
  /**
111
124
  * Unpacks runtime messages.
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/container-runtime";
9
- export const pkgVersion = "2.0.0-internal.6.1.1";
9
+ export const pkgVersion = "2.0.0-internal.6.3.0";
@@ -3,15 +3,15 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IDisposable } from "@fluidframework/common-definitions";
7
- import { assert } from "@fluidframework/common-utils";
6
+ import Deque from "double-ended-queue";
7
+
8
+ import { IDisposable } from "@fluidframework/core-interfaces";
9
+ import { assert, Lazy } from "@fluidframework/core-utils";
8
10
  import { ICriticalContainerError } from "@fluidframework/container-definitions";
9
- import { DataProcessingError } from "@fluidframework/container-utils";
10
- import { Lazy } from "@fluidframework/core-utils";
11
11
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
12
- import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
13
- import Deque from "double-ended-queue";
14
- import { ContainerMessageType } from "./containerRuntime";
12
+ import { DataProcessingError, ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
13
+
14
+ import { ContainerMessageType, SequencedContainerRuntimeMessage } from "./containerRuntime";
15
15
  import { pkgVersion } from "./packageVersion";
16
16
  import { IBatchMetadata } from "./metadata";
17
17
 
@@ -81,15 +81,17 @@ export interface IRuntimeStateHandler {
81
81
  export class PendingStateManager implements IDisposable {
82
82
  private readonly pendingMessages = new Deque<IPendingMessageNew>();
83
83
  private readonly initialMessages = new Deque<IPendingMessageNew>();
84
+
85
+ /**
86
+ * Sequenced local ops that are saved when stashing since pending ops may depend on them
87
+ */
88
+ private savedOps: IPendingMessageNew[] = [];
89
+
84
90
  private readonly disposeOnce = new Lazy<void>(() => {
85
91
  this.initialMessages.clear();
86
92
  this.pendingMessages.clear();
87
93
  });
88
94
 
89
- public get pendingMessagesCount(): number {
90
- return this.pendingMessages.length;
91
- }
92
-
93
95
  // Indicates whether we are processing a batch.
94
96
  private isProcessingBatch: boolean = false;
95
97
 
@@ -99,12 +101,20 @@ export class PendingStateManager implements IDisposable {
99
101
 
100
102
  private clientId: string | undefined;
101
103
 
104
+ /**
105
+ * The pending messages count. Includes `pendingMessages` and `initialMessages` to keep in sync with
106
+ * 'hasPendingMessages'.
107
+ */
108
+ public get pendingMessagesCount(): number {
109
+ return this.pendingMessages.length + this.initialMessages.length;
110
+ }
111
+
102
112
  /**
103
113
  * Called to check if there are any pending messages in the pending message queue.
104
114
  * @returns A boolean indicating whether there are messages or not.
105
115
  */
106
116
  public hasPendingMessages(): boolean {
107
- return !this.pendingMessages.isEmpty() || !this.initialMessages.isEmpty();
117
+ return this.pendingMessagesCount !== 0;
108
118
  }
109
119
 
110
120
  public getLocalState(): IPendingLocalState | undefined {
@@ -114,20 +124,22 @@ export class PendingStateManager implements IDisposable {
114
124
  );
115
125
  if (!this.pendingMessages.isEmpty()) {
116
126
  return {
117
- pendingStates: this.pendingMessages.toArray().map((message) => {
118
- let content = message.content;
119
- const parsedContent = JSON.parse(content);
120
- // IdAllocations need their localOpMetadata stashed in the contents
121
- // of the op to correctly resume the session when processing stashed ops
122
- if (parsedContent.type === ContainerMessageType.IdAllocation) {
123
- parsedContent.contents.stashedState = message.localOpMetadata;
124
- content = JSON.stringify(parsedContent);
125
- }
126
-
127
- // delete localOpMetadata since it may not be serializable
128
- // and will be regenerated by applyStashedOp()
129
- return { ...message, content, localOpMetadata: undefined };
130
- }),
127
+ pendingStates: [...this.savedOps, ...this.pendingMessages.toArray()].map(
128
+ (message) => {
129
+ let content = message.content;
130
+ const parsedContent = JSON.parse(content);
131
+ // IdAllocations need their localOpMetadata stashed in the contents
132
+ // of the op to correctly resume the session when processing stashed ops
133
+ if (parsedContent.type === ContainerMessageType.IdAllocation) {
134
+ parsedContent.contents.stashedState = message.localOpMetadata;
135
+ content = JSON.stringify(parsedContent);
136
+ }
137
+
138
+ // delete localOpMetadata since it may not be serializable
139
+ // and will be regenerated by applyStashedOp()
140
+ return { ...message, content, localOpMetadata: undefined };
141
+ },
142
+ ),
131
143
  };
132
144
  }
133
145
  }
@@ -230,7 +242,7 @@ export class PendingStateManager implements IDisposable {
230
242
  * the batch information was preserved for batch messages.
231
243
  * @param message - The message that got ack'd and needs to be processed.
232
244
  */
233
- public processPendingLocalMessage(message: ISequencedDocumentMessage): unknown {
245
+ public processPendingLocalMessage(message: SequencedContainerRuntimeMessage): unknown {
234
246
  // Pre-processing part - This may be the start of a batch.
235
247
  this.maybeProcessBatchBegin(message);
236
248
 
@@ -240,10 +252,16 @@ export class PendingStateManager implements IDisposable {
240
252
  pendingMessage !== undefined,
241
253
  0x169 /* "No pending message found for this remote message" */,
242
254
  );
255
+ this.savedOps.push(pendingMessage);
256
+
243
257
  this.pendingMessages.shift();
244
258
 
245
- const messageContent = JSON.stringify({ type: message.type, contents: message.contents });
246
- // Stringified content does not match
259
+ // IMPORTANT: Order matters here, this must match the order of the properties used
260
+ // when submitting the message.
261
+ const { type, contents, compatDetails } = message;
262
+ const messageContent = JSON.stringify({ type, contents, compatDetails });
263
+
264
+ // Stringified content should match
247
265
  if (pendingMessage.content !== messageContent) {
248
266
  this.stateHandler.close(
249
267
  DataProcessingError.create(
@@ -424,6 +442,9 @@ export class PendingStateManager implements IDisposable {
424
442
  }
425
443
  }
426
444
 
445
+ // pending ops should no longer depend on previous sequenced local ops after resubmit
446
+ this.savedOps = [];
447
+
427
448
  // We replayPendingStates on read connections too - we expect these to get nack'd though, and to then reconnect
428
449
  // on a write connection and replay again. This filters out the replay that happens on the read connection so
429
450
  // we only see the replays on write connections (that have a chance to go through).
@@ -5,14 +5,16 @@
5
5
  import { EventEmitter } from "events";
6
6
  import { IDeltaManager } from "@fluidframework/container-definitions";
7
7
  import { IDocumentMessage, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
8
- import { ITelemetryLoggerExt, createChildLogger } from "@fluidframework/telemetry-utils";
9
- import { assert, performance } from "@fluidframework/common-utils";
10
- import { isRuntimeMessage } from "@fluidframework/driver-utils";
11
8
  import {
9
+ createChildLogger,
12
10
  DataCorruptionError,
13
11
  DataProcessingError,
14
12
  extractSafePropertiesFromMessage,
15
- } from "@fluidframework/container-utils";
13
+ ITelemetryLoggerExt,
14
+ } from "@fluidframework/telemetry-utils";
15
+ import { assert } from "@fluidframework/core-utils";
16
+ import { performance } from "@fluid-internal/client-utils";
17
+ import { isRuntimeMessage } from "@fluidframework/driver-utils";
16
18
  import { DeltaScheduler } from "./deltaScheduler";
17
19
  import { pkgVersion } from "./packageVersion";
18
20
  import { IBatchMetadata } from "./metadata";
@@ -11,7 +11,7 @@ export {
11
11
  OrderedClientCollection,
12
12
  OrderedClientElection,
13
13
  } from "./orderedClientElection";
14
- export { RunningSummarizer } from "./runningSummarizer";
14
+ export { defaultMaxAttemptsForSubmitFailures, RunningSummarizer } from "./runningSummarizer";
15
15
  export {
16
16
  ICancellableSummarizerController,
17
17
  neverCancelledSummaryToken,
@@ -28,10 +28,9 @@ export { SummarizeHeuristicData, SummarizeHeuristicRunner } from "./summarizerHe
28
28
  export {
29
29
  createRootSummarizerNode,
30
30
  createRootSummarizerNodeWithGC,
31
- IFetchSnapshotResult,
31
+ IRefreshSummaryResult,
32
32
  IRootSummarizerNode,
33
33
  IRootSummarizerNodeWithGC,
34
- RefreshSummaryResult,
35
34
  } from "./summarizerNode";
36
35
  export {
37
36
  IConnectableRuntime,
@@ -64,6 +63,8 @@ export {
64
63
  SummarizeResultPart,
65
64
  SubmitSummaryFailureData,
66
65
  SummaryStage,
66
+ IRetriableFailureResult,
67
+ ISummarizeEventProps,
67
68
  } from "./summarizerTypes";
68
69
  export {
69
70
  IAckedSummary,
@@ -3,13 +3,16 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  /* eslint-disable @rushstack/no-new-null */
6
- import { IEvent, IEventProvider } from "@fluidframework/common-definitions";
7
- import { ITelemetryLoggerExt, createChildLogger } from "@fluidframework/telemetry-utils";
8
- import { assert, TypedEventEmitter } from "@fluidframework/common-utils";
6
+ import { IEvent, IEventProvider, ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
7
+ import {
8
+ ITelemetryLoggerExt,
9
+ createChildLogger,
10
+ UsageError,
11
+ } from "@fluidframework/telemetry-utils";
12
+ import { assert } from "@fluidframework/core-utils";
13
+ import { TypedEventEmitter } from "@fluid-internal/client-utils";
9
14
  import { IDeltaManager } from "@fluidframework/container-definitions";
10
- import { UsageError } from "@fluidframework/container-utils";
11
15
  import { IClient, IQuorumClients, ISequencedClient } from "@fluidframework/protocol-definitions";
12
- import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
13
16
  import { summarizerClientType } from "./summarizerClientElection";
14
17
 
15
18
  // helper types for recursive readonly.
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert, Deferred } from "@fluidframework/common-utils";
6
+ import { assert, Deferred } from "@fluidframework/core-utils";
7
7
  import {
8
8
  SummarizerStopReason,
9
9
  IConnectableRuntime,