@fluidframework/container-runtime 2.0.0-rc.1.0.4 → 2.0.0-rc.2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/{.eslintrc.js → .eslintrc.cjs} +5 -5
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +54 -0
  4. package/README.md +45 -0
  5. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  6. package/api-extractor-lint.json +1 -1
  7. package/api-extractor.json +1 -1
  8. package/api-report/container-runtime.api.md +68 -30
  9. package/dist/batchTracker.d.ts +1 -2
  10. package/dist/batchTracker.d.ts.map +1 -1
  11. package/dist/batchTracker.js.map +1 -1
  12. package/dist/blobManager.js.map +1 -1
  13. package/dist/channelCollection.d.ts +223 -0
  14. package/dist/channelCollection.d.ts.map +1 -0
  15. package/dist/{dataStores.js → channelCollection.js} +399 -83
  16. package/dist/channelCollection.js.map +1 -0
  17. package/dist/connectionTelemetry.d.ts +11 -1
  18. package/dist/connectionTelemetry.d.ts.map +1 -1
  19. package/dist/connectionTelemetry.js +42 -4
  20. package/dist/connectionTelemetry.js.map +1 -1
  21. package/dist/container-runtime-alpha.d.ts +98 -40
  22. package/dist/container-runtime-beta.d.ts +27 -9
  23. package/dist/container-runtime-public.d.ts +27 -9
  24. package/dist/container-runtime-untrimmed.d.ts +123 -40
  25. package/dist/containerHandleContext.d.ts +1 -1
  26. package/dist/containerHandleContext.d.ts.map +1 -1
  27. package/dist/containerHandleContext.js.map +1 -1
  28. package/dist/containerRuntime.d.ts +79 -55
  29. package/dist/containerRuntime.d.ts.map +1 -1
  30. package/dist/containerRuntime.js +541 -411
  31. package/dist/containerRuntime.js.map +1 -1
  32. package/dist/dataStore.d.ts +2 -3
  33. package/dist/dataStore.d.ts.map +1 -1
  34. package/dist/dataStore.js +12 -11
  35. package/dist/dataStore.js.map +1 -1
  36. package/dist/dataStoreContext.d.ts +71 -30
  37. package/dist/dataStoreContext.d.ts.map +1 -1
  38. package/dist/dataStoreContext.js +182 -141
  39. package/dist/dataStoreContext.js.map +1 -1
  40. package/dist/dataStoreContexts.d.ts +1 -1
  41. package/dist/dataStoreContexts.d.ts.map +1 -1
  42. package/dist/dataStoreContexts.js.map +1 -1
  43. package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
  44. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  45. package/dist/deltaManagerSummarizerProxy.js +91 -5
  46. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  47. package/dist/gc/garbageCollection.d.ts +22 -5
  48. package/dist/gc/garbageCollection.d.ts.map +1 -1
  49. package/dist/gc/garbageCollection.js +134 -75
  50. package/dist/gc/garbageCollection.js.map +1 -1
  51. package/dist/gc/gcConfigs.d.ts +2 -2
  52. package/dist/gc/gcConfigs.d.ts.map +1 -1
  53. package/dist/gc/gcConfigs.js +21 -21
  54. package/dist/gc/gcConfigs.js.map +1 -1
  55. package/dist/gc/gcDefinitions.d.ts +29 -6
  56. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  57. package/dist/gc/gcDefinitions.js +5 -1
  58. package/dist/gc/gcDefinitions.js.map +1 -1
  59. package/dist/gc/gcHelpers.d.ts +2 -2
  60. package/dist/gc/gcHelpers.d.ts.map +1 -1
  61. package/dist/gc/gcHelpers.js.map +1 -1
  62. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
  63. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
  64. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  65. package/dist/gc/gcSummaryStateTracker.d.ts +12 -5
  66. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  67. package/dist/gc/gcSummaryStateTracker.js +18 -6
  68. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  69. package/dist/gc/gcTelemetry.d.ts +7 -7
  70. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  71. package/dist/gc/gcTelemetry.js +20 -20
  72. package/dist/gc/gcTelemetry.js.map +1 -1
  73. package/dist/gc/gcUnreferencedStateTracker.d.ts +6 -1
  74. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  75. package/dist/gc/gcUnreferencedStateTracker.js +22 -11
  76. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  77. package/dist/gc/index.d.ts +8 -8
  78. package/dist/gc/index.d.ts.map +1 -1
  79. package/dist/gc/index.js +40 -38
  80. package/dist/gc/index.js.map +1 -1
  81. package/dist/index.d.ts +8 -20
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +28 -40
  84. package/dist/index.js.map +1 -1
  85. package/dist/messageTypes.d.ts +4 -4
  86. package/dist/messageTypes.d.ts.map +1 -1
  87. package/dist/messageTypes.js.map +1 -1
  88. package/dist/opLifecycle/batchManager.d.ts +2 -2
  89. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  90. package/dist/opLifecycle/batchManager.js.map +1 -1
  91. package/dist/opLifecycle/definitions.d.ts +2 -2
  92. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  93. package/dist/opLifecycle/definitions.js.map +1 -1
  94. package/dist/opLifecycle/index.d.ts +8 -8
  95. package/dist/opLifecycle/index.d.ts.map +1 -1
  96. package/dist/opLifecycle/index.js +18 -18
  97. package/dist/opLifecycle/index.js.map +1 -1
  98. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  99. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  100. package/dist/opLifecycle/opCompressor.js +4 -4
  101. package/dist/opLifecycle/opCompressor.js.map +1 -1
  102. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  103. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  104. package/dist/opLifecycle/opDecompressor.js +3 -3
  105. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  106. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  107. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  108. package/dist/opLifecycle/opGroupingManager.js +1 -10
  109. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  110. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  111. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  112. package/dist/opLifecycle/opSplitter.js +5 -5
  113. package/dist/opLifecycle/opSplitter.js.map +1 -1
  114. package/dist/opLifecycle/outbox.d.ts +7 -7
  115. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  116. package/dist/opLifecycle/outbox.js +20 -12
  117. package/dist/opLifecycle/outbox.js.map +1 -1
  118. package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  119. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  120. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  121. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  122. package/dist/package.json +3 -0
  123. package/dist/packageVersion.d.ts +1 -1
  124. package/dist/packageVersion.js +1 -1
  125. package/dist/packageVersion.js.map +1 -1
  126. package/dist/pendingStateManager.d.ts +2 -1
  127. package/dist/pendingStateManager.d.ts.map +1 -1
  128. package/dist/pendingStateManager.js +18 -10
  129. package/dist/pendingStateManager.js.map +1 -1
  130. package/dist/scheduleManager.d.ts +1 -2
  131. package/dist/scheduleManager.d.ts.map +1 -1
  132. package/dist/scheduleManager.js +5 -5
  133. package/dist/scheduleManager.js.map +1 -1
  134. package/dist/summary/index.d.ts +12 -12
  135. package/dist/summary/index.d.ts.map +1 -1
  136. package/dist/summary/index.js +43 -43
  137. package/dist/summary/index.js.map +1 -1
  138. package/dist/summary/orderedClientElection.js +8 -8
  139. package/dist/summary/orderedClientElection.js.map +1 -1
  140. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  141. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  142. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  143. package/dist/summary/runningSummarizer.d.ts +11 -10
  144. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  145. package/dist/summary/runningSummarizer.js +114 -81
  146. package/dist/summary/runningSummarizer.js.map +1 -1
  147. package/dist/summary/summarizer.d.ts +4 -4
  148. package/dist/summary/summarizer.d.ts.map +1 -1
  149. package/dist/summary/summarizer.js +6 -6
  150. package/dist/summary/summarizer.js.map +1 -1
  151. package/dist/summary/summarizerClientElection.d.ts +2 -2
  152. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  153. package/dist/summary/summarizerClientElection.js.map +1 -1
  154. package/dist/summary/summarizerHeuristics.d.ts +3 -3
  155. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  156. package/dist/summary/summarizerHeuristics.js.map +1 -1
  157. package/dist/summary/summarizerNode/index.d.ts +3 -3
  158. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  159. package/dist/summary/summarizerNode/index.js +4 -4
  160. package/dist/summary/summarizerNode/index.js.map +1 -1
  161. package/dist/summary/summarizerNode/summarizerNode.d.ts +17 -7
  162. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  163. package/dist/summary/summarizerNode/summarizerNode.js +45 -57
  164. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  165. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +10 -19
  166. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  167. package/dist/summary/summarizerNode/summarizerNodeUtils.js +1 -21
  168. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  169. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +5 -6
  170. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +16 -16
  172. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  173. package/dist/summary/summarizerTypes.d.ts +10 -21
  174. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  175. package/dist/summary/summarizerTypes.js.map +1 -1
  176. package/dist/summary/summaryFormat.d.ts +15 -2
  177. package/dist/summary/summaryFormat.d.ts.map +1 -1
  178. package/dist/summary/summaryFormat.js.map +1 -1
  179. package/dist/summary/summaryGenerator.d.ts +6 -5
  180. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  181. package/dist/summary/summaryGenerator.js +10 -1
  182. package/dist/summary/summaryGenerator.js.map +1 -1
  183. package/dist/summary/summaryManager.d.ts +5 -6
  184. package/dist/summary/summaryManager.d.ts.map +1 -1
  185. package/dist/summary/summaryManager.js +4 -5
  186. package/dist/summary/summaryManager.js.map +1 -1
  187. package/dist/tsdoc-metadata.json +1 -1
  188. package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
  189. package/lib/batchTracker.d.ts.map +1 -0
  190. package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
  191. package/lib/batchTracker.js.map +1 -0
  192. package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -1
  193. package/lib/blobManager.d.ts.map +1 -0
  194. package/lib/{blobManager.mjs → blobManager.js} +1 -1
  195. package/lib/blobManager.js.map +1 -0
  196. package/lib/channelCollection.d.ts +223 -0
  197. package/lib/channelCollection.d.ts.map +1 -0
  198. package/lib/{dataStores.mjs → channelCollection.js} +384 -71
  199. package/lib/channelCollection.js.map +1 -0
  200. package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
  201. package/lib/connectionTelemetry.d.ts.map +1 -0
  202. package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
  203. package/lib/connectionTelemetry.js.map +1 -0
  204. package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +98 -40
  205. package/lib/{container-runtime-public.d.mts → container-runtime-beta.d.ts} +27 -9
  206. package/lib/{container-runtime-beta.d.mts → container-runtime-public.d.ts} +27 -9
  207. package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +123 -40
  208. package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
  209. package/lib/containerHandleContext.d.ts.map +1 -0
  210. package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
  211. package/lib/containerHandleContext.js.map +1 -0
  212. package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +84 -56
  213. package/lib/containerRuntime.d.ts.map +1 -0
  214. package/lib/{containerRuntime.mjs → containerRuntime.js} +460 -332
  215. package/lib/containerRuntime.js.map +1 -0
  216. package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
  217. package/lib/dataStore.d.ts.map +1 -0
  218. package/lib/{dataStore.mjs → dataStore.js} +13 -12
  219. package/lib/dataStore.js.map +1 -0
  220. package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +72 -31
  221. package/lib/dataStoreContext.d.ts.map +1 -0
  222. package/lib/{dataStoreContext.mjs → dataStoreContext.js} +174 -133
  223. package/lib/dataStoreContext.js.map +1 -0
  224. package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +2 -2
  225. package/lib/dataStoreContexts.d.ts.map +1 -0
  226. package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +1 -1
  227. package/lib/dataStoreContexts.js.map +1 -0
  228. package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
  229. package/lib/dataStoreRegistry.d.ts.map +1 -0
  230. package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
  231. package/lib/dataStoreRegistry.js.map +1 -0
  232. package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
  233. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  234. package/lib/deltaManagerSummarizerProxy.js +124 -0
  235. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  236. package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
  237. package/lib/deltaScheduler.d.ts.map +1 -0
  238. package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
  239. package/lib/deltaScheduler.js.map +1 -0
  240. package/lib/{error.d.mts → error.d.ts} +1 -1
  241. package/lib/error.d.ts.map +1 -0
  242. package/lib/{error.mjs → error.js} +1 -1
  243. package/lib/error.js.map +1 -0
  244. package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +23 -6
  245. package/lib/gc/garbageCollection.d.ts.map +1 -0
  246. package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +103 -44
  247. package/lib/gc/garbageCollection.js.map +1 -0
  248. package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
  249. package/lib/gc/gcConfigs.d.ts.map +1 -0
  250. package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +3 -3
  251. package/lib/gc/gcConfigs.js.map +1 -0
  252. package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +30 -7
  253. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  254. package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +5 -1
  255. package/lib/gc/gcDefinitions.js.map +1 -0
  256. package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
  257. package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
  258. package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
  259. package/lib/gc/gcHelpers.js.map +1 -0
  260. package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
  261. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  262. package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
  263. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  264. package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
  265. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  266. package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
  267. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  268. package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +13 -6
  269. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  270. package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
  271. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  272. package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +8 -8
  273. package/lib/gc/gcTelemetry.d.ts.map +1 -0
  274. package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -5
  275. package/lib/gc/gcTelemetry.js.map +1 -0
  276. package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +7 -2
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  278. package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +12 -2
  279. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  280. package/lib/gc/{index.d.mts → index.d.ts} +9 -9
  281. package/lib/gc/index.d.ts.map +1 -0
  282. package/lib/gc/{index.mjs → index.js} +8 -8
  283. package/lib/gc/index.js.map +1 -0
  284. package/lib/{index.d.mts → index.d.ts} +9 -21
  285. package/lib/index.d.ts.map +1 -0
  286. package/lib/index.js +12 -0
  287. package/lib/index.js.map +1 -0
  288. package/lib/{messageTypes.d.mts → messageTypes.d.ts} +5 -5
  289. package/lib/messageTypes.d.ts.map +1 -0
  290. package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
  291. package/lib/messageTypes.js.map +1 -0
  292. package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
  293. package/lib/metadata.d.ts.map +1 -0
  294. package/lib/{metadata.mjs → metadata.js} +1 -1
  295. package/lib/metadata.js.map +1 -0
  296. package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
  297. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  298. package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
  299. package/lib/opLifecycle/batchManager.js.map +1 -0
  300. package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
  301. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  302. package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
  303. package/lib/opLifecycle/definitions.js.map +1 -0
  304. package/lib/opLifecycle/index.d.ts +13 -0
  305. package/lib/opLifecycle/index.d.ts.map +1 -0
  306. package/lib/opLifecycle/index.js +12 -0
  307. package/lib/opLifecycle/index.js.map +1 -0
  308. package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
  309. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  310. package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
  311. package/lib/opLifecycle/opCompressor.js.map +1 -0
  312. package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
  313. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  314. package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
  315. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  316. package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
  317. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
  318. package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
  319. package/lib/opLifecycle/opGroupingManager.js.map +1 -0
  320. package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
  321. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  322. package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
  323. package/lib/opLifecycle/opSplitter.js.map +1 -0
  324. package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
  325. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  326. package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
  327. package/lib/opLifecycle/outbox.js.map +1 -0
  328. package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
  329. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  330. package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
  331. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  332. package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
  333. package/lib/opProperties.d.ts.map +1 -0
  334. package/lib/{opProperties.mjs → opProperties.js} +1 -1
  335. package/lib/opProperties.js.map +1 -0
  336. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  337. package/lib/packageVersion.d.ts.map +1 -0
  338. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  339. package/lib/packageVersion.js.map +1 -0
  340. package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
  341. package/lib/pendingStateManager.d.ts.map +1 -0
  342. package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
  343. package/lib/pendingStateManager.js.map +1 -0
  344. package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
  345. package/lib/scheduleManager.d.ts.map +1 -0
  346. package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
  347. package/lib/scheduleManager.js.map +1 -0
  348. package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
  349. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  350. package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
  351. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  352. package/lib/summary/{index.d.mts → index.d.ts} +13 -13
  353. package/lib/summary/index.d.ts.map +1 -0
  354. package/lib/summary/{index.mjs → index.js} +12 -12
  355. package/lib/summary/index.js.map +1 -0
  356. package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
  357. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  358. package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
  359. package/lib/summary/orderedClientElection.js.map +1 -0
  360. package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
  361. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  362. package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
  363. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  364. package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +12 -11
  365. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  366. package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +108 -75
  367. package/lib/summary/runningSummarizer.js.map +1 -0
  368. package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
  369. package/lib/summary/summarizer.d.ts.map +1 -0
  370. package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
  371. package/lib/summary/summarizer.js.map +1 -0
  372. package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
  373. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  374. package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
  375. package/lib/summary/summarizerClientElection.js.map +1 -0
  376. package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
  377. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  378. package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
  379. package/lib/summary/summarizerHeuristics.js.map +1 -0
  380. package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
  381. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  382. package/lib/summary/summarizerNode/index.js +7 -0
  383. package/lib/summary/summarizerNode/index.js.map +1 -0
  384. package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +18 -8
  385. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  386. package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +41 -53
  387. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  388. package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +11 -20
  389. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  390. package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -20
  391. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  392. package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +6 -7
  393. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  394. package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +12 -12
  395. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  396. package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +11 -22
  397. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  398. package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
  399. package/lib/summary/summarizerTypes.js.map +1 -0
  400. package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
  401. package/lib/summary/summaryCollection.d.ts.map +1 -0
  402. package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
  403. package/lib/summary/summaryCollection.js.map +1 -0
  404. package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
  405. package/lib/summary/summaryFormat.d.ts.map +1 -0
  406. package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
  407. package/lib/summary/summaryFormat.js.map +1 -0
  408. package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
  409. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  410. package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
  411. package/lib/summary/summaryGenerator.js.map +1 -0
  412. package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
  413. package/lib/summary/summaryManager.d.ts.map +1 -0
  414. package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
  415. package/lib/summary/summaryManager.js.map +1 -0
  416. package/lib/test/batchTracker.spec.js +88 -0
  417. package/lib/test/batchTracker.spec.js.map +1 -0
  418. package/lib/test/blobManager.spec.js +835 -0
  419. package/lib/test/blobManager.spec.js.map +1 -0
  420. package/lib/test/channelCollection.spec.js +141 -0
  421. package/lib/test/channelCollection.spec.js.map +1 -0
  422. package/lib/test/containerRuntime.spec.js +1748 -0
  423. package/lib/test/containerRuntime.spec.js.map +1 -0
  424. package/lib/test/dataStoreContext.spec.js +801 -0
  425. package/lib/test/dataStoreContext.spec.js.map +1 -0
  426. package/lib/test/dataStoreCreation.spec.js +312 -0
  427. package/lib/test/dataStoreCreation.spec.js.map +1 -0
  428. package/lib/test/dataStoreRegistry.spec.js +26 -0
  429. package/lib/test/dataStoreRegistry.spec.js.map +1 -0
  430. package/lib/test/fuzz/fuzzUtils.js +66 -0
  431. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  432. package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
  433. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
  434. package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
  435. package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
  436. package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
  437. package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
  438. package/lib/test/gc/garbageCollection.spec.js +1465 -0
  439. package/lib/test/gc/garbageCollection.spec.js.map +1 -0
  440. package/lib/test/gc/gcConfigs.spec.js +690 -0
  441. package/lib/test/gc/gcConfigs.spec.js.map +1 -0
  442. package/lib/test/gc/gcHelpers.spec.js +110 -0
  443. package/lib/test/gc/gcHelpers.spec.js.map +1 -0
  444. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
  445. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
  446. package/lib/test/gc/gcStats.spec.js +391 -0
  447. package/lib/test/gc/gcStats.spec.js.map +1 -0
  448. package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
  449. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
  450. package/lib/test/gc/gcTelemetry.spec.js +530 -0
  451. package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
  452. package/lib/test/gc/gcUnitTestHelpers.js +29 -0
  453. package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
  454. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
  455. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
  456. package/lib/test/getPendingBlobs.spec.js +193 -0
  457. package/lib/test/getPendingBlobs.spec.js.map +1 -0
  458. package/lib/test/hardwareStats.spec.js +93 -0
  459. package/lib/test/hardwareStats.spec.js.map +1 -0
  460. package/lib/test/index.js +6 -0
  461. package/lib/test/index.js.map +1 -0
  462. package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
  463. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
  464. package/lib/test/opLifecycle/batchManager.spec.js +189 -0
  465. package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
  466. package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
  467. package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
  468. package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
  469. package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
  470. package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
  471. package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
  472. package/lib/test/opLifecycle/outbox.spec.js +675 -0
  473. package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
  474. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
  475. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
  476. package/lib/test/pendingStateManager.spec.js +329 -0
  477. package/lib/test/pendingStateManager.spec.js.map +1 -0
  478. package/lib/test/scheduleManager.spec.js +270 -0
  479. package/lib/test/scheduleManager.spec.js.map +1 -0
  480. package/lib/test/summarizerNode.spec.js +326 -0
  481. package/lib/test/summarizerNode.spec.js.map +1 -0
  482. package/lib/test/summarizerNodeWithGc.spec.js +318 -0
  483. package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
  484. package/lib/test/summary/orderedClientElection.spec.js +535 -0
  485. package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
  486. package/lib/test/summary/runningSummarizer.spec.js +1349 -0
  487. package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
  488. package/lib/test/summary/summarizer.spec.js +29 -0
  489. package/lib/test/summary/summarizer.spec.js.map +1 -0
  490. package/lib/test/summary/summarizerClientElection.spec.js +436 -0
  491. package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
  492. package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
  493. package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
  494. package/lib/test/summary/summaryCollection.spec.js +200 -0
  495. package/lib/test/summary/summaryCollection.spec.js.map +1 -0
  496. package/lib/test/summary/summaryManager.spec.js +430 -0
  497. package/lib/test/summary/summaryManager.spec.js.map +1 -0
  498. package/lib/test/summary/testQuorumClients.js +34 -0
  499. package/lib/test/summary/testQuorumClients.js.map +1 -0
  500. package/lib/test/throttler.spec.js +175 -0
  501. package/lib/test/throttler.spec.js.map +1 -0
  502. package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
  503. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
  504. package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
  505. package/lib/throttler.d.ts.map +1 -0
  506. package/lib/{throttler.mjs → throttler.js} +1 -1
  507. package/lib/throttler.js.map +1 -0
  508. package/package.json +99 -88
  509. package/src/batchTracker.ts +1 -1
  510. package/src/blobManager.ts +1 -1
  511. package/src/{dataStores.ts → channelCollection.ts} +520 -84
  512. package/src/connectionTelemetry.ts +42 -3
  513. package/src/containerHandleContext.ts +1 -1
  514. package/src/containerRuntime.ts +661 -464
  515. package/src/dataStore.ts +13 -15
  516. package/src/dataStoreContext.ts +257 -184
  517. package/src/dataStoreContexts.ts +1 -1
  518. package/src/deltaManagerSummarizerProxy.ts +132 -7
  519. package/src/gc/garbageCollection.ts +121 -46
  520. package/src/gc/gcConfigs.ts +3 -3
  521. package/src/gc/gcDefinitions.ts +30 -7
  522. package/src/gc/gcHelpers.ts +2 -2
  523. package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
  524. package/src/gc/gcSummaryStateTracker.ts +19 -7
  525. package/src/gc/gcTelemetry.ts +10 -9
  526. package/src/gc/gcUnreferencedStateTracker.ts +12 -1
  527. package/src/gc/index.ts +10 -8
  528. package/src/index.ts +16 -27
  529. package/src/messageTypes.ts +4 -4
  530. package/src/opLifecycle/README.md +2 -4
  531. package/src/opLifecycle/batchManager.ts +2 -2
  532. package/src/opLifecycle/definitions.ts +2 -2
  533. package/src/opLifecycle/index.ts +8 -8
  534. package/src/opLifecycle/opCompressor.ts +3 -3
  535. package/src/opLifecycle/opDecompressor.ts +3 -3
  536. package/src/opLifecycle/opGroupingManager.ts +3 -12
  537. package/src/opLifecycle/opSplitter.ts +3 -3
  538. package/src/opLifecycle/outbox.ts +29 -9
  539. package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
  540. package/src/packageVersion.ts +1 -1
  541. package/src/pendingStateManager.ts +19 -13
  542. package/src/scheduleManager.ts +4 -4
  543. package/src/summary/index.ts +13 -12
  544. package/src/summary/orderedClientElection.ts +1 -1
  545. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  546. package/src/summary/runningSummarizer.ts +141 -93
  547. package/src/summary/summarizer.ts +7 -7
  548. package/src/summary/summarizerClientElection.ts +2 -2
  549. package/src/summary/summarizerHeuristics.ts +3 -3
  550. package/src/summary/summarizerNode/index.ts +6 -3
  551. package/src/summary/summarizerNode/summarizerNode.ts +54 -69
  552. package/src/summary/summarizerNode/summarizerNodeUtils.ts +16 -34
  553. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -17
  554. package/src/summary/summarizerTypes.ts +12 -24
  555. package/src/summary/summaryFormat.ts +16 -2
  556. package/src/summary/summaryGenerator.ts +16 -4
  557. package/src/summary/summaryManager.ts +6 -7
  558. package/tsconfig.cjs.json +7 -0
  559. package/tsconfig.json +2 -5
  560. package/dist/dataStores.d.ts +0 -149
  561. package/dist/dataStores.d.ts.map +0 -1
  562. package/dist/dataStores.js.map +0 -1
  563. package/dist/deltaManagerProxyBase.d.ts.map +0 -1
  564. package/dist/deltaManagerProxyBase.js +0 -77
  565. package/dist/deltaManagerProxyBase.js.map +0 -1
  566. package/lib/batchTracker.d.mts.map +0 -1
  567. package/lib/batchTracker.mjs.map +0 -1
  568. package/lib/blobManager.d.mts.map +0 -1
  569. package/lib/blobManager.mjs.map +0 -1
  570. package/lib/connectionTelemetry.d.mts.map +0 -1
  571. package/lib/connectionTelemetry.mjs.map +0 -1
  572. package/lib/containerHandleContext.d.mts.map +0 -1
  573. package/lib/containerHandleContext.mjs.map +0 -1
  574. package/lib/containerRuntime.d.mts.map +0 -1
  575. package/lib/containerRuntime.mjs.map +0 -1
  576. package/lib/dataStore.d.mts.map +0 -1
  577. package/lib/dataStore.mjs.map +0 -1
  578. package/lib/dataStoreContext.d.mts.map +0 -1
  579. package/lib/dataStoreContext.mjs.map +0 -1
  580. package/lib/dataStoreContexts.d.mts.map +0 -1
  581. package/lib/dataStoreContexts.mjs.map +0 -1
  582. package/lib/dataStoreRegistry.d.mts.map +0 -1
  583. package/lib/dataStoreRegistry.mjs.map +0 -1
  584. package/lib/dataStores.d.mts +0 -149
  585. package/lib/dataStores.d.mts.map +0 -1
  586. package/lib/dataStores.mjs.map +0 -1
  587. package/lib/deltaManagerProxyBase.d.mts +0 -35
  588. package/lib/deltaManagerProxyBase.d.mts.map +0 -1
  589. package/lib/deltaManagerProxyBase.mjs +0 -73
  590. package/lib/deltaManagerProxyBase.mjs.map +0 -1
  591. package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
  592. package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
  593. package/lib/deltaManagerSummarizerProxy.mjs +0 -38
  594. package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
  595. package/lib/deltaScheduler.d.mts.map +0 -1
  596. package/lib/deltaScheduler.mjs.map +0 -1
  597. package/lib/error.d.mts.map +0 -1
  598. package/lib/error.mjs.map +0 -1
  599. package/lib/gc/garbageCollection.d.mts.map +0 -1
  600. package/lib/gc/garbageCollection.mjs.map +0 -1
  601. package/lib/gc/gcConfigs.d.mts.map +0 -1
  602. package/lib/gc/gcConfigs.mjs.map +0 -1
  603. package/lib/gc/gcDefinitions.d.mts.map +0 -1
  604. package/lib/gc/gcDefinitions.mjs.map +0 -1
  605. package/lib/gc/gcHelpers.mjs.map +0 -1
  606. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
  607. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
  608. package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
  609. package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
  610. package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
  611. package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
  612. package/lib/gc/gcTelemetry.d.mts.map +0 -1
  613. package/lib/gc/gcTelemetry.mjs.map +0 -1
  614. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
  615. package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
  616. package/lib/gc/index.d.mts.map +0 -1
  617. package/lib/gc/index.mjs.map +0 -1
  618. package/lib/index.d.mts.map +0 -1
  619. package/lib/index.mjs +0 -24
  620. package/lib/index.mjs.map +0 -1
  621. package/lib/messageTypes.d.mts.map +0 -1
  622. package/lib/messageTypes.mjs.map +0 -1
  623. package/lib/metadata.d.mts.map +0 -1
  624. package/lib/metadata.mjs.map +0 -1
  625. package/lib/opLifecycle/batchManager.d.mts.map +0 -1
  626. package/lib/opLifecycle/batchManager.mjs.map +0 -1
  627. package/lib/opLifecycle/definitions.d.mts.map +0 -1
  628. package/lib/opLifecycle/definitions.mjs.map +0 -1
  629. package/lib/opLifecycle/index.d.mts +0 -13
  630. package/lib/opLifecycle/index.d.mts.map +0 -1
  631. package/lib/opLifecycle/index.mjs +0 -12
  632. package/lib/opLifecycle/index.mjs.map +0 -1
  633. package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
  634. package/lib/opLifecycle/opCompressor.mjs.map +0 -1
  635. package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
  636. package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
  637. package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
  638. package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
  639. package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
  640. package/lib/opLifecycle/opSplitter.mjs.map +0 -1
  641. package/lib/opLifecycle/outbox.d.mts.map +0 -1
  642. package/lib/opLifecycle/outbox.mjs.map +0 -1
  643. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
  644. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
  645. package/lib/opProperties.d.mts.map +0 -1
  646. package/lib/opProperties.mjs.map +0 -1
  647. package/lib/packageVersion.d.mts.map +0 -1
  648. package/lib/packageVersion.mjs.map +0 -1
  649. package/lib/pendingStateManager.d.mts.map +0 -1
  650. package/lib/pendingStateManager.mjs.map +0 -1
  651. package/lib/scheduleManager.d.mts.map +0 -1
  652. package/lib/scheduleManager.mjs.map +0 -1
  653. package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
  654. package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
  655. package/lib/summary/index.d.mts.map +0 -1
  656. package/lib/summary/index.mjs.map +0 -1
  657. package/lib/summary/orderedClientElection.d.mts.map +0 -1
  658. package/lib/summary/orderedClientElection.mjs.map +0 -1
  659. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
  660. package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
  661. package/lib/summary/runningSummarizer.d.mts.map +0 -1
  662. package/lib/summary/runningSummarizer.mjs.map +0 -1
  663. package/lib/summary/summarizer.d.mts.map +0 -1
  664. package/lib/summary/summarizer.mjs.map +0 -1
  665. package/lib/summary/summarizerClientElection.d.mts.map +0 -1
  666. package/lib/summary/summarizerClientElection.mjs.map +0 -1
  667. package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
  668. package/lib/summary/summarizerHeuristics.mjs.map +0 -1
  669. package/lib/summary/summarizerNode/index.d.mts.map +0 -1
  670. package/lib/summary/summarizerNode/index.mjs +0 -7
  671. package/lib/summary/summarizerNode/index.mjs.map +0 -1
  672. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
  673. package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
  674. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
  675. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
  676. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
  677. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
  678. package/lib/summary/summarizerTypes.d.mts.map +0 -1
  679. package/lib/summary/summarizerTypes.mjs.map +0 -1
  680. package/lib/summary/summaryCollection.d.mts.map +0 -1
  681. package/lib/summary/summaryCollection.mjs.map +0 -1
  682. package/lib/summary/summaryFormat.d.mts.map +0 -1
  683. package/lib/summary/summaryFormat.mjs.map +0 -1
  684. package/lib/summary/summaryGenerator.d.mts.map +0 -1
  685. package/lib/summary/summaryGenerator.mjs.map +0 -1
  686. package/lib/summary/summaryManager.d.mts.map +0 -1
  687. package/lib/summary/summaryManager.mjs.map +0 -1
  688. package/lib/throttler.d.mts.map +0 -1
  689. package/lib/throttler.mjs.map +0 -1
  690. package/src/deltaManagerProxyBase.ts +0 -111
