@fluidframework/container-runtime 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.225277

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 (705) hide show
  1. package/.eslintrc.js +19 -29
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +427 -0
  4. package/README.md +69 -0
  5. package/api-extractor-esm.json +4 -0
  6. package/api-extractor-lint.json +4 -0
  7. package/api-extractor.json +2 -2
  8. package/api-report/container-runtime.api.md +863 -0
  9. package/dist/{batchTracker.js → batchTracker.cjs} +9 -8
  10. package/dist/batchTracker.cjs.map +1 -0
  11. package/dist/batchTracker.d.ts +6 -5
  12. package/dist/batchTracker.d.ts.map +1 -1
  13. package/dist/blobManager.cjs +709 -0
  14. package/dist/blobManager.cjs.map +1 -0
  15. package/dist/blobManager.d.ts +140 -39
  16. package/dist/blobManager.d.ts.map +1 -1
  17. package/dist/connectionTelemetry.cjs +230 -0
  18. package/dist/connectionTelemetry.cjs.map +1 -0
  19. package/dist/connectionTelemetry.d.ts +2 -2
  20. package/dist/connectionTelemetry.d.ts.map +1 -1
  21. package/dist/container-runtime-alpha.d.ts +1690 -0
  22. package/dist/container-runtime-beta.d.ts +250 -0
  23. package/dist/container-runtime-public.d.ts +250 -0
  24. package/dist/container-runtime-untrimmed.d.ts +1805 -0
  25. package/dist/{containerHandleContext.js → containerHandleContext.cjs} +4 -2
  26. package/dist/containerHandleContext.cjs.map +1 -0
  27. package/dist/containerHandleContext.d.ts.map +1 -1
  28. package/dist/containerRuntime.cjs +2535 -0
  29. package/dist/containerRuntime.cjs.map +1 -0
  30. package/dist/containerRuntime.d.ts +458 -256
  31. package/dist/containerRuntime.d.ts.map +1 -1
  32. package/dist/{dataStore.js → dataStore.cjs} +54 -45
  33. package/dist/dataStore.cjs.map +1 -0
  34. package/dist/dataStore.d.ts +2 -2
  35. package/dist/dataStore.d.ts.map +1 -1
  36. package/dist/{dataStoreContext.js → dataStoreContext.cjs} +343 -247
  37. package/dist/dataStoreContext.cjs.map +1 -0
  38. package/dist/dataStoreContext.d.ts +73 -41
  39. package/dist/dataStoreContext.d.ts.map +1 -1
  40. package/dist/{dataStoreContexts.js → dataStoreContexts.cjs} +19 -15
  41. package/dist/dataStoreContexts.cjs.map +1 -0
  42. package/dist/dataStoreContexts.d.ts +1 -1
  43. package/dist/dataStoreContexts.d.ts.map +1 -1
  44. package/dist/{dataStoreRegistry.js → dataStoreRegistry.cjs} +9 -4
  45. package/dist/dataStoreRegistry.cjs.map +1 -0
  46. package/dist/dataStoreRegistry.d.ts +3 -0
  47. package/dist/dataStoreRegistry.d.ts.map +1 -1
  48. package/dist/{dataStores.js → dataStores.cjs} +276 -124
  49. package/dist/dataStores.cjs.map +1 -0
  50. package/dist/dataStores.d.ts +56 -23
  51. package/dist/dataStores.d.ts.map +1 -1
  52. package/dist/deltaManagerProxyBase.cjs +77 -0
  53. package/dist/deltaManagerProxyBase.cjs.map +1 -0
  54. package/dist/deltaManagerProxyBase.d.ts +35 -0
  55. package/dist/deltaManagerProxyBase.d.ts.map +1 -0
  56. package/dist/deltaManagerSummarizerProxy.cjs +42 -0
  57. package/dist/deltaManagerSummarizerProxy.cjs.map +1 -0
  58. package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
  59. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
  60. package/dist/{deltaScheduler.js → deltaScheduler.cjs} +25 -18
  61. package/dist/deltaScheduler.cjs.map +1 -0
  62. package/dist/deltaScheduler.d.ts +8 -6
  63. package/dist/deltaScheduler.d.ts.map +1 -1
  64. package/dist/error.cjs +21 -0
  65. package/dist/error.cjs.map +1 -0
  66. package/dist/error.d.ts +14 -0
  67. package/dist/error.d.ts.map +1 -0
  68. package/dist/gc/garbageCollection.cjs +865 -0
  69. package/dist/gc/garbageCollection.cjs.map +1 -0
  70. package/dist/gc/garbageCollection.d.ts +224 -0
  71. package/dist/gc/garbageCollection.d.ts.map +1 -0
  72. package/dist/gc/gcConfigs.cjs +160 -0
  73. package/dist/gc/gcConfigs.cjs.map +1 -0
  74. package/dist/gc/gcConfigs.d.ts +23 -0
  75. package/dist/gc/gcConfigs.d.ts.map +1 -0
  76. package/dist/gc/gcDefinitions.cjs +96 -0
  77. package/dist/gc/gcDefinitions.cjs.map +1 -0
  78. package/dist/gc/gcDefinitions.d.ts +458 -0
  79. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  80. package/dist/gc/gcHelpers.cjs +235 -0
  81. package/dist/gc/gcHelpers.cjs.map +1 -0
  82. package/dist/gc/gcHelpers.d.ts +71 -0
  83. package/dist/gc/gcHelpers.d.ts.map +1 -0
  84. package/dist/gc/gcReferenceGraphAlgorithm.cjs +49 -0
  85. package/dist/gc/gcReferenceGraphAlgorithm.cjs.map +1 -0
  86. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  87. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  88. package/dist/{summarizerTypes.js → gc/gcSummaryDefinitions.cjs} +1 -6
  89. package/dist/gc/gcSummaryDefinitions.cjs.map +1 -0
  90. package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
  91. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
  92. package/dist/gc/gcSummaryStateTracker.cjs +213 -0
  93. package/dist/gc/gcSummaryStateTracker.cjs.map +1 -0
  94. package/dist/gc/gcSummaryStateTracker.d.ts +94 -0
  95. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  96. package/dist/gc/gcTelemetry.cjs +307 -0
  97. package/dist/gc/gcTelemetry.cjs.map +1 -0
  98. package/dist/gc/gcTelemetry.d.ts +99 -0
  99. package/dist/gc/gcTelemetry.d.ts.map +1 -0
  100. package/dist/gc/gcUnreferencedStateTracker.cjs +118 -0
  101. package/dist/gc/gcUnreferencedStateTracker.cjs.map +1 -0
  102. package/dist/gc/gcUnreferencedStateTracker.d.ts +40 -0
  103. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  104. package/dist/gc/index.cjs +44 -0
  105. package/dist/gc/index.cjs.map +1 -0
  106. package/dist/gc/index.d.ts +13 -0
  107. package/dist/gc/index.d.ts.map +1 -0
  108. package/dist/index.cjs +47 -0
  109. package/dist/index.cjs.map +1 -0
  110. package/dist/index.d.ts +19 -8
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/messageTypes.cjs +37 -0
  113. package/dist/messageTypes.cjs.map +1 -0
  114. package/dist/messageTypes.d.ts +142 -0
  115. package/dist/messageTypes.d.ts.map +1 -0
  116. package/dist/metadata.cjs +7 -0
  117. package/dist/metadata.cjs.map +1 -0
  118. package/dist/metadata.d.ts +24 -0
  119. package/dist/metadata.d.ts.map +1 -0
  120. package/dist/opLifecycle/batchManager.cjs +139 -0
  121. package/dist/opLifecycle/batchManager.cjs.map +1 -0
  122. package/dist/opLifecycle/batchManager.d.ts +48 -0
  123. package/dist/opLifecycle/batchManager.d.ts.map +1 -0
  124. package/dist/opLifecycle/definitions.cjs +7 -0
  125. package/dist/opLifecycle/definitions.cjs.map +1 -0
  126. package/dist/opLifecycle/definitions.d.ts +83 -0
  127. package/dist/opLifecycle/definitions.d.ts.map +1 -0
  128. package/dist/opLifecycle/index.cjs +26 -0
  129. package/dist/opLifecycle/index.cjs.map +1 -0
  130. package/dist/opLifecycle/index.d.ts +13 -0
  131. package/dist/opLifecycle/index.d.ts.map +1 -0
  132. package/dist/opLifecycle/opCompressor.cjs +84 -0
  133. package/dist/opLifecycle/opCompressor.cjs.map +1 -0
  134. package/dist/opLifecycle/opCompressor.d.ts +18 -0
  135. package/dist/opLifecycle/opCompressor.d.ts.map +1 -0
  136. package/dist/opLifecycle/opDecompressor.cjs +132 -0
  137. package/dist/opLifecycle/opDecompressor.cjs.map +1 -0
  138. package/dist/opLifecycle/opDecompressor.d.ts +25 -0
  139. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -0
  140. package/dist/opLifecycle/opGroupingManager.cjs +95 -0
  141. package/dist/opLifecycle/opGroupingManager.cjs.map +1 -0
  142. package/dist/opLifecycle/opGroupingManager.d.ts +22 -0
  143. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -0
  144. package/dist/opLifecycle/opSplitter.cjs +202 -0
  145. package/dist/opLifecycle/opSplitter.cjs.map +1 -0
  146. package/dist/opLifecycle/opSplitter.d.ts +61 -0
  147. package/dist/opLifecycle/opSplitter.d.ts.map +1 -0
  148. package/dist/opLifecycle/outbox.cjs +326 -0
  149. package/dist/opLifecycle/outbox.cjs.map +1 -0
  150. package/dist/opLifecycle/outbox.d.ts +104 -0
  151. package/dist/opLifecycle/outbox.d.ts.map +1 -0
  152. package/dist/opLifecycle/remoteMessageProcessor.cjs +136 -0
  153. package/dist/opLifecycle/remoteMessageProcessor.cjs.map +1 -0
  154. package/dist/opLifecycle/remoteMessageProcessor.d.ts +47 -0
  155. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  156. package/dist/opProperties.cjs +17 -0
  157. package/dist/opProperties.cjs.map +1 -0
  158. package/dist/opProperties.d.ts +7 -0
  159. package/dist/opProperties.d.ts.map +1 -0
  160. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  161. package/dist/packageVersion.cjs.map +1 -0
  162. package/dist/packageVersion.d.ts +1 -1
  163. package/dist/packageVersion.d.ts.map +1 -1
  164. package/dist/pendingStateManager.cjs +282 -0
  165. package/dist/pendingStateManager.cjs.map +1 -0
  166. package/dist/pendingStateManager.d.ts +32 -69
  167. package/dist/pendingStateManager.d.ts.map +1 -1
  168. package/dist/scheduleManager.cjs +258 -0
  169. package/dist/scheduleManager.cjs.map +1 -0
  170. package/dist/scheduleManager.d.ts +31 -0
  171. package/dist/scheduleManager.d.ts.map +1 -0
  172. package/dist/storageServiceWithAttachBlobs.cjs +32 -0
  173. package/dist/storageServiceWithAttachBlobs.cjs.map +1 -0
  174. package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
  175. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
  176. package/dist/summary/index.cjs +51 -0
  177. package/dist/summary/index.cjs.map +1 -0
  178. package/dist/summary/index.d.ts +17 -0
  179. package/dist/summary/index.d.ts.map +1 -0
  180. package/dist/{orderedClientElection.js → summary/orderedClientElection.cjs} +100 -84
  181. package/dist/summary/orderedClientElection.cjs.map +1 -0
  182. package/{lib → dist/summary}/orderedClientElection.d.ts +41 -18
  183. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  184. package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.cjs} +12 -10
  185. package/dist/summary/runWhileConnectedCoordinator.cjs.map +1 -0
  186. package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +8 -2
  187. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  188. package/dist/summary/runningSummarizer.cjs +679 -0
  189. package/dist/summary/runningSummarizer.cjs.map +1 -0
  190. package/dist/summary/runningSummarizer.d.ts +128 -0
  191. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  192. package/dist/summary/summarizer.cjs +263 -0
  193. package/dist/summary/summarizer.cjs.map +1 -0
  194. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +18 -33
  195. package/dist/summary/summarizer.d.ts.map +1 -0
  196. package/dist/{summarizerClientElection.js → summary/summarizerClientElection.cjs} +15 -46
  197. package/dist/summary/summarizerClientElection.cjs.map +1 -0
  198. package/{lib → dist/summary}/summarizerClientElection.d.ts +4 -4
  199. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  200. package/dist/summary/summarizerHeuristics.cjs +156 -0
  201. package/dist/summary/summarizerHeuristics.cjs.map +1 -0
  202. package/{lib → dist/summary}/summarizerHeuristics.d.ts +28 -6
  203. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  204. package/dist/summary/summarizerNode/index.cjs +12 -0
  205. package/dist/summary/summarizerNode/index.cjs.map +1 -0
  206. package/dist/summary/summarizerNode/index.d.ts +8 -0
  207. package/dist/summary/summarizerNode/index.d.ts.map +1 -0
  208. package/dist/summary/summarizerNode/summarizerNode.cjs +526 -0
  209. package/dist/summary/summarizerNode/summarizerNode.cjs.map +1 -0
  210. package/dist/summary/summarizerNode/summarizerNode.d.ts +167 -0
  211. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  212. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs +130 -0
  213. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs.map +1 -0
  214. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +121 -0
  215. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  216. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs +375 -0
  217. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs.map +1 -0
  218. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +153 -0
  219. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  220. package/dist/summary/summarizerTypes.cjs +7 -0
  221. package/dist/summary/summarizerTypes.cjs.map +1 -0
  222. package/{lib → dist/summary}/summarizerTypes.d.ts +233 -83
  223. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  224. package/dist/{summaryCollection.js → summary/summaryCollection.cjs} +80 -49
  225. package/dist/summary/summaryCollection.cjs.map +1 -0
  226. package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +23 -5
  227. package/dist/summary/summaryCollection.d.ts.map +1 -0
  228. package/dist/{summaryFormat.js → summary/summaryFormat.cjs} +29 -26
  229. package/dist/summary/summaryFormat.cjs.map +1 -0
  230. package/{lib → dist/summary}/summaryFormat.d.ts +25 -30
  231. package/dist/summary/summaryFormat.d.ts.map +1 -0
  232. package/dist/{summaryGenerator.js → summary/summaryGenerator.cjs} +162 -74
  233. package/dist/summary/summaryGenerator.cjs.map +1 -0
  234. package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +53 -11
  235. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  236. package/dist/{summaryManager.js → summary/summaryManager.cjs} +98 -55
  237. package/dist/summary/summaryManager.cjs.map +1 -0
  238. package/{lib → dist/summary}/summaryManager.d.ts +13 -11
  239. package/dist/summary/summaryManager.d.ts.map +1 -0
  240. package/dist/{throttler.js → throttler.cjs} +21 -21
  241. package/dist/throttler.cjs.map +1 -0
  242. package/dist/throttler.d.ts +2 -2
  243. package/dist/throttler.d.ts.map +1 -1
  244. package/dist/tsdoc-metadata.json +11 -0
  245. package/lib/{batchTracker.d.ts → batchTracker.d.mts} +7 -6
  246. package/lib/batchTracker.d.mts.map +1 -0
  247. package/lib/{batchTracker.js → batchTracker.mjs} +9 -8
  248. package/lib/batchTracker.mjs.map +1 -0
  249. package/lib/blobManager.d.mts +196 -0
  250. package/lib/blobManager.d.mts.map +1 -0
  251. package/lib/blobManager.mjs +704 -0
  252. package/lib/blobManager.mjs.map +1 -0
  253. package/lib/{connectionTelemetry.d.ts → connectionTelemetry.d.mts} +3 -3
  254. package/lib/connectionTelemetry.d.mts.map +1 -0
  255. package/lib/connectionTelemetry.mjs +226 -0
  256. package/lib/connectionTelemetry.mjs.map +1 -0
  257. package/lib/container-runtime-alpha.d.mts +1690 -0
  258. package/lib/container-runtime-beta.d.mts +250 -0
  259. package/lib/container-runtime-public.d.mts +250 -0
  260. package/lib/container-runtime-untrimmed.d.mts +1805 -0
  261. package/lib/{containerHandleContext.d.ts → containerHandleContext.d.mts} +2 -2
  262. package/lib/containerHandleContext.d.mts.map +1 -0
  263. package/lib/{containerHandleContext.js → containerHandleContext.mjs} +4 -2
  264. package/lib/containerHandleContext.mjs.map +1 -0
  265. package/lib/containerRuntime.d.mts +813 -0
  266. package/lib/containerRuntime.d.mts.map +1 -0
  267. package/lib/containerRuntime.mjs +2530 -0
  268. package/lib/containerRuntime.mjs.map +1 -0
  269. package/lib/{dataStore.d.ts → dataStore.d.mts} +5 -5
  270. package/lib/dataStore.d.mts.map +1 -0
  271. package/lib/{dataStore.js → dataStore.mjs} +52 -43
  272. package/lib/dataStore.mjs.map +1 -0
  273. package/lib/{dataStoreContext.d.ts → dataStoreContext.d.mts} +75 -43
  274. package/lib/dataStoreContext.d.mts.map +1 -0
  275. package/lib/{dataStoreContext.js → dataStoreContext.mjs} +309 -213
  276. package/lib/dataStoreContext.mjs.map +1 -0
  277. package/lib/{dataStoreContexts.d.ts → dataStoreContexts.d.mts} +3 -3
  278. package/lib/dataStoreContexts.d.mts.map +1 -0
  279. package/lib/{dataStoreContexts.js → dataStoreContexts.mjs} +12 -8
  280. package/lib/dataStoreContexts.mjs.map +1 -0
  281. package/lib/{dataStoreRegistry.d.ts → dataStoreRegistry.d.mts} +4 -1
  282. package/lib/dataStoreRegistry.d.mts.map +1 -0
  283. package/lib/{dataStoreRegistry.js → dataStoreRegistry.mjs} +7 -6
  284. package/lib/dataStoreRegistry.mjs.map +1 -0
  285. package/lib/{dataStores.d.ts → dataStores.d.mts} +60 -27
  286. package/lib/dataStores.d.mts.map +1 -0
  287. package/lib/{dataStores.js → dataStores.mjs} +257 -105
  288. package/lib/dataStores.mjs.map +1 -0
  289. package/lib/deltaManagerProxyBase.d.mts +35 -0
  290. package/lib/deltaManagerProxyBase.d.mts.map +1 -0
  291. package/lib/deltaManagerProxyBase.mjs +73 -0
  292. package/lib/deltaManagerProxyBase.mjs.map +1 -0
  293. package/lib/deltaManagerSummarizerProxy.d.mts +19 -0
  294. package/lib/deltaManagerSummarizerProxy.d.mts.map +1 -0
  295. package/lib/deltaManagerSummarizerProxy.mjs +38 -0
  296. package/lib/deltaManagerSummarizerProxy.mjs.map +1 -0
  297. package/lib/{deltaScheduler.d.ts → deltaScheduler.d.mts} +9 -7
  298. package/lib/deltaScheduler.d.mts.map +1 -0
  299. package/lib/{deltaScheduler.js → deltaScheduler.mjs} +22 -15
  300. package/lib/deltaScheduler.mjs.map +1 -0
  301. package/lib/error.d.mts +14 -0
  302. package/lib/error.d.mts.map +1 -0
  303. package/lib/error.mjs +17 -0
  304. package/lib/error.mjs.map +1 -0
  305. package/lib/gc/garbageCollection.d.mts +224 -0
  306. package/lib/gc/garbageCollection.d.mts.map +1 -0
  307. package/lib/gc/garbageCollection.mjs +861 -0
  308. package/lib/gc/garbageCollection.mjs.map +1 -0
  309. package/lib/gc/gcConfigs.d.mts +23 -0
  310. package/lib/gc/gcConfigs.d.mts.map +1 -0
  311. package/lib/gc/gcConfigs.mjs +156 -0
  312. package/lib/gc/gcConfigs.mjs.map +1 -0
  313. package/lib/gc/gcDefinitions.d.mts +458 -0
  314. package/lib/gc/gcDefinitions.d.mts.map +1 -0
  315. package/lib/gc/gcDefinitions.mjs +93 -0
  316. package/lib/gc/gcDefinitions.mjs.map +1 -0
  317. package/lib/gc/gcHelpers.d.mts +71 -0
  318. package/lib/gc/gcHelpers.d.mts.map +1 -0
  319. package/lib/gc/gcHelpers.mjs +222 -0
  320. package/lib/gc/gcHelpers.mjs.map +1 -0
  321. package/lib/gc/gcReferenceGraphAlgorithm.d.mts +16 -0
  322. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +1 -0
  323. package/lib/gc/gcReferenceGraphAlgorithm.mjs +45 -0
  324. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +1 -0
  325. package/lib/gc/gcSummaryDefinitions.d.mts +52 -0
  326. package/lib/gc/gcSummaryDefinitions.d.mts.map +1 -0
  327. package/lib/gc/gcSummaryDefinitions.mjs +6 -0
  328. package/lib/gc/gcSummaryDefinitions.mjs.map +1 -0
  329. package/lib/gc/gcSummaryStateTracker.d.mts +94 -0
  330. package/lib/gc/gcSummaryStateTracker.d.mts.map +1 -0
  331. package/lib/gc/gcSummaryStateTracker.mjs +209 -0
  332. package/lib/gc/gcSummaryStateTracker.mjs.map +1 -0
  333. package/lib/gc/gcTelemetry.d.mts +99 -0
  334. package/lib/gc/gcTelemetry.d.mts.map +1 -0
  335. package/lib/gc/gcTelemetry.mjs +302 -0
  336. package/lib/gc/gcTelemetry.mjs.map +1 -0
  337. package/lib/gc/gcUnreferencedStateTracker.d.mts +40 -0
  338. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +1 -0
  339. package/lib/gc/gcUnreferencedStateTracker.mjs +114 -0
  340. package/lib/gc/gcUnreferencedStateTracker.mjs.map +1 -0
  341. package/lib/gc/index.d.mts +13 -0
  342. package/lib/gc/index.d.mts.map +1 -0
  343. package/lib/gc/index.mjs +12 -0
  344. package/lib/gc/index.mjs.map +1 -0
  345. package/lib/index.d.mts +25 -0
  346. package/lib/index.d.mts.map +1 -0
  347. package/lib/index.mjs +24 -0
  348. package/lib/index.mjs.map +1 -0
  349. package/lib/messageTypes.d.mts +142 -0
  350. package/lib/messageTypes.d.mts.map +1 -0
  351. package/lib/messageTypes.mjs +34 -0
  352. package/lib/messageTypes.mjs.map +1 -0
  353. package/lib/metadata.d.mts +24 -0
  354. package/lib/metadata.d.mts.map +1 -0
  355. package/lib/metadata.mjs +6 -0
  356. package/lib/metadata.mjs.map +1 -0
  357. package/lib/opLifecycle/batchManager.d.mts +48 -0
  358. package/lib/opLifecycle/batchManager.d.mts.map +1 -0
  359. package/lib/opLifecycle/batchManager.mjs +133 -0
  360. package/lib/opLifecycle/batchManager.mjs.map +1 -0
  361. package/lib/opLifecycle/definitions.d.mts +83 -0
  362. package/lib/opLifecycle/definitions.d.mts.map +1 -0
  363. package/lib/opLifecycle/definitions.mjs +6 -0
  364. package/lib/opLifecycle/definitions.mjs.map +1 -0
  365. package/lib/opLifecycle/index.d.mts +13 -0
  366. package/lib/opLifecycle/index.d.mts.map +1 -0
  367. package/lib/opLifecycle/index.mjs +12 -0
  368. package/lib/opLifecycle/index.mjs.map +1 -0
  369. package/lib/opLifecycle/opCompressor.d.mts +18 -0
  370. package/lib/opLifecycle/opCompressor.d.mts.map +1 -0
  371. package/lib/opLifecycle/opCompressor.mjs +80 -0
  372. package/lib/opLifecycle/opCompressor.mjs.map +1 -0
  373. package/lib/opLifecycle/opDecompressor.d.mts +25 -0
  374. package/lib/opLifecycle/opDecompressor.d.mts.map +1 -0
  375. package/lib/opLifecycle/opDecompressor.mjs +128 -0
  376. package/lib/opLifecycle/opDecompressor.mjs.map +1 -0
  377. package/lib/opLifecycle/opGroupingManager.d.mts +22 -0
  378. package/lib/opLifecycle/opGroupingManager.d.mts.map +1 -0
  379. package/lib/opLifecycle/opGroupingManager.mjs +91 -0
  380. package/lib/opLifecycle/opGroupingManager.mjs.map +1 -0
  381. package/lib/opLifecycle/opSplitter.d.mts +61 -0
  382. package/lib/opLifecycle/opSplitter.d.mts.map +1 -0
  383. package/lib/opLifecycle/opSplitter.mjs +197 -0
  384. package/lib/opLifecycle/opSplitter.mjs.map +1 -0
  385. package/lib/opLifecycle/outbox.d.mts +104 -0
  386. package/lib/opLifecycle/outbox.d.mts.map +1 -0
  387. package/lib/opLifecycle/outbox.mjs +321 -0
  388. package/lib/opLifecycle/outbox.mjs.map +1 -0
  389. package/lib/opLifecycle/remoteMessageProcessor.d.mts +47 -0
  390. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +1 -0
  391. package/lib/opLifecycle/remoteMessageProcessor.mjs +131 -0
  392. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +1 -0
  393. package/lib/opProperties.d.mts +7 -0
  394. package/lib/opProperties.d.mts.map +1 -0
  395. package/lib/opProperties.mjs +13 -0
  396. package/lib/opProperties.mjs.map +1 -0
  397. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +2 -2
  398. package/lib/packageVersion.d.mts.map +1 -0
  399. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  400. package/lib/packageVersion.mjs.map +1 -0
  401. package/lib/{pendingStateManager.d.ts → pendingStateManager.d.mts} +33 -70
  402. package/lib/pendingStateManager.d.mts.map +1 -0
  403. package/lib/pendingStateManager.mjs +275 -0
  404. package/lib/pendingStateManager.mjs.map +1 -0
  405. package/lib/scheduleManager.d.mts +27 -0
  406. package/lib/scheduleManager.d.mts.map +1 -0
  407. package/lib/scheduleManager.mjs +254 -0
  408. package/lib/scheduleManager.mjs.map +1 -0
  409. package/lib/storageServiceWithAttachBlobs.d.mts +17 -0
  410. package/lib/storageServiceWithAttachBlobs.d.mts.map +1 -0
  411. package/lib/storageServiceWithAttachBlobs.mjs +28 -0
  412. package/lib/storageServiceWithAttachBlobs.mjs.map +1 -0
  413. package/lib/summary/index.d.mts +17 -0
  414. package/lib/summary/index.d.mts.map +1 -0
  415. package/lib/summary/index.mjs +16 -0
  416. package/lib/summary/index.mjs.map +1 -0
  417. package/{dist/orderedClientElection.d.ts → lib/summary/orderedClientElection.d.mts} +42 -23
  418. package/lib/summary/orderedClientElection.d.mts.map +1 -0
  419. package/lib/{orderedClientElection.js → summary/orderedClientElection.mjs} +95 -79
  420. package/lib/summary/orderedClientElection.mjs.map +1 -0
  421. package/{dist/runWhileConnectedCoordinator.d.ts → lib/summary/runWhileConnectedCoordinator.d.mts} +10 -4
  422. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +1 -0
  423. package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.mjs} +12 -10
  424. package/lib/summary/runWhileConnectedCoordinator.mjs.map +1 -0
  425. package/lib/summary/runningSummarizer.d.mts +128 -0
  426. package/lib/summary/runningSummarizer.d.mts.map +1 -0
  427. package/lib/summary/runningSummarizer.mjs +675 -0
  428. package/lib/summary/runningSummarizer.mjs.map +1 -0
  429. package/lib/{summarizer.d.ts → summary/summarizer.d.mts} +21 -36
  430. package/lib/summary/summarizer.d.mts.map +1 -0
  431. package/lib/summary/summarizer.mjs +257 -0
  432. package/lib/summary/summarizer.mjs.map +1 -0
  433. package/{dist/summarizerClientElection.d.ts → lib/summary/summarizerClientElection.d.mts} +7 -7
  434. package/lib/summary/summarizerClientElection.d.mts.map +1 -0
  435. package/lib/{summarizerClientElection.js → summary/summarizerClientElection.mjs} +14 -45
  436. package/lib/summary/summarizerClientElection.mjs.map +1 -0
  437. package/{dist/summarizerHeuristics.d.ts → lib/summary/summarizerHeuristics.d.mts} +30 -8
  438. package/lib/summary/summarizerHeuristics.d.mts.map +1 -0
  439. package/lib/summary/summarizerHeuristics.mjs +151 -0
  440. package/lib/summary/summarizerHeuristics.mjs.map +1 -0
  441. package/lib/summary/summarizerNode/index.d.mts +8 -0
  442. package/lib/summary/summarizerNode/index.d.mts.map +1 -0
  443. package/lib/summary/summarizerNode/index.mjs +7 -0
  444. package/lib/summary/summarizerNode/index.mjs.map +1 -0
  445. package/lib/summary/summarizerNode/summarizerNode.d.mts +167 -0
  446. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +1 -0
  447. package/lib/summary/summarizerNode/summarizerNode.mjs +521 -0
  448. package/lib/summary/summarizerNode/summarizerNode.mjs.map +1 -0
  449. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts +121 -0
  450. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +1 -0
  451. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs +123 -0
  452. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +1 -0
  453. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts +153 -0
  454. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +1 -0
  455. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs +370 -0
  456. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +1 -0
  457. package/{dist/summarizerTypes.d.ts → lib/summary/summarizerTypes.d.mts} +235 -85
  458. package/lib/summary/summarizerTypes.d.mts.map +1 -0
  459. package/lib/summary/summarizerTypes.mjs +6 -0
  460. package/lib/summary/summarizerTypes.mjs.map +1 -0
  461. package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.mts} +24 -6
  462. package/lib/summary/summaryCollection.d.mts.map +1 -0
  463. package/lib/{summaryCollection.js → summary/summaryCollection.mjs} +76 -45
  464. package/lib/summary/summaryCollection.mjs.map +1 -0
  465. package/{dist/summaryFormat.d.ts → lib/summary/summaryFormat.d.mts} +26 -31
  466. package/lib/summary/summaryFormat.d.mts.map +1 -0
  467. package/lib/{summaryFormat.js → summary/summaryFormat.mjs} +30 -26
  468. package/lib/summary/summaryFormat.mjs.map +1 -0
  469. package/lib/summary/summaryGenerator.d.mts +127 -0
  470. package/lib/summary/summaryGenerator.d.mts.map +1 -0
  471. package/lib/{summaryGenerator.js → summary/summaryGenerator.mjs} +153 -67
  472. package/lib/summary/summaryGenerator.mjs.map +1 -0
  473. package/{dist/summaryManager.d.ts → lib/summary/summaryManager.d.mts} +16 -14
  474. package/lib/summary/summaryManager.d.mts.map +1 -0
  475. package/lib/{summaryManager.js → summary/summaryManager.mjs} +94 -51
  476. package/lib/summary/summaryManager.mjs.map +1 -0
  477. package/lib/{throttler.d.ts → throttler.d.mts} +3 -3
  478. package/lib/throttler.d.mts.map +1 -0
  479. package/lib/{throttler.js → throttler.mjs} +21 -21
  480. package/lib/throttler.mjs.map +1 -0
  481. package/package.json +199 -71
  482. package/prettier.config.cjs +8 -0
  483. package/src/batchTracker.ts +59 -54
  484. package/src/blobManager.ts +942 -294
  485. package/src/connectionTelemetry.ts +342 -252
  486. package/src/containerHandleContext.ts +27 -29
  487. package/src/containerRuntime.ts +3883 -3143
  488. package/src/dataStore.ts +170 -140
  489. package/src/dataStoreContext.ts +1166 -986
  490. package/src/dataStoreContexts.ts +176 -163
  491. package/src/dataStoreRegistry.ts +29 -21
  492. package/src/dataStores.ts +924 -678
  493. package/src/deltaManagerProxyBase.ts +111 -0
  494. package/src/deltaManagerSummarizerProxy.ts +49 -0
  495. package/src/deltaScheduler.ts +161 -156
  496. package/src/error.ts +21 -0
  497. package/src/gc/garbageCollection.md +106 -0
  498. package/src/gc/garbageCollection.ts +1157 -0
  499. package/src/gc/gcConfigs.ts +224 -0
  500. package/src/gc/gcDefinitions.ts +524 -0
  501. package/src/gc/gcHelpers.ts +284 -0
  502. package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
  503. package/src/gc/gcSummaryDefinitions.ts +54 -0
  504. package/src/gc/gcSummaryStateTracker.ts +299 -0
  505. package/src/gc/gcTelemetry.ts +433 -0
  506. package/src/gc/gcUnreferencedStateTracker.ts +153 -0
  507. package/src/gc/index.ts +60 -0
  508. package/src/index.ts +101 -74
  509. package/src/messageTypes.ts +238 -0
  510. package/src/metadata.ts +26 -0
  511. package/src/opLifecycle/README.md +321 -0
  512. package/src/opLifecycle/batchManager.ts +179 -0
  513. package/src/opLifecycle/definitions.ts +89 -0
  514. package/src/opLifecycle/index.ts +19 -0
  515. package/src/opLifecycle/opCompressor.ts +99 -0
  516. package/src/opLifecycle/opDecompressor.ts +190 -0
  517. package/src/opLifecycle/opGroupingManager.ts +133 -0
  518. package/src/opLifecycle/opSplitter.ts +279 -0
  519. package/src/opLifecycle/outbox.ts +474 -0
  520. package/src/opLifecycle/remoteMessageProcessor.ts +175 -0
  521. package/src/opProperties.ts +21 -0
  522. package/src/packageVersion.ts +1 -1
  523. package/src/pendingStateManager.ts +396 -465
  524. package/src/scheduleManager.ts +358 -0
  525. package/src/storageServiceWithAttachBlobs.ts +38 -0
  526. package/src/summary/index.ts +109 -0
  527. package/src/summary/orderedClientElection.ts +571 -0
  528. package/src/summary/runWhileConnectedCoordinator.ts +117 -0
  529. package/src/summary/runningSummarizer.ts +920 -0
  530. package/src/summary/summarizer.ts +352 -0
  531. package/src/summary/summarizerClientElection.ts +140 -0
  532. package/src/summary/summarizerHeuristics.ts +227 -0
  533. package/src/summary/summarizerNode/index.ts +12 -0
  534. package/src/summary/summarizerNode/summarizerNode.ts +725 -0
  535. package/src/summary/summarizerNode/summarizerNodeUtils.ts +206 -0
  536. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +571 -0
  537. package/src/summary/summarizerTypes.ts +631 -0
  538. package/src/summary/summaryCollection.ts +474 -0
  539. package/src/summary/summaryFormat.ts +249 -0
  540. package/src/summary/summaryGenerator.ts +539 -0
  541. package/src/summary/summaryManager.ts +452 -0
  542. package/src/throttler.ts +131 -122
  543. package/tsc-multi.test.json +4 -0
  544. package/tsconfig.json +11 -13
  545. package/dist/batchTracker.js.map +0 -1
  546. package/dist/blobManager.js +0 -249
  547. package/dist/blobManager.js.map +0 -1
  548. package/dist/connectionTelemetry.js +0 -178
  549. package/dist/connectionTelemetry.js.map +0 -1
  550. package/dist/containerHandleContext.js.map +0 -1
  551. package/dist/containerRuntime.js +0 -2174
  552. package/dist/containerRuntime.js.map +0 -1
  553. package/dist/dataStore.js.map +0 -1
  554. package/dist/dataStoreContext.js.map +0 -1
  555. package/dist/dataStoreContexts.js.map +0 -1
  556. package/dist/dataStoreRegistry.js.map +0 -1
  557. package/dist/dataStores.js.map +0 -1
  558. package/dist/deltaScheduler.js.map +0 -1
  559. package/dist/garbageCollection.d.ts +0 -319
  560. package/dist/garbageCollection.d.ts.map +0 -1
  561. package/dist/garbageCollection.js +0 -993
  562. package/dist/garbageCollection.js.map +0 -1
  563. package/dist/index.js +0 -33
  564. package/dist/index.js.map +0 -1
  565. package/dist/opTelemetry.d.ts +0 -22
  566. package/dist/opTelemetry.d.ts.map +0 -1
  567. package/dist/opTelemetry.js +0 -60
  568. package/dist/opTelemetry.js.map +0 -1
  569. package/dist/orderedClientElection.d.ts.map +0 -1
  570. package/dist/orderedClientElection.js.map +0 -1
  571. package/dist/packageVersion.js.map +0 -1
  572. package/dist/pendingStateManager.js +0 -346
  573. package/dist/pendingStateManager.js.map +0 -1
  574. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  575. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  576. package/dist/runningSummarizer.d.ts +0 -93
  577. package/dist/runningSummarizer.d.ts.map +0 -1
  578. package/dist/runningSummarizer.js +0 -384
  579. package/dist/runningSummarizer.js.map +0 -1
  580. package/dist/serializedSnapshotStorage.d.ts +0 -58
  581. package/dist/serializedSnapshotStorage.d.ts.map +0 -1
  582. package/dist/serializedSnapshotStorage.js +0 -108
  583. package/dist/serializedSnapshotStorage.js.map +0 -1
  584. package/dist/summarizer.d.ts.map +0 -1
  585. package/dist/summarizer.js +0 -348
  586. package/dist/summarizer.js.map +0 -1
  587. package/dist/summarizerClientElection.d.ts.map +0 -1
  588. package/dist/summarizerClientElection.js.map +0 -1
  589. package/dist/summarizerHandle.d.ts +0 -12
  590. package/dist/summarizerHandle.d.ts.map +0 -1
  591. package/dist/summarizerHandle.js +0 -22
  592. package/dist/summarizerHandle.js.map +0 -1
  593. package/dist/summarizerHeuristics.d.ts.map +0 -1
  594. package/dist/summarizerHeuristics.js +0 -84
  595. package/dist/summarizerHeuristics.js.map +0 -1
  596. package/dist/summarizerTypes.d.ts.map +0 -1
  597. package/dist/summarizerTypes.js.map +0 -1
  598. package/dist/summaryCollection.d.ts.map +0 -1
  599. package/dist/summaryCollection.js.map +0 -1
  600. package/dist/summaryFormat.d.ts.map +0 -1
  601. package/dist/summaryFormat.js.map +0 -1
  602. package/dist/summaryGenerator.d.ts.map +0 -1
  603. package/dist/summaryGenerator.js.map +0 -1
  604. package/dist/summaryManager.d.ts.map +0 -1
  605. package/dist/summaryManager.js.map +0 -1
  606. package/dist/throttler.js.map +0 -1
  607. package/garbageCollection.md +0 -41
  608. package/lib/batchTracker.d.ts.map +0 -1
  609. package/lib/batchTracker.js.map +0 -1
  610. package/lib/blobManager.d.ts +0 -95
  611. package/lib/blobManager.d.ts.map +0 -1
  612. package/lib/blobManager.js +0 -244
  613. package/lib/blobManager.js.map +0 -1
  614. package/lib/connectionTelemetry.d.ts.map +0 -1
  615. package/lib/connectionTelemetry.js +0 -174
  616. package/lib/connectionTelemetry.js.map +0 -1
  617. package/lib/containerHandleContext.d.ts.map +0 -1
  618. package/lib/containerHandleContext.js.map +0 -1
  619. package/lib/containerRuntime.d.ts +0 -615
  620. package/lib/containerRuntime.d.ts.map +0 -1
  621. package/lib/containerRuntime.js +0 -2166
  622. package/lib/containerRuntime.js.map +0 -1
  623. package/lib/dataStore.d.ts.map +0 -1
  624. package/lib/dataStore.js.map +0 -1
  625. package/lib/dataStoreContext.d.ts.map +0 -1
  626. package/lib/dataStoreContext.js.map +0 -1
  627. package/lib/dataStoreContexts.d.ts.map +0 -1
  628. package/lib/dataStoreContexts.js.map +0 -1
  629. package/lib/dataStoreRegistry.d.ts.map +0 -1
  630. package/lib/dataStoreRegistry.js.map +0 -1
  631. package/lib/dataStores.d.ts.map +0 -1
  632. package/lib/dataStores.js.map +0 -1
  633. package/lib/deltaScheduler.d.ts.map +0 -1
  634. package/lib/deltaScheduler.js.map +0 -1
  635. package/lib/garbageCollection.d.ts +0 -319
  636. package/lib/garbageCollection.d.ts.map +0 -1
  637. package/lib/garbageCollection.js +0 -989
  638. package/lib/garbageCollection.js.map +0 -1
  639. package/lib/index.d.ts +0 -14
  640. package/lib/index.d.ts.map +0 -1
  641. package/lib/index.js +0 -13
  642. package/lib/index.js.map +0 -1
  643. package/lib/opTelemetry.d.ts +0 -22
  644. package/lib/opTelemetry.d.ts.map +0 -1
  645. package/lib/opTelemetry.js +0 -56
  646. package/lib/opTelemetry.js.map +0 -1
  647. package/lib/orderedClientElection.d.ts.map +0 -1
  648. package/lib/orderedClientElection.js.map +0 -1
  649. package/lib/packageVersion.d.ts.map +0 -1
  650. package/lib/packageVersion.js.map +0 -1
  651. package/lib/pendingStateManager.d.ts.map +0 -1
  652. package/lib/pendingStateManager.js +0 -339
  653. package/lib/pendingStateManager.js.map +0 -1
  654. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  655. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  656. package/lib/runningSummarizer.d.ts +0 -93
  657. package/lib/runningSummarizer.d.ts.map +0 -1
  658. package/lib/runningSummarizer.js +0 -380
  659. package/lib/runningSummarizer.js.map +0 -1
  660. package/lib/serializedSnapshotStorage.d.ts +0 -58
  661. package/lib/serializedSnapshotStorage.d.ts.map +0 -1
  662. package/lib/serializedSnapshotStorage.js +0 -104
  663. package/lib/serializedSnapshotStorage.js.map +0 -1
  664. package/lib/summarizer.d.ts.map +0 -1
  665. package/lib/summarizer.js +0 -342
  666. package/lib/summarizer.js.map +0 -1
  667. package/lib/summarizerClientElection.d.ts.map +0 -1
  668. package/lib/summarizerClientElection.js.map +0 -1
  669. package/lib/summarizerHandle.d.ts +0 -12
  670. package/lib/summarizerHandle.d.ts.map +0 -1
  671. package/lib/summarizerHandle.js +0 -18
  672. package/lib/summarizerHandle.js.map +0 -1
  673. package/lib/summarizerHeuristics.d.ts.map +0 -1
  674. package/lib/summarizerHeuristics.js +0 -79
  675. package/lib/summarizerHeuristics.js.map +0 -1
  676. package/lib/summarizerTypes.d.ts.map +0 -1
  677. package/lib/summarizerTypes.js +0 -9
  678. package/lib/summarizerTypes.js.map +0 -1
  679. package/lib/summaryCollection.d.ts.map +0 -1
  680. package/lib/summaryCollection.js.map +0 -1
  681. package/lib/summaryFormat.d.ts.map +0 -1
  682. package/lib/summaryFormat.js.map +0 -1
  683. package/lib/summaryGenerator.d.ts +0 -85
  684. package/lib/summaryGenerator.d.ts.map +0 -1
  685. package/lib/summaryGenerator.js.map +0 -1
  686. package/lib/summaryManager.d.ts.map +0 -1
  687. package/lib/summaryManager.js.map +0 -1
  688. package/lib/throttler.d.ts.map +0 -1
  689. package/lib/throttler.js.map +0 -1
  690. package/src/garbageCollection.ts +0 -1434
  691. package/src/opTelemetry.ts +0 -71
  692. package/src/orderedClientElection.ts +0 -511
  693. package/src/runWhileConnectedCoordinator.ts +0 -106
  694. package/src/runningSummarizer.ts +0 -550
  695. package/src/serializedSnapshotStorage.ts +0 -146
  696. package/src/summarizer.ts +0 -438
  697. package/src/summarizerClientElection.ts +0 -161
  698. package/src/summarizerHandle.ts +0 -21
  699. package/src/summarizerHeuristics.ts +0 -108
  700. package/src/summarizerTypes.ts +0 -462
  701. package/src/summaryCollection.ts +0 -406
  702. package/src/summaryFormat.ts +0 -239
  703. package/src/summaryGenerator.ts +0 -427
  704. package/src/summaryManager.ts +0 -368
  705. package/tsconfig.esnext.json +0 -7
