@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.
- package/.eslintrc.js +19 -19
- package/.mocharc.js +2 -2
- package/api-extractor.json +2 -2
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +2 -1
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +9 -2
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +80 -33
- package/dist/blobManager.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +11 -9
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js +3 -1
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +11 -1
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +116 -72
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +11 -9
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +18 -13
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +68 -55
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +7 -3
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +3 -1
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/dataStores.d.ts +26 -1
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +103 -18
- package/dist/dataStores.js.map +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +8 -3
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/garbageCollection.d.ts +33 -14
- package/dist/garbageCollection.d.ts.map +1 -1
- package/dist/garbageCollection.js +178 -92
- package/dist/garbageCollection.js.map +1 -1
- package/dist/garbageCollectionConstants.d.ts +1 -0
- package/dist/garbageCollectionConstants.d.ts.map +1 -1
- package/dist/garbageCollectionConstants.js +4 -1
- package/dist/garbageCollectionConstants.js.map +1 -1
- package/dist/garbageCollectionHelpers.d.ts +26 -0
- package/dist/garbageCollectionHelpers.d.ts.map +1 -0
- package/dist/garbageCollectionHelpers.js +45 -0
- package/dist/garbageCollectionHelpers.js.map +1 -0
- package/dist/gcSweepReadyUsageDetection.d.ts +5 -5
- package/dist/gcSweepReadyUsageDetection.d.ts.map +1 -1
- package/dist/gcSweepReadyUsageDetection.js +14 -10
- package/dist/gcSweepReadyUsageDetection.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts +5 -5
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js +19 -12
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +0 -4
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +7 -43
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +4 -1
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +20 -19
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/opProperties.d.ts.map +1 -1
- package/dist/opProperties.js +1 -3
- package/dist/opProperties.js.map +1 -1
- package/dist/orderedClientElection.d.ts.map +1 -1
- package/dist/orderedClientElection.js +10 -4
- package/dist/orderedClientElection.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +7 -0
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +7 -4
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/runningSummarizer.d.ts.map +1 -1
- package/dist/runningSummarizer.js +34 -21
- package/dist/runningSummarizer.js.map +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +3 -2
- package/dist/scheduleManager.js.map +1 -1
- package/dist/serializedSnapshotStorage.d.ts +2 -2
- package/dist/serializedSnapshotStorage.d.ts.map +1 -1
- package/dist/serializedSnapshotStorage.js +5 -3
- package/dist/serializedSnapshotStorage.js.map +1 -1
- package/dist/summarizer.d.ts +2 -2
- package/dist/summarizer.d.ts.map +1 -1
- package/dist/summarizer.js +37 -17
- package/dist/summarizer.js.map +1 -1
- package/dist/summarizerClientElection.d.ts.map +1 -1
- package/dist/summarizerClientElection.js.map +1 -1
- package/dist/summarizerHandle.d.ts.map +1 -1
- package/dist/summarizerHandle.js.map +1 -1
- package/dist/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summarizerHeuristics.js +6 -9
- package/dist/summarizerHeuristics.js.map +1 -1
- package/dist/summarizerTypes.d.ts +21 -21
- package/dist/summarizerTypes.d.ts.map +1 -1
- package/dist/summarizerTypes.js.map +1 -1
- package/dist/summaryCollection.d.ts.map +1 -1
- package/dist/summaryCollection.js +18 -8
- package/dist/summaryCollection.js.map +1 -1
- package/dist/summaryFormat.d.ts +5 -2
- package/dist/summaryFormat.d.ts.map +1 -1
- package/dist/summaryFormat.js +18 -10
- package/dist/summaryFormat.js.map +1 -1
- package/dist/summaryGenerator.d.ts.map +1 -1
- package/dist/summaryGenerator.js +35 -16
- package/dist/summaryGenerator.js.map +1 -1
- package/dist/summaryManager.d.ts.map +1 -1
- package/dist/summaryManager.js +21 -9
- package/dist/summaryManager.js.map +1 -1
- package/dist/throttler.d.ts +2 -2
- package/dist/throttler.d.ts.map +1 -1
- package/dist/throttler.js +4 -4
- package/dist/throttler.js.map +1 -1
- package/garbageCollection.md +15 -2
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -1
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +9 -2
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +82 -35
- package/lib/blobManager.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +11 -9
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js +3 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +11 -1
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +122 -78
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +11 -9
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +18 -13
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +71 -58
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +7 -3
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -1
- package/lib/dataStoreRegistry.js +3 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/dataStores.d.ts +26 -1
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +109 -24
- package/lib/dataStores.js.map +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +9 -4
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/garbageCollection.d.ts +33 -14
- package/lib/garbageCollection.d.ts.map +1 -1
- package/lib/garbageCollection.js +180 -94
- package/lib/garbageCollection.js.map +1 -1
- package/lib/garbageCollectionConstants.d.ts +1 -0
- package/lib/garbageCollectionConstants.d.ts.map +1 -1
- package/lib/garbageCollectionConstants.js +3 -0
- package/lib/garbageCollectionConstants.js.map +1 -1
- package/lib/garbageCollectionHelpers.d.ts +26 -0
- package/lib/garbageCollectionHelpers.d.ts.map +1 -0
- package/lib/garbageCollectionHelpers.js +40 -0
- package/lib/garbageCollectionHelpers.js.map +1 -0
- package/lib/gcSweepReadyUsageDetection.d.ts +5 -5
- package/lib/gcSweepReadyUsageDetection.d.ts.map +1 -1
- package/lib/gcSweepReadyUsageDetection.js +14 -10
- package/lib/gcSweepReadyUsageDetection.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts +5 -5
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js +19 -12
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +0 -4
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +7 -43
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +5 -2
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +20 -19
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/opProperties.d.ts.map +1 -1
- package/lib/opProperties.js +1 -3
- package/lib/opProperties.js.map +1 -1
- package/lib/orderedClientElection.d.ts.map +1 -1
- package/lib/orderedClientElection.js +10 -4
- package/lib/orderedClientElection.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +7 -0
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +7 -4
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/runningSummarizer.d.ts.map +1 -1
- package/lib/runningSummarizer.js +35 -22
- package/lib/runningSummarizer.js.map +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +3 -2
- package/lib/scheduleManager.js.map +1 -1
- package/lib/serializedSnapshotStorage.d.ts +2 -2
- package/lib/serializedSnapshotStorage.d.ts.map +1 -1
- package/lib/serializedSnapshotStorage.js +5 -3
- package/lib/serializedSnapshotStorage.js.map +1 -1
- package/lib/summarizer.d.ts +2 -2
- package/lib/summarizer.d.ts.map +1 -1
- package/lib/summarizer.js +37 -17
- package/lib/summarizer.js.map +1 -1
- package/lib/summarizerClientElection.d.ts.map +1 -1
- package/lib/summarizerClientElection.js.map +1 -1
- package/lib/summarizerHandle.d.ts.map +1 -1
- package/lib/summarizerHandle.js.map +1 -1
- package/lib/summarizerHeuristics.d.ts.map +1 -1
- package/lib/summarizerHeuristics.js +6 -9
- package/lib/summarizerHeuristics.js.map +1 -1
- package/lib/summarizerTypes.d.ts +21 -21
- package/lib/summarizerTypes.d.ts.map +1 -1
- package/lib/summarizerTypes.js.map +1 -1
- package/lib/summaryCollection.d.ts.map +1 -1
- package/lib/summaryCollection.js +18 -8
- package/lib/summaryCollection.js.map +1 -1
- package/lib/summaryFormat.d.ts +5 -2
- package/lib/summaryFormat.d.ts.map +1 -1
- package/lib/summaryFormat.js +20 -12
- package/lib/summaryFormat.js.map +1 -1
- package/lib/summaryGenerator.d.ts.map +1 -1
- package/lib/summaryGenerator.js +35 -16
- package/lib/summaryGenerator.js.map +1 -1
- package/lib/summaryManager.d.ts.map +1 -1
- package/lib/summaryManager.js +21 -9
- package/lib/summaryManager.js.map +1 -1
- package/lib/throttler.d.ts +2 -2
- package/lib/throttler.d.ts.map +1 -1
- package/lib/throttler.js +4 -4
- package/lib/throttler.js.map +1 -1
- package/package.json +121 -115
- package/prettier.config.cjs +1 -1
- package/src/batchTracker.ts +54 -49
- package/src/blobManager.ts +793 -672
- package/src/connectionTelemetry.ts +280 -249
- package/src/containerHandleContext.ts +27 -29
- package/src/containerRuntime.ts +3168 -2988
- package/src/dataStore.ts +172 -159
- package/src/dataStoreContext.ts +1098 -1055
- package/src/dataStoreContexts.ts +178 -161
- package/src/dataStoreRegistry.ts +25 -20
- package/src/dataStores.ts +884 -728
- package/src/deltaScheduler.ts +158 -150
- package/src/garbageCollection.ts +1860 -1688
- package/src/garbageCollectionConstants.ts +3 -0
- package/src/garbageCollectionHelpers.ts +61 -0
- package/src/gcSweepReadyUsageDetection.ts +89 -83
- package/src/index.ts +67 -66
- package/src/opLifecycle/README.md +152 -0
- package/src/opLifecycle/batchManager.ts +145 -141
- package/src/opLifecycle/definitions.ts +29 -29
- package/src/opLifecycle/index.ts +5 -5
- package/src/opLifecycle/opCompressor.ts +54 -53
- package/src/opLifecycle/opDecompressor.ts +100 -128
- package/src/opLifecycle/opSplitter.ts +214 -188
- package/src/opLifecycle/outbox.ts +204 -195
- package/src/opLifecycle/remoteMessageProcessor.ts +62 -62
- package/src/opProperties.ts +11 -9
- package/src/orderedClientElection.ts +489 -457
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +384 -338
- package/src/runWhileConnectedCoordinator.ts +78 -71
- package/src/runningSummarizer.ts +619 -581
- package/src/scheduleManager.ts +299 -269
- package/src/serializedSnapshotStorage.ts +126 -112
- package/src/summarizer.ts +417 -381
- package/src/summarizerClientElection.ts +107 -100
- package/src/summarizerHandle.ts +11 -9
- package/src/summarizerHeuristics.ts +183 -186
- package/src/summarizerTypes.ts +344 -330
- package/src/summaryCollection.ts +378 -349
- package/src/summaryFormat.ts +165 -143
- package/src/summaryGenerator.ts +465 -410
- package/src/summaryManager.ts +377 -348
- package/src/throttler.ts +131 -122
- package/tsconfig.esnext.json +6 -6
- package/tsconfig.json +9 -13
- package/dist/garbageCollectionTombstoneUtils.d.ts +0 -14
- package/dist/garbageCollectionTombstoneUtils.d.ts.map +0 -1
- package/dist/garbageCollectionTombstoneUtils.js +0 -23
- package/dist/garbageCollectionTombstoneUtils.js.map +0 -1
- package/lib/garbageCollectionTombstoneUtils.d.ts +0 -14
- package/lib/garbageCollectionTombstoneUtils.d.ts.map +0 -1
- package/lib/garbageCollectionTombstoneUtils.js +0 -19
- package/lib/garbageCollectionTombstoneUtils.js.map +0 -1
- 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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
191
|
+
runtimeOpCount: number,
|
|
192
|
+
nonRuntimeOpCount: number,
|
|
193
|
+
runtimeOpWeight: number,
|
|
194
|
+
nonRuntimeOpWeight: number,
|
|
194
195
|
): number {
|
|
195
|
-
|
|
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
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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
|
-
|
|
219
|
-
new MaxTimeSummaryHeuristicStrategy(),
|
|
220
|
-
new WeightedOpsSummaryHeuristicStrategy(),
|
|
221
|
-
];
|
|
218
|
+
return [new MaxTimeSummaryHeuristicStrategy(), new WeightedOpsSummaryHeuristicStrategy()];
|
|
222
219
|
}
|