@fluidframework/container-runtime 2.0.0-dev.2.2.0.111723 → 2.0.0-dev.3.1.0.125672

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 (365) hide show
  1. package/.eslintrc.js +21 -10
  2. package/.mocharc.js +2 -2
  3. package/api-extractor.json +2 -2
  4. package/dist/batchTracker.d.ts +1 -2
  5. package/dist/batchTracker.d.ts.map +1 -1
  6. package/dist/batchTracker.js +2 -1
  7. package/dist/batchTracker.js.map +1 -1
  8. package/dist/blobManager.d.ts +62 -28
  9. package/dist/blobManager.d.ts.map +1 -1
  10. package/dist/blobManager.js +256 -102
  11. package/dist/blobManager.js.map +1 -1
  12. package/dist/connectionTelemetry.d.ts.map +1 -1
  13. package/dist/connectionTelemetry.js +11 -9
  14. package/dist/connectionTelemetry.js.map +1 -1
  15. package/dist/containerHandleContext.d.ts.map +1 -1
  16. package/dist/containerHandleContext.js +3 -1
  17. package/dist/containerHandleContext.js.map +1 -1
  18. package/dist/containerRuntime.d.ts +110 -78
  19. package/dist/containerRuntime.d.ts.map +1 -1
  20. package/dist/containerRuntime.js +336 -331
  21. package/dist/containerRuntime.js.map +1 -1
  22. package/dist/dataStore.d.ts.map +1 -1
  23. package/dist/dataStore.js +11 -9
  24. package/dist/dataStore.js.map +1 -1
  25. package/dist/dataStoreContext.d.ts +2 -1
  26. package/dist/dataStoreContext.d.ts.map +1 -1
  27. package/dist/dataStoreContext.js +40 -23
  28. package/dist/dataStoreContext.js.map +1 -1
  29. package/dist/dataStoreContexts.d.ts.map +1 -1
  30. package/dist/dataStoreContexts.js +7 -3
  31. package/dist/dataStoreContexts.js.map +1 -1
  32. package/dist/dataStoreRegistry.d.ts.map +1 -1
  33. package/dist/dataStoreRegistry.js +3 -1
  34. package/dist/dataStoreRegistry.js.map +1 -1
  35. package/dist/dataStores.d.ts +12 -9
  36. package/dist/dataStores.d.ts.map +1 -1
  37. package/dist/dataStores.js +69 -46
  38. package/dist/dataStores.js.map +1 -1
  39. package/dist/deltaScheduler.d.ts.map +1 -1
  40. package/dist/deltaScheduler.js +8 -3
  41. package/dist/deltaScheduler.js.map +1 -1
  42. package/dist/garbageCollection.d.ts +57 -42
  43. package/dist/garbageCollection.d.ts.map +1 -1
  44. package/dist/garbageCollection.js +371 -239
  45. package/dist/garbageCollection.js.map +1 -1
  46. package/dist/garbageCollectionConstants.d.ts +23 -0
  47. package/dist/garbageCollectionConstants.d.ts.map +1 -0
  48. package/dist/garbageCollectionConstants.js +36 -0
  49. package/dist/garbageCollectionConstants.js.map +1 -0
  50. package/dist/garbageCollectionHelpers.d.ts +15 -0
  51. package/dist/garbageCollectionHelpers.d.ts.map +1 -0
  52. package/dist/garbageCollectionHelpers.js +27 -0
  53. package/dist/garbageCollectionHelpers.js.map +1 -0
  54. package/dist/gcSweepReadyUsageDetection.d.ts +5 -5
  55. package/dist/gcSweepReadyUsageDetection.d.ts.map +1 -1
  56. package/dist/gcSweepReadyUsageDetection.js +15 -11
  57. package/dist/gcSweepReadyUsageDetection.js.map +1 -1
  58. package/dist/index.d.ts +4 -3
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +5 -6
  61. package/dist/index.js.map +1 -1
  62. package/dist/opLifecycle/batchManager.d.ts +42 -0
  63. package/dist/opLifecycle/batchManager.d.ts.map +1 -0
  64. package/dist/opLifecycle/batchManager.js +124 -0
  65. package/dist/opLifecycle/batchManager.js.map +1 -0
  66. package/dist/opLifecycle/definitions.d.ts +64 -0
  67. package/dist/opLifecycle/definitions.d.ts.map +1 -0
  68. package/dist/opLifecycle/definitions.js +7 -0
  69. package/dist/opLifecycle/definitions.js.map +1 -0
  70. package/dist/opLifecycle/index.d.ts +12 -0
  71. package/dist/opLifecycle/index.d.ts.map +1 -0
  72. package/dist/opLifecycle/index.js +22 -0
  73. package/dist/opLifecycle/index.js.map +1 -0
  74. package/dist/{opCompressor.d.ts → opLifecycle/opCompressor.d.ts} +3 -3
  75. package/dist/opLifecycle/opCompressor.d.ts.map +1 -0
  76. package/dist/opLifecycle/opCompressor.js +67 -0
  77. package/dist/opLifecycle/opCompressor.js.map +1 -0
  78. package/dist/{opDecompressor.d.ts → opLifecycle/opDecompressor.d.ts} +2 -1
  79. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -0
  80. package/dist/{opDecompressor.js → opLifecycle/opDecompressor.js} +37 -21
  81. package/dist/opLifecycle/opDecompressor.js.map +1 -0
  82. package/dist/opLifecycle/opSplitter.d.ts +49 -0
  83. package/dist/opLifecycle/opSplitter.d.ts.map +1 -0
  84. package/dist/opLifecycle/opSplitter.js +173 -0
  85. package/dist/opLifecycle/opSplitter.js.map +1 -0
  86. package/dist/opLifecycle/outbox.d.ts +52 -0
  87. package/dist/opLifecycle/outbox.d.ts.map +1 -0
  88. package/dist/opLifecycle/outbox.js +164 -0
  89. package/dist/opLifecycle/outbox.js.map +1 -0
  90. package/dist/opLifecycle/remoteMessageProcessor.d.ts +26 -0
  91. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  92. package/dist/opLifecycle/remoteMessageProcessor.js +96 -0
  93. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -0
  94. package/dist/opProperties.d.ts.map +1 -1
  95. package/dist/opProperties.js +1 -3
  96. package/dist/opProperties.js.map +1 -1
  97. package/dist/orderedClientElection.d.ts.map +1 -1
  98. package/dist/orderedClientElection.js +10 -4
  99. package/dist/orderedClientElection.js.map +1 -1
  100. package/dist/packageVersion.d.ts +1 -1
  101. package/dist/packageVersion.js +1 -1
  102. package/dist/packageVersion.js.map +1 -1
  103. package/dist/pendingStateManager.d.ts +4 -13
  104. package/dist/pendingStateManager.d.ts.map +1 -1
  105. package/dist/pendingStateManager.js +134 -161
  106. package/dist/pendingStateManager.js.map +1 -1
  107. package/dist/runWhileConnectedCoordinator.d.ts.map +1 -1
  108. package/dist/runWhileConnectedCoordinator.js.map +1 -1
  109. package/dist/runningSummarizer.d.ts.map +1 -1
  110. package/dist/runningSummarizer.js +34 -22
  111. package/dist/runningSummarizer.js.map +1 -1
  112. package/dist/scheduleManager.d.ts +0 -1
  113. package/dist/scheduleManager.d.ts.map +1 -1
  114. package/dist/scheduleManager.js +11 -21
  115. package/dist/scheduleManager.js.map +1 -1
  116. package/dist/serializedSnapshotStorage.d.ts.map +1 -1
  117. package/dist/serializedSnapshotStorage.js +3 -1
  118. package/dist/serializedSnapshotStorage.js.map +1 -1
  119. package/dist/summarizer.d.ts +2 -3
  120. package/dist/summarizer.d.ts.map +1 -1
  121. package/dist/summarizer.js +39 -18
  122. package/dist/summarizer.js.map +1 -1
  123. package/dist/summarizerClientElection.d.ts +1 -2
  124. package/dist/summarizerClientElection.d.ts.map +1 -1
  125. package/dist/summarizerClientElection.js +3 -30
  126. package/dist/summarizerClientElection.js.map +1 -1
  127. package/dist/summarizerHandle.d.ts.map +1 -1
  128. package/dist/summarizerHandle.js.map +1 -1
  129. package/dist/summarizerHeuristics.d.ts.map +1 -1
  130. package/dist/summarizerHeuristics.js +6 -9
  131. package/dist/summarizerHeuristics.js.map +1 -1
  132. package/dist/summarizerTypes.d.ts +22 -25
  133. package/dist/summarizerTypes.d.ts.map +1 -1
  134. package/dist/summarizerTypes.js.map +1 -1
  135. package/dist/summaryCollection.d.ts.map +1 -1
  136. package/dist/summaryCollection.js +18 -8
  137. package/dist/summaryCollection.js.map +1 -1
  138. package/dist/summaryFormat.d.ts.map +1 -1
  139. package/dist/summaryFormat.js +18 -11
  140. package/dist/summaryFormat.js.map +1 -1
  141. package/dist/summaryGenerator.d.ts.map +1 -1
  142. package/dist/summaryGenerator.js +32 -14
  143. package/dist/summaryGenerator.js.map +1 -1
  144. package/dist/summaryManager.d.ts.map +1 -1
  145. package/dist/summaryManager.js +21 -9
  146. package/dist/summaryManager.js.map +1 -1
  147. package/dist/throttler.d.ts +2 -2
  148. package/dist/throttler.d.ts.map +1 -1
  149. package/dist/throttler.js +4 -4
  150. package/dist/throttler.js.map +1 -1
  151. package/garbageCollection.md +15 -2
  152. package/lib/batchTracker.d.ts +1 -2
  153. package/lib/batchTracker.d.ts.map +1 -1
  154. package/lib/batchTracker.js +2 -1
  155. package/lib/batchTracker.js.map +1 -1
  156. package/lib/blobManager.d.ts +62 -28
  157. package/lib/blobManager.d.ts.map +1 -1
  158. package/lib/blobManager.js +259 -105
  159. package/lib/blobManager.js.map +1 -1
  160. package/lib/connectionTelemetry.d.ts.map +1 -1
  161. package/lib/connectionTelemetry.js +11 -9
  162. package/lib/connectionTelemetry.js.map +1 -1
  163. package/lib/containerHandleContext.d.ts.map +1 -1
  164. package/lib/containerHandleContext.js +3 -1
  165. package/lib/containerHandleContext.js.map +1 -1
  166. package/lib/containerRuntime.d.ts +110 -78
  167. package/lib/containerRuntime.d.ts.map +1 -1
  168. package/lib/containerRuntime.js +340 -334
  169. package/lib/containerRuntime.js.map +1 -1
  170. package/lib/dataStore.d.ts.map +1 -1
  171. package/lib/dataStore.js +11 -9
  172. package/lib/dataStore.js.map +1 -1
  173. package/lib/dataStoreContext.d.ts +2 -1
  174. package/lib/dataStoreContext.d.ts.map +1 -1
  175. package/lib/dataStoreContext.js +41 -24
  176. package/lib/dataStoreContext.js.map +1 -1
  177. package/lib/dataStoreContexts.d.ts.map +1 -1
  178. package/lib/dataStoreContexts.js +7 -3
  179. package/lib/dataStoreContexts.js.map +1 -1
  180. package/lib/dataStoreRegistry.d.ts.map +1 -1
  181. package/lib/dataStoreRegistry.js +3 -1
  182. package/lib/dataStoreRegistry.js.map +1 -1
  183. package/lib/dataStores.d.ts +12 -9
  184. package/lib/dataStores.d.ts.map +1 -1
  185. package/lib/dataStores.js +75 -52
  186. package/lib/dataStores.js.map +1 -1
  187. package/lib/deltaScheduler.d.ts.map +1 -1
  188. package/lib/deltaScheduler.js +9 -4
  189. package/lib/deltaScheduler.js.map +1 -1
  190. package/lib/garbageCollection.d.ts +57 -42
  191. package/lib/garbageCollection.d.ts.map +1 -1
  192. package/lib/garbageCollection.js +364 -232
  193. package/lib/garbageCollection.js.map +1 -1
  194. package/lib/garbageCollectionConstants.d.ts +23 -0
  195. package/lib/garbageCollectionConstants.d.ts.map +1 -0
  196. package/lib/garbageCollectionConstants.js +33 -0
  197. package/lib/garbageCollectionConstants.js.map +1 -0
  198. package/lib/garbageCollectionHelpers.d.ts +15 -0
  199. package/lib/garbageCollectionHelpers.d.ts.map +1 -0
  200. package/lib/garbageCollectionHelpers.js +23 -0
  201. package/lib/garbageCollectionHelpers.js.map +1 -0
  202. package/lib/gcSweepReadyUsageDetection.d.ts +5 -5
  203. package/lib/gcSweepReadyUsageDetection.d.ts.map +1 -1
  204. package/lib/gcSweepReadyUsageDetection.js +15 -11
  205. package/lib/gcSweepReadyUsageDetection.js.map +1 -1
  206. package/lib/index.d.ts +4 -3
  207. package/lib/index.d.ts.map +1 -1
  208. package/lib/index.js +3 -3
  209. package/lib/index.js.map +1 -1
  210. package/lib/opLifecycle/batchManager.d.ts +42 -0
  211. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  212. package/lib/opLifecycle/batchManager.js +120 -0
  213. package/lib/opLifecycle/batchManager.js.map +1 -0
  214. package/lib/opLifecycle/definitions.d.ts +64 -0
  215. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  216. package/lib/opLifecycle/definitions.js +6 -0
  217. package/lib/opLifecycle/definitions.js.map +1 -0
  218. package/lib/opLifecycle/index.d.ts +12 -0
  219. package/lib/opLifecycle/index.d.ts.map +1 -0
  220. package/lib/opLifecycle/index.js +11 -0
  221. package/lib/opLifecycle/index.js.map +1 -0
  222. package/lib/{opCompressor.d.ts → opLifecycle/opCompressor.d.ts} +3 -3
  223. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  224. package/lib/opLifecycle/opCompressor.js +63 -0
  225. package/lib/opLifecycle/opCompressor.js.map +1 -0
  226. package/lib/{opDecompressor.d.ts → opLifecycle/opDecompressor.d.ts} +2 -1
  227. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  228. package/lib/{opDecompressor.js → opLifecycle/opDecompressor.js} +37 -21
  229. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  230. package/lib/opLifecycle/opSplitter.d.ts +49 -0
  231. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  232. package/lib/opLifecycle/opSplitter.js +168 -0
  233. package/lib/opLifecycle/opSplitter.js.map +1 -0
  234. package/lib/opLifecycle/outbox.d.ts +52 -0
  235. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  236. package/lib/opLifecycle/outbox.js +160 -0
  237. package/lib/opLifecycle/outbox.js.map +1 -0
  238. package/lib/opLifecycle/remoteMessageProcessor.d.ts +26 -0
  239. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  240. package/lib/opLifecycle/remoteMessageProcessor.js +91 -0
  241. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  242. package/lib/opProperties.d.ts.map +1 -1
  243. package/lib/opProperties.js +1 -3
  244. package/lib/opProperties.js.map +1 -1
  245. package/lib/orderedClientElection.d.ts.map +1 -1
  246. package/lib/orderedClientElection.js +10 -4
  247. package/lib/orderedClientElection.js.map +1 -1
  248. package/lib/packageVersion.d.ts +1 -1
  249. package/lib/packageVersion.js +1 -1
  250. package/lib/packageVersion.js.map +1 -1
  251. package/lib/pendingStateManager.d.ts +4 -13
  252. package/lib/pendingStateManager.d.ts.map +1 -1
  253. package/lib/pendingStateManager.js +134 -161
  254. package/lib/pendingStateManager.js.map +1 -1
  255. package/lib/runWhileConnectedCoordinator.d.ts.map +1 -1
  256. package/lib/runWhileConnectedCoordinator.js.map +1 -1
  257. package/lib/runningSummarizer.d.ts.map +1 -1
  258. package/lib/runningSummarizer.js +35 -23
  259. package/lib/runningSummarizer.js.map +1 -1
  260. package/lib/scheduleManager.d.ts +0 -1
  261. package/lib/scheduleManager.d.ts.map +1 -1
  262. package/lib/scheduleManager.js +11 -21
  263. package/lib/scheduleManager.js.map +1 -1
  264. package/lib/serializedSnapshotStorage.d.ts.map +1 -1
  265. package/lib/serializedSnapshotStorage.js +3 -1
  266. package/lib/serializedSnapshotStorage.js.map +1 -1
  267. package/lib/summarizer.d.ts +2 -3
  268. package/lib/summarizer.d.ts.map +1 -1
  269. package/lib/summarizer.js +39 -18
  270. package/lib/summarizer.js.map +1 -1
  271. package/lib/summarizerClientElection.d.ts +1 -2
  272. package/lib/summarizerClientElection.d.ts.map +1 -1
  273. package/lib/summarizerClientElection.js +3 -30
  274. package/lib/summarizerClientElection.js.map +1 -1
  275. package/lib/summarizerHandle.d.ts.map +1 -1
  276. package/lib/summarizerHandle.js.map +1 -1
  277. package/lib/summarizerHeuristics.d.ts.map +1 -1
  278. package/lib/summarizerHeuristics.js +6 -9
  279. package/lib/summarizerHeuristics.js.map +1 -1
  280. package/lib/summarizerTypes.d.ts +22 -25
  281. package/lib/summarizerTypes.d.ts.map +1 -1
  282. package/lib/summarizerTypes.js.map +1 -1
  283. package/lib/summaryCollection.d.ts.map +1 -1
  284. package/lib/summaryCollection.js +18 -8
  285. package/lib/summaryCollection.js.map +1 -1
  286. package/lib/summaryFormat.d.ts.map +1 -1
  287. package/lib/summaryFormat.js +20 -13
  288. package/lib/summaryFormat.js.map +1 -1
  289. package/lib/summaryGenerator.d.ts.map +1 -1
  290. package/lib/summaryGenerator.js +32 -14
  291. package/lib/summaryGenerator.js.map +1 -1
  292. package/lib/summaryManager.d.ts.map +1 -1
  293. package/lib/summaryManager.js +21 -9
  294. package/lib/summaryManager.js.map +1 -1
  295. package/lib/throttler.d.ts +2 -2
  296. package/lib/throttler.d.ts.map +1 -1
  297. package/lib/throttler.js +4 -4
  298. package/lib/throttler.js.map +1 -1
  299. package/package.json +28 -38
  300. package/prettier.config.cjs +1 -1
  301. package/src/batchTracker.ts +55 -50
  302. package/src/blobManager.ts +802 -541
  303. package/src/connectionTelemetry.ts +280 -249
  304. package/src/containerHandleContext.ts +27 -29
  305. package/src/containerRuntime.ts +3125 -2982
  306. package/src/dataStore.ts +172 -159
  307. package/src/dataStoreContext.ts +1049 -992
  308. package/src/dataStoreContexts.ts +178 -161
  309. package/src/dataStoreRegistry.ts +25 -20
  310. package/src/dataStores.ts +785 -711
  311. package/src/deltaScheduler.ts +158 -150
  312. package/src/garbageCollection.ts +1797 -1558
  313. package/src/garbageCollectionConstants.ts +38 -0
  314. package/src/garbageCollectionHelpers.ts +37 -0
  315. package/src/gcSweepReadyUsageDetection.ts +90 -84
  316. package/src/index.ts +68 -69
  317. package/src/opLifecycle/batchManager.ts +167 -0
  318. package/src/opLifecycle/definitions.ts +70 -0
  319. package/src/opLifecycle/index.ts +18 -0
  320. package/src/opLifecycle/opCompressor.ts +82 -0
  321. package/src/opLifecycle/opDecompressor.ts +124 -0
  322. package/src/opLifecycle/opSplitter.ts +238 -0
  323. package/src/opLifecycle/outbox.ts +228 -0
  324. package/src/opLifecycle/remoteMessageProcessor.ts +106 -0
  325. package/src/opProperties.ts +11 -9
  326. package/src/orderedClientElection.ts +489 -457
  327. package/src/packageVersion.ts +1 -1
  328. package/src/pendingStateManager.ts +379 -381
  329. package/src/runWhileConnectedCoordinator.ts +78 -71
  330. package/src/runningSummarizer.ts +619 -582
  331. package/src/scheduleManager.ts +299 -280
  332. package/src/serializedSnapshotStorage.ts +116 -111
  333. package/src/summarizer.ts +417 -381
  334. package/src/summarizerClientElection.ts +107 -129
  335. package/src/summarizerHandle.ts +11 -9
  336. package/src/summarizerHeuristics.ts +183 -186
  337. package/src/summarizerTypes.ts +344 -333
  338. package/src/summaryCollection.ts +378 -349
  339. package/src/summaryFormat.ts +146 -127
  340. package/src/summaryGenerator.ts +464 -406
  341. package/src/summaryManager.ts +377 -348
  342. package/src/throttler.ts +131 -122
  343. package/tsconfig.esnext.json +6 -6
  344. package/tsconfig.json +9 -13
  345. package/dist/batchManager.d.ts +0 -42
  346. package/dist/batchManager.d.ts.map +0 -1
  347. package/dist/batchManager.js +0 -83
  348. package/dist/batchManager.js.map +0 -1
  349. package/dist/opCompressor.d.ts.map +0 -1
  350. package/dist/opCompressor.js +0 -50
  351. package/dist/opCompressor.js.map +0 -1
  352. package/dist/opDecompressor.d.ts.map +0 -1
  353. package/dist/opDecompressor.js.map +0 -1
  354. package/lib/batchManager.d.ts +0 -42
  355. package/lib/batchManager.d.ts.map +0 -1
  356. package/lib/batchManager.js +0 -79
  357. package/lib/batchManager.js.map +0 -1
  358. package/lib/opCompressor.d.ts.map +0 -1
  359. package/lib/opCompressor.js +0 -46
  360. package/lib/opCompressor.js.map +0 -1
  361. package/lib/opDecompressor.d.ts.map +0 -1
  362. package/lib/opDecompressor.js.map +0 -1
  363. package/src/batchManager.ts +0 -108
  364. package/src/opCompressor.ts +0 -59
  365. package/src/opDecompressor.ts +0 -82