@@ -3,9 +3,9 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
6
- import { ISummaryConfigurationHeuristics } from "../containerRuntime.mjs";
7
- import { ISummarizeHeuristicData, ISummarizeHeuristicRunner, ISummarizeAttempt, ISummaryHeuristicStrategy } from "./summarizerTypes.mjs";
8
- import { SummarizeReason } from "./summaryGenerator.mjs";
6
+ import { ISummaryConfigurationHeuristics } from "../containerRuntime.js";
7
+ import { ISummarizeHeuristicData, ISummarizeHeuristicRunner, ISummarizeAttempt, ISummaryHeuristicStrategy } from "./summarizerTypes.js";
8
+ import { SummarizeReason } from "./summaryGenerator.js";
9
9
  /** Simple implementation of class for tracking summarize heuristic data. */
10
10
  export declare class SummarizeHeuristicData implements ISummarizeHeuristicData {
11
11
  lastOpSequenceNumber: number;
@@ -58,4 +58,4 @@ export declare class SummarizeHeuristicRunner implements ISummarizeHeuristicRunn
58
58
  shouldRunLastSummary(): boolean;
59
59
  dispose(): void;
60
60
  }
61
- //# sourceMappingURL=summarizerHeuristics.d.mts.map
61
+ //# sourceMappingURL=summarizerHeuristics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizerHeuristics.d.ts","sourceRoot":"","sources":["../../src/summary/summarizerHeuristics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,4EAA4E;AAC5E,qBAAa,sBAAuB,YAAW,uBAAuB;IAuC7D,oBAAoB,EAAE,MAAM;IAtCpC,SAAS,CAAC,YAAY,EAAE,iBAAiB,CAAC;IAC1C,IAAW,WAAW,IAAI,iBAAiB,CAE1C;IAED,SAAS,CAAC,sBAAsB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC9D,IAAW,qBAAqB,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAE9D;IAED,IAAW,mBAAmB,IAAI,MAAM,CAEvC;IAEM,gBAAgB,EAAE,OAAO,CAAS;IAElC,YAAY,EAAE,MAAM,CAAK;IAChC;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CAAa;IAEhC,gBAAgB,EAAE,MAAM,CAAK;IACpC;;;OAGG;IACH,OAAO,CAAC,sBAAsB,CAAa;IAEpC,aAAa,EAAE,MAAM,CAAK;IACjC;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAAa;gBAGhC,oBAAoB,EAAE,MAAM;IACnC,wFAAwF;IACxF,eAAe,EAAE,iBAAiB;IAM5B,4BAA4B,CAAC,WAAW,EAAE,QAAQ,CAAC,iBAAiB,CAAC;IAKrE,aAAa,CAAC,iBAAiB,CAAC,EAAE,MAAM;IAWxC,2BAA2B;CAYlC;AAED;;GAEG;AACH,qBAAa,wBAAyB,YAAW,yBAAyB;IAKxE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IARrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;gBAG/C,aAAa,EAAE,uBAAuB,EACtC,aAAa,EAAE,+BAA+B,EAC/D,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,EAC9B,MAAM,EAAE,mBAAmB,EAC3B,mBAAmB,GAAE,yBAAyB,EAA2C;IAe3G,IAAW,QAAQ,IAAI,MAAM,CAiB5B;IAED,IAAW,eAAe,IAAI,MAAM,CAKnC;IAEM,KAAK;IAIL,GAAG;IAUH,oBAAoB,IAAI,OAAO;IAkB/B,OAAO;CAGd"}
@@ -148,4 +148,4 @@ class WeightedOpsSummaryHeuristicStrategy {
148
148
  function getDefaultSummaryHeuristicStrategies() {
149
149
  return [new MaxTimeSummaryHeuristicStrategy(), new WeightedOpsSummaryHeuristicStrategy()];
150
150
  }
151
- //# sourceMappingURL=summarizerHeuristics.mjs.map
151
+ //# sourceMappingURL=summarizerHeuristics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizerHeuristics.js","sourceRoot":"","sources":["../../src/summary/summarizerHeuristics.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils\";\nimport { Timer } from \"@fluidframework/core-utils\";\nimport { ISummaryConfigurationHeuristics } from \"../containerRuntime.js\";\nimport {\n\tISummarizeHeuristicData,\n\tISummarizeHeuristicRunner,\n\tISummarizeAttempt,\n\tISummaryHeuristicStrategy,\n} from \"./summarizerTypes.js\";\nimport { SummarizeReason } from \"./summaryGenerator.js\";\n\n/** Simple implementation of class for tracking summarize heuristic data. */\nexport class SummarizeHeuristicData implements ISummarizeHeuristicData {\n\tprotected _lastAttempt: ISummarizeAttempt;\n\tpublic get lastAttempt(): ISummarizeAttempt {\n\t\treturn this._lastAttempt;\n\t}\n\n\tprotected _lastSuccessfulSummary: Readonly<ISummarizeAttempt>;\n\tpublic get lastSuccessfulSummary(): Readonly<ISummarizeAttempt> {\n\t\treturn this._lastSuccessfulSummary;\n\t}\n\n\tpublic get opsSinceLastSummary(): number {\n\t\treturn this.numNonRuntimeOpsBefore + this.numRuntimeOpsBefore;\n\t}\n\n\tpublic hasMissingOpData: boolean = false;\n\n\tpublic totalOpsSize: number = 0;\n\t/**\n\t * Cumulative size in bytes of all the ops at the beginning of the summarization attempt.\n\t * Is used to adjust totalOpsSize appropriately after successful summarization.\n\t */\n\tprivate totalOpsSizeBefore: number = 0;\n\n\tpublic numNonRuntimeOps: number = 0;\n\t/**\n\t * Number of non-runtime ops at beginning of attempting to summarize.\n\t * Is used to adjust numNonRuntimeOps appropriately after successful summarization.\n\t */\n\tprivate numNonRuntimeOpsBefore: number = 0;\n\n\tpublic numRuntimeOps: number = 0;\n\t/**\n\t * Number of runtime ops at beginning of attempting to summarize.\n\t * Is used to adjust numRuntimeOps appropriately after successful summarization.\n\t */\n\tprivate numRuntimeOpsBefore: number = 0;\n\n\tconstructor(\n\t\tpublic lastOpSequenceNumber: number,\n\t\t/** Baseline attempt data used for comparisons with subsequent attempts/calculations. */\n\t\tattemptBaseline: ISummarizeAttempt,\n\t) {\n\t\tthis._lastAttempt = attemptBaseline;\n\t\tthis._lastSuccessfulSummary = { ...attemptBaseline };\n\t}\n\n\tpublic updateWithLastSummaryAckInfo(lastSummary: Readonly<ISummarizeAttempt>) {\n\t\tthis._lastAttempt = lastSummary;\n\t\tthis._lastSuccessfulSummary = { ...lastSummary };\n\t}\n\n\tpublic recordAttempt(refSequenceNumber?: number) {\n\t\tthis._lastAttempt = {\n\t\t\trefSequenceNumber: refSequenceNumber ?? this.lastOpSequenceNumber,\n\t\t\tsummaryTime: Date.now(),\n\t\t};\n\n\t\tthis.numNonRuntimeOpsBefore = this.numNonRuntimeOps;\n\t\tthis.numRuntimeOpsBefore = this.numRuntimeOps;\n\t\tthis.totalOpsSizeBefore = this.totalOpsSize;\n\t}\n\n\tpublic markLastAttemptAsSuccessful() {\n\t\tthis._lastSuccessfulSummary = { ...this.lastAttempt };\n\n\t\tthis.numNonRuntimeOps -= this.numNonRuntimeOpsBefore;\n\t\tthis.numNonRuntimeOpsBefore = 0;\n\n\t\tthis.numRuntimeOps -= this.numRuntimeOpsBefore;\n\t\tthis.numRuntimeOpsBefore = 0;\n\n\t\tthis.totalOpsSize -= this.totalOpsSizeBefore;\n\t\tthis.totalOpsSizeBefore = 0;\n\t}\n}\n\n/**\n * This class contains the heuristics for when to summarize.\n */\nexport class SummarizeHeuristicRunner implements ISummarizeHeuristicRunner {\n\tprivate readonly idleTimer: Timer | undefined;\n\tprivate readonly runSummarize: (reason: SummarizeReason) => void;\n\n\tpublic constructor(\n\t\tprivate readonly heuristicData: ISummarizeHeuristicData,\n\t\tprivate readonly configuration: ISummaryConfigurationHeuristics,\n\t\ttrySummarize: (reason: SummarizeReason) => void,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t\tprivate readonly summarizeStrategies: ISummaryHeuristicStrategy[] = getDefaultSummaryHeuristicStrategies(),\n\t) {\n\t\tthis.idleTimer = new Timer(this.idleTime, () => this.runSummarize(\"idle\"));\n\n\t\tthis.runSummarize = (reason: SummarizeReason) => {\n\t\t\tthis.idleTimer?.clear();\n\n\t\t\t// We shouldn't attempt a summary if there are no new processed ops\n\t\t\tconst opsSinceLastAck = this.opsSinceLastAck;\n\t\t\tif (opsSinceLastAck > 0) {\n\t\t\t\ttrySummarize(reason);\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic get idleTime(): number {\n\t\tconst maxIdleTime = this.configuration.maxIdleTime;\n\t\tconst minIdleTime = this.configuration.minIdleTime;\n\t\tconst weightedNumOfOps = getWeightedNumberOfOps(\n\t\t\tthis.heuristicData.numRuntimeOps,\n\t\t\tthis.heuristicData.numNonRuntimeOps,\n\t\t\tthis.configuration.runtimeOpWeight,\n\t\t\tthis.configuration.nonRuntimeOpWeight,\n\t\t);\n\t\tconst pToMaxOps = (weightedNumOfOps * 1.0) / this.configuration.maxOps;\n\n\t\tif (pToMaxOps >= 1) {\n\t\t\treturn minIdleTime;\n\t\t}\n\n\t\t// Return a ratioed idle time based on the percentage of ops\n\t\treturn maxIdleTime - (maxIdleTime - minIdleTime) * pToMaxOps;\n\t}\n\n\tpublic get opsSinceLastAck(): number {\n\t\treturn (\n\t\t\tthis.heuristicData.lastOpSequenceNumber -\n\t\t\tthis.heuristicData.lastSuccessfulSummary.refSequenceNumber\n\t\t);\n\t}\n\n\tpublic start() {\n\t\tthis.idleTimer?.start(this.idleTime);\n\t}\n\n\tpublic run() {\n\t\tfor (const strategy of this.summarizeStrategies) {\n\t\t\tif (strategy.shouldRunSummary(this.configuration, this.heuristicData)) {\n\t\t\t\treturn this.runSummarize(strategy.summarizeReason);\n\t\t\t}\n\t\t}\n\n\t\tthis.idleTimer?.restart(this.idleTime);\n\t}\n\n\tpublic shouldRunLastSummary(): boolean {\n\t\tconst weightedOpsSinceLastAck = getWeightedNumberOfOps(\n\t\t\tthis.heuristicData.numRuntimeOps,\n\t\t\tthis.heuristicData.numNonRuntimeOps,\n\t\t\tthis.configuration.runtimeOpWeight,\n\t\t\tthis.configuration.nonRuntimeOpWeight,\n\t\t);\n\t\tconst minOpsForLastSummaryAttempt = this.configuration.minOpsForLastSummaryAttempt;\n\n\t\tthis.logger.sendTelemetryEvent({\n\t\t\teventName: \"ShouldRunLastSummary\",\n\t\t\tweightedOpsSinceLastAck,\n\t\t\tminOpsForLastSummaryAttempt,\n\t\t});\n\n\t\treturn weightedOpsSinceLastAck >= minOpsForLastSummaryAttempt;\n\t}\n\n\tpublic dispose() {\n\t\tthis.idleTimer?.clear();\n\t}\n}\n\n/** Strategy used to run a summary when it's been a while since our last successful summary */\nclass MaxTimeSummaryHeuristicStrategy implements ISummaryHeuristicStrategy {\n\tpublic readonly summarizeReason: Readonly<SummarizeReason> = \"maxTime\";\n\n\tpublic shouldRunSummary(\n\t\tconfiguration: ISummaryConfigurationHeuristics,\n\t\theuristicData: ISummarizeHeuristicData,\n\t): boolean {\n\t\tconst timeSinceLastSummary = Date.now() - heuristicData.lastSuccessfulSummary.summaryTime;\n\t\treturn timeSinceLastSummary > configuration.maxTime;\n\t}\n}\n\nfunction getWeightedNumberOfOps(\n\truntimeOpCount: number,\n\tnonRuntimeOpCount: number,\n\truntimeOpWeight: number,\n\tnonRuntimeOpWeight: number,\n): number {\n\treturn runtimeOpWeight * runtimeOpCount + nonRuntimeOpWeight * nonRuntimeOpCount;\n}\n\n/** Strategy used to do a weighted analysis on the ops we've processed since the last successful summary */\nclass WeightedOpsSummaryHeuristicStrategy implements ISummaryHeuristicStrategy {\n\tpublic readonly summarizeReason: Readonly<SummarizeReason> = \"maxOps\";\n\n\tpublic shouldRunSummary(\n\t\tconfiguration: ISummaryConfigurationHeuristics,\n\t\theuristicData: ISummarizeHeuristicData,\n\t): boolean {\n\t\tconst weightedNumOfOps = getWeightedNumberOfOps(\n\t\t\theuristicData.numRuntimeOps,\n\t\t\theuristicData.numNonRuntimeOps,\n\t\t\tconfiguration.runtimeOpWeight,\n\t\t\tconfiguration.nonRuntimeOpWeight,\n\t\t);\n\t\treturn weightedNumOfOps > configuration.maxOps;\n\t}\n}\n\nfunction getDefaultSummaryHeuristicStrategies() {\n\treturn [new MaxTimeSummaryHeuristicStrategy(), new WeightedOpsSummaryHeuristicStrategy()];\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export { IRefreshSummaryResult, ISummarizerNodeRootContract, ValidateSummaryResult, } from "./summarizerNodeUtils.mjs";
6
- export { IRootSummarizerNode, createRootSummarizerNode } from "./summarizerNode.mjs";
7
- export { IRootSummarizerNodeWithGC, createRootSummarizerNodeWithGC } from "./summarizerNodeWithGc.mjs";
8
- //# sourceMappingURL=index.d.mts.map
5
+ export { IRefreshSummaryResult, ISummarizerNodeRootContract, ValidateSummaryResult, } from "./summarizerNodeUtils.js";
6
+ export { IRootSummarizerNode, createRootSummarizerNode } from "./summarizerNode.js";
7
+ export { IRootSummarizerNodeWithGC, createRootSummarizerNodeWithGC, } from "./summarizerNodeWithGc.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/summary/summarizerNode/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACN,yBAAyB,EACzB,8BAA8B,GAC9B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ export { createRootSummarizerNode } from "./summarizerNode.js";
6
+ export { createRootSummarizerNodeWithGC, } from "./summarizerNodeWithGc.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/summary/summarizerNode/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAuB,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAEN,8BAA8B,GAC9B,MAAM,2BAA2B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tIRefreshSummaryResult,\n\tISummarizerNodeRootContract,\n\tValidateSummaryResult,\n} from \"./summarizerNodeUtils.js\";\nexport { IRootSummarizerNode, createRootSummarizerNode } from \"./summarizerNode.js\";\nexport {\n\tIRootSummarizerNodeWithGC,\n\tcreateRootSummarizerNodeWithGC,\n} from \"./summarizerNodeWithGc.js\";\n"]}
@@ -2,11 +2,11 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { ITelemetryBaseLogger, ITelemetryErrorEvent } from "@fluidframework/core-interfaces";
5
+ import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
6
6
  import { ISummarizerNode, ISummarizerNodeConfig, ISummarizeResult, CreateChildSummarizerNodeParam, SummarizeInternalFn, ITelemetryContext } from "@fluidframework/runtime-definitions";
