@fluidframework/container-runtime 2.0.0-internal.3.0.5 → 2.0.0-internal.3.1.1

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 (329) hide show
  1. package/.eslintrc.js +19 -19
  2. package/.mocharc.js +2 -2
  3. package/api-extractor.json +2 -2
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +2 -1
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +9 -2
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +80 -33
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/connectionTelemetry.d.ts.map +1 -1
  12. package/dist/connectionTelemetry.js +11 -9
  13. package/dist/connectionTelemetry.js.map +1 -1
  14. package/dist/containerHandleContext.d.ts.map +1 -1
  15. package/dist/containerHandleContext.js +3 -1
  16. package/dist/containerHandleContext.js.map +1 -1
  17. package/dist/containerRuntime.d.ts +11 -1
  18. package/dist/containerRuntime.d.ts.map +1 -1
  19. package/dist/containerRuntime.js +116 -72
  20. package/dist/containerRuntime.js.map +1 -1
  21. package/dist/dataStore.d.ts.map +1 -1
  22. package/dist/dataStore.js +11 -9
  23. package/dist/dataStore.js.map +1 -1
  24. package/dist/dataStoreContext.d.ts +18 -13
  25. package/dist/dataStoreContext.d.ts.map +1 -1
  26. package/dist/dataStoreContext.js +68 -55
  27. package/dist/dataStoreContext.js.map +1 -1
  28. package/dist/dataStoreContexts.d.ts.map +1 -1
  29. package/dist/dataStoreContexts.js +7 -3
  30. package/dist/dataStoreContexts.js.map +1 -1
  31. package/dist/dataStoreRegistry.d.ts.map +1 -1
  32. package/dist/dataStoreRegistry.js +3 -1
  33. package/dist/dataStoreRegistry.js.map +1 -1
  34. package/dist/dataStores.d.ts +26 -1
  35. package/dist/dataStores.d.ts.map +1 -1
  36. package/dist/dataStores.js +103 -18
  37. package/dist/dataStores.js.map +1 -1
  38. package/dist/deltaScheduler.d.ts.map +1 -1
  39. package/dist/deltaScheduler.js +8 -3
  40. package/dist/deltaScheduler.js.map +1 -1
  41. package/dist/garbageCollection.d.ts +33 -14
  42. package/dist/garbageCollection.d.ts.map +1 -1
  43. package/dist/garbageCollection.js +178 -92
  44. package/dist/garbageCollection.js.map +1 -1
  45. package/dist/garbageCollectionConstants.d.ts +1 -0
  46. package/dist/garbageCollectionConstants.d.ts.map +1 -1
  47. package/dist/garbageCollectionConstants.js +4 -1
  48. package/dist/garbageCollectionConstants.js.map +1 -1
  49. package/dist/garbageCollectionHelpers.d.ts +26 -0
  50. package/dist/garbageCollectionHelpers.d.ts.map +1 -0
  51. package/dist/garbageCollectionHelpers.js +45 -0
  52. package/dist/garbageCollectionHelpers.js.map +1 -0
  53. package/dist/gcSweepReadyUsageDetection.d.ts +5 -5
  54. package/dist/gcSweepReadyUsageDetection.d.ts.map +1 -1
  55. package/dist/gcSweepReadyUsageDetection.js +14 -10
  56. package/dist/gcSweepReadyUsageDetection.js.map +1 -1
  57. package/dist/index.d.ts +2 -2
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/opLifecycle/batchManager.d.ts +5 -5
  61. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  62. package/dist/opLifecycle/batchManager.js +19 -12
  63. package/dist/opLifecycle/batchManager.js.map +1 -1
  64. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  65. package/dist/opLifecycle/definitions.js.map +1 -1
  66. package/dist/opLifecycle/index.d.ts.map +1 -1
  67. package/dist/opLifecycle/index.js.map +1 -1
  68. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  69. package/dist/opLifecycle/opCompressor.js.map +1 -1
  70. package/dist/opLifecycle/opDecompressor.d.ts +0 -4
  71. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  72. package/dist/opLifecycle/opDecompressor.js +7 -43
  73. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  74. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  75. package/dist/opLifecycle/opSplitter.js +4 -1
  76. package/dist/opLifecycle/opSplitter.js.map +1 -1
  77. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  78. package/dist/opLifecycle/outbox.js +20 -19
  79. package/dist/opLifecycle/outbox.js.map +1 -1
  80. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  81. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  82. package/dist/opProperties.d.ts.map +1 -1
  83. package/dist/opProperties.js +1 -3
  84. package/dist/opProperties.js.map +1 -1
  85. package/dist/orderedClientElection.d.ts.map +1 -1
  86. package/dist/orderedClientElection.js +10 -4
  87. package/dist/orderedClientElection.js.map +1 -1
  88. package/dist/packageVersion.d.ts +1 -1
  89. package/dist/packageVersion.js +1 -1
  90. package/dist/packageVersion.js.map +1 -1
  91. package/dist/pendingStateManager.d.ts +7 -0
  92. package/dist/pendingStateManager.d.ts.map +1 -1
  93. package/dist/pendingStateManager.js +7 -4
  94. package/dist/pendingStateManager.js.map +1 -1
  95. package/dist/runWhileConnectedCoordinator.d.ts.map +1 -1
  96. package/dist/runWhileConnectedCoordinator.js.map +1 -1
  97. package/dist/runningSummarizer.d.ts.map +1 -1
  98. package/dist/runningSummarizer.js +34 -21
  99. package/dist/runningSummarizer.js.map +1 -1
  100. package/dist/scheduleManager.d.ts.map +1 -1
  101. package/dist/scheduleManager.js +3 -2
  102. package/dist/scheduleManager.js.map +1 -1
  103. package/dist/serializedSnapshotStorage.d.ts +2 -2
  104. package/dist/serializedSnapshotStorage.d.ts.map +1 -1
  105. package/dist/serializedSnapshotStorage.js +5 -3
  106. package/dist/serializedSnapshotStorage.js.map +1 -1
  107. package/dist/summarizer.d.ts +2 -2
  108. package/dist/summarizer.d.ts.map +1 -1
  109. package/dist/summarizer.js +37 -17
  110. package/dist/summarizer.js.map +1 -1
  111. package/dist/summarizerClientElection.d.ts.map +1 -1
  112. package/dist/summarizerClientElection.js.map +1 -1
  113. package/dist/summarizerHandle.d.ts.map +1 -1
  114. package/dist/summarizerHandle.js.map +1 -1
  115. package/dist/summarizerHeuristics.d.ts.map +1 -1
  116. package/dist/summarizerHeuristics.js +6 -9
  117. package/dist/summarizerHeuristics.js.map +1 -1
  118. package/dist/summarizerTypes.d.ts +21 -21
  119. package/dist/summarizerTypes.d.ts.map +1 -1
  120. package/dist/summarizerTypes.js.map +1 -1
  121. package/dist/summaryCollection.d.ts.map +1 -1
  122. package/dist/summaryCollection.js +18 -8
  123. package/dist/summaryCollection.js.map +1 -1
  124. package/dist/summaryFormat.d.ts +5 -2
  125. package/dist/summaryFormat.d.ts.map +1 -1
  126. package/dist/summaryFormat.js +18 -10
  127. package/dist/summaryFormat.js.map +1 -1
  128. package/dist/summaryGenerator.d.ts.map +1 -1
  129. package/dist/summaryGenerator.js +35 -16
  130. package/dist/summaryGenerator.js.map +1 -1
  131. package/dist/summaryManager.d.ts.map +1 -1
  132. package/dist/summaryManager.js +21 -9
  133. package/dist/summaryManager.js.map +1 -1
  134. package/dist/throttler.d.ts +2 -2
  135. package/dist/throttler.d.ts.map +1 -1
  136. package/dist/throttler.js +4 -4
  137. package/dist/throttler.js.map +1 -1
  138. package/garbageCollection.md +15 -2
  139. package/lib/batchTracker.d.ts.map +1 -1
  140. package/lib/batchTracker.js +2 -1
  141. package/lib/batchTracker.js.map +1 -1
  142. package/lib/blobManager.d.ts +9 -2
  143. package/lib/blobManager.d.ts.map +1 -1
  144. package/lib/blobManager.js +82 -35
  145. package/lib/blobManager.js.map +1 -1
  146. package/lib/connectionTelemetry.d.ts.map +1 -1
  147. package/lib/connectionTelemetry.js +11 -9
  148. package/lib/connectionTelemetry.js.map +1 -1
  149. package/lib/containerHandleContext.d.ts.map +1 -1
  150. package/lib/containerHandleContext.js +3 -1
  151. package/lib/containerHandleContext.js.map +1 -1
  152. package/lib/containerRuntime.d.ts +11 -1
  153. package/lib/containerRuntime.d.ts.map +1 -1
  154. package/lib/containerRuntime.js +122 -78
  155. package/lib/containerRuntime.js.map +1 -1
  156. package/lib/dataStore.d.ts.map +1 -1
  157. package/lib/dataStore.js +11 -9
  158. package/lib/dataStore.js.map +1 -1
  159. package/lib/dataStoreContext.d.ts +18 -13
  160. package/lib/dataStoreContext.d.ts.map +1 -1
  161. package/lib/dataStoreContext.js +71 -58
  162. package/lib/dataStoreContext.js.map +1 -1
  163. package/lib/dataStoreContexts.d.ts.map +1 -1
  164. package/lib/dataStoreContexts.js +7 -3
  165. package/lib/dataStoreContexts.js.map +1 -1
  166. package/lib/dataStoreRegistry.d.ts.map +1 -1
  167. package/lib/dataStoreRegistry.js +3 -1
  168. package/lib/dataStoreRegistry.js.map +1 -1
  169. package/lib/dataStores.d.ts +26 -1
  170. package/lib/dataStores.d.ts.map +1 -1
  171. package/lib/dataStores.js +109 -24
  172. package/lib/dataStores.js.map +1 -1
  173. package/lib/deltaScheduler.d.ts.map +1 -1
  174. package/lib/deltaScheduler.js +9 -4
  175. package/lib/deltaScheduler.js.map +1 -1
  176. package/lib/garbageCollection.d.ts +33 -14
  177. package/lib/garbageCollection.d.ts.map +1 -1
  178. package/lib/garbageCollection.js +180 -94
  179. package/lib/garbageCollection.js.map +1 -1
  180. package/lib/garbageCollectionConstants.d.ts +1 -0
  181. package/lib/garbageCollectionConstants.d.ts.map +1 -1
  182. package/lib/garbageCollectionConstants.js +3 -0
  183. package/lib/garbageCollectionConstants.js.map +1 -1
  184. package/lib/garbageCollectionHelpers.d.ts +26 -0
  185. package/lib/garbageCollectionHelpers.d.ts.map +1 -0
  186. package/lib/garbageCollectionHelpers.js +40 -0
  187. package/lib/garbageCollectionHelpers.js.map +1 -0
  188. package/lib/gcSweepReadyUsageDetection.d.ts +5 -5
  189. package/lib/gcSweepReadyUsageDetection.d.ts.map +1 -1
  190. package/lib/gcSweepReadyUsageDetection.js +14 -10
  191. package/lib/gcSweepReadyUsageDetection.js.map +1 -1
  192. package/lib/index.d.ts +2 -2
  193. package/lib/index.d.ts.map +1 -1
  194. package/lib/index.js +1 -1
  195. package/lib/index.js.map +1 -1
  196. package/lib/opLifecycle/batchManager.d.ts +5 -5
  197. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  198. package/lib/opLifecycle/batchManager.js +19 -12
  199. package/lib/opLifecycle/batchManager.js.map +1 -1
  200. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  201. package/lib/opLifecycle/definitions.js.map +1 -1
  202. package/lib/opLifecycle/index.d.ts.map +1 -1
  203. package/lib/opLifecycle/index.js.map +1 -1
  204. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  205. package/lib/opLifecycle/opCompressor.js.map +1 -1
  206. package/lib/opLifecycle/opDecompressor.d.ts +0 -4
  207. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  208. package/lib/opLifecycle/opDecompressor.js +7 -43
  209. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  210. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  211. package/lib/opLifecycle/opSplitter.js +5 -2
  212. package/lib/opLifecycle/opSplitter.js.map +1 -1
  213. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  214. package/lib/opLifecycle/outbox.js +20 -19
  215. package/lib/opLifecycle/outbox.js.map +1 -1
  216. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  217. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  218. package/lib/opProperties.d.ts.map +1 -1
  219. package/lib/opProperties.js +1 -3
  220. package/lib/opProperties.js.map +1 -1
  221. package/lib/orderedClientElection.d.ts.map +1 -1
  222. package/lib/orderedClientElection.js +10 -4
  223. package/lib/orderedClientElection.js.map +1 -1
  224. package/lib/packageVersion.d.ts +1 -1
  225. package/lib/packageVersion.js +1 -1
  226. package/lib/packageVersion.js.map +1 -1
  227. package/lib/pendingStateManager.d.ts +7 -0
  228. package/lib/pendingStateManager.d.ts.map +1 -1
  229. package/lib/pendingStateManager.js +7 -4
  230. package/lib/pendingStateManager.js.map +1 -1
  231. package/lib/runWhileConnectedCoordinator.d.ts.map +1 -1
  232. package/lib/runWhileConnectedCoordinator.js.map +1 -1
  233. package/lib/runningSummarizer.d.ts.map +1 -1
  234. package/lib/runningSummarizer.js +35 -22
  235. package/lib/runningSummarizer.js.map +1 -1
  236. package/lib/scheduleManager.d.ts.map +1 -1
  237. package/lib/scheduleManager.js +3 -2
  238. package/lib/scheduleManager.js.map +1 -1
  239. package/lib/serializedSnapshotStorage.d.ts +2 -2
  240. package/lib/serializedSnapshotStorage.d.ts.map +1 -1
  241. package/lib/serializedSnapshotStorage.js +5 -3
  242. package/lib/serializedSnapshotStorage.js.map +1 -1
  243. package/lib/summarizer.d.ts +2 -2
  244. package/lib/summarizer.d.ts.map +1 -1
  245. package/lib/summarizer.js +37 -17
  246. package/lib/summarizer.js.map +1 -1
  247. package/lib/summarizerClientElection.d.ts.map +1 -1
  248. package/lib/summarizerClientElection.js.map +1 -1
  249. package/lib/summarizerHandle.d.ts.map +1 -1
  250. package/lib/summarizerHandle.js.map +1 -1
  251. package/lib/summarizerHeuristics.d.ts.map +1 -1
  252. package/lib/summarizerHeuristics.js +6 -9
  253. package/lib/summarizerHeuristics.js.map +1 -1
  254. package/lib/summarizerTypes.d.ts +21 -21
  255. package/lib/summarizerTypes.d.ts.map +1 -1
  256. package/lib/summarizerTypes.js.map +1 -1
  257. package/lib/summaryCollection.d.ts.map +1 -1
  258. package/lib/summaryCollection.js +18 -8
  259. package/lib/summaryCollection.js.map +1 -1
  260. package/lib/summaryFormat.d.ts +5 -2
  261. package/lib/summaryFormat.d.ts.map +1 -1
  262. package/lib/summaryFormat.js +20 -12
  263. package/lib/summaryFormat.js.map +1 -1
  264. package/lib/summaryGenerator.d.ts.map +1 -1
  265. package/lib/summaryGenerator.js +35 -16
  266. package/lib/summaryGenerator.js.map +1 -1
  267. package/lib/summaryManager.d.ts.map +1 -1
  268. package/lib/summaryManager.js +21 -9
  269. package/lib/summaryManager.js.map +1 -1
  270. package/lib/throttler.d.ts +2 -2
  271. package/lib/throttler.d.ts.map +1 -1
  272. package/lib/throttler.js +4 -4
  273. package/lib/throttler.js.map +1 -1
  274. package/package.json +121 -115
  275. package/prettier.config.cjs +1 -1
  276. package/src/batchTracker.ts +54 -49
  277. package/src/blobManager.ts +793 -672
  278. package/src/connectionTelemetry.ts +280 -249
  279. package/src/containerHandleContext.ts +27 -29
  280. package/src/containerRuntime.ts +3168 -2988
  281. package/src/dataStore.ts +172 -159
  282. package/src/dataStoreContext.ts +1098 -1055
  283. package/src/dataStoreContexts.ts +178 -161
  284. package/src/dataStoreRegistry.ts +25 -20
  285. package/src/dataStores.ts +884 -728
  286. package/src/deltaScheduler.ts +158 -150
  287. package/src/garbageCollection.ts +1860 -1688
  288. package/src/garbageCollectionConstants.ts +3 -0
  289. package/src/garbageCollectionHelpers.ts +61 -0
  290. package/src/gcSweepReadyUsageDetection.ts +89 -83
  291. package/src/index.ts +67 -66
  292. package/src/opLifecycle/README.md +152 -0
  293. package/src/opLifecycle/batchManager.ts +145 -141
  294. package/src/opLifecycle/definitions.ts +29 -29
  295. package/src/opLifecycle/index.ts +5 -5
  296. package/src/opLifecycle/opCompressor.ts +54 -53
  297. package/src/opLifecycle/opDecompressor.ts +100 -128
  298. package/src/opLifecycle/opSplitter.ts +214 -188
  299. package/src/opLifecycle/outbox.ts +204 -195
  300. package/src/opLifecycle/remoteMessageProcessor.ts +62 -62
  301. package/src/opProperties.ts +11 -9
  302. package/src/orderedClientElection.ts +489 -457
  303. package/src/packageVersion.ts +1 -1
  304. package/src/pendingStateManager.ts +384 -338
  305. package/src/runWhileConnectedCoordinator.ts +78 -71
  306. package/src/runningSummarizer.ts +619 -581
  307. package/src/scheduleManager.ts +299 -269
  308. package/src/serializedSnapshotStorage.ts +126 -112
  309. package/src/summarizer.ts +417 -381
  310. package/src/summarizerClientElection.ts +107 -100
  311. package/src/summarizerHandle.ts +11 -9
  312. package/src/summarizerHeuristics.ts +183 -186
  313. package/src/summarizerTypes.ts +344 -330
  314. package/src/summaryCollection.ts +378 -349
  315. package/src/summaryFormat.ts +165 -143
  316. package/src/summaryGenerator.ts +465 -410
  317. package/src/summaryManager.ts +377 -348
  318. package/src/throttler.ts +131 -122
  319. package/tsconfig.esnext.json +6 -6
  320. package/tsconfig.json +9 -13
  321. package/dist/garbageCollectionTombstoneUtils.d.ts +0 -14
  322. package/dist/garbageCollectionTombstoneUtils.d.ts.map +0 -1
  323. package/dist/garbageCollectionTombstoneUtils.js +0 -23
  324. package/dist/garbageCollectionTombstoneUtils.js.map +0 -1
  325. package/lib/garbageCollectionTombstoneUtils.d.ts +0 -14
  326. package/lib/garbageCollectionTombstoneUtils.d.ts.map +0 -1
  327. package/lib/garbageCollectionTombstoneUtils.js +0 -19
  328. package/lib/garbageCollectionTombstoneUtils.js.map +0 -1
  329. package/src/garbageCollectionTombstoneUtils.ts +0 -28
@@ -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
  }