@@ -7,216 +7,213 @@ import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
7
  import { Timer } from "@fluidframework/common-utils";
8
8
  import { ISummaryConfigurationHeuristics } from "./containerRuntime";
9
9
  import {
10
- ISummarizeHeuristicData,
11
- ISummarizeHeuristicRunner,
12
- ISummarizeAttempt,
13
- ISummaryHeuristicStrategy,
10
+ ISummarizeHeuristicData,
11
+ ISummarizeHeuristicRunner,
12
+ ISummarizeAttempt,
13
+ ISummaryHeuristicStrategy,
14
14
  } from "./summarizerTypes";
15
15
  import { SummarizeReason } from "./summaryGenerator";
16
16
 
17
17
  /** Simple implementation of class for tracking summarize heuristic data. */
18
18
  export class SummarizeHeuristicData implements ISummarizeHeuristicData {
19
- protected _lastAttempt: ISummarizeAttempt;
20
- public get lastAttempt(): ISummarizeAttempt {
21
- return this._lastAttempt;
22
- }
23
-
24
- protected _lastSuccessfulSummary: Readonly<ISummarizeAttempt>;
25
- public get lastSuccessfulSummary(): Readonly<ISummarizeAttempt> {
26
- return this._lastSuccessfulSummary;
27
- }
28
-
29
- public numNonRuntimeOps: number = 0;
30
- public totalOpsSize: number = 0;
31
- public hasMissingOpData: boolean = false;
32
-
33
- /**
34
- * Cumulative size in bytes of all the ops at the beginning of the summarization attempt.
35
- * Is used to adjust totalOpsSize appropriately after successful summarization.
36
- */
37
- /** */
38
- private totalOpsSizeBefore: number = 0;
39
-
40
- /**
41
- * Number of system ops at beginning of attempting to summarize.
42
- * Is used to adjust numSystemOps appropriately after successful summarization.
43
- */
44
- private numSystemOpsBefore: number = 0;
45
-
46
- public numRuntimeOps: number = 0;
47
- /**
48
- * Number of non-system ops at beginning of attempting to summarize.
49
- * Is used to adjust numNonSystemOps appropriately after successful summarization.
50
- */
51
- private numNonSystemOpsBefore: number = 0;
52
-
53
- constructor(
54
- public lastOpSequenceNumber: number,
55
- /** Baseline attempt data used for comparisons with subsequent attempts/calculations. */
56
- attemptBaseline: ISummarizeAttempt,
57
- ) {
58
- this._lastAttempt = attemptBaseline;
59
- this._lastSuccessfulSummary = { ...attemptBaseline };
60
- }
61
-
62
- public updateWithLastSummaryAckInfo(lastSummary: Readonly<ISummarizeAttempt>) {
63
- this._lastAttempt = lastSummary;
64
- this._lastSuccessfulSummary = { ...lastSummary };
65
- }
66
-
67
- public recordAttempt(refSequenceNumber?: number) {
68
- this._lastAttempt = {
69
- refSequenceNumber: refSequenceNumber ?? this.lastOpSequenceNumber,
70
- summaryTime: Date.now(),
71
- };
72
-
73
- this.numSystemOpsBefore = this.numNonRuntimeOps;
74
- this.numNonSystemOpsBefore = this.numRuntimeOps;
75
- this.totalOpsSizeBefore = this.totalOpsSize;
76
- }
77
-
78
- public markLastAttemptAsSuccessful() {
79
- this._lastSuccessfulSummary = { ...this.lastAttempt };
80
-
81
- this.numNonRuntimeOps -= this.numSystemOpsBefore;
82
- this.numSystemOpsBefore = 0;
83
-
84
- this.numRuntimeOps -= this.numNonSystemOpsBefore;
85
- this.numNonSystemOpsBefore = 0;
86
-
87
- this.totalOpsSize -= this.totalOpsSizeBefore;
88
- this.totalOpsSizeBefore = 0;
89
- }
19
+ protected _lastAttempt: ISummarizeAttempt;
20
+ public get lastAttempt(): ISummarizeAttempt {
21
+ return this._lastAttempt;
22
+ }
23
+
24
+ protected _lastSuccessfulSummary: Readonly<ISummarizeAttempt>;
25
+ public get lastSuccessfulSummary(): Readonly<ISummarizeAttempt> {
26
+ return this._lastSuccessfulSummary;
27
+ }
28
+
29
+ public numNonRuntimeOps: number = 0;
30
+ public totalOpsSize: number = 0;
31
+ public hasMissingOpData: boolean = false;
32
+
33
+ /**
34
+ * Cumulative size in bytes of all the ops at the beginning of the summarization attempt.
35
+ * Is used to adjust totalOpsSize appropriately after successful summarization.
36
+ */
37
+ /** */
38
+ private totalOpsSizeBefore: number = 0;
39
+
40
+ /**
41
+ * Number of system ops at beginning of attempting to summarize.
42
+ * Is used to adjust numSystemOps appropriately after successful summarization.
43
+ */
44
+ private numSystemOpsBefore: number = 0;
45
+
46
+ public numRuntimeOps: number = 0;
47
+ /**
48
+ * Number of non-system ops at beginning of attempting to summarize.
49
+ * Is used to adjust numNonSystemOps appropriately after successful summarization.
50
+ */
51
+ private numNonSystemOpsBefore: number = 0;
52
+
53
+ constructor(
54
+ public lastOpSequenceNumber: number,
55
+ /** Baseline attempt data used for comparisons with subsequent attempts/calculations. */
56
+ attemptBaseline: ISummarizeAttempt,
57
+ ) {
58
+ this._lastAttempt = attemptBaseline;
59
+ this._lastSuccessfulSummary = { ...attemptBaseline };
60
+ }
61
+
62
+ public updateWithLastSummaryAckInfo(lastSummary: Readonly<ISummarizeAttempt>) {
63
+ this._lastAttempt = lastSummary;
64
+ this._lastSuccessfulSummary = { ...lastSummary };
65
+ }
66
+
67
+ public recordAttempt(refSequenceNumber?: number) {
68
+ this._lastAttempt = {
69
+ refSequenceNumber: refSequenceNumber ?? this.lastOpSequenceNumber,
70
+ summaryTime: Date.now(),
71
+ };
72
+
73
+ this.numSystemOpsBefore = this.numNonRuntimeOps;
74
+ this.numNonSystemOpsBefore = this.numRuntimeOps;
75
+ this.totalOpsSizeBefore = this.totalOpsSize;
76
+ }
77
+
78
+ public markLastAttemptAsSuccessful() {
79
+ this._lastSuccessfulSummary = { ...this.lastAttempt };
80
+
81
+ this.numNonRuntimeOps -= this.numSystemOpsBefore;
82
+ this.numSystemOpsBefore = 0;
83
+
84
+ this.numRuntimeOps -= this.numNonSystemOpsBefore;
85
+ this.numNonSystemOpsBefore = 0;
86
+
87
+ this.totalOpsSize -= this.totalOpsSizeBefore;
88
+ this.totalOpsSizeBefore = 0;
89
+ }
90
90
  }