7
7
  import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
8
- import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
9
- import { EscapedPath, ICreateChildDetails, IInitialSummary, IRefreshSummaryResult, ISummarizerNodeRootContract, SummaryNode, ValidateSummaryResult } from "./summarizerNodeUtils.mjs";
8
+ import { ITelemetryLoggerExt, type ITelemetryErrorEventExt } from "@fluidframework/telemetry-utils";
9
+ import { EscapedPath, ICreateChildDetails, IRefreshSummaryResult, IStartSummaryResult, ISummarizerNodeRootContract, SummaryNode, ValidateSummaryResult } from "./summarizerNodeUtils.js";
10
10
  export interface IRootSummarizerNode extends ISummarizerNode, ISummarizerNodeRootContract {
11
11
  }
12
12
  /**
@@ -27,7 +27,6 @@ export declare class SummarizerNode implements IRootSummarizerNode {
27
27
  private _changeSequenceNumber;
28
28
  /** Undefined means created without summary */
29
29
  private _latestSummary?;
30
- private readonly initialSummary?;
31
30
  protected wipSummaryLogger?: ITelemetryBaseLogger | undefined;
32
31
  /** A unique id of this node to be logged when sending telemetry. */
33
32
  protected telemetryNodeId?: string | undefined;
@@ -48,10 +47,21 @@ export declare class SummarizerNode implements IRootSummarizerNode {
48
47
  */
49
48
  constructor(baseLogger: ITelemetryBaseLogger, summarizeInternalFn: SummarizeInternalFn, config: ISummarizerNodeConfig, _changeSequenceNumber: number,
50
49
  /** Undefined means created without summary */
51
- _latestSummary?: SummaryNode | undefined, initialSummary?: IInitialSummary | undefined, wipSummaryLogger?: ITelemetryBaseLogger | undefined,
50
+ _latestSummary?: SummaryNode | undefined, wipSummaryLogger?: ITelemetryBaseLogger | undefined,
52
51
  /** A unique id of this node to be logged when sending telemetry. */
53
52
  telemetryNodeId?: string | undefined);
54
- startSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryBaseLogger): void;
53
+ /**
54
+ * In order to produce a summary with a summarizer node, the summarizer node system must be notified a summary has
55
+ * started. This is done by calling startSummary. This will track the reference sequence number of the summary and
56
+ * run some validation checks to ensure the summary is correct.
57
+ * @param referenceSequenceNumber - the number of ops processed up to this point
58
+ * @param summaryLogger - the logger to use for the summary
59
+ * @param latestSummaryRefSeqNum - the reference sequence number of the latest summary. Another way to think about
60
+ * it is the reference sequence number of the previous summary.
61
+ * @returns the number of nodes in the tree, the number of nodes that are invalid, and the different types of
62
+ * sequence number mismatches
63
+ */
64
+ startSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryBaseLogger, latestSummaryRefSeqNum: number): IStartSummaryResult;
55
65
  summarize(fullTree: boolean, trackState?: boolean, telemetryContext?: ITelemetryContext): Promise<ISummarizeResult>;