@@ -3,15 +3,22 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import { ChildLogger, TelemetryLogger } from "@fluidframework/telemetry-utils";
6
+ import {
7
+ IEventSampler,
8
+ ISampledTelemetryLogger,
9
+ ITelemetryLoggerExt,
10
+ createChildLogger,
11
+ createSampledLogger,
12
+ formatTick,
13
+ } from "@fluidframework/telemetry-utils";
8
14
  import { IDeltaManager } from "@fluidframework/container-definitions";
9
15
  import {
10
- IDocumentMessage,
11
- ISequencedDocumentMessage,
12
- MessageType,
16
+ IDocumentMessage,
17
+ ISequencedDocumentMessage,
18
+ MessageType,
13
19
  } from "@fluidframework/protocol-definitions";
14
- import { assert, performance } from "@fluidframework/common-utils";
20
+ import { assert } from "@fluidframework/core-utils";
21
+ import { performance } from "@fluid-internal/client-utils";
15
22
 
16
23
  /**
17
24
  * We report various latency-related errors when waiting for op roundtrip takes longer than that amout of time.
@@ -26,263 +33,346 @@ export const latencyThreshold = 5000;
26
33
  // 3. Op received from service back (pushed to inbound queue).
27
34
  // 4. Op is processed.
28
35
  interface IOpPerfTelemetryProperties {
29
- /** Measure time between (1) and (2) - Measure time outbound op is sitting in queue due to active batch */
30
- durationOutboundBatching: number; // was durationOutboundQueue in previous versions
31
- /** Measure time between (2) and (3) - Track how long it took for op to be acked by service */
32
- durationNetwork: number; // was durationInboundQueue
33
- /** Measure time between (3) and (4) - Time between DM's inbound "push" event until DM's "op" event */
34
- durationInboundToProcessing: number;
35
- /** Length of the DeltaManager's inbound queue at the time of the DM's inbound "push" event (3) */
36
- lengthInboundQueue: number;
36
+ /** Measure time between (1) and (2) - Measure time outbound op is sitting in queue due to active batch */
37
+ durationOutboundBatching: number; // was durationOutboundQueue in previous versions
38
+ /** Measure time between (2) and (3) - Track how long it took for op to be acked by service */
39
+ durationNetwork: number; // was durationInboundQueue
40
+ /** Measure time between (3) and (4) - Time between DM's inbound "push" event until DM's "op" event */
41
+ durationInboundToProcessing: number;
42
+ /** Length of the DeltaManager's inbound queue at the time of the DM's inbound "push" event (3) */
43
+ lengthInboundQueue: number;
37
44
  }