91
91
 
92
92
  /**
93
93
  * This class contains the heuristics for when to summarize.
94
94
  */
95
95
  export class SummarizeHeuristicRunner implements ISummarizeHeuristicRunner {
96
- private readonly idleTimer: Timer | undefined;
97
- private readonly runSummarize: (reason: SummarizeReason) => void;
98
-
99
- public constructor(
100
- private readonly heuristicData: ISummarizeHeuristicData,
101
- private readonly configuration: ISummaryConfigurationHeuristics,
102
- trySummarize: (reason: SummarizeReason) => void,
103
- private readonly logger: ITelemetryLogger,
104
- private readonly summarizeStrategies: ISummaryHeuristicStrategy[] = getDefaultSummaryHeuristicStrategies(),
105
- ) {
106
- this.idleTimer = new Timer(
107
- this.idleTime,
108
- () => this.runSummarize("idle"));
109
-
110
- this.runSummarize = (reason: SummarizeReason) => {
111
- this.idleTimer?.clear();
112
-
113
- // We shouldn't attempt a summary if there are no new processed ops
114
- const opsSinceLastAck = this.opsSinceLastAck;
115
- if (opsSinceLastAck > 0) {
116
- trySummarize(reason);
117
- }
118
- };
119
- }
120
-
121
- public get idleTime(): number {
122
- const maxIdleTime = this.configuration.maxIdleTime;
123
- const minIdleTime = this.configuration.minIdleTime;
124
- const weightedNumOfOps = getWeightedNumberOfOps(
125
- this.heuristicData.numRuntimeOps,
126
- this.heuristicData.numNonRuntimeOps,
127
- this.configuration.runtimeOpWeight,
128
- this.configuration.nonRuntimeOpWeight,
129
- );
130
- const pToMaxOps = weightedNumOfOps * 1.0 / this.configuration.maxOps;
131
-
132
- if (pToMaxOps >= 1) {
133
- return minIdleTime;
134
- }
135
-
136
- // Return a ratioed idle time based on the percentage of ops
137
- return maxIdleTime - ((maxIdleTime - minIdleTime) * pToMaxOps);
138
- }
139
-
140
- public get opsSinceLastAck(): number {
141
- return this.heuristicData.lastOpSequenceNumber - this.heuristicData.lastSuccessfulSummary.refSequenceNumber;
142
- }
143
-
144
- public start() {
145
- this.idleTimer?.start(this.idleTime);
146
- }
147
-
148
- public run() {
149
- for (const strategy of this.summarizeStrategies) {
150
- if (strategy.shouldRunSummary(this.configuration, this.heuristicData)) {
151
- return this.runSummarize(strategy.summarizeReason);
152
- }
153
- }
154
-
155
- this.idleTimer?.restart(this.idleTime);
156
- }
157
-
158
- public shouldRunLastSummary(): boolean {
159
- const opsSinceLastAck = this.opsSinceLastAck;
160
- const minOpsForLastSummaryAttempt = this.configuration.minOpsForLastSummaryAttempt;
161
-
162
- this.logger.sendTelemetryEvent({
163
- eventName: "ShouldRunLastSummary",
164
- opsSinceLastAck,
165
- minOpsForLastSummaryAttempt,
166
- });
167
-
168
- return opsSinceLastAck >= minOpsForLastSummaryAttempt;
169
- }
170
-
171
- public dispose() {
172
- this.idleTimer?.clear();
173
- }
96
+ private readonly idleTimer: Timer | undefined;
97
+ private readonly runSummarize: (reason: SummarizeReason) => void;
98
+
99
+ public constructor(
100
+ private readonly heuristicData: ISummarizeHeuristicData,
101
+ private readonly configuration: ISummaryConfigurationHeuristics,
102
+ trySummarize: (reason: SummarizeReason) => void,
103
+ private readonly logger: ITelemetryLogger,
104
+ private readonly summarizeStrategies: ISummaryHeuristicStrategy[] = getDefaultSummaryHeuristicStrategies(),
105
+ ) {
106
+ this.idleTimer = new Timer(this.idleTime, () => this.runSummarize("idle"));
107
+
108
+ this.runSummarize = (reason: SummarizeReason) => {
109
+ this.idleTimer?.clear();
110
+
111
+ // We shouldn't attempt a summary if there are no new processed ops
112
+ const opsSinceLastAck = this.opsSinceLastAck;
113
+ if (opsSinceLastAck > 0) {
114
+ trySummarize(reason);
115
+ }
116
+ };
117
+ }
118
+
119
+ public get idleTime(): number {
120
+ const maxIdleTime = this.configuration.maxIdleTime;
121
+ const minIdleTime = this.configuration.minIdleTime;
122
+ const weightedNumOfOps = getWeightedNumberOfOps(
123
+ this.heuristicData.numRuntimeOps,
124
+ this.heuristicData.numNonRuntimeOps,
125
+ this.configuration.runtimeOpWeight,
126
+ this.configuration.nonRuntimeOpWeight,
127
+ );
128
+ const pToMaxOps = (weightedNumOfOps * 1.0) / this.configuration.maxOps;
129
+
130
+ if (pToMaxOps >= 1) {
131
+ return minIdleTime;
132
+ }
133
+
134
+ // Return a ratioed idle time based on the percentage of ops
135
+ return maxIdleTime - (maxIdleTime - minIdleTime) * pToMaxOps;
136
+ }
137
+
138
+ public get opsSinceLastAck(): number {
139
+ return (
140
+ this.heuristicData.lastOpSequenceNumber -
141
+ this.heuristicData.lastSuccessfulSummary.refSequenceNumber
142
+ );
143
+ }
144
+
145
+ public start() {
146
+ this.idleTimer?.start(this.idleTime);
147
+ }
148
+
149
+ public run() {
150
+ for (const strategy of this.summarizeStrategies) {
151
+ if (strategy.shouldRunSummary(this.configuration, this.heuristicData)) {
152
+ return this.runSummarize(strategy.summarizeReason);
153
+ }
154
+ }
155
+
156
+ this.idleTimer?.restart(this.idleTime);
157
+ }
158
+
159
+ public shouldRunLastSummary(): boolean {
160
+ const opsSinceLastAck = this.opsSinceLastAck;
161
+ const minOpsForLastSummaryAttempt = this.configuration.minOpsForLastSummaryAttempt;
162
+
163
+ this.logger.sendTelemetryEvent({
164
+ eventName: "ShouldRunLastSummary",
165
+ opsSinceLastAck,
166
+ minOpsForLastSummaryAttempt,
167
+ });
168
+
169
+ return opsSinceLastAck >= minOpsForLastSummaryAttempt;
170
+ }
171
+
172
+ public dispose() {
173
+ this.idleTimer?.clear();
174
+ }
174
175
  }