56
66
  /**
57
67
  * Validates that the in-progress summary is correct, i.e., summarize should have run for all non-skipped
@@ -152,7 +162,7 @@ export declare class SummarizerNode implements IRootSummarizerNode {
152
162
  /**
153
163
  * Creates and throws an error due to unexpected conditions.
154
164
  */
155
- protected throwUnexpectedError(eventProps: ITelemetryErrorEvent): never;
165
+ protected throwUnexpectedError(eventProps: ITelemetryErrorEventExt): never;
156
166
  }
157
167
  /**
158
168
  * Creates a root summarizer node.
@@ -164,4 +174,4 @@ export declare class SummarizerNode implements IRootSummarizerNode {
164
174
  * @param config - Configure behavior of summarizer node
165
175
  */
166
176
  export declare const createRootSummarizerNode: (logger: ITelemetryLoggerExt, summarizeInternalFn: SummarizeInternalFn, changeSequenceNumber: number, referenceSequenceNumber: number | undefined, config?: ISummarizerNodeConfig) => IRootSummarizerNode;
167
- //# sourceMappingURL=summarizerNode.d.mts.map
177
+ //# sourceMappingURL=summarizerNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizerNode.d.ts","sourceRoot":"","sources":["../../../src/summary/summarizerNode/summarizerNode.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@ import { CreateSummarizerNodeSource, } from "@fluidframework/runtime-definitions
6
6
  import { SummaryType, } from "@fluidframework/protocol-definitions";
7
7
  import { createChildLogger, LoggingError, PerformanceEvent, TelemetryDataTag, tagCodeArtifacts, } from "@fluidframework/telemetry-utils";
8
8
  import { assert, unreachableCase } from "@fluidframework/core-utils";
9
- import { convertToSummaryTree, calculateStats, mergeStats } from "@fluidframework/runtime-utils";
10
- import { EscapedPath, parseSummaryForSubtrees, parseSummaryTreeForSubtrees, SummaryNode, } from "./summarizerNodeUtils.mjs";
9
+ import { mergeStats } from "@fluidframework/runtime-utils";
10
+ import { EscapedPath, parseSummaryForSubtrees, SummaryNode, } from "./summarizerNodeUtils.js";
11
11
  /**
12
12
  * Encapsulates the summarizing work and state of an individual tree node in the
13
13
  * summary tree. It tracks changes and allows for optimizations when unchanged, or
@@ -35,13 +35,12 @@ export class SummarizerNode {
35
35
  */
36
36
  constructor(baseLogger, summarizeInternalFn, config, _changeSequenceNumber,
37
37
  /** Undefined means created without summary */
38
- _latestSummary, initialSummary, wipSummaryLogger,
38
+ _latestSummary, wipSummaryLogger,
39
39
  /** A unique id of this node to be logged when sending telemetry. */
40
40
  telemetryNodeId) {
41
41
  this.summarizeInternalFn = summarizeInternalFn;
42
42
  this._changeSequenceNumber = _changeSequenceNumber;
43
43
  this._latestSummary = _latestSummary;
44
- this.initialSummary = initialSummary;
45
44
  this.wipSummaryLogger = wipSummaryLogger;
46
45
  this.telemetryNodeId = telemetryNodeId;
47
46
  this.children = new Map();
@@ -56,14 +55,44 @@ export class SummarizerNode {
56
55
  },
57
56
  });
58
57
  }