38
45
 
39
46
  /**
40
47
  * Timings collected at various moments during the op processing.
41
48
  */
42
- interface IOpPerfTimings {
43
- /** Starting time for (1) */
44
- submitOpEventTime: number;
45
- /** Starting time for (2) */
46
- outboundPushEventTime: number;
47
- /** Starting time for (3) */
48
- inboundPushEventTime: number;
49
+ interface IOpPerfTimings {
50
+ /** Starting time for (1) */
51
+ submitOpEventTime: number;
52
+ /** Starting time for (2) */
53
+ outboundPushEventTime: number;
54
+ /** Starting time for (3) */
55
+ inboundPushEventTime: number;
49
56
  }
50
57
 
51
58
  class OpPerfTelemetry {
52
- private pongCount: number = 0;
53
- private pingLatency: number | undefined;
54
-
55
- // Collab window tracking. This is timestamp of %1000 message.
56
- private sequenceNumberForMsnTracking: number | undefined;
57
- private msnTrackingTimestamp: number = 0;
58
- // To track round trip time for every %500 client message.
59
- private clientSequenceNumberForLatencyStatistics: number | undefined;
60
-
61
- private opProcessingTimes: Partial<IOpPerfTimings> = {};
62
-
63
- // Performance Data to be reported for ops round trips and processing.
64
- private opPerfData: Partial<IOpPerfTelemetryProperties> = {};
65
-
66
- private firstConnection = true;
67
- private connectionOpSeqNumber: number | undefined;
68
- private readonly bootTime = performance.now();
69
- private connectionStartTime = 0;
70
- private gap = 0;
71
-
72
- private readonly logger: ITelemetryLogger;
73
-
74
- public constructor(
75
- private clientId: string | undefined,
76
- private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
77
- logger: ITelemetryLogger) {
78
- this.logger = ChildLogger.create(logger, "OpPerf");
79
-
80
- this.deltaManager.on("pong", (latency) => this.recordPingTime(latency));
81
- this.deltaManager.on("submitOp", (message) => this.beforeOpSubmit(message));
82
-
83
- this.deltaManager.on("op", (message) => this.afterProcessingOp(message));
84
-
85
- this.deltaManager.on("connect", (details, opsBehind) => {
86
- this.clientId = details.clientId;
87
- if (opsBehind !== undefined) {
88
- this.connectionOpSeqNumber = this.deltaManager.lastKnownSeqNumber;
89
- this.gap = opsBehind;
90
- this.connectionStartTime = performance.now();
91
-
92
- // We might be already up-today. If so, report it right away.
93
- if (this.gap <= 0) {
94
- this.reportGettingUpToDate();
95
- }
96
- }
97
- });
98
- this.deltaManager.on("disconnect", () => {
99
- this.sequenceNumberForMsnTracking = undefined;
100
- this.clientSequenceNumberForLatencyStatistics = undefined;
101
- this.opProcessingTimes = {};
102
- this.opPerfData = {};
103
- this.connectionOpSeqNumber = undefined;
104
- this.firstConnection = false;
105
- this.pongCount = 0;
106
- });
107
-
108
- this.deltaManager.outbound.on("push", (messages) => {
109
- for (const msg of messages) {
110
- if (msg.type === MessageType.Operation &&
111
- this.clientSequenceNumberForLatencyStatistics === msg.clientSequenceNumber) {
112
- assert(this.opProcessingTimes.outboundPushEventTime === undefined,
113
- 0x2c8 /* "outboundPushEventTime should be undefined" */);
114
- assert(this.opPerfData.durationNetwork === undefined,
115
- 0x2c9 /* "durationNetwork should be undefined" */);
116
- this.opProcessingTimes.outboundPushEventTime = Date.now();
117
-
118
- assert(this.opPerfData.durationOutboundBatching === undefined,
119
- 0x2ca /* "durationOutboundBatching should be undefined" */);
120
-
121
- assert(this.opProcessingTimes.submitOpEventTime !== undefined,
122
- 0x2cb /* "submitOpEventTime should be undefined" */);
123
-
124
- this.opPerfData.durationOutboundBatching = this.opProcessingTimes.outboundPushEventTime
125
- - this.opProcessingTimes.submitOpEventTime;
126
- }
127
- }
128
- });
129
-
130
- this.deltaManager.inbound.on("push", (message: ISequencedDocumentMessage) => {
131
- if (this.clientId === message.clientId &&
132
- message.type === MessageType.Operation &&
133
- this.clientSequenceNumberForLatencyStatistics === message.clientSequenceNumber &&
134
- this.opProcessingTimes.outboundPushEventTime !== undefined) {
135
- this.opProcessingTimes.inboundPushEventTime = Date.now();
136
- this.opPerfData.durationNetwork = this.opProcessingTimes.inboundPushEventTime
137
- - this.opProcessingTimes.outboundPushEventTime;
138
- this.opProcessingTimes.outboundPushEventTime = undefined;
139
- this.opPerfData.lengthInboundQueue = this.deltaManager.inbound.length;
140
- }
141
- });
142
-
143
- this.deltaManager.inbound.on("idle", (count: number, duration: number) => {
144
- // Do not want to log zero for sure.
145
- // We are more interested in aggregates, so logging only if we are processing some number of ops
146
- // Cut-off is arbitrary - can be increased or decreased based on amount of data collected and questions we
147
- // want to get answered
148
- // back-compat: Once 0.36 loader version saturates (count & duration args were added there),
149
- // we can remove typeof check.
150
- if (typeof count === "number" && count >= 100) {
151
- this.logger.sendPerformanceEvent({
152
- eventName: "GetDeltas_OpProcessing",
153
- count,
154
- duration,
155
- });
156
- }
157
- });
158
- }
159
-
160
- private reportGettingUpToDate() {
161
- this.connectionOpSeqNumber = undefined;
162
- this.logger.sendPerformanceEvent({
163
- eventName: "ConnectionSpeed",
164
- duration: performance.now() - this.connectionStartTime,
165
- ops: this.gap,
166
- // track time to connect only for first connection.
167
- timeToConnect: this.firstConnection ?
168
- TelemetryLogger.formatTick(this.connectionStartTime - this.bootTime) :
169
- undefined,
170
- firstConnection: this.firstConnection,
171
- });
172
- }
173
-
174
- private recordPingTime(latency: number) {
175
- this.pingLatency = latency;
176
- // logging one in every 1000 pongs, including the first time, if it is a "write" client.
177
- if (this.pongCount % 100 === 0 && this.deltaManager.active) {
178
- this.logger.sendPerformanceEvent({
179
- eventName: "DeltaLatency",
180
- duration: latency,
181
- });
182
- }
183
- this.pongCount++;
184
- }
185
-
186
- private beforeOpSubmit(message: IDocumentMessage) {
187
- // start with first client op and measure latency every 500 client ops
188
- if (this.clientSequenceNumberForLatencyStatistics === undefined &&
189
- message.clientSequenceNumber % 500 === 1) {
190
- assert(this.opProcessingTimes.outboundPushEventTime === undefined,
191
- 0x2cc /* "OpTimeSittingInboundQueue should be undefined" */);
192
- assert(this.opPerfData.durationNetwork === undefined,
193
- 0x2cd /* "durationNetwork should be undefined" */);
194
- this.opProcessingTimes.submitOpEventTime = Date.now();
195
- this.clientSequenceNumberForLatencyStatistics = message.clientSequenceNumber;
196
- }
197
- }
198
-
199
- private afterProcessingOp(message: ISequencedDocumentMessage) {
200
- const sequenceNumber = message.sequenceNumber;
201
-
202
- if (sequenceNumber === this.connectionOpSeqNumber) {
203
- this.reportGettingUpToDate();
204
- }
205
-
206
- // Record collab window max size after every 1000th op.
207
- if (this.sequenceNumberForMsnTracking === undefined && sequenceNumber % 1000 === 0) {
208
- this.sequenceNumberForMsnTracking = sequenceNumber;
209
- this.msnTrackingTimestamp = message.timestamp;
210
- }
211
- if (this.sequenceNumberForMsnTracking !== undefined &&
212
- message.minimumSequenceNumber >= this.sequenceNumberForMsnTracking) {
213
- assert(this.msnTrackingTimestamp !== undefined,
214
- 0x2ce /* "msnTrackingTimestamp should not be undefined" */);
215
- this.logger.sendPerformanceEvent({
216
- eventName: "MsnStatistics",
217
- sequenceNumber,
218
- msnDistance: sequenceNumber - this.sequenceNumberForMsnTracking,
219
- duration: message.timestamp - this.msnTrackingTimestamp,
220
- });
221
- this.sequenceNumberForMsnTracking = undefined;
222
- }
223
-
224
- if (this.clientId === message.clientId &&
225
- this.clientSequenceNumberForLatencyStatistics === message.clientSequenceNumber) {
226
- assert(this.opProcessingTimes.submitOpEventTime !== undefined,
227
- 0x120 /* "Undefined latency statistics (op send time)" */);
228
- const currentTime = Date.now();
229
-
230
- if (this.opProcessingTimes.inboundPushEventTime !== undefined) {
231
- this.opPerfData.durationInboundToProcessing = currentTime
232
- - this.opProcessingTimes.inboundPushEventTime;
233
- }
234
-
235
- const duration = currentTime - this.opProcessingTimes.submitOpEventTime;
236
-
237
- // One of the core expectations for Fluid service is to be fast.
238
- // When it's not the case, we want to learn about it and be able to investigate, so
239
- // raise awareness.
240
- // This also helps identify cases where it's due to client behavior (sending too many ops)
241
- // that results in overwhelming ordering service and thus starting to see long latencies.
242
- // The threshold could be adjusted, but ideally it stays workload-agnostic, as service
243
- // performance impacts all workloads relying on service.
244
- const category = duration > latencyThreshold ? "error" : "performance";
245
-
246
- this.logger.sendPerformanceEvent({
247
- eventName: "OpRoundtripTime",
248
- sequenceNumber,
249
- referenceSequenceNumber: message.referenceSequenceNumber,
250
- duration,
251
- category,
252
- pingLatency: this.pingLatency,
253
- msnDistance: this.deltaManager.lastSequenceNumber - this.deltaManager.minimumSequenceNumber,
254
- ...this.opPerfData,
255
- });
256
- this.clientSequenceNumberForLatencyStatistics = undefined;
257
- this.opPerfData = {};
258
- }
259
- }
59
+ private pingLatency: number | undefined;
60
+
61
+ // Collab window tracking. This is timestamp of %1000 message.
62
+ private sequenceNumberForMsnTracking: number | undefined;
63
+ private msnTrackingTimestamp: number = 0;
64
+ // To track round trip time for every %500 client message.
65
+ private clientSequenceNumberForLatencyStatistics: number | undefined;
66
+ // Performance Data to be reported for ops round trips and processing.
67
+ private readonly latencyStatistics = new Map<
68
+ number,
69
+ {
70
+ opProcessingTimes: Partial<IOpPerfTimings>;
71
+ opPerfData: Partial<IOpPerfTelemetryProperties>;
72
+ }
73
+ >();
74
+
75
+ private firstConnection = true;
76
+ private connectionOpSeqNumber: number | undefined;
77
+ private readonly bootTime = performance.now();
78
+ private connectionStartTime = 0;
79
+ private gap = 0;
80
+
81
+ private readonly logger: ITelemetryLoggerExt;
82
+
83
+ private static readonly OP_LATENCY_SAMPLE_RATE = 500;
84
+ private readonly opLatencyLogger: ISampledTelemetryLogger;
85
+
86
+ private static readonly DELTA_LATENCY_SAMPLE_RATE = 100;
87
+ private readonly deltaLatencyLogger: ISampledTelemetryLogger;
88
+
89
+ public constructor(
90
+ private clientId: string | undefined,
91
+ private readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
92
+ logger: ITelemetryLoggerExt,
93
+ ) {
94
+ this.logger = createChildLogger({ logger, namespace: "OpPerf" });
95
+
96
+ const deltaLatencyEventSampler: IEventSampler = (() => {
97
+ let eventCount = -1;
98
+ return {
99
+ sample: () => {
100
+ eventCount++;
101
+ const shouldSample =
102
+ eventCount % OpPerfTelemetry.DELTA_LATENCY_SAMPLE_RATE === 0;
103
+ if (shouldSample) {
104
+ eventCount = 0;
105
+ }
106
+ return shouldSample;
107
+ },
108
+ };
109
+ })();
110
+
111
+ this.deltaLatencyLogger = createSampledLogger(logger, deltaLatencyEventSampler);
112
+
113
+ // The SampledLogger here is used get access to the isSamplingDisabled property derived from
114
+ // telemetry config properties. The actual sampling logic for op messages happens outside this SampledLogger
115
+ // due to complexity of the different asynchronus scenarios of the op message lifecycle.
116
+ this.opLatencyLogger = createSampledLogger(logger);
117
+
118
+ this.deltaManager.on("pong", (latency) => this.recordPingTime(latency));
119
+ this.deltaManager.on("submitOp", (message) => this.beforeOpSubmit(message));
120
+
121
+ this.deltaManager.on("op", (message) => this.afterProcessingOp(message));
122
+
123
+ this.deltaManager.on("connect", (details, opsBehind) => {
124
+ this.clientId = details.clientId;
125
+ if (opsBehind !== undefined) {
126
+ this.connectionOpSeqNumber = this.deltaManager.lastKnownSeqNumber;
127
+ this.gap = opsBehind;
128
+ this.connectionStartTime = performance.now();
129
+
130
+ // We might be already up-today. If so, report it right away.
131
+ if (this.gap <= 0) {
132
+ this.reportGettingUpToDate();
133
+ }
134
+ }
135
+ });
136
+ this.deltaManager.on("disconnect", () => {
137
+ this.sequenceNumberForMsnTracking = undefined;
138
+ this.clientSequenceNumberForLatencyStatistics = undefined;
139
+ this.connectionOpSeqNumber = undefined;
140
+ this.firstConnection = false;
141
+ this.latencyStatistics.clear();
142
+ });
143
+
144
+ this.deltaManager.outbound.on("push", (messages) => {
145
+ for (const msg of messages) {
146
+ if (
147
+ msg.type === MessageType.Operation &&
148
+ (this.opLatencyLogger.isSamplingDisabled ||
149
+ this.clientSequenceNumberForLatencyStatistics === msg.clientSequenceNumber)
150
+ ) {
151
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
152
+ const latencyStats = this.latencyStatistics.get(msg.clientSequenceNumber)!;
153
+ assert(
154
+ latencyStats !== undefined,
155
+ 0x7c2 /* Latency stats for op should exist */,
156
+ );
157
+ assert(
158
+ latencyStats.opProcessingTimes.outboundPushEventTime === undefined,
159
+ 0x2c8 /* "outboundPushEventTime should be undefined" */,
160
+ );
161
+ assert(
162
+ latencyStats.opPerfData.durationNetwork === undefined,
163
+ 0x2c9 /* "durationNetwork should be undefined" */,
164
+ );
165
+ latencyStats.opProcessingTimes.outboundPushEventTime = Date.now();
166
+
167
+ assert(
168
+ latencyStats.opPerfData.durationOutboundBatching === undefined,
169
+ 0x2ca /* "durationOutboundBatching should be undefined" */,
170
+ );
171
+
172
+ assert(
173
+ latencyStats.opProcessingTimes.submitOpEventTime !== undefined,
174
+ 0x2cb /* "submitOpEventTime should be undefined" */,
175
+ );
176
+
177
+ latencyStats.opPerfData.durationOutboundBatching =
178
+ latencyStats.opProcessingTimes.outboundPushEventTime -
179
+ latencyStats.opProcessingTimes.submitOpEventTime;
180
+ }
181
+ }
182
+ });
183
+
184
+ this.deltaManager.inbound.on("push", (message: ISequencedDocumentMessage) => {
185
+ if (
186
+ this.clientId === message.clientId &&
187
+ message.type === MessageType.Operation &&
188
+ (this.opLatencyLogger.isSamplingDisabled ||
189
+ this.clientSequenceNumberForLatencyStatistics === message.clientSequenceNumber)
190
+ ) {
191
+ // We do an explicit check for undefined right after this
192
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
193
+ const latencyStats = this.latencyStatistics.get(message.clientSequenceNumber)!;
194
+ assert(latencyStats !== undefined, 0x7c3 /* Latency stats for op should exist */);
195
+ if (latencyStats.opProcessingTimes.outboundPushEventTime !== undefined) {
196
+ latencyStats.opProcessingTimes.inboundPushEventTime = Date.now();
197
+ latencyStats.opPerfData.durationNetwork =
198
+ latencyStats.opProcessingTimes.inboundPushEventTime -
199
+ latencyStats.opProcessingTimes.outboundPushEventTime;
200
+ latencyStats.opPerfData.lengthInboundQueue = this.deltaManager.inbound.length;
201
+ }
202
+ }
203
+ });
204
+
205
+ this.deltaManager.inbound.on("idle", (count: number, duration: number) => {
206
+ // Do not want to log zero for sure.
207
+ // We are more interested in aggregates, so logging only if we are processing some number of ops
208
+ // Cut-off is arbitrary - can be increased or decreased based on amount of data collected and questions we
209
+ // want to get answered
210
+ // back-compat: Once 0.36 loader version saturates (count & duration args were added there),
211
+ // we can remove typeof check.
212
+ if (typeof count === "number" && count >= 100) {
213
+ this.logger.sendPerformanceEvent({
214
+ eventName: "GetDeltas_OpProcessing",
215
+ count,
216
+ duration,
217
+ });
218
+ }
219
+ });
220
+ }
221
+
222
+ private reportGettingUpToDate() {
223
+ this.connectionOpSeqNumber = undefined;
224
+ this.logger.sendPerformanceEvent({
225
+ eventName: "ConnectionSpeed",
226
+ duration: performance.now() - this.connectionStartTime,
227
+ ops: this.gap,
228
+ // track time to connect only for first connection.
229
+ timeToConnect: this.firstConnection
230
+ ? formatTick(this.connectionStartTime - this.bootTime)
231
+ : undefined,
232
+ firstConnection: this.firstConnection,
233
+ });
234
+ }
235
+
236
+ private recordPingTime(latency: number) {
237
+ this.pingLatency = latency;
238
+
239
+ // Log if latency is longer than 1 min
240
+ if (latency > 1000 * 60) {
241
+ this.logger.sendErrorEvent({
242
+ eventName: "LatencyTooLong",
243
+ duration: latency,
244
+ });
245
+ }
246
+
247
+ // logging one in every DELTA_LATENCY_SAMPLE_RATE pongs, including the first time, if it is a "write" client.
248
+ if (this.deltaManager.active) {
249
+ this.deltaLatencyLogger.sendPerformanceEvent({
250
+ eventName: "DeltaLatency",
251
+ duration: latency,
252
+ });
253
+ }
254
+ }
255
+
256
+ private beforeOpSubmit(message: IDocumentMessage) {
257
+ // start with first client op and measure latency every 500 client ops
258
+ if (
259
+ this.opLatencyLogger.isSamplingDisabled ||
260
+ (this.clientSequenceNumberForLatencyStatistics === undefined &&
261
+ message.clientSequenceNumber % OpPerfTelemetry.OP_LATENCY_SAMPLE_RATE === 1)
262
+ ) {
263
+ assert(
264
+ this.latencyStatistics.get(message.clientSequenceNumber) === undefined,
265
+ 0x7c4 /* Existing op perf data for client sequence number */,
266
+ );
267
+ this.clientSequenceNumberForLatencyStatistics = message.clientSequenceNumber;
268
+ this.latencyStatistics.set(message.clientSequenceNumber, {
269
+ opProcessingTimes: {
270
+ submitOpEventTime: Date.now(),
271
+ },
272
+ opPerfData: {},
273
+ });
274
+ }
275
+ }
276
+
277
+ private afterProcessingOp(message: ISequencedDocumentMessage) {
278
+ const sequenceNumber = message.sequenceNumber;
279
+
280
+ if (sequenceNumber === this.connectionOpSeqNumber) {
281
+ this.reportGettingUpToDate();
282
+ }
283
+
284
+ // Record collab window max size after every 1000th op.
285
+ if (this.sequenceNumberForMsnTracking === undefined && sequenceNumber % 1000 === 0) {
286
+ this.sequenceNumberForMsnTracking = sequenceNumber;
287
+ this.msnTrackingTimestamp = message.timestamp;
288
+ }
289
+ if (
290
+ this.sequenceNumberForMsnTracking !== undefined &&
291
+ message.minimumSequenceNumber >= this.sequenceNumberForMsnTracking
292
+ ) {
293
+ assert(
294
+ this.msnTrackingTimestamp !== undefined,
295
+ 0x2ce /* "msnTrackingTimestamp should not be undefined" */,
296
+ );
297
+ this.logger.sendPerformanceEvent({
298
+ eventName: "MsnStatistics",
299
+ sequenceNumber,
300
+ msnDistance: sequenceNumber - this.sequenceNumberForMsnTracking,
301
+ duration: message.timestamp - this.msnTrackingTimestamp,
302
+ });
303
+ this.sequenceNumberForMsnTracking = undefined;
304
+ }
305
+
306
+ if (
307
+ this.clientId === message.clientId &&
308
+ (this.opLatencyLogger.isSamplingDisabled ||
309
+ this.clientSequenceNumberForLatencyStatistics === message.clientSequenceNumber)
310
+ ) {
311
+ // We do an explicit check for undefined right after this
312
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
313
+ const latencyData = this.latencyStatistics.get(message.clientSequenceNumber)!;
314
+ assert(latencyData !== undefined, 0x7c5 /* Undefined latency statistics for op */);
315
+ assert(
316
+ latencyData.opProcessingTimes.submitOpEventTime !== undefined,
317
+ 0x120 /* "Undefined latency statistics for op (op send time)" */,
318
+ );
319
+ const currentTime = Date.now();
320
+ if (latencyData.opProcessingTimes.inboundPushEventTime !== undefined) {
321
+ latencyData.opPerfData.durationInboundToProcessing =
322
+ currentTime - latencyData.opProcessingTimes.inboundPushEventTime;
323
+ }
324
+ const duration = currentTime - latencyData.opProcessingTimes.submitOpEventTime;
325
+
326
+ // One of the core expectations for Fluid service is to be fast.
327
+ // When it's not the case, we want to learn about it and be able to investigate, so
328
+ // raise awareness.
329
+ // This also helps identify cases where it's due to client behavior (sending too many ops)
330
+ // that results in overwhelming ordering service and thus starting to see long latencies.
331
+ // The threshold could be adjusted, but ideally it stays workload-agnostic, as service
332
+ // performance impacts all workloads relying on service.
333
+ const category = duration > latencyThreshold ? "error" : "performance";
334
+ this.opLatencyLogger.sendPerformanceEvent({
335
+ eventName: "OpRoundtripTime",
336
+ sequenceNumber,
337
+ referenceSequenceNumber: message.referenceSequenceNumber,
338
+ duration,
339
+ category,
340
+ pingLatency: this.pingLatency,
341
+ msnDistance:
342
+ this.deltaManager.lastSequenceNumber - this.deltaManager.minimumSequenceNumber,
343
+ ...latencyData.opPerfData,
344
+ });
345
+ this.clientSequenceNumberForLatencyStatistics = undefined;
346
+ this.latencyStatistics.delete(message.clientSequenceNumber);
347
+ }
348
+ }
260
349
  }
261
350
  export interface IPerfSignalReport {
262
- /**
263
- * Identifier for the signal being submitted in order to
264
- * allow collection of data around the roundtrip of signal messages.
265
- */
266
- signalSequenceNumber: number;
267
- /**
268
- * Number of signals that were expected but not received.
269
- */
270
- signalsLost: number;
271
-
272
- /**
273
- * Timestamp before submitting the signal we will trace.
274
- */
275
- signalTimestamp: number;
276
-
277
- /**
278
- * Expected Signal Sequence to be received.
279
- */
280
- trackingSignalSequenceNumber: number | undefined;
351
+ /**
352
+ * Identifier for the signal being submitted in order to
353
+ * allow collection of data around the roundtrip of signal messages.
354
+ */
355
+ signalSequenceNumber: number;
356
+ /**
357
+ * Number of signals that were expected but not received.
358
+ */
359
+ signalsLost: number;
360
+
361
+ /**
362
+ * Timestamp before submitting the signal we will trace.
363
+ */
364
+ signalTimestamp: number;
365
+
366
+ /**
367
+ * Expected Signal Sequence to be received.
368
+ */
369
+ trackingSignalSequenceNumber: number | undefined;
281
370
  }
282
371
 
283
372
  export function ReportOpPerfTelemetry(
284
- clientId: string | undefined,
285
- deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
286
- logger: ITelemetryLogger) {
287
- new OpPerfTelemetry(clientId, deltaManager, logger);
373
+ clientId: string | undefined,
374
+ deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
375
+ logger: ITelemetryLoggerExt,
376
+ ) {
377
+ new OpPerfTelemetry(clientId, deltaManager, logger);
288
378
  }