175
176
 
176
177
  /** Strategy used to run a summary when it's been a while since our last successful summary */
177
178
  class MaxTimeSummaryHeuristicStrategy implements ISummaryHeuristicStrategy {
178
- public readonly summarizeReason: Readonly<SummarizeReason> = "maxTime";
179
-
180
- public shouldRunSummary(
181
- configuration: ISummaryConfigurationHeuristics,
182
- heuristicData: ISummarizeHeuristicData,
183
- ): boolean {
184
- const timeSinceLastSummary = Date.now() - heuristicData.lastSuccessfulSummary.summaryTime;
185
- return timeSinceLastSummary > configuration.maxTime;
186
- }
179
+ public readonly summarizeReason: Readonly<SummarizeReason> = "maxTime";
180
+
181
+ public shouldRunSummary(
182
+ configuration: ISummaryConfigurationHeuristics,
183
+ heuristicData: ISummarizeHeuristicData,
184
+ ): boolean {
185
+ const timeSinceLastSummary = Date.now() - heuristicData.lastSuccessfulSummary.summaryTime;
186
+ return timeSinceLastSummary > configuration.maxTime;
187
+ }
187
188
  }
188
189
 
189
190
  function getWeightedNumberOfOps(
190
- runtimeOpCount: number,
191
- nonRuntimeOpCount: number,
192
- runtimeOpWeight: number,
193
- nonRuntimeOpWeight: number,
191
+ runtimeOpCount: number,
192
+ nonRuntimeOpCount: number,
193
+ runtimeOpWeight: number,
194
+ nonRuntimeOpWeight: number,
194
195
  ): number {
195
- return (runtimeOpWeight * runtimeOpCount)
196
- + (nonRuntimeOpWeight * nonRuntimeOpCount);
196
+ return runtimeOpWeight * runtimeOpCount + nonRuntimeOpWeight * nonRuntimeOpCount;
197
197
  }