59
- startSummary(referenceSequenceNumber, summaryLogger) {
58
+ /**
59
+ * In order to produce a summary with a summarizer node, the summarizer node system must be notified a summary has
60
+ * started. This is done by calling startSummary. This will track the reference sequence number of the summary and
61
+ * run some validation checks to ensure the summary is correct.
62
+ * @param referenceSequenceNumber - the number of ops processed up to this point
63
+ * @param summaryLogger - the logger to use for the summary
64
+ * @param latestSummaryRefSeqNum - the reference sequence number of the latest summary. Another way to think about
65
+ * it is the reference sequence number of the previous summary.
66
+ * @returns the number of nodes in the tree, the number of nodes that are invalid, and the different types of
67
+ * sequence number mismatches
68
+ */
69
+ startSummary(referenceSequenceNumber, summaryLogger, latestSummaryRefSeqNum) {
60
70
  assert(this.wipSummaryLogger === undefined, 0x19f /* "wipSummaryLogger should not be set yet in startSummary" */);
61
71
  assert(this.wipReferenceSequenceNumber === undefined, 0x1a0 /* "Already tracking a summary" */);
72
+ let nodes = 1;
73
+ let invalidNodes = 0;
74
+ const sequenceNumberMismatchKeySet = new Set();
75
+ const nodeLatestSummaryRefSeqNum = this._latestSummary?.referenceSequenceNumber;
76
+ if (nodeLatestSummaryRefSeqNum !== undefined &&
77
+ latestSummaryRefSeqNum !== nodeLatestSummaryRefSeqNum) {
78
+ invalidNodes++;
79
+ sequenceNumberMismatchKeySet.add(`${latestSummaryRefSeqNum}-${nodeLatestSummaryRefSeqNum}`);
80
+ }
62
81
  this.wipSummaryLogger = summaryLogger;
63
82
  for (const child of this.children.values()) {
64
- child.startSummary(referenceSequenceNumber, this.wipSummaryLogger);
83
+ const childStartSummaryResult = child.startSummary(referenceSequenceNumber, this.wipSummaryLogger, latestSummaryRefSeqNum);
84
+ nodes += childStartSummaryResult.nodes;
85
+ invalidNodes += childStartSummaryResult.invalidNodes;
86
+ for (const invalidSequenceNumber of childStartSummaryResult.mismatchNumbers) {
87
+ sequenceNumberMismatchKeySet.add(invalidSequenceNumber);
88
+ }
65
89
  }
66
90
  this.wipReferenceSequenceNumber = referenceSequenceNumber;
91
+ return {
92
+ nodes,
93
+ invalidNodes,
94
+ mismatchNumbers: sequenceNumberMismatchKeySet,
95
+ };
67
96
  }
68
97
  async summarize(fullTree, trackState = true, telemetryContext) {
69
98
  assert(this.isSummaryInProgress(), 0x1a1 /* "summarize should not be called when not tracking the summary" */);
@@ -365,7 +394,7 @@ export class SummarizerNode {
365
394
  createParam, config = {}) {
366
395
  assert(!this.children.has(id), 0x1ab /* "Create SummarizerNode child already exists" */);
367
396
  const createDetails = this.getCreateDetailsForChild(id, createParam);
368
- const child = new SummarizerNode(this.logger, summarizeInternalFn, config, createDetails.changeSequenceNumber, createDetails.latestSummary, createDetails.initialSummary, this.wipSummaryLogger, createDetails.telemetryNodeId);
397
+ const child = new SummarizerNode(this.logger, summarizeInternalFn, config, createDetails.changeSequenceNumber, createDetails.latestSummary, this.wipSummaryLogger, createDetails.telemetryNodeId);
369
398
  // There may be additional state that has to be updated in this child. For example, if a summary is being
370
399
  // tracked, the child's summary tracking state needs to be updated too. Same goes for pendingSummaries we might
371
400
  // have outstanding on the parent in case we realize nodes in between Summary Op and Summary Ack.
@@ -383,7 +412,6 @@ export class SummarizerNode {
383
412
  * @returns the details needed to create the child node.
384
413
  */
385
414
  getCreateDetailsForChild(id, createParam) {
386
- let initialSummary;
387
415
  let latestSummary;
388
416
  let changeSequenceNumber;
389
417
  const parentLatestSummary = this._latestSummary;
@@ -394,50 +422,11 @@ export class SummarizerNode {
394
422
  // Prioritize latest summary if it was after this node was attached.
395
423
  latestSummary = parentLatestSummary.createForChild(id);
396
424
  }
397
- else {
398
- const summary = convertToSummaryTree(createParam.snapshot);
399
- initialSummary = {
400
- sequenceNumber: createParam.sequenceNumber,
401
- id,
402
- summary,
403
- };
404
- }
405
425
  changeSequenceNumber = createParam.sequenceNumber;
406
426
  break;
407
427
  }
408
- case CreateSummarizerNodeSource.FromSummary: {
409
- if (this.initialSummary === undefined) {
410
- assert(!!parentLatestSummary, 0x1ac /* "Cannot create child from summary if parent does not have latest summary" */);
411
- }
412
- // fallthrough to local
413
- }
428
+ case CreateSummarizerNodeSource.FromSummary:
414
429
  case CreateSummarizerNodeSource.Local: {
415
- const parentInitialSummary = this.initialSummary;
416
- if (parentInitialSummary !== undefined) {
417
- let childSummary;
418
- if (parentInitialSummary.summary !== undefined) {
419
- const { childrenTree } = parseSummaryTreeForSubtrees(parentInitialSummary.summary.summary);
420
- assert(childrenTree.type === SummaryType.Tree, 0x1d6 /* "Parent summary object is not a tree" */);
421
- childSummary = childrenTree.tree[id];
422
- }
423
- if (createParam.type === CreateSummarizerNodeSource.FromSummary) {
424
- // Locally created would not have differential subtree.
425
- assert(!!childSummary, 0x1ad /* "Missing child summary tree" */);
426
- }
427
- let childSummaryWithStats;
428
- if (childSummary !== undefined) {
429
- assert(childSummary.type === SummaryType.Tree, 0x1ae /* "Child summary object is not a tree" */);
430
- childSummaryWithStats = {
431
- summary: childSummary,
432
- stats: calculateStats(childSummary),
433
- };
434
- }
435
- initialSummary = {
436
- sequenceNumber: parentInitialSummary.sequenceNumber,
437
- id,
438
- summary: childSummaryWithStats,
439
- };
440
- }
441
430
  latestSummary = parentLatestSummary?.createForChild(id);
442
431
  changeSequenceNumber = parentLatestSummary?.referenceSequenceNumber ?? -1;
443
432
  break;
@@ -447,12 +436,11 @@ export class SummarizerNode {
447
436
  unreachableCase(createParam, `Unexpected CreateSummarizerNodeSource: ${type}`);
448
437
  }
449
438
  }
450
- const childtelemetryNodeId = `${this.telemetryNodeId ?? ""}/${id}`;
439
+ const childTelemetryNodeId = `${this.telemetryNodeId ?? ""}/${id}`;
451
440
  return {
452
- initialSummary,
453
441
  latestSummary,
454
442
  changeSequenceNumber,
455
- telemetryNodeId: childtelemetryNodeId,
443
+ telemetryNodeId: childTelemetryNodeId,
456
444
  };
457
445
  }
458
446
  /**
@@ -517,5 +505,5 @@ export class SummarizerNode {
517
505
  */
518
506
  export const createRootSummarizerNode = (logger, summarizeInternalFn, changeSequenceNumber, referenceSequenceNumber, config = {}) => new SummarizerNode(logger, summarizeInternalFn, config, changeSequenceNumber, referenceSequenceNumber === undefined
519
507
  ? undefined
520
- : SummaryNode.createForRoot(referenceSequenceNumber), undefined /* initialSummary */, undefined /* wipSummaryLogger */, "" /* telemetryNodeId */);
521
- //# sourceMappingURL=summarizerNode.mjs.map
508
+ : SummaryNode.createForRoot(referenceSequenceNumber), undefined /* wipSummaryLogger */, "" /* telemetryNodeId */);
509
+ //# sourceMappingURL=summarizerNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizerNode.js","sourceRoot":"","sources":["../../../src/summary/summarizerNode/summarizerNode.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport {\n\tISummarizerNode,\n\tISummarizerNodeConfig,\n\tISummarizeResult,\n\tCreateChildSummarizerNodeParam,\n\tCreateSummarizerNodeSource,\n\tSummarizeInternalFn,\n\tITelemetryContext,\n\tIExperimentalIncrementalSummaryContext,\n} from \"@fluidframework/runtime-definitions\";\nimport {\n\tISequencedDocumentMessage,\n\tSummaryType,\n\tISnapshotTree,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n\tITelemetryLoggerExt,\n\tcreateChildLogger,\n\tLoggingError,\n\tPerformanceEvent,\n\tTelemetryDataTag,\n\ttagCodeArtifacts,\n\ttype ITelemetryErrorEventExt,\n} from \"@fluidframework/telemetry-utils\";\nimport { assert, unreachableCase } from \"@fluidframework/core-utils\";\nimport { mergeStats } from \"@fluidframework/runtime-utils\";\nimport {\n\tEscapedPath,\n\tICreateChildDetails,\n\tIRefreshSummaryResult,\n\tIStartSummaryResult,\n\tISummarizerNodeRootContract,\n\tparseSummaryForSubtrees,\n\tSummaryNode,\n\tValidateSummaryResult,\n} from \"./summarizerNodeUtils.js\";\n\nexport interface IRootSummarizerNode extends ISummarizerNode, ISummarizerNodeRootContract {}\n\n/**\n * Encapsulates the summarizing work and state of an individual tree node in the\n * summary tree. It tracks changes and allows for optimizations when unchanged, or\n * can allow for fallback summaries to be generated when an error is encountered.\n * Usage is for the root node to call startSummary first to begin tracking a WIP\n * (work in progress) summary. Then all nodes will call summarize to summaries their\n * individual parts. Once completed and uploaded to storage, the root node will call\n * completeSummary or clearSummary to clear the WIP summary tracking state if something\n * went wrong. The SummarizerNodes will track all pending summaries that have been\n * recorded by the completeSummary call. When one of them is acked, the root node should\n * call refreshLatestSummary to inform the tree of SummarizerNodes of the new baseline\n * latest successful summary.\n */\nexport class SummarizerNode implements IRootSummarizerNode {\n\t/**\n\t * The reference sequence number of the most recent acked summary.\n\t * Returns 0 if there is not yet an acked summary.\n\t */\n\tpublic get referenceSequenceNumber() {\n\t\treturn this._latestSummary?.referenceSequenceNumber ?? 0;\n\t}\n\n\tprotected readonly children = new Map<string, SummarizerNode>();\n\tprotected readonly pendingSummaries = new Map<string, SummaryNode>();\n\tprotected wipReferenceSequenceNumber: number | undefined;\n\tprivate wipLocalPaths: { localPath: EscapedPath; additionalPath?: EscapedPath } | undefined;\n\tprivate wipSkipRecursion = false;\n\n\tprotected readonly logger: ITelemetryLoggerExt;\n\n\t/**\n\t * Do not call constructor directly.\n\t * Use createRootSummarizerNode to create root node, or createChild to create child nodes.\n\t */\n\tpublic constructor(\n\t\tbaseLogger: ITelemetryBaseLogger,\n\t\tprivate readonly summarizeInternalFn: SummarizeInternalFn,\n\t\tconfig: ISummarizerNodeConfig,\n\t\tprivate _changeSequenceNumber: number,\n\t\t/** Undefined means created without summary */\n\t\tprivate _latestSummary?: SummaryNode,\n\t\tprotected wipSummaryLogger?: ITelemetryBaseLogger,\n\t\t/** A unique id of this node to be logged when sending telemetry. */\n\t\tprotected telemetryNodeId?: string,\n\t) {\n\t\tthis.canReuseHandle = config.canReuseHandle ?? true;\n\t\t// All logs posted by the summarizer node should include the telemetryNodeId.\n\t\tthis.logger = createChildLogger({\n\t\t\tlogger: baseLogger,\n\t\t\tproperties: {\n\t\t\t\tall: tagCodeArtifacts({ id: this.telemetryNodeId }),\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * In order to produce a summary with a summarizer node, the summarizer node system must be notified a summary has\n\t * started. This is done by calling startSummary. This will track the reference sequence number of the summary and\n\t * run some validation checks to ensure the summary is correct.\n\t * @param referenceSequenceNumber - the number of ops processed up to this point\n\t * @param summaryLogger - the logger to use for the summary\n\t * @param latestSummaryRefSeqNum - the reference sequence number of the latest summary. Another way to think about\n\t * it is the reference sequence number of the previous summary.\n\t * @returns the number of nodes in the tree, the number of nodes that are invalid, and the different types of\n\t * sequence number mismatches\n\t */\n\tpublic startSummary(\n\t\treferenceSequenceNumber: number,\n\t\tsummaryLogger: ITelemetryBaseLogger,\n\t\tlatestSummaryRefSeqNum: number,\n\t): IStartSummaryResult {\n\t\tassert(\n\t\t\tthis.wipSummaryLogger === undefined,\n\t\t\t0x19f /* \"wipSummaryLogger should not be set yet in startSummary\" */,\n\t\t);\n\t\tassert(\n\t\t\tthis.wipReferenceSequenceNumber === undefined,\n\t\t\t0x1a0 /* \"Already tracking a summary\" */,\n\t\t);\n\n\t\tlet nodes = 1;\n\t\tlet invalidNodes = 0;\n\t\tconst sequenceNumberMismatchKeySet = new Set<string>();\n\t\tconst nodeLatestSummaryRefSeqNum = this._latestSummary?.referenceSequenceNumber;\n\t\tif (\n\t\t\tnodeLatestSummaryRefSeqNum !== undefined &&\n\t\t\tlatestSummaryRefSeqNum !== nodeLatestSummaryRefSeqNum\n\t\t) {\n\t\t\tinvalidNodes++;\n\t\t\tsequenceNumberMismatchKeySet.add(\n\t\t\t\t`${latestSummaryRefSeqNum}-${nodeLatestSummaryRefSeqNum}`,\n\t\t\t);\n\t\t}\n\n\t\tthis.wipSummaryLogger = summaryLogger;\n\n\t\tfor (const child of this.children.values()) {\n\t\t\tconst childStartSummaryResult = child.startSummary(\n\t\t\t\treferenceSequenceNumber,\n\t\t\t\tthis.wipSummaryLogger,\n\t\t\t\tlatestSummaryRefSeqNum,\n\t\t\t);\n\t\t\tnodes += childStartSummaryResult.nodes;\n\t\t\tinvalidNodes += childStartSummaryResult.invalidNodes;\n\t\t\tfor (const invalidSequenceNumber of childStartSummaryResult.mismatchNumbers) {\n\t\t\t\tsequenceNumberMismatchKeySet.add(invalidSequenceNumber);\n\t\t\t}\n\t\t}\n\t\tthis.wipReferenceSequenceNumber = referenceSequenceNumber;\n\t\treturn {\n\t\t\tnodes,\n\t\t\tinvalidNodes,\n\t\t\tmismatchNumbers: sequenceNumberMismatchKeySet,\n\t\t};\n\t}\n\n\tpublic async summarize(\n\t\tfullTree: boolean,\n\t\ttrackState: boolean = true,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): Promise<ISummarizeResult> {\n\t\tassert(\n\t\t\tthis.isSummaryInProgress(),\n\t\t\t0x1a1 /* \"summarize should not be called when not tracking the summary\" */,\n\t\t);\n\t\tassert(\n\t\t\tthis.wipSummaryLogger !== undefined,\n\t\t\t0x1a2 /* \"wipSummaryLogger should have been set in startSummary or ctor\" */,\n\t\t);\n\n\t\t// Try to reuse the tree if unchanged\n\t\tif (this.canReuseHandle && !fullTree && !this.hasChanged()) {\n\t\t\tconst latestSummary = this._latestSummary;\n\t\t\tif (latestSummary !== undefined) {\n\t\t\t\tthis.wipLocalPaths = {\n\t\t\t\t\tlocalPath: latestSummary.localPath,\n\t\t\t\t\tadditionalPath: latestSummary.additionalPath,\n\t\t\t\t};\n\t\t\t\tthis.wipSkipRecursion = true;\n\t\t\t\tconst stats = mergeStats();\n\t\t\t\tstats.handleNodeCount++;\n\t\t\t\treturn {\n\t\t\t\t\tsummary: {\n\t\t\t\t\t\ttype: SummaryType.Handle,\n\t\t\t\t\t\thandle: latestSummary.fullPath.path,\n\t\t\t\t\t\thandleType: SummaryType.Tree,\n\t\t\t\t\t},\n\t\t\t\t\tstats,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// This assert is the same the other 0a1x1 assert `isSummaryInProgress`, the only difference is that typescript\n\t\t// complains if this assert isn't done this way\n\t\tassert(\n\t\t\tthis.wipReferenceSequenceNumber !== undefined,\n\t\t\t0x5df /* Summarize should not be called when not tracking the summary */,\n\t\t);\n\t\tconst incrementalSummaryContext: IExperimentalIncrementalSummaryContext | undefined =\n\t\t\tthis._latestSummary !== undefined\n\t\t\t\t? {\n\t\t\t\t\t\tsummarySequenceNumber: this.wipReferenceSequenceNumber,\n\t\t\t\t\t\tlatestSummarySequenceNumber: this._latestSummary.referenceSequenceNumber,\n\t\t\t\t\t\t// TODO: remove summaryPath\n\t\t\t\t\t\tsummaryPath: this._latestSummary.fullPath.path,\n\t\t\t\t }\n\t\t\t\t: undefined;\n\n\t\tconst result = await this.summarizeInternalFn(\n\t\t\tfullTree,\n\t\t\ttrue,\n\t\t\ttelemetryContext,\n\t\t\tincrementalSummaryContext,\n\t\t);\n\t\tthis.wipLocalPaths = { localPath: EscapedPath.create(result.id) };\n\t\tif (result.pathPartsForChildren !== undefined) {\n\t\t\tthis.wipLocalPaths.additionalPath = EscapedPath.createAndConcat(\n\t\t\t\tresult.pathPartsForChildren,\n\t\t\t);\n\t\t}\n\t\treturn { summary: result.summary, stats: result.stats };\n\t}\n\n\t/**\n\t * Validates that the in-progress summary is correct, i.e., summarize should have run for all non-skipped\n\t * nodes. This will only be called for the root summarizer node and is called by it recursively on all child nodes.\n\t *\n\t * @returns ValidateSummaryResult which contains a boolean success indicating whether the validation was successful.\n\t * In case of failure, additional information is returned indicating type of failure and where it was.\n\t */\n\tpublic validateSummary(): ValidateSummaryResult {\n\t\treturn this.validateSummaryCore(false /* parentSkipRecursion */);\n\t}\n\n\t/**\n\t * Validates that the in-progress summary is correct for all nodes, i.e., summarize should have run for all\n\t * non-skipped nodes.\n\t * @param parentSkipRecursion - true if the parent of this node skipped recursing the child nodes when summarizing.\n\t * In that case, the children will not have work-in-progress state.\n\t *\n\t * @returns ValidateSummaryResult which contains a boolean success indicating whether the validation was successful.\n\t * In case of failure, additional information is returned indicating type of failure and where it was.\n\t */\n\tprotected validateSummaryCore(parentSkipRecursion: boolean): ValidateSummaryResult {\n\t\tif (this.wasSummarizeMissed(parentSkipRecursion)) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\treason: \"NodeDidNotSummarize\",\n\t\t\t\tid: {\n\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\tvalue: this.telemetryNodeId,\n\t\t\t\t},\n\t\t\t\t// These errors are usually transient and should go away when summarize is retried.\n\t\t\t\tretryAfterSeconds: 1,\n\t\t\t};\n\t\t}\n\t\tif (parentSkipRecursion) {\n\t\t\treturn { success: true };\n\t\t}\n\n\t\tfor (const child of this.children.values()) {\n\t\t\tconst result = child.validateSummaryCore(this.wipSkipRecursion || parentSkipRecursion);\n\t\t\t// If any child fails, return the failure.\n\t\t\tif (!result.success) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\treturn { success: true };\n\t}\n\n\tprivate wasSummarizeMissed(parentSkipRecursion: boolean): boolean {\n\t\tassert(\n\t\t\tthis.wipSummaryLogger !== undefined,\n\t\t\t0x6fc /* wipSummaryLogger should have been set in startSummary or ctor */,\n\t\t);\n\t\tassert(this.wipReferenceSequenceNumber !== undefined, 0x6fd /* Not tracking a summary */);\n\n\t\t// If the parent node skipped recursion, it did not call summarize on this node. So, summarize was not missed\n\t\t// but was intentionally not called.\n\t\t// Otherwise, summarize should have been called on this node and wipLocalPaths must be set.\n\t\tif (parentSkipRecursion || this.wipLocalPaths !== undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * The absence of wip local path indicates that summarize was not called for this node. Return failure.\n\t\t * This can happen if:\n\t\t * 1. A child node was created after summarize was already called on the parent. For example, a data store\n\t\t * is realized (loaded) after summarize was called on it creating summarizer nodes for its DDSes. In this case,\n\t\t * parentSkipRecursion will be true and the if block above would handle it.\n\t\t * 2. A new node was created but summarize was never called on it. This can mean that the summary that is\n\t\t * generated may not have the data from this node. We should not continue, log and throw an error. This\n\t\t * will help us identify these cases and take appropriate action.\n\t\t *\n\t\t * This happens due to scenarios such as data store created during summarize. Such errors should go away when\n\t\t * summarize is attempted again.\n\t\t */\n\t\treturn true;\n\t}\n\n\t/**\n\t * Called after summary has been uploaded to the server. Add the work-in-progress state to the pending summary\n\t * queue. We track this until we get an ack from the server for this summary.\n\t * @param proposalHandle - The handle of the summary that was uploaded to the server.\n\t */\n\tpublic completeSummary(proposalHandle: string, validate: boolean) {\n\t\tthis.completeSummaryCore(\n\t\t\tproposalHandle,\n\t\t\tundefined /* parentPath */,\n\t\t\tfalse /* parentSkipRecursion */,\n\t\t\tvalidate,\n\t\t);\n\t}\n\n\t/**\n\t * Recursive implementation for completeSummary, with additional internal-only parameters.\n\t * @param proposalHandle - The handle of the summary that was uploaded to the server.\n\t * @param parentPath - The path of the parent node which is used to build the path of this node.\n\t * @param parentSkipRecursion - true if the parent of this node skipped recursing the child nodes when summarizing.\n\t * In that case, the children will not have work-in-progress state.\n\t * @param validate - true to validate that the in-progress summary is correct for all nodes.\n\t */\n\tprotected completeSummaryCore(\n\t\tproposalHandle: string,\n\t\tparentPath: EscapedPath | undefined,\n\t\tparentSkipRecursion: boolean,\n\t\tvalidate: boolean,\n\t) {\n\t\tif (validate && this.wasSummarizeMissed(parentSkipRecursion)) {\n\t\t\tthis.throwUnexpectedError({\n\t\t\t\teventName: \"NodeDidNotSummarize\",\n\t\t\t\tproposalHandle,\n\t\t\t});\n\t\t}\n\n\t\tassert(this.wipReferenceSequenceNumber !== undefined, 0x1a4 /* \"Not tracking a summary\" */);\n\t\tlet localPathsToUse = this.wipLocalPaths;\n\n\t\tif (parentSkipRecursion) {\n\t\t\tconst latestSummary = this._latestSummary;\n\t\t\tif (latestSummary !== undefined) {\n\t\t\t\t// This case the parent node created a failure summary or was reused.\n\t\t\t\t// This node and all children should only try to reference their path\n\t\t\t\t// by its last known good state in the actual summary tree.\n\t\t\t\t// If parent fails or is reused, the child summarize is not called so\n\t\t\t\t// it did not get a chance to change its paths.\n\t\t\t\t// In this case, essentially only propagate the new summary ref seq num.\n\t\t\t\tlocalPathsToUse = {\n\t\t\t\t\tlocalPath: latestSummary.localPath,\n\t\t\t\t\tadditionalPath: latestSummary.additionalPath,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t// This case the child is added after the latest non-failure summary.\n\t\t\t\t// This node and all children should consider themselves as still not\n\t\t\t\t// having a successful summary yet.\n\t\t\t\t// We cannot \"reuse\" this node if unchanged since that summary, because\n\t\t\t\t// handles will be unable to point to that node. It never made it to the\n\t\t\t\t// tree itself, and only exists as an attach op in the _outstandingOps.\n\t\t\t\tthis.clearSummary();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// If localPathsToUse is undefined, it means summarize didn't run for this node and in that case the validate\n\t\t// step should have failed.\n\t\tassert(localPathsToUse !== undefined, 0x6fe /* summarize didn't run for node */);\n\t\tconst summary = new SummaryNode({\n\t\t\t...localPathsToUse,\n\t\t\treferenceSequenceNumber: this.wipReferenceSequenceNumber,\n\t\t\tbasePath: parentPath,\n\t\t});\n\t\tconst fullPathForChildren = summary.fullPathForChildren;\n\t\tfor (const child of this.children.values()) {\n\t\t\tchild.completeSummaryCore(\n\t\t\t\tproposalHandle,\n\t\t\t\tfullPathForChildren,\n\t\t\t\tthis.wipSkipRecursion || parentSkipRecursion,\n\t\t\t\tvalidate,\n\t\t\t);\n\t\t}\n\t\t// Note that this overwrites existing pending summary with\n\t\t// the same proposalHandle. If proposalHandle is something like\n\t\t// a hash or unique identifier, this should be fine. If storage\n\t\t// can return the same proposalHandle for a different summary,\n\t\t// this should still be okay, because we should be proposing the\n\t\t// newer one later which would have to overwrite the previous one.\n\t\tthis.pendingSummaries.set(proposalHandle, summary);\n\t\tthis.clearSummary();\n\t}\n\n\tpublic clearSummary() {\n\t\tthis.wipReferenceSequenceNumber = undefined;\n\t\tthis.wipLocalPaths = undefined;\n\t\tthis.wipSkipRecursion = false;\n\t\tthis.wipSummaryLogger = undefined;\n\t\tfor (const child of this.children.values()) {\n\t\t\tchild.clearSummary();\n\t\t}\n\t}\n\n\t/**\n\t * Refreshes the latest summary tracked by this node. If we have a pending summary for the given proposal handle,\n\t * it becomes the latest summary. If the current summary is already ahead, we skip the update.\n\t * If the current summary is behind, then we do not refresh.\n\t *\n\t * @returns true if the summary is tracked by this node, false otherwise.\n\t */\n\tpublic async refreshLatestSummary(\n\t\tproposalHandle: string,\n\t\tsummaryRefSeq: number,\n\t): Promise<IRefreshSummaryResult> {\n\t\tconst eventProps: {\n\t\t\tproposalHandle: string | undefined;\n\t\t\tsummaryRefSeq: number;\n\t\t\treferenceSequenceNumber: number;\n\t\t\tisSummaryTracked?: boolean;\n\t\t\tpendingSummaryFound?: boolean;\n\t\t} = {\n\t\t\tproposalHandle,\n\t\t\tsummaryRefSeq,\n\t\t\treferenceSequenceNumber: this.referenceSequenceNumber,\n\t\t};\n\t\treturn PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"refreshLatestSummary\",\n\t\t\t\t...eventProps,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\t// Refresh latest summary should not happen while a summary is in progress. If it does, it can result\n\t\t\t\t// in inconsistent state, so, we should not continue;\n\t\t\t\tif (this.isSummaryInProgress()) {\n\t\t\t\t\tthrow new LoggingError(\"UnexpectedRefreshDuringSummarize\", {\n\t\t\t\t\t\tinProgressSummaryRefSeq: this.wipReferenceSequenceNumber,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tlet isSummaryTracked = false;\n\t\t\t\tlet isSummaryNewer = false;\n\n\t\t\t\tif (summaryRefSeq > this.referenceSequenceNumber) {\n\t\t\t\t\tisSummaryNewer = true;\n\t\t\t\t}\n\t\t\t\tconst maybeSummaryNode = this.pendingSummaries.get(proposalHandle);\n\t\t\t\tif (maybeSummaryNode !== undefined) {\n\t\t\t\t\tthis.refreshLatestSummaryFromPending(\n\t\t\t\t\t\tproposalHandle,\n\t\t\t\t\t\tmaybeSummaryNode.referenceSequenceNumber,\n\t\t\t\t\t);\n\t\t\t\t\tisSummaryTracked = true;\n\t\t\t\t}\n\t\t\t\tevent.end({ ...eventProps, isSummaryNewer, pendingSummaryFound: isSummaryTracked });\n\t\t\t\treturn { isSummaryTracked, isSummaryNewer };\n\t\t\t},\n\t\t\t{ start: true, end: true, cancel: \"error\" },\n\t\t);\n\t}\n\t/**\n\t * Called when we get an ack from the server for a summary we've just sent. Updates the reference state of this node\n\t * from the state in the pending summary queue.\n\t * @param proposalHandle - Handle for the current proposal.\n\t * @param referenceSequenceNumber - Reference sequence number of sent summary.\n\t */\n\tprotected refreshLatestSummaryFromPending(\n\t\tproposalHandle: string,\n\t\treferenceSequenceNumber: number,\n\t): void {\n\t\tconst summaryNode = this.pendingSummaries.get(proposalHandle);\n\t\tif (summaryNode === undefined) {\n\t\t\t// This should only happen if parent skipped recursion AND no prior summary existed.\n\t\t\tassert(\n\t\t\t\tthis._latestSummary === undefined,\n\t\t\t\t0x1a6 /* \"Not found pending summary, but this node has previously completed a summary\" */,\n\t\t\t);\n\t\t\treturn;\n\t\t} else {\n\t\t\tassert(\n\t\t\t\treferenceSequenceNumber === summaryNode.referenceSequenceNumber,\n\t\t\t\t0x1a7 /* Pending summary reference sequence number should be consistent */,\n\t\t\t);\n\n\t\t\t// Clear earlier pending summaries\n\t\t\tthis.pendingSummaries.delete(proposalHandle);\n\t\t}\n\n\t\tthis.refreshLatestSummaryCore(referenceSequenceNumber);\n\n\t\tthis._latestSummary = summaryNode;\n\t\t// Propagate update to all child nodes\n\t\tfor (const child of this.children.values()) {\n\t\t\tchild.refreshLatestSummaryFromPending(proposalHandle, referenceSequenceNumber);\n\t\t}\n\t}\n\n\tprivate refreshLatestSummaryCore(referenceSequenceNumber: number): void {\n\t\tfor (const [key, value] of this.pendingSummaries) {\n\t\t\tif (value.referenceSequenceNumber < referenceSequenceNumber) {\n\t\t\t\tthis.pendingSummaries.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic updateBaseSummaryState(snapshot: ISnapshotTree) {\n\t\t// Check base summary to see if it has any additional path parts\n\t\t// separating child SummarizerNodes. Checks for .channels subtrees.\n\t\tconst { childrenPathPart } = parseSummaryForSubtrees(snapshot);\n\t\tif (childrenPathPart !== undefined && this._latestSummary !== undefined) {\n\t\t\tthis._latestSummary.additionalPath = EscapedPath.create(childrenPathPart);\n\t\t}\n\t}\n\n\tpublic recordChange(op: ISequencedDocumentMessage): void {\n\t\tthis.invalidate(op.sequenceNumber);\n\t}\n\n\tpublic invalidate(sequenceNumber: number): void {\n\t\tif (sequenceNumber > this._changeSequenceNumber) {\n\t\t\tthis._changeSequenceNumber = sequenceNumber;\n\t\t}\n\t}\n\n\t/**\n\t * True if a change has been recorded with sequence number exceeding\n\t * the latest successfully acked summary reference sequence number.\n\t * False implies that the previous summary can be reused.\n\t */\n\tprotected hasChanged(): boolean {\n\t\treturn this._changeSequenceNumber > this.referenceSequenceNumber;\n\t}\n\n\tpublic get latestSummary(): Readonly<SummaryNode> | undefined {\n\t\treturn this._latestSummary;\n\t}\n\n\tprotected readonly canReuseHandle: boolean;\n\n\tpublic createChild(\n\t\t/** Summarize function */\n\t\tsummarizeInternalFn: SummarizeInternalFn,\n\t\t/** Initial id or path part of this node */\n\t\tid: string,\n\t\t/**\n\t\t * Information needed to create the node.\n\t\t * If it is from a base summary, it will assert that a summary has been seen.\n\t\t * Attach information if it is created from an attach op.\n\t\t */\n\t\tcreateParam: CreateChildSummarizerNodeParam,\n\t\tconfig: ISummarizerNodeConfig = {},\n\t): ISummarizerNode {\n\t\tassert(!this.children.has(id), 0x1ab /* \"Create SummarizerNode child already exists\" */);\n\n\t\tconst createDetails: ICreateChildDetails = this.getCreateDetailsForChild(id, createParam);\n\t\tconst child = new SummarizerNode(\n\t\t\tthis.logger,\n\t\t\tsummarizeInternalFn,\n\t\t\tconfig,\n\t\t\tcreateDetails.changeSequenceNumber,\n\t\t\tcreateDetails.latestSummary,\n\t\t\tthis.wipSummaryLogger,\n\t\t\tcreateDetails.telemetryNodeId,\n\t\t);\n\n\t\t// There may be additional state that has to be updated in this child. For example, if a summary is being\n\t\t// tracked, the child's summary tracking state needs to be updated too. Same goes for pendingSummaries we might\n\t\t// have outstanding on the parent in case we realize nodes in between Summary Op and Summary Ack.\n\t\tthis.maybeUpdateChildState(child, id);\n\n\t\tthis.children.set(id, child);\n\t\treturn child;\n\t}\n\n\tpublic getChild(id: string): ISummarizerNode | undefined {\n\t\treturn this.children.get(id);\n\t}\n\n\t/**\n\t * Returns the details needed to create a child node.\n\t * @param id - Initial id or path part of the child node.\n\t * @param createParam - Information needed to create the node.\n\t * @returns the details needed to create the child node.\n\t */\n\tprotected getCreateDetailsForChild(\n\t\tid: string,\n\t\tcreateParam: CreateChildSummarizerNodeParam,\n\t): ICreateChildDetails {\n\t\tlet latestSummary: SummaryNode | undefined;\n\t\tlet changeSequenceNumber: number;\n\n\t\tconst parentLatestSummary = this._latestSummary;\n\t\tswitch (createParam.type) {\n\t\t\tcase CreateSummarizerNodeSource.FromAttach: {\n\t\t\t\tif (\n\t\t\t\t\tparentLatestSummary !== undefined &&\n\t\t\t\t\tcreateParam.sequenceNumber <= parentLatestSummary.referenceSequenceNumber\n\t\t\t\t) {\n\t\t\t\t\t// Prioritize latest summary if it was after this node was attached.\n\t\t\t\t\tlatestSummary = parentLatestSummary.createForChild(id);\n\t\t\t\t}\n\t\t\t\tchangeSequenceNumber = createParam.sequenceNumber;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase CreateSummarizerNodeSource.FromSummary:\n\t\t\tcase CreateSummarizerNodeSource.Local: {\n\t\t\t\tlatestSummary = parentLatestSummary?.createForChild(id);\n\t\t\t\tchangeSequenceNumber = parentLatestSummary?.referenceSequenceNumber ?? -1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst type = (createParam as unknown as CreateChildSummarizerNodeParam).type;\n\t\t\t\tunreachableCase(createParam, `Unexpected CreateSummarizerNodeSource: ${type}`);\n\t\t\t}\n\t\t}\n\n\t\tconst childTelemetryNodeId = `${this.telemetryNodeId ?? \"\"}/${id}`;\n\n\t\treturn {\n\t\t\tlatestSummary,\n\t\t\tchangeSequenceNumber,\n\t\t\ttelemetryNodeId: childTelemetryNodeId,\n\t\t};\n\t}\n\n\t/**\n\t * Updates the state of the child if required. For example, if a summary is currently being tracked, the child's\n\t * summary tracking state needs to be updated too.\n\t * Also, in case a child node gets realized in between Summary Op and Summary Ack, let's initialize the child's\n\t * pending summary as well.\n\t * @param child - The child node whose state is to be updated.\n\t * @param id - Initial id or path part of this node\n\t *\n\t */\n\tprotected maybeUpdateChildState(child: SummarizerNode, id: string) {\n\t\t// If a summary is in progress, this child was created after the summary started. So, we need to update the\n\t\t// child's summary state as well.\n\t\tif (this.isSummaryInProgress()) {\n\t\t\tchild.wipReferenceSequenceNumber = this.wipReferenceSequenceNumber;\n\t\t}\n\t\t// In case we have pending summaries on the parent, let's initialize it on the child.\n\t\tif (child._latestSummary !== undefined) {\n\t\t\tfor (const [key, value] of this.pendingSummaries.entries()) {\n\t\t\t\tconst newLatestSummaryNode = new SummaryNode({\n\t\t\t\t\treferenceSequenceNumber: value.referenceSequenceNumber,\n\t\t\t\t\tbasePath: child._latestSummary.basePath,\n\t\t\t\t\tlocalPath: child._latestSummary.localPath,\n\t\t\t\t});\n\n\t\t\t\tchild.addPendingSummary(key, newLatestSummaryNode);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected addPendingSummary(key: string, summary: SummaryNode) {\n\t\tthis.pendingSummaries.set(key, summary);\n\t}\n\n\t/**\n\t * Tells whether summary tracking is in progress. True if \"startSummary\" API is called before summarize.\n\t */\n\tpublic isSummaryInProgress(): boolean {\n\t\treturn this.wipReferenceSequenceNumber !== undefined;\n\t}\n\n\t/**\n\t * Creates and throws an error due to unexpected conditions.\n\t */\n\tprotected throwUnexpectedError(eventProps: ITelemetryErrorEventExt): never {\n\t\tconst error = new LoggingError(eventProps.eventName, {\n\t\t\t...eventProps,\n\t\t\treferenceSequenceNumber: this.wipReferenceSequenceNumber,\n\t\t\t...tagCodeArtifacts({\n\t\t\t\tid: this.telemetryNodeId,\n\t\t\t}),\n\t\t});\n\t\tthis.logger.sendErrorEvent(eventProps, error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Creates a root summarizer node.\n * @param logger - Logger to use within SummarizerNode\n * @param summarizeInternalFn - Function to generate summary\n * @param changeSequenceNumber - Sequence number of latest change to new node/subtree\n * @param referenceSequenceNumber - Reference sequence number of last acked summary,\n * or undefined if not loaded from summary\n * @param config - Configure behavior of summarizer node\n */\nexport const createRootSummarizerNode = (\n\tlogger: ITelemetryLoggerExt,\n\tsummarizeInternalFn: SummarizeInternalFn,\n\tchangeSequenceNumber: number,\n\treferenceSequenceNumber: number | undefined,\n\tconfig: ISummarizerNodeConfig = {},\n): IRootSummarizerNode =>\n\tnew SummarizerNode(\n\t\tlogger,\n\t\tsummarizeInternalFn,\n\t\tconfig,\n\t\tchangeSequenceNumber,\n\t\treferenceSequenceNumber === undefined\n\t\t\t? undefined\n\t\t\t: SummaryNode.createForRoot(referenceSequenceNumber),\n\t\tundefined /* wipSummaryLogger */,\n\t\t\"\" /* telemetryNodeId */,\n\t);\n"]}
@@ -3,14 +3,21 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { ITelemetryLoggerExt, TelemetryDataTag } from "@fluidframework/telemetry-utils";
6
- import { ISnapshotTree, ISummaryTree, SummaryObject } from "@fluidframework/protocol-definitions";
7
- import { ISummaryTreeWithStats } from "@fluidframework/runtime-definitions";
6
+ import { ISnapshotTree, SummaryObject } from "@fluidframework/protocol-definitions";
8
7
  export interface IRefreshSummaryResult {
9
8
  /** Tells whether this summary is tracked by this client. */
10
9
  isSummaryTracked: boolean;
11
10
  /** Tells whether this summary is newer than the latest one tracked by this client. */
12
11
  isSummaryNewer: boolean;
13
12
  }
13
+ export interface IStartSummaryResult {
14
+ /** The number of summarizerNodes at the start of the summary. */
15
+ nodes: number;
16
+ /** The number of summarizerNodes in the wrong state. */
17
+ invalidNodes: number;
18
+ /** The invalid sequence numbers and their values. It should be in the format of validateSequenceNumber-nodeSequenceNumber */
19
+ mismatchNumbers: Set<string>;
20
+ }
14
21
  /**
15
22
  * Return type of validateSummary function. In case of success, the object returned should have success: true.
16
23
  * In case of failure, the object returned should have success: false and additional properties to indicate what
@@ -31,7 +38,7 @@ export type ValidateSummaryResult = {
31
38
  retryAfterSeconds?: number;
32
39
  };
33
40
  export interface ISummarizerNodeRootContract {
34
- startSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryLoggerExt): void;
41
+ startSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryLoggerExt, latestSummaryRefSeqNum: number): IStartSummaryResult;
35
42
  validateSummary(): ValidateSummaryResult;
36
43
  completeSummary(proposalHandle: string, validate: boolean): void;
37
44
  clearSummary(): void;
@@ -79,20 +86,10 @@ export declare class SummaryNode {
79
86
  */
80
87
  createForChild(id: string): SummaryNode;
81
88
  }
82
- /**
83
- * Information about the initial summary tree found from an attach op.
84
- */
85
- export interface IInitialSummary {
86
- sequenceNumber: number;
87
- id: string;
88
- summary: ISummaryTreeWithStats | undefined;
89
- }
90
89
  /**
91
90
  * Represents the details needed to create a child summarizer node.
92
91
  */
93
92
  export interface ICreateChildDetails {
94
- /** Summary from attach op if known */
95
- initialSummary: IInitialSummary | undefined;
96
93
  /** Latest summary from server node data */
97
94
  latestSummary: SummaryNode | undefined;
98
95
  /** Sequence number of latest known change to the node */
@@ -112,10 +109,4 @@ export interface ISubtreeInfo<T extends ISnapshotTree | SummaryObject> {
112
109
  * @param baseSummary - summary to check
113
110
  */
114
111
  export declare function parseSummaryForSubtrees(baseSummary: ISnapshotTree): ISubtreeInfo<ISnapshotTree>;
115
- /**
116
- * Checks if the summary contains .channels subtree where the children subtrees
117
- * would be located if exists.
118
- * @param baseSummary - summary to check
119
- */
120
- export declare function parseSummaryTreeForSubtrees(summary: ISummaryTree): ISubtreeInfo<SummaryObject>;
121
- //# sourceMappingURL=summarizerNodeUtils.d.mts.map
112
+ //# sourceMappingURL=summarizerNodeUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizerNodeUtils.d.ts","sourceRoot":"","sources":["../../../src/summary/summarizerNode/summarizerNodeUtils.ts"],"names":[],"mappings":"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"}
@@ -101,23 +101,4 @@ export function parseSummaryForSubtrees(baseSummary) {
101
101
  childrenPathPart: undefined,
102
102
  };
103
103
  }
104
- /**
105
- * Checks if the summary contains .channels subtree where the children subtrees
106
- * would be located if exists.
107
- * @param baseSummary - summary to check
108
- */
109
- export function parseSummaryTreeForSubtrees(summary) {
110
- // New versions of snapshots have child nodes isolated in .channels subtree
111
- const channelsSubtree = summary.tree[channelsTreeName];
112
- if (channelsSubtree !== undefined) {
113
- return {
114
- childrenTree: channelsSubtree,
115
- childrenPathPart: channelsTreeName,
116
- };
117
- }
118
- return {
119
- childrenTree: summary,
120
- childrenPathPart: undefined,
121
- };
122
- }
123
- //# sourceMappingURL=summarizerNodeUtils.mjs.map
104
+ //# sourceMappingURL=summarizerNodeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizerNodeUtils.js","sourceRoot":"","sources":["../../../src/summary/summarizerNode/summarizerNodeUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAuDvE,+DAA+D;AAC/D,MAAM,OAAO,WAAW;IACvB,YAAoC,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAC7C,MAAM,CAAC,MAAM,CAAC,IAAY;QAChC,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IACM,MAAM,CAAC,eAAe,CAAC,SAAmB;QAChD,IAAI,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACnD;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IACM,QAAQ;QACd,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IACM,MAAM,CAAC,IAAiB;QAC9B,OAAO,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;CACD;AAED,0EAA0E;AAC1E,MAAM,OAAO,WAAW;IACvB,0FAA0F;IACnF,MAAM,CAAC,aAAa,CAAC,uBAA+B;QAC1D,OAAO,IAAI,WAAW,CAAC;YACtB,uBAAuB;YACvB,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,wBAAwB;SAC3D,CAAC,CAAC;IACJ,CAAC;IAED,4FAA4F;IAC5F,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC;IAC7C,CAAC;IACD,iEAAiE;IACjE,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9B,CAAC;IACD,sDAAsD;IACtD,IAAW,SAAS;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAC/B,CAAC;IACD,sEAAsE;IACtE,IAAW,cAAc;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;IACpC,CAAC;IACD,IAAW,cAAc,CAAC,cAAuC;QAChE,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;IAC9C,CAAC;IACD,YACkB,OAKhB;QALgB,YAAO,GAAP,OAAO,CAKvB;IACC,CAAC;IAEJ,wEAAwE;IACxE,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;IAChE,CAAC;IAED;;;OAGG;IACH,IAAW,mBAAmB;QAC7B,OAAO,IAAI,CAAC,cAAc,KAAK,SAAS;YACvC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClB,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,EAAU;QAC/B,OAAO,IAAI,WAAW,CAAC;YACtB,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;YACrD,QAAQ,EAAE,IAAI,CAAC,mBAAmB;YAClC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;SACjC,CAAC,CAAC;IACJ,CAAC;CACD;AAqBD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAA0B;IACjE,2EAA2E;IAC3E,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC5D,IAAI,eAAe,KAAK,SAAS,EAAE;QAClC,OAAO;YACN,YAAY,EAAE,eAAe;YAC7B,gBAAgB,EAAE,gBAAgB;SAClC,CAAC;KACF;IACD,OAAO;QACN,YAAY,EAAE,WAAW;QACzB,gBAAgB,EAAE,SAAS;KAC3B,CAAC;AACH,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryLoggerExt, TelemetryDataTag } from \"@fluidframework/telemetry-utils\";\nimport { ISnapshotTree, SummaryObject } from \"@fluidframework/protocol-definitions\";\nimport { channelsTreeName } from \"@fluidframework/runtime-definitions\";\n\nexport interface IRefreshSummaryResult {\n\t/** Tells whether this summary is tracked by this client. */\n\tisSummaryTracked: boolean;\n\t/** Tells whether this summary is newer than the latest one tracked by this client. */\n\tisSummaryNewer: boolean;\n}\n\nexport interface IStartSummaryResult {\n\t/** The number of summarizerNodes at the start of the summary. */\n\tnodes: number;\n\t/** The number of summarizerNodes in the wrong state. */\n\tinvalidNodes: number;\n\t/** The invalid sequence numbers and their values. It should be in the format of validateSequenceNumber-nodeSequenceNumber */\n\tmismatchNumbers: Set<string>;\n}\n\n/**\n * Return type of validateSummary function. In case of success, the object returned should have success: true.\n * In case of failure, the object returned should have success: false and additional properties to indicate what\n * the failure was, where it was, can it be retried, etc.\n */\nexport type ValidateSummaryResult =\n\t| {\n\t\t\tsuccess: true;\n\t }\n\t| {\n\t\t\tsuccess: false;\n\t\t\t/** The failure reason */\n\t\t\treason: string;\n\t\t\t/** id of the node that failed during validation */\n\t\t\tid: {\n\t\t\t\ttag: TelemetryDataTag.CodeArtifact;\n\t\t\t\tvalue: string | undefined;\n\t\t\t};\n\t\t\t/** If the error can be retried, time to wait before retrying */\n\t\t\tretryAfterSeconds?: number;\n\t };\n\nexport interface ISummarizerNodeRootContract {\n\tstartSummary(\n\t\treferenceSequenceNumber: number,\n\t\tsummaryLogger: ITelemetryLoggerExt,\n\t\tlatestSummaryRefSeqNum: number,\n\t): IStartSummaryResult;\n\tvalidateSummary(): ValidateSummaryResult;\n\tcompleteSummary(proposalHandle: string, validate: boolean): void;\n\tclearSummary(): void;\n\trefreshLatestSummary(\n\t\tproposalHandle: string,\n\t\tsummaryRefSeq: number,\n\t): Promise<IRefreshSummaryResult>;\n}\n\n/** Path for nodes in a tree with escaped special characters */\nexport class EscapedPath {\n\tprivate constructor(public readonly path: string) {}\n\tpublic static create(path: string): EscapedPath {\n\t\treturn new EscapedPath(encodeURIComponent(path));\n\t}\n\tpublic static createAndConcat(pathParts: string[]): EscapedPath {\n\t\tlet ret = EscapedPath.create(pathParts[0] ?? \"\");\n\t\tfor (let i = 1; i < pathParts.length; i++) {\n\t\t\tret = ret.concat(EscapedPath.create(pathParts[i]));\n\t\t}\n\t\treturn ret;\n\t}\n\tpublic toString(): string {\n\t\treturn this.path;\n\t}\n\tpublic concat(path: EscapedPath): EscapedPath {\n\t\treturn new EscapedPath(`${this.path}/${path.path}`);\n\t}\n}\n\n/** Information about a summary relevant to a specific node in the tree */\nexport class SummaryNode {\n\t/** Creates an instance that is valid for the root with specific basePath and localPath */\n\tpublic static createForRoot(referenceSequenceNumber: number): SummaryNode {\n\t\treturn new SummaryNode({\n\t\t\treferenceSequenceNumber,\n\t\t\tbasePath: undefined,\n\t\t\tlocalPath: EscapedPath.create(\"\"), // root hard-coded to \"\"\n\t\t});\n\t}\n\n\t/** Summary reference sequence number, i.e. last sequence number seen when it was created */\n\tpublic get referenceSequenceNumber(): number {\n\t\treturn this.summary.referenceSequenceNumber;\n\t}\n\t/** Full path to parent node, or undefined if this is the root */\n\tpublic get basePath(): EscapedPath | undefined {\n\t\treturn this.summary.basePath;\n\t}\n\t/** Relative path to this node from its parent node */\n\tpublic get localPath(): EscapedPath {\n\t\treturn this.summary.localPath;\n\t}\n\t/** Relative path from this node to its node innermost base summary */\n\tpublic get additionalPath(): EscapedPath | undefined {\n\t\treturn this.summary.additionalPath;\n\t}\n\tpublic set additionalPath(additionalPath: EscapedPath | undefined) {\n\t\tthis.summary.additionalPath = additionalPath;\n\t}\n\tconstructor(\n\t\tprivate readonly summary: {\n\t\t\treadonly referenceSequenceNumber: number;\n\t\t\treadonly basePath: EscapedPath | undefined;\n\t\t\treadonly localPath: EscapedPath;\n\t\t\tadditionalPath?: EscapedPath;\n\t\t},\n\t) {}\n\n\t/** Gets the full path to this node, to be used when sending a handle */\n\tpublic get fullPath(): EscapedPath {\n\t\treturn this.basePath?.concat(this.localPath) ?? this.localPath;\n\t}\n\n\t/**\n\t * Gets the full path to this node's innermost base summary.\n\t * The children nodes can use this as their basePath to determine their path.\n\t */\n\tpublic get fullPathForChildren(): EscapedPath {\n\t\treturn this.additionalPath !== undefined\n\t\t\t? this.fullPath.concat(this.additionalPath)\n\t\t\t: this.fullPath;\n\t}\n\n\t/**\n\t * Creates a new node within the same summary for a child of this node.\n\t * @param id - id of the child node\n\t */\n\tpublic createForChild(id: string): SummaryNode {\n\t\treturn new SummaryNode({\n\t\t\treferenceSequenceNumber: this.referenceSequenceNumber,\n\t\t\tbasePath: this.fullPathForChildren,\n\t\t\tlocalPath: EscapedPath.create(id),\n\t\t});\n\t}\n}\n\n/**\n * Represents the details needed to create a child summarizer node.\n */\nexport interface ICreateChildDetails {\n\t/** Latest summary from server node data */\n\tlatestSummary: SummaryNode | undefined;\n\t/** Sequence number of latest known change to the node */\n\tchangeSequenceNumber: number;\n\t/** A unique id of this child to be logged when sending telemetry. */\n\ttelemetryNodeId: string;\n}\n\nexport interface ISubtreeInfo<T extends ISnapshotTree | SummaryObject> {\n\t/** Tree to use to find children subtrees */\n\tchildrenTree: T;\n\t/** Additional path part where children are isolated */\n\tchildrenPathPart: string | undefined;\n}\n\n/**\n * Checks if the summary contains .channels subtree where the children subtrees\n * would be located if exists.\n * @param baseSummary - summary to check\n */\nexport function parseSummaryForSubtrees(baseSummary: ISnapshotTree): ISubtreeInfo<ISnapshotTree> {\n\t// New versions of snapshots have child nodes isolated in .channels subtree\n\tconst channelsSubtree = baseSummary.trees[channelsTreeName];\n\tif (channelsSubtree !== undefined) {\n\t\treturn {\n\t\t\tchildrenTree: channelsSubtree,\n\t\t\tchildrenPathPart: channelsTreeName,\n\t\t};\n\t}\n\treturn {\n\t\tchildrenTree: baseSummary,\n\t\tchildrenPathPart: undefined,\n\t};\n}\n"]}
@@ -2,11 +2,10 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
6
5
  import { CreateChildSummarizerNodeParam, IGarbageCollectionData, IGarbageCollectionDetailsBase, ISummarizeInternalResult, ISummarizeResult, ISummarizerNodeConfigWithGC, ISummarizerNodeWithGC, SummarizeInternalFn, ITelemetryContext, IExperimentalIncrementalSummaryContext } from "@fluidframework/runtime-definitions";
7
6
  import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
8
- import { SummarizerNode } from "./summarizerNode.mjs";
9
- import { EscapedPath, IInitialSummary, ISummarizerNodeRootContract, SummaryNode, ValidateSummaryResult } from "./summarizerNodeUtils.mjs";
7
+ import { SummarizerNode } from "./summarizerNode.js";
8
+ import { EscapedPath, IStartSummaryResult, ISummarizerNodeRootContract, SummaryNode, ValidateSummaryResult } from "./summarizerNodeUtils.js";
10
9
  export interface IRootSummarizerNodeWithGC extends ISummarizerNodeWithGC, ISummarizerNodeRootContract {
11
10
  }
12
11
  /**
@@ -39,7 +38,7 @@ export declare class SummarizerNodeWithGC extends SummarizerNode implements IRoo
39
38
  */
40
39
  constructor(logger: ITelemetryBaseLogger, summarizeFn: (fullTree: boolean, trackState: boolean, telemetryContext?: ITelemetryContext, incrementalSummaryContext?: IExperimentalIncrementalSummaryContext) => Promise<ISummarizeInternalResult>, config: ISummarizerNodeConfigWithGC, changeSequenceNumber: number,
41
40
  /** Undefined means created without summary */
42
- latestSummary?: SummaryNode, initialSummary?: IInitialSummary, wipSummaryLogger?: ITelemetryBaseLogger, getGCDataFn?: ((fullGC?: boolean) => Promise<IGarbageCollectionData>) | undefined, getBaseGCDetailsFn?: () => Promise<IGarbageCollectionDetailsBase>,
41
+ latestSummary?: SummaryNode, wipSummaryLogger?: ITelemetryBaseLogger, getGCDataFn?: ((fullGC?: boolean) => Promise<IGarbageCollectionData>) | undefined, getBaseGCDetailsFn?: () => Promise<IGarbageCollectionDetailsBase>,
43
42
  /** A unique id of this node to be logged when sending telemetry. */
44
43
  telemetryId?: string);
45
44
  /**
@@ -59,7 +58,7 @@ export declare class SummarizerNodeWithGC extends SummarizerNode implements IRoo
59
58
  /**
60
59
  * Called during the start of a summary. Updates the work-in-progress used routes.
61
60
  */
62
- startSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryLoggerExt): void;
61
+ startSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryBaseLogger, latestSummaryRefSeqNum: number): IStartSummaryResult;
63
62
  /**
64
63
  * Validates that the in-progress summary is correct for all nodes, i.e., GC should have run for non-skipped nodes.
65
64
  * @param parentSkipRecursion - true if the parent of this node skipped recursing the child nodes when running GC.
@@ -102,7 +101,7 @@ export declare class SummarizerNodeWithGC extends SummarizerNode implements IRoo
102
101
  * If it is from a base summary, it will assert that a summary has been seen.
103
102
  * Attach information if it is created from an attach op.
104
103
  */
