@fluidframework/container-runtime 2.0.0-dev-rc.5.0.0.263932 → 2.0.0-dev-rc.5.0.0.267932

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 (370) hide show
  1. package/api-report/container-runtime.api.md +43 -53
  2. package/dist/batchTracker.js.map +1 -1
  3. package/dist/blobManager.d.ts +4 -4
  4. package/dist/blobManager.d.ts.map +1 -1
  5. package/dist/blobManager.js +1 -1
  6. package/dist/blobManager.js.map +1 -1
  7. package/dist/channelCollection.d.ts +3 -3
  8. package/dist/channelCollection.d.ts.map +1 -1
  9. package/dist/channelCollection.js +3 -3
  10. package/dist/channelCollection.js.map +1 -1
  11. package/dist/connectionTelemetry.d.ts +2 -1
  12. package/dist/connectionTelemetry.d.ts.map +1 -1
  13. package/dist/connectionTelemetry.js +14 -14
  14. package/dist/connectionTelemetry.js.map +1 -1
  15. package/dist/containerHandleContext.d.ts +2 -1
  16. package/dist/containerHandleContext.d.ts.map +1 -1
  17. package/dist/containerHandleContext.js.map +1 -1
  18. package/dist/containerRuntime.d.ts +12 -19
  19. package/dist/containerRuntime.d.ts.map +1 -1
  20. package/dist/containerRuntime.js +74 -120
  21. package/dist/containerRuntime.js.map +1 -1
  22. package/dist/dataStore.d.ts.map +1 -1
  23. package/dist/dataStore.js.map +1 -1
  24. package/dist/dataStoreContext.d.ts +7 -8
  25. package/dist/dataStoreContext.d.ts.map +1 -1
  26. package/dist/dataStoreContext.js +3 -3
  27. package/dist/dataStoreContext.js.map +1 -1
  28. package/dist/dataStoreContexts.js.map +1 -1
  29. package/dist/dataStoreRegistry.js.map +1 -1
  30. package/dist/deltaManagerProxies.d.ts +4 -3
  31. package/dist/deltaManagerProxies.d.ts.map +1 -1
  32. package/dist/deltaManagerProxies.js.map +1 -1
  33. package/dist/deltaScheduler.d.ts +2 -1
  34. package/dist/deltaScheduler.d.ts.map +1 -1
  35. package/dist/deltaScheduler.js.map +1 -1
  36. package/dist/gc/garbageCollection.d.ts +1 -3
  37. package/dist/gc/garbageCollection.d.ts.map +1 -1
  38. package/dist/gc/garbageCollection.js +18 -21
  39. package/dist/gc/garbageCollection.js.map +1 -1
  40. package/dist/gc/gcConfigs.d.ts.map +1 -1
  41. package/dist/gc/gcConfigs.js +11 -30
  42. package/dist/gc/gcConfigs.js.map +1 -1
  43. package/dist/gc/gcDefinitions.d.ts +3 -30
  44. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  45. package/dist/gc/gcDefinitions.js +1 -3
  46. package/dist/gc/gcDefinitions.js.map +1 -1
  47. package/dist/gc/gcHelpers.d.ts +2 -3
  48. package/dist/gc/gcHelpers.d.ts.map +1 -1
  49. package/dist/gc/gcHelpers.js.map +1 -1
  50. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  51. package/dist/gc/gcSummaryDefinitions.d.ts +1 -1
  52. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -1
  53. package/dist/gc/gcSummaryDefinitions.js.map +1 -1
  54. package/dist/gc/gcSummaryStateTracker.d.ts +2 -35
  55. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  56. package/dist/gc/gcSummaryStateTracker.js +9 -62
  57. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  58. package/dist/gc/gcTelemetry.d.ts +1 -1
  59. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  60. package/dist/gc/gcTelemetry.js +2 -2
  61. package/dist/gc/gcTelemetry.js.map +1 -1
  62. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  63. package/dist/gc/index.d.ts +1 -1
  64. package/dist/gc/index.d.ts.map +1 -1
  65. package/dist/gc/index.js +1 -2
  66. package/dist/gc/index.js.map +1 -1
  67. package/dist/index.d.ts +1 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/legacy.d.ts +1 -1
  71. package/dist/messageTypes.d.ts +1 -1
  72. package/dist/messageTypes.d.ts.map +1 -1
  73. package/dist/messageTypes.js.map +1 -1
  74. package/dist/opLifecycle/batchManager.js.map +1 -1
  75. package/dist/opLifecycle/definitions.d.ts +2 -2
  76. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  77. package/dist/opLifecycle/definitions.js.map +1 -1
  78. package/dist/opLifecycle/opCompressor.d.ts +11 -1
  79. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  80. package/dist/opLifecycle/opCompressor.js +13 -2
  81. package/dist/opLifecycle/opCompressor.js.map +1 -1
  82. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  83. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  84. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  85. package/dist/opLifecycle/opGroupingManager.d.ts +10 -3
  86. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  87. package/dist/opLifecycle/opGroupingManager.js +7 -0
  88. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  89. package/dist/opLifecycle/opSplitter.d.ts +4 -2
  90. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  91. package/dist/opLifecycle/opSplitter.js +12 -7
  92. package/dist/opLifecycle/opSplitter.js.map +1 -1
  93. package/dist/opLifecycle/outbox.d.ts +10 -0
  94. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  95. package/dist/opLifecycle/outbox.js +12 -17
  96. package/dist/opLifecycle/outbox.js.map +1 -1
  97. package/dist/opLifecycle/remoteMessageProcessor.d.ts +1 -1
  98. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  99. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  100. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  101. package/dist/opProperties.d.ts +1 -1
  102. package/dist/opProperties.d.ts.map +1 -1
  103. package/dist/opProperties.js.map +1 -1
  104. package/dist/packageVersion.d.ts +1 -1
  105. package/dist/packageVersion.js +1 -1
  106. package/dist/packageVersion.js.map +1 -1
  107. package/dist/pendingStateManager.js.map +1 -1
  108. package/dist/scheduleManager.d.ts +2 -1
  109. package/dist/scheduleManager.d.ts.map +1 -1
  110. package/dist/scheduleManager.js.map +1 -1
  111. package/dist/storageServiceWithAttachBlobs.js.map +1 -1
  112. package/dist/summary/documentSchema.js +1 -1
  113. package/dist/summary/documentSchema.js.map +1 -1
  114. package/dist/summary/index.d.ts +1 -1
  115. package/dist/summary/index.d.ts.map +1 -1
  116. package/dist/summary/index.js.map +1 -1
  117. package/dist/summary/orderedClientElection.d.ts +4 -2
  118. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  119. package/dist/summary/orderedClientElection.js +35 -13
  120. package/dist/summary/orderedClientElection.js.map +1 -1
  121. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  122. package/dist/summary/runningSummarizer.d.ts +1 -6
  123. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  124. package/dist/summary/runningSummarizer.js +22 -108
  125. package/dist/summary/runningSummarizer.js.map +1 -1
  126. package/dist/summary/summarizer.d.ts +1 -1
  127. package/dist/summary/summarizer.d.ts.map +1 -1
  128. package/dist/summary/summarizer.js +4 -1
  129. package/dist/summary/summarizer.js.map +1 -1
  130. package/dist/summary/summarizerClientElection.d.ts +1 -1
  131. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  132. package/dist/summary/summarizerClientElection.js +2 -2
  133. package/dist/summary/summarizerClientElection.js.map +1 -1
  134. package/dist/summary/summarizerHeuristics.js.map +1 -1
  135. package/dist/summary/summarizerNode/summarizerNode.d.ts +3 -3
  136. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  137. package/dist/summary/summarizerNode/summarizerNode.js +16 -16
  138. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  139. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
  140. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  141. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  142. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -3
  143. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  144. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
  145. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  146. package/dist/summary/summarizerTypes.d.ts +17 -29
  147. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  148. package/dist/summary/summarizerTypes.js.map +1 -1
  149. package/dist/summary/summaryCollection.d.ts +2 -1
  150. package/dist/summary/summaryCollection.d.ts.map +1 -1
  151. package/dist/summary/summaryCollection.js +11 -11
  152. package/dist/summary/summaryCollection.js.map +1 -1
  153. package/dist/summary/summaryFormat.d.ts +3 -3
  154. package/dist/summary/summaryFormat.d.ts.map +1 -1
  155. package/dist/summary/summaryFormat.js +2 -2
  156. package/dist/summary/summaryFormat.js.map +1 -1
  157. package/dist/summary/summaryGenerator.d.ts +7 -8
  158. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  159. package/dist/summary/summaryGenerator.js +26 -22
  160. package/dist/summary/summaryGenerator.js.map +1 -1
  161. package/dist/summary/summaryManager.js.map +1 -1
  162. package/dist/throttler.js.map +1 -1
  163. package/lib/batchTracker.js.map +1 -1
  164. package/lib/blobManager.d.ts +4 -4
  165. package/lib/blobManager.d.ts.map +1 -1
  166. package/lib/blobManager.js +1 -1
  167. package/lib/blobManager.js.map +1 -1
  168. package/lib/channelCollection.d.ts +3 -3
  169. package/lib/channelCollection.d.ts.map +1 -1
  170. package/lib/channelCollection.js +3 -3
  171. package/lib/channelCollection.js.map +1 -1
  172. package/lib/connectionTelemetry.d.ts +2 -1
  173. package/lib/connectionTelemetry.d.ts.map +1 -1
  174. package/lib/connectionTelemetry.js +2 -2
  175. package/lib/connectionTelemetry.js.map +1 -1
  176. package/lib/containerHandleContext.d.ts +2 -1
  177. package/lib/containerHandleContext.d.ts.map +1 -1
  178. package/lib/containerHandleContext.js.map +1 -1
  179. package/lib/containerRuntime.d.ts +12 -19
  180. package/lib/containerRuntime.d.ts.map +1 -1
  181. package/lib/containerRuntime.js +68 -114
  182. package/lib/containerRuntime.js.map +1 -1
  183. package/lib/dataStore.d.ts.map +1 -1
  184. package/lib/dataStore.js.map +1 -1
  185. package/lib/dataStoreContext.d.ts +7 -8
  186. package/lib/dataStoreContext.d.ts.map +1 -1
  187. package/lib/dataStoreContext.js +3 -3
  188. package/lib/dataStoreContext.js.map +1 -1
  189. package/lib/dataStoreContexts.js.map +1 -1
  190. package/lib/dataStoreRegistry.js.map +1 -1
  191. package/lib/deltaManagerProxies.d.ts +4 -3
  192. package/lib/deltaManagerProxies.d.ts.map +1 -1
  193. package/lib/deltaManagerProxies.js.map +1 -1
  194. package/lib/deltaScheduler.d.ts +2 -1
  195. package/lib/deltaScheduler.d.ts.map +1 -1
  196. package/lib/deltaScheduler.js.map +1 -1
  197. package/lib/gc/garbageCollection.d.ts +1 -3
  198. package/lib/gc/garbageCollection.d.ts.map +1 -1
  199. package/lib/gc/garbageCollection.js +18 -21
  200. package/lib/gc/garbageCollection.js.map +1 -1
  201. package/lib/gc/gcConfigs.d.ts.map +1 -1
  202. package/lib/gc/gcConfigs.js +12 -31
  203. package/lib/gc/gcConfigs.js.map +1 -1
  204. package/lib/gc/gcDefinitions.d.ts +3 -30
  205. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  206. package/lib/gc/gcDefinitions.js +0 -2
  207. package/lib/gc/gcDefinitions.js.map +1 -1
  208. package/lib/gc/gcHelpers.d.ts +2 -3
  209. package/lib/gc/gcHelpers.d.ts.map +1 -1
  210. package/lib/gc/gcHelpers.js.map +1 -1
  211. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  212. package/lib/gc/gcSummaryDefinitions.d.ts +1 -1
  213. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -1
  214. package/lib/gc/gcSummaryDefinitions.js.map +1 -1
  215. package/lib/gc/gcSummaryStateTracker.d.ts +2 -35
  216. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  217. package/lib/gc/gcSummaryStateTracker.js +4 -57
  218. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  219. package/lib/gc/gcTelemetry.d.ts +1 -1
  220. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  221. package/lib/gc/gcTelemetry.js +2 -2
  222. package/lib/gc/gcTelemetry.js.map +1 -1
  223. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  224. package/lib/gc/index.d.ts +1 -1
  225. package/lib/gc/index.d.ts.map +1 -1
  226. package/lib/gc/index.js +1 -1
  227. package/lib/gc/index.js.map +1 -1
  228. package/lib/index.d.ts +1 -1
  229. package/lib/index.d.ts.map +1 -1
  230. package/lib/index.js.map +1 -1
  231. package/lib/legacy.d.ts +1 -1
  232. package/lib/messageTypes.d.ts +1 -1
  233. package/lib/messageTypes.d.ts.map +1 -1
  234. package/lib/messageTypes.js.map +1 -1
  235. package/lib/opLifecycle/batchManager.js.map +1 -1
  236. package/lib/opLifecycle/definitions.d.ts +2 -2
  237. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  238. package/lib/opLifecycle/definitions.js.map +1 -1
  239. package/lib/opLifecycle/opCompressor.d.ts +11 -1
  240. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  241. package/lib/opLifecycle/opCompressor.js +13 -2
  242. package/lib/opLifecycle/opCompressor.js.map +1 -1
  243. package/lib/opLifecycle/opDecompressor.d.ts +1 -1
  244. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  245. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  246. package/lib/opLifecycle/opGroupingManager.d.ts +10 -3
  247. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  248. package/lib/opLifecycle/opGroupingManager.js +7 -0
  249. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  250. package/lib/opLifecycle/opSplitter.d.ts +4 -2
  251. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  252. package/lib/opLifecycle/opSplitter.js +12 -7
  253. package/lib/opLifecycle/opSplitter.js.map +1 -1
  254. package/lib/opLifecycle/outbox.d.ts +10 -0
  255. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  256. package/lib/opLifecycle/outbox.js +12 -17
  257. package/lib/opLifecycle/outbox.js.map +1 -1
  258. package/lib/opLifecycle/remoteMessageProcessor.d.ts +1 -1
  259. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  260. package/lib/opLifecycle/remoteMessageProcessor.js +1 -1
  261. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  262. package/lib/opProperties.d.ts +1 -1
  263. package/lib/opProperties.d.ts.map +1 -1
  264. package/lib/opProperties.js.map +1 -1
  265. package/lib/packageVersion.d.ts +1 -1
  266. package/lib/packageVersion.js +1 -1
  267. package/lib/packageVersion.js.map +1 -1
  268. package/lib/pendingStateManager.js.map +1 -1
  269. package/lib/scheduleManager.d.ts +2 -1
  270. package/lib/scheduleManager.d.ts.map +1 -1
  271. package/lib/scheduleManager.js.map +1 -1
  272. package/lib/storageServiceWithAttachBlobs.js.map +1 -1
  273. package/lib/summary/documentSchema.js +1 -1
  274. package/lib/summary/documentSchema.js.map +1 -1
  275. package/lib/summary/index.d.ts +1 -1
  276. package/lib/summary/index.d.ts.map +1 -1
  277. package/lib/summary/index.js.map +1 -1
  278. package/lib/summary/orderedClientElection.d.ts +4 -2
  279. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  280. package/lib/summary/orderedClientElection.js +35 -13
  281. package/lib/summary/orderedClientElection.js.map +1 -1
  282. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  283. package/lib/summary/runningSummarizer.d.ts +1 -6
  284. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  285. package/lib/summary/runningSummarizer.js +21 -107
  286. package/lib/summary/runningSummarizer.js.map +1 -1
  287. package/lib/summary/summarizer.d.ts +1 -1
  288. package/lib/summary/summarizer.d.ts.map +1 -1
  289. package/lib/summary/summarizer.js +4 -1
  290. package/lib/summary/summarizer.js.map +1 -1
  291. package/lib/summary/summarizerClientElection.d.ts +1 -1
  292. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  293. package/lib/summary/summarizerClientElection.js +1 -1
  294. package/lib/summary/summarizerClientElection.js.map +1 -1
  295. package/lib/summary/summarizerHeuristics.js.map +1 -1
  296. package/lib/summary/summarizerNode/summarizerNode.d.ts +3 -3
  297. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  298. package/lib/summary/summarizerNode/summarizerNode.js +14 -14
  299. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  300. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
  301. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  302. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  303. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -3
  304. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  305. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
  306. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  307. package/lib/summary/summarizerTypes.d.ts +17 -29
  308. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  309. package/lib/summary/summarizerTypes.js.map +1 -1
  310. package/lib/summary/summaryCollection.d.ts +2 -1
  311. package/lib/summary/summaryCollection.d.ts.map +1 -1
  312. package/lib/summary/summaryCollection.js +3 -3
  313. package/lib/summary/summaryCollection.js.map +1 -1
  314. package/lib/summary/summaryFormat.d.ts +3 -3
  315. package/lib/summary/summaryFormat.d.ts.map +1 -1
  316. package/lib/summary/summaryFormat.js +2 -2
  317. package/lib/summary/summaryFormat.js.map +1 -1
  318. package/lib/summary/summaryGenerator.d.ts +7 -8
  319. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  320. package/lib/summary/summaryGenerator.js +25 -21
  321. package/lib/summary/summaryGenerator.js.map +1 -1
  322. package/lib/summary/summaryManager.js.map +1 -1
  323. package/lib/throttler.js.map +1 -1
  324. package/lib/tsdoc-metadata.json +1 -1
  325. package/package.json +72 -24
  326. package/src/batchTracker.ts +1 -1
  327. package/src/blobManager.ts +7 -7
  328. package/src/channelCollection.ts +8 -9
  329. package/src/connectionTelemetry.ts +14 -6
  330. package/src/containerHandleContext.ts +2 -1
  331. package/src/containerRuntime.ts +88 -141
  332. package/src/dataStore.ts +2 -1
  333. package/src/dataStoreContext.ts +16 -17
  334. package/src/deltaManagerProxies.ts +7 -5
  335. package/src/deltaScheduler.ts +2 -1
  336. package/src/gc/garbageCollection.md +0 -8
  337. package/src/gc/garbageCollection.ts +20 -25
  338. package/src/gc/gcConfigs.ts +8 -34
  339. package/src/gc/gcDefinitions.ts +4 -31
  340. package/src/gc/gcHelpers.ts +2 -2
  341. package/src/gc/gcSummaryDefinitions.ts +1 -1
  342. package/src/gc/gcSummaryStateTracker.ts +7 -73
  343. package/src/gc/gcTelemetry.ts +2 -2
  344. package/src/gc/index.ts +0 -1
  345. package/src/index.ts +1 -1
  346. package/src/messageTypes.ts +1 -1
  347. package/src/opLifecycle/README.md +120 -160
  348. package/src/opLifecycle/definitions.ts +2 -2
  349. package/src/opLifecycle/opCompressor.ts +13 -2
  350. package/src/opLifecycle/opDecompressor.ts +1 -1
  351. package/src/opLifecycle/opGroupingManager.ts +11 -4
  352. package/src/opLifecycle/opSplitter.ts +13 -8
  353. package/src/opLifecycle/outbox.ts +12 -27
  354. package/src/opLifecycle/remoteMessageProcessor.ts +2 -1
  355. package/src/opProperties.ts +2 -4
  356. package/src/packageVersion.ts +1 -1
  357. package/src/pendingStateManager.ts +1 -1
  358. package/src/scheduleManager.ts +2 -1
  359. package/src/summary/index.ts +1 -1
  360. package/src/summary/orderedClientElection.ts +83 -12
  361. package/src/summary/runningSummarizer.ts +31 -115
  362. package/src/summary/summarizer.ts +5 -2
  363. package/src/summary/summarizerClientElection.ts +2 -1
  364. package/src/summary/summarizerNode/summarizerNode.ts +19 -31
  365. package/src/summary/summarizerNode/summarizerNodeUtils.ts +2 -1
  366. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +4 -8
  367. package/src/summary/summarizerTypes.ts +22 -33
  368. package/src/summary/summaryCollection.ts +2 -2
  369. package/src/summary/summaryFormat.ts +9 -7
  370. package/src/summary/summaryGenerator.ts +51 -29