198
198
 
199
199
  /** Strategy used to do a weighted analysis on the ops we've processed since the last successful summary */
200
200
  class WeightedOpsSummaryHeuristicStrategy implements ISummaryHeuristicStrategy {
201
- public readonly summarizeReason: Readonly<SummarizeReason> = "maxOps";
202
-
203
- public shouldRunSummary(
204
- configuration: ISummaryConfigurationHeuristics,
205
- heuristicData: ISummarizeHeuristicData,
206
- ): boolean {
207
- const weightedNumOfOps = getWeightedNumberOfOps(
208
- heuristicData.numRuntimeOps,
209
- heuristicData.numNonRuntimeOps,
210
- configuration.runtimeOpWeight,
211
- configuration.nonRuntimeOpWeight,
212
- );
213
- return weightedNumOfOps > configuration.maxOps;
214
- }
201
+ public readonly summarizeReason: Readonly<SummarizeReason> = "maxOps";
202
+
203
+ public shouldRunSummary(
204
+ configuration: ISummaryConfigurationHeuristics,
205
+ heuristicData: ISummarizeHeuristicData,
206
+ ): boolean {
207
+ const weightedNumOfOps = getWeightedNumberOfOps(
208
+ heuristicData.numRuntimeOps,
209
+ heuristicData.numNonRuntimeOps,
210
+ configuration.runtimeOpWeight,
211
+ configuration.nonRuntimeOpWeight,
212
+ );
213
+ return weightedNumOfOps > configuration.maxOps;
214
+ }
215
215
  }
216
216
 
217
217
  function getDefaultSummaryHeuristicStrategies() {
218
- return [
219
- new MaxTimeSummaryHeuristicStrategy(),
220
- new WeightedOpsSummaryHeuristicStrategy(),
221
- ];
218
+ return [new MaxTimeSummaryHeuristicStrategy(), new WeightedOpsSummaryHeuristicStrategy()];
222
219
  }