105
- createParam: CreateChildSummarizerNodeParam, config?: ISummarizerNodeConfigWithGC, getGCDataFn?: (fullGC?: boolean) => Promise<IGarbageCollectionData>, getBaseGCDetailsFn?: () => Promise<IGarbageCollectionDetailsBase>): ISummarizerNodeWithGC;
104
+ createParam: CreateChildSummarizerNodeParam, config?: ISummarizerNodeConfigWithGC, getGCDataFn?: (fullGC?: boolean) => Promise<IGarbageCollectionData>): ISummarizerNodeWithGC;
106
105
  /**
107
106
  * Updates the state of the child if required. For example, if a summary is currently being tracked, the child's
108
107
  * summary tracking state needs to be updated too.
@@ -150,4 +149,4 @@ export declare class SummarizerNodeWithGC extends SummarizerNode implements IRoo
150
149
  * @param baseGCDetailsP - Function to get the initial GC details of this node
151
150
  */
152
151
  export declare const createRootSummarizerNodeWithGC: (logger: ITelemetryBaseLogger, summarizeInternalFn: SummarizeInternalFn, changeSequenceNumber: number, referenceSequenceNumber: number | undefined, config?: ISummarizerNodeConfigWithGC, getGCDataFn?: ((fullGC?: boolean) => Promise<IGarbageCollectionData>) | undefined, getBaseGCDetailsFn?: () => Promise<IGarbageCollectionDetailsBase>) => IRootSummarizerNodeWithGC;
153
- //# sourceMappingURL=summarizerNodeWithGc.d.mts.map
152
+ //# sourceMappingURL=summarizerNodeWithGc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizerNodeWithGc.d.ts","sourceRoot":"","sources":["../../../src/summary/summarizerNode/summarizerNodeWithGc.ts"],"names":[],"mappings":"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"}