@@ -6,9 +6,9 @@ import { Trace, TypedEventEmitter } from "@fluid-internal/client-utils";
6
6
  import { AttachState, } from "@fluidframework/container-definitions";
7
7
  import { LoaderHeader, } from "@fluidframework/container-definitions/internal";
8
8
  import { assert, Deferred, LazyPromise, PromiseCache, delay, } from "@fluidframework/core-utils/internal";
9
- import { DriverHeader, FetchSource, } from "@fluidframework/driver-definitions/internal";
9
+ import { SummaryType, } from "@fluidframework/driver-definitions";
10
+ import { DriverHeader, FetchSource, MessageType, } from "@fluidframework/driver-definitions/internal";
10
11
  import { readAndParse } from "@fluidframework/driver-utils/internal";
11
- import { MessageType, SummaryType, } from "@fluidframework/protocol-definitions";
12
12
  import { FlushMode, FlushModeExperimental, channelsTreeName, gcTreeKey, } from "@fluidframework/runtime-definitions/internal";
13
13
  import { GCDataBuilder, RequestParser, TelemetryContext, addBlobToSummary, addSummarizeResultToSummary, calculateStats, create404Response, exceptionToResponse, responseToException, seqFromTree, } from "@fluidframework/runtime-utils/internal";
14
14
  import { DataCorruptionError, DataProcessingError, GenericError, LoggingError, PerformanceEvent,
@@ -49,13 +49,13 @@ function compatBehaviorAllowsMessageType(_unknownContainerRuntimeMessageType, co
49
49
  export const DefaultSummaryConfiguration = {
50
50
  state: "enabled",
51
51
  minIdleTime: 0,
52
- maxIdleTime: 30 * 1000,
53
- maxTime: 60 * 1000,
54
- maxOps: 100,
52
+ maxIdleTime: 30 * 1000, // 30 secs.
53
+ maxTime: 60 * 1000, // 1 min.
54
+ maxOps: 100, // Summarize if 100 weighted ops received since last snapshot.
55
55
  minOpsForLastSummaryAttempt: 10,
56
- maxAckWaitTime: 3 * 60 * 1000,
56
+ maxAckWaitTime: 3 * 60 * 1000, // 3 mins.
57
57
  maxOpsSinceLastSummary: 7000,
58
- initialSummarizerDelayMs: 5 * 1000,
58
+ initialSummarizerDelayMs: 5 * 1000, // 5 secs.
59
59
  nonRuntimeOpWeight: 0.1,
60
60
  runtimeOpWeight: 1.0,
61
61
  nonRuntimeHeuristicThreshold: 20,
@@ -528,7 +528,9 @@ export class ContainerRuntime extends TypedEventEmitter {
528
528
  return this.garbageCollector.throwOnTombstoneUsage;
529
529
  }
530
530
  /***/
531
- constructor(context, registry, metadata, electedSummarizerData, chunks, dataStoreAliasMap, runtimeOptions, containerScope, logger, existing, blobManagerSnapshot, _storage, createIdCompressor, documentsSchemaController, featureGatesForTelemetry, provideEntryPoint, requestHandler, summaryConfiguration = {
531
+ constructor(context, registry, metadata, electedSummarizerData, chunks, dataStoreAliasMap, runtimeOptions, containerScope,
532
+ // Create a custom ITelemetryBaseLogger to output telemetry events.
533
+ baseLogger, existing, blobManagerSnapshot, _storage, createIdCompressor, documentsSchemaController, featureGatesForTelemetry, provideEntryPoint, requestHandler, summaryConfiguration = {
532
534
  // the defaults
533
535
  ...DefaultSummaryConfiguration,
534
536
  // the runtime configuration overrides
@@ -539,7 +541,7 @@ export class ContainerRuntime extends TypedEventEmitter {
539
541
  this.metadata = metadata;
540
542
  this.runtimeOptions = runtimeOptions;
541
543
  this.containerScope = containerScope;
542
- this.logger = logger;
544
+ this.baseLogger = baseLogger;
543
545
  this._storage = _storage;
544
546
  this.createIdCompressor = createIdCompressor;
545
547
  this.documentsSchemaController = documentsSchemaController;
@@ -571,6 +573,7 @@ export class ContainerRuntime extends TypedEventEmitter {
571
573
  expiry: { policy: "absolute", durationMs: 60000 },
572
574
  });
573
575
  const { options, clientDetails, connected, baseSnapshot, submitFn, submitBatchFn, submitSummaryFn, submitSignalFn, disposeFn, closeFn, deltaManager, quorum, audience, loader, pendingLocalState, supportedFeatures, snapshotWithContents, } = context;
576
+ this.logger = createChildLogger({ logger: this.baseLogger });
574
577
  this.mc = createChildMonitoringContext({
575
578
  logger: this.logger,
576
579
  namespace: "ContainerRuntime",
@@ -853,7 +856,7 @@ export class ContainerRuntime extends TypedEventEmitter {
853
856
  namespace: "OrderedClientElection",
854
857
  });
855
858
  const orderedClientCollection = new OrderedClientCollection(orderedClientLogger, this.innerDeltaManager, this._quorum);
856
- const orderedClientElectionForSummarizer = new OrderedClientElection(orderedClientLogger, orderedClientCollection, electedSummarizerData ?? this.innerDeltaManager.lastSequenceNumber, SummarizerClientElection.isClientEligible);
859
+ const orderedClientElectionForSummarizer = new OrderedClientElection(orderedClientLogger, orderedClientCollection, electedSummarizerData ?? this.innerDeltaManager.lastSequenceNumber, SummarizerClientElection.isClientEligible, this.mc.config.getBoolean("Fluid.ContainerRuntime.OrderedClientElection.EnablePerformanceEvents"));
857
860
  this.summarizerClientElection = new SummarizerClientElection(orderedClientLogger, this.summaryCollection, orderedClientElectionForSummarizer, this.maxOpsSinceLastSummary);
858
861
  if (this.isSummarizerClient) {
859
862
  this._summarizer = new Summarizer(this /* ISummarizerRuntime */, () => this.summaryConfiguration, this /* ISummarizerInternalsProvider */, this.handleContext, this.summaryCollection, async (runtime) => RunWhileConnectedCoordinator.create(runtime,
@@ -897,7 +900,7 @@ export class ContainerRuntime extends TypedEventEmitter {
897
900
  }
898
901
  }
899
902
  // logging hardware telemetry
900
- logger.sendTelemetryEvent({
903
+ this.logger.sendTelemetryEvent({
901
904
  eventName: "DeviceSpec",
902
905
  ...getDeviceSpec(),
903
906
  });
@@ -1060,7 +1063,7 @@ export class ContainerRuntime extends TypedEventEmitter {
1060
1063
  const props = {
1061
1064
  eventName: "GroupIdSnapshotCatchup",
1062
1065
  loadingGroupIds: sortedLoadingGroupIds.join(","),
1063
- targetSequenceNumber: snapshotSeqNumber,
1066
+ targetSequenceNumber: snapshotSeqNumber, // This is so we reuse some columns in telemetry
1064
1067
  sequenceNumber: this.deltaManager.lastSequenceNumber, // This is so we reuse some columns in telemetry
1065
1068
  };
1066
1069
  const event = PerformanceEvent.start(this.mc.logger, {
@@ -1178,7 +1181,7 @@ export class ContainerRuntime extends TypedEventEmitter {
1178
1181
  this.messageAtLastSummary;
1179
1182
  const documentSchema = this.documentsSchemaController.summarizeDocumentSchema(this.deltaManager.lastSequenceNumber);
1180
1183
  // Is document schema explicit control on?
1181
- const explitiSchemaControl = documentSchema?.runtime.explicitSchemaControl;
1184
+ const explicitSchemaControl = documentSchema?.runtime.explicitSchemaControl;
1182
1185
  const metadata = {
1183
1186
  ...this.createContainerMetadata,
1184
1187
  // Increment the summary number for the next summary that will be generated.
@@ -1191,10 +1194,10 @@ export class ContainerRuntime extends TypedEventEmitter {
1191
1194
  // runtimes (that preceed document schema control capabilities) to close container on load due to mismatch in
1192
1195
  // last message's sequence number.
1193
1196
  // See also lastMessageFromMetadata()
1194
- message: explitiSchemaControl
1197
+ message: explicitSchemaControl
1195
1198
  ? { sequenceNumber: -1 }
1196
1199
  : message,
1197
- lastMessage: explitiSchemaControl ? message : undefined,
1200
+ lastMessage: explicitSchemaControl ? message : undefined,
1198
1201
  documentSchema,
1199
1202
  };
1200
1203
  addBlobToSummary(summaryTree, metadataBlobName, JSON.stringify(metadata));
@@ -2076,7 +2079,7 @@ export class ContainerRuntime extends TypedEventEmitter {
2076
2079
  * @param options - options controlling how the summary is generated or submitted
2077
2080
  */
2078
2081
  async submitSummary(options) {
2079
- const { fullTree = false, finalAttempt = false, refreshLatestAck, summaryLogger, latestSummaryRefSeqNum, } = options;
2082
+ const { fullTree = false, finalAttempt = false, summaryLogger, latestSummaryRefSeqNum, } = options;
2080
2083
  // The summary number for this summary. This will be updated during the summary process, so get it now and
2081
2084
  // use it for all events logged during this summary.
2082
2085
  const summaryNumber = this.nextSummaryNumber;
@@ -2091,13 +2094,6 @@ export class ContainerRuntime extends TypedEventEmitter {
2091
2094
  },
2092
2095
  });
2093
2096
  assert(this.outbox.isEmpty, 0x3d1 /* Can't trigger summary in the middle of a batch */);
2094
- // We close the summarizer and download a new snapshot and reload the container
2095
- if (refreshLatestAck === true) {
2096
- return this.prefetchLatestSummaryThenClose(createChildLogger({
2097
- logger: summaryNumberLogger,
2098
- properties: { all: { safeSummary: true } },
2099
- }));
2100
- }
2101
2097
  // If the container is dirty, i.e., there are pending unacked ops, the summary will not be eventual consistent
2102
2098
  // and it may even be incorrect. So, wait for the container to be saved with a timeout. If the container is not
2103
2099
  // saved within the timeout, check if it should be failed or can continue.
@@ -2166,7 +2162,7 @@ export class ContainerRuntime extends TypedEventEmitter {
2166
2162
  stage: "base",
2167
2163
  referenceSequenceNumber: summaryRefSeqNum,
2168
2164
  minimumSequenceNumber,
2169
- error: new LoggingError(`Summarizer node state inconsistent with summarizer state.`),
2165
+ error: new RetriableSummaryError(`Summarizer node state inconsistent with summarizer state.`),
2170
2166
  };
2171
2167
  }
2172
2168
  }
@@ -2209,17 +2205,14 @@ export class ContainerRuntime extends TypedEventEmitter {
2209
2205
  stage: "base",
2210
2206
  referenceSequenceNumber: summaryRefSeqNum,
2211
2207
  minimumSequenceNumber,
2212
- error: new LoggingError(continueResult.error),
2208
+ error: new RetriableSummaryError(continueResult.error),
2213
2209
  };
2214
2210
  }
2215
2211
  const trace = Trace.start();
2216
2212
  let summarizeResult;
2217
- // If the GC state needs to be reset, we need to force a full tree summary and update the unreferenced
2218
- // state of all the nodes.
2219
- const forcedFullTree = this.garbageCollector.summaryStateNeedsReset;
2220
2213
  try {
2221
2214
  summarizeResult = await this.summarize({
2222
- fullTree: fullTree || forcedFullTree,
2215
+ fullTree,
2223
2216
  trackState: true,
2224
2217
  summaryLogger: summaryNumberLogger,
2225
2218
  runGC: this.garbageCollector.shouldRunGC,
@@ -2230,7 +2223,7 @@ export class ContainerRuntime extends TypedEventEmitter {
2230
2223
  stage: "base",
2231
2224
  referenceSequenceNumber: summaryRefSeqNum,
2232
2225
  minimumSequenceNumber,
2233
- error: wrapError(error, (msg) => new LoggingError(msg)),
2226
+ error: wrapError(error, (msg) => new RetriableSummaryError(msg)),
2234
2227
  };
2235
2228
  }
2236
2229
  // Validate that the summary generated by summarizer nodes is correct before uploading.
@@ -2278,14 +2271,13 @@ export class ContainerRuntime extends TypedEventEmitter {
2278
2271
  summaryTree,
2279
2272
  summaryStats,
2280
2273
  generateDuration: trace.trace().duration,
2281
- forcedFullTree,
2282
2274
  };
2283
2275
  continueResult = checkContinue();
2284
2276
  if (!continueResult.continue) {
2285
2277
  return {
2286
2278
  stage: "generate",
2287
2279
  ...generateSummaryData,
2288
- error: new LoggingError(continueResult.error),
2280
+ error: new RetriableSummaryError(continueResult.error),
2289
2281
  };
2290
2282
  }
2291
2283
  const summaryContext = lastAck === undefined
@@ -2307,7 +2299,7 @@ export class ContainerRuntime extends TypedEventEmitter {
2307
2299
  return {
2308
2300
  stage: "generate",
2309
2301
  ...generateSummaryData,
2310
- error: wrapError(error, (msg) => new LoggingError(msg)),
2302
+ error: wrapError(error, (msg) => new RetriableSummaryError(msg)),
2311
2303
  };
2312
2304
  }
2313
2305
  const parent = summaryContext.ackHandle;
@@ -2328,7 +2320,7 @@ export class ContainerRuntime extends TypedEventEmitter {
2328
2320
  return {
2329
2321
  stage: "upload",
2330
2322
  ...uploadData,
2331
- error: new LoggingError(continueResult.error),
2323
+ error: new RetriableSummaryError(continueResult.error),
2332
2324
  };
2333
2325
  }
2334
2326
  let clientSequenceNumber;
@@ -2339,7 +2331,7 @@ export class ContainerRuntime extends TypedEventEmitter {
2339
2331
  return {
2340
2332
  stage: "upload",
2341
2333
  ...uploadData,
2342
- error: wrapError(error, (msg) => new LoggingError(msg)),
2334
+ error: wrapError(error, (msg) => new RetriableSummaryError(msg)),
2343
2335
  };
2344
2336
  }
2345
2337
  const submitData = {
@@ -2355,7 +2347,7 @@ export class ContainerRuntime extends TypedEventEmitter {
2355
2347
  return {
2356
2348
  stage: "upload",
2357
2349
  ...uploadData,
2358
- error: wrapError(error, (msg) => new LoggingError(msg)),
2350
+ error: wrapError(error, (msg) => new RetriableSummaryError(msg)),
2359
2351
  };
2360
2352
  }
2361
2353
  return submitData;
@@ -2445,13 +2437,13 @@ export class ContainerRuntime extends TypedEventEmitter {
2445
2437
  this.verifyNotClosed();
2446
2438
  return this.blobManager.createBlob(blob, signal);
2447
2439
  }
2448
- submitIdAllocationOpIfNeeded(resubmitOutstandingRanges = false) {
2440
+ submitIdAllocationOpIfNeeded(resubmitOutstandingRanges) {
2449
2441
  if (this._idCompressor) {
2450
2442
  const idRange = resubmitOutstandingRanges
2451
- ? this.idCompressor?.takeUnfinalizedCreationRange()
2443
+ ? this._idCompressor.takeUnfinalizedCreationRange()
2452
2444
  : this._idCompressor.takeNextCreationRange();
2453
2445
  // Don't include the idRange if there weren't any Ids allocated
2454
- if (idRange?.ids !== undefined) {
2446
+ if (idRange.ids !== undefined) {
2455
2447
  const idAllocationMessage = {
2456
2448
  type: ContainerMessageType.IdAllocation,
2457
2449
  contents: idRange,
@@ -2480,6 +2472,7 @@ export class ContainerRuntime extends TypedEventEmitter {
2480
2472
  });
2481
2473
  }
2482
2474
  const type = containerRuntimeMessage.type;
2475
+ assert(type !== ContainerMessageType.IdAllocation, "IdAllocation should be submitted directly to outbox.");
2483
2476
  const message = {
2484
2477
  contents: serializedContent,
2485
2478
  metadata,
@@ -2487,44 +2480,35 @@ export class ContainerRuntime extends TypedEventEmitter {
2487
2480
  referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
2488
2481
  };
2489
2482
  try {
2490
- // If `message` is an allocation op, then we are in the resubmit path and we must redirect the allocation
2491
- // op into the correct batch to avoid ranges being finalized out of order.
2492
- // Otherwise, submit an IdAllocation op if any IDs have been generated since the last op was submitted, as
2493
- // any of the other op types may contain those IDs and thus depend on the allocation op being sent first.
2494
- if (type === ContainerMessageType.IdAllocation) {
2495
- this.outbox.submitIdAllocation(message);
2483
+ this.submitIdAllocationOpIfNeeded(false);
2484
+ // Allow document schema controller to send a message if it needs to propose change in document schema.
2485
+ // If it needs to send a message, it will call provided callback with payload of such message and rely
2486
+ // on this callback to do actual sending.
2487
+ const contents = this.documentsSchemaController.maybeSendSchemaMessage();
2488
+ if (contents) {
2489
+ this.logger.sendTelemetryEvent({
2490
+ eventName: "SchemaChangeProposal",
2491
+ refSeq: contents.refSeq,
2492
+ version: contents.version,
2493
+ newRuntimeSchema: JSON.stringify(contents.runtime),
2494
+ sessionRuntimeSchema: JSON.stringify(this.sessionSchema),
2495
+ oldRuntimeSchema: JSON.stringify(this.metadata?.documentSchema?.runtime),
2496
+ });
2497
+ const msg = {
2498
+ type: ContainerMessageType.DocumentSchemaChange,
2499
+ contents,
2500
+ };
2501
+ this.outbox.submit({
2502
+ contents: JSON.stringify(msg),
2503
+ referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
2504
+ });
2505
+ }
2506
+ if (type === ContainerMessageType.BlobAttach) {
2507
+ // BlobAttach ops must have their metadata visible and cannot be grouped (see opGroupingManager.ts)
2508
+ this.outbox.submitBlobAttach(message);
2496
2509
  }
2497
2510
  else {
2498
- this.submitIdAllocationOpIfNeeded();
2499
- // Allow document schema controller to send a message if it needs to propose change in document schema.
2500
- // If it needs to send a message, it will call provided callback with payload of such message and rely
2501
- // on this callback to do actual sending.
2502
- const contents = this.documentsSchemaController.maybeSendSchemaMessage();
2503
- if (contents) {
2504
- this.logger.sendTelemetryEvent({
2505
- eventName: "SchemaChangeProposal",
2506
- refSeq: contents.refSeq,
2507
- version: contents.version,
2508
- newRuntimeSchema: JSON.stringify(contents.runtime),
2509
- sessionRuntimeSchema: JSON.stringify(this.sessionSchema),
2510
- oldRuntimeSchema: JSON.stringify(this.metadata?.documentSchema?.runtime),
2511
- });
2512
- const msg = {
2513
- type: ContainerMessageType.DocumentSchemaChange,
2514
- contents,
2515
- };
2516
- this.outbox.submit({
2517
- contents: JSON.stringify(msg),
2518
- referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
2519
- });
2520
- }
2521
- if (type === ContainerMessageType.BlobAttach) {
2522
- // BlobAttach ops must have their metadata visible and cannot be grouped (see opGroupingManager.ts)
2523
- this.outbox.submitBlobAttach(message);
2524
- }
2525
- else {
2526
- this.outbox.submit(message);
2527
- }
2511
+ this.outbox.submit(message);
2528
2512
  }
2529
2513
  if (!this.currentlyBatching()) {
2530
2514
  this.flush();
@@ -2699,51 +2683,23 @@ export class ContainerRuntime extends TypedEventEmitter {
2699
2683
  * and then close as the current main client is likely to be re-elected as the parent summarizer again.
2700
2684
  */
2701
2685
  if (!result.isSummaryTracked && result.isSummaryNewer) {
2702
- await this.fetchLatestSnapshotFromStorage(summaryLogger, {
2686
+ await this.fetchLatestSnapshotAndClose(summaryLogger, {
2703
2687
  eventName: "RefreshLatestSummaryAckFetch",
2704
2688
  ackHandle,
2705
2689
  targetSequenceNumber: summaryRefSeq,
2706
2690
  }, readAndParseBlob);
2707
- await this.closeStaleSummarizer();
2708
2691
  return;
2709
2692
  }
2710
2693
  // Notify the garbage collector so it can update its latest summary state.
2711
2694
  await this.garbageCollector.refreshLatestSummary(result);
2712
2695
  }
2713
2696
  /**
2714
- * Fetches the latest snapshot from storage to refresh the cache as a performance optimization and closes the
2715
- * summarizer to reload from new state.
2716
- * @param summaryLogger - logger to use when fetching snapshot from storage
2717
- * @returns a generic summarization error
2697
+ * Fetches the latest snapshot from storage and closes the container. This is done in cases where
2698
+ * the last known snapshot is older than the latest one. This will ensure that the latest snapshot
2699
+ * is downloaded and we don't end up loading snapshot from cache.
2718
2700
  */
2719
- async prefetchLatestSummaryThenClose(summaryLogger) {
2720
- const readAndParseBlob = async (id) => readAndParse(this.storage, id);
2721
- // This is a performance optimization as the same parent is likely to be elected again, and would use its
2722
- // cache to fetch the snapshot instead of the network.
2723
- await this.fetchLatestSnapshotFromStorage(summaryLogger, {
2724
- eventName: "RefreshLatestSummaryFromServerFetch",
2725
- }, readAndParseBlob);
2726
- await this.closeStaleSummarizer();
2727
- return {
2728
- stage: "base",
2729
- error: new LoggingError("summary state stale - Unsupported option 'refreshLatestAck'"),
2730
- referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
2731
- minimumSequenceNumber: this.deltaManager.minimumSequenceNumber,
2732
- };
2733
- }
2734
- async closeStaleSummarizer() {
2735
- // Delay before restarting summarizer to prevent the summarizer from restarting too frequently.
2736
- await delay(this.closeSummarizerDelayMs);
2737
- this._summarizer?.stop("latestSummaryStateStale");
2738
- this.disposeFn();
2739
- }
2740
- /**
2741
- * Downloads the latest snapshot from storage.
2742
- * By default, it also closes the container after downloading the snapshot. However, this may be
2743
- * overridden via options.
2744
- */
2745
- async fetchLatestSnapshotFromStorage(logger, event, readAndParseBlob) {
2746
- return PerformanceEvent.timedExecAsync(logger, event, async (perfEvent) => {
2701
+ async fetchLatestSnapshotAndClose(logger, event, readAndParseBlob) {
2702
+ await PerformanceEvent.timedExecAsync(logger, event, async (perfEvent) => {
2747
2703
  const stats = {};
2748
2704
  const trace = Trace.start();
2749
2705
  const versions = await this.storage.getVersions(null, 1, "prefetchLatestSummaryBeforeClose", FetchSource.noCache);
@@ -2756,12 +2712,10 @@ export class ContainerRuntime extends TypedEventEmitter {
2756
2712
  stats.snapshotRefSeq = latestSnapshotRefSeq;
2757
2713
  stats.snapshotVersion = versions[0].id;
2758
2714
  perfEvent.end(stats);
2759
- return {
2760
- snapshotTree: maybeSnapshot,
2761
- versionId: versions[0].id,
2762
- latestSnapshotRefSeq,
2763
- };
2764
2715
  });
2716
+ await delay(this.closeSummarizerDelayMs);
2717
+ this._summarizer?.stop("latestSummaryStateStale");
2718
+ this.disposeFn();
2765
2719
  }
2766
2720
  getPendingLocalState(props) {
2767
2721
  this.verifyNotClosed();