@fluidframework/container-runtime 2.23.0-325054 → 2.30.0
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/CHANGELOG.md +52 -0
- package/api-report/container-runtime.legacy.alpha.api.md +0 -246
- package/dist/blobManager/blobManager.d.ts +11 -9
- package/dist/blobManager/blobManager.d.ts.map +1 -1
- package/dist/blobManager/blobManager.js +38 -39
- package/dist/blobManager/blobManager.js.map +1 -1
- package/dist/blobManager/blobManagerSnapSum.d.ts +2 -4
- package/dist/blobManager/blobManagerSnapSum.d.ts.map +1 -1
- package/dist/blobManager/blobManagerSnapSum.js +6 -6
- package/dist/blobManager/blobManagerSnapSum.js.map +1 -1
- package/dist/channelCollection.d.ts +1 -7
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +1 -26
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +0 -43
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts +21 -141
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +49 -290
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStoreContext.d.ts +0 -13
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +2 -25
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +2 -20
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +0 -2
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +8 -24
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +1 -3
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +1 -4
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +0 -1
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +4 -16
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +0 -29
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/signalTelemetryProcessing.d.ts +33 -0
- package/dist/signalTelemetryProcessing.d.ts.map +1 -0
- package/dist/signalTelemetryProcessing.js +149 -0
- package/dist/signalTelemetryProcessing.js.map +1 -0
- package/dist/summary/documentSchema.d.ts +7 -31
- package/dist/summary/documentSchema.d.ts.map +1 -1
- package/dist/summary/documentSchema.js +2 -18
- package/dist/summary/documentSchema.js.map +1 -1
- package/dist/summary/index.d.ts +2 -1
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +7 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +1 -3
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -3
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +2 -7
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +1 -2
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +4 -23
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +2 -5
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +3 -11
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js +0 -1
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.d.ts +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +109 -22
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +3 -9
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +3 -9
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryHelpers.d.ts +19 -0
- package/dist/summary/summaryHelpers.d.ts.map +1 -0
- package/dist/summary/summaryHelpers.js +90 -0
- package/dist/summary/summaryHelpers.js.map +1 -0
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +0 -2
- package/dist/summary/summaryManager.js.map +1 -1
- package/lib/blobManager/blobManager.d.ts +11 -9
- package/lib/blobManager/blobManager.d.ts.map +1 -1
- package/lib/blobManager/blobManager.js +37 -37
- package/lib/blobManager/blobManager.js.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.d.ts +2 -4
- package/lib/blobManager/blobManagerSnapSum.d.ts.map +1 -1
- package/lib/blobManager/blobManagerSnapSum.js +6 -6
- package/lib/blobManager/blobManagerSnapSum.js.map +1 -1
- package/lib/channelCollection.d.ts +1 -7
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +2 -29
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +0 -43
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts +21 -141
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +51 -298
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStoreContext.d.ts +0 -13
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +2 -25
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +3 -23
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +0 -2
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +8 -24
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js +1 -3
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +1 -4
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +0 -1
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +5 -19
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +0 -29
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/signalTelemetryProcessing.d.ts +33 -0
- package/lib/signalTelemetryProcessing.d.ts.map +1 -0
- package/lib/signalTelemetryProcessing.js +145 -0
- package/lib/signalTelemetryProcessing.js.map +1 -0
- package/lib/summary/documentSchema.d.ts +7 -31
- package/lib/summary/documentSchema.d.ts.map +1 -1
- package/lib/summary/documentSchema.js +2 -18
- package/lib/summary/documentSchema.js.map +1 -1
- package/lib/summary/index.d.ts +2 -1
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +1 -0
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +1 -3
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -3
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +2 -7
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +1 -2
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +4 -23
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +2 -5
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +3 -11
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js +0 -1
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.d.ts +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +109 -22
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +3 -9
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +3 -9
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryHelpers.d.ts +19 -0
- package/lib/summary/summaryHelpers.d.ts.map +1 -0
- package/lib/summary/summaryHelpers.js +84 -0
- package/lib/summary/summaryHelpers.js.map +1 -0
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +0 -2
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +27 -20
- package/src/blobManager/blobManager.ts +70 -62
- package/src/blobManager/blobManagerSnapSum.ts +7 -9
- package/src/channelCollection.ts +3 -31
- package/src/connectionTelemetry.ts +0 -51
- package/src/containerRuntime.ts +111 -522
- package/src/dataStoreContext.ts +2 -32
- package/src/gc/garbageCollection.ts +9 -26
- package/src/gc/gcConfigs.ts +3 -6
- package/src/gc/gcDefinitions.ts +10 -28
- package/src/gc/gcHelpers.ts +0 -5
- package/src/gc/gcSummaryStateTracker.ts +1 -2
- package/src/gc/gcTelemetry.ts +6 -13
- package/src/index.ts +6 -6
- package/src/messageTypes.ts +0 -2
- package/src/packageVersion.ts +1 -1
- package/src/signalTelemetryProcessing.ts +233 -0
- package/src/summary/documentSchema.ts +7 -38
- package/src/summary/index.ts +12 -0
- package/src/summary/orderedClientElection.ts +1 -3
- package/src/summary/runWhileConnectedCoordinator.ts +3 -8
- package/src/summary/runningSummarizer.ts +12 -20
- package/src/summary/summarizer.ts +6 -18
- package/src/summary/summarizerClientElection.ts +0 -2
- package/src/summary/summarizerHeuristics.ts +1 -2
- package/src/summary/summarizerTypes.ts +119 -23
- package/src/summary/summaryFormat.ts +4 -13
- package/src/summary/summaryGenerator.ts +1 -8
- package/src/summary/summaryHelpers.ts +118 -0
- package/src/summary/summaryManager.ts +0 -2
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ISignalEnvelope } from "@fluidframework/core-interfaces/internal";
|
|
7
|
+
import type {
|
|
8
|
+
ITelemetryLoggerExt,
|
|
9
|
+
TelemetryEventPropertyTypeExt,
|
|
10
|
+
} from "@fluidframework/telemetry-utils/internal";
|
|
11
|
+
|
|
12
|
+
const defaultTelemetrySignalSampleCount = 100;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Set of stats/values used to keep track of telemetry related to signals.
|
|
16
|
+
*/
|
|
17
|
+
interface ISignalTelemetryTracking {
|
|
18
|
+
/**
|
|
19
|
+
* Accumulates the total number of broadcast signals sent during the current signal latency measurement window.
|
|
20
|
+
* This value represents the total number of signals sent since the latency measurement began and is used
|
|
21
|
+
* logged in telemetry when the latency measurement completes.
|
|
22
|
+
*/
|
|
23
|
+
totalSignalsSentInLatencyWindow: number;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Counts the number of broadcast signals sent since the last latency measurement was initiated.
|
|
27
|
+
* This counter increments with each broadcast signal sent. When a new latency measurement starts,
|
|
28
|
+
* this counter is added to `totalSignalsSentInLatencyWindow` and then reset to zero.
|
|
29
|
+
*/
|
|
30
|
+
signalsSentSinceLastLatencyMeasurement: number;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Number of signals that were expected but not received.
|
|
34
|
+
*/
|
|
35
|
+
signalsLost: number;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Number of signals received out of order/non-sequentially.
|
|
39
|
+
*/
|
|
40
|
+
signalsOutOfOrder: number;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Timestamp before submitting the signal we will trace.
|
|
44
|
+
*/
|
|
45
|
+
signalTimestamp: number;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Signal we will trace for roundtrip latency.
|
|
49
|
+
*/
|
|
50
|
+
roundTripSignalSequenceNumber: number | undefined;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Next expected signal sequence number to be received.
|
|
54
|
+
*/
|
|
55
|
+
trackingSignalSequenceNumber: number | undefined;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Inclusive lower bound of signal monitoring window.
|
|
59
|
+
* Used by the logic that checks if signals are received out of order.
|
|
60
|
+
*/
|
|
61
|
+
minimumTrackingSignalSequenceNumber: number | undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export class SignalTelemetryManager {
|
|
65
|
+
private readonly signalTracking: ISignalTelemetryTracking = {
|
|
66
|
+
totalSignalsSentInLatencyWindow: 0,
|
|
67
|
+
signalsLost: 0,
|
|
68
|
+
signalsOutOfOrder: 0,
|
|
69
|
+
signalsSentSinceLastLatencyMeasurement: 0,
|
|
70
|
+
signalTimestamp: 0,
|
|
71
|
+
roundTripSignalSequenceNumber: undefined,
|
|
72
|
+
trackingSignalSequenceNumber: undefined,
|
|
73
|
+
minimumTrackingSignalSequenceNumber: undefined,
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Identifier to track broadcast signals being submitted in order to
|
|
78
|
+
* allow collection of data around the roundtrip of signal messages.
|
|
79
|
+
*/
|
|
80
|
+
private broadcastSignalSequenceNumber: number = 0;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Resets the signal tracking state in the {@link SignalTelemetryManager}.
|
|
84
|
+
*/
|
|
85
|
+
public resetTracking(): void {
|
|
86
|
+
this.signalTracking.signalsLost = 0;
|
|
87
|
+
this.signalTracking.signalsOutOfOrder = 0;
|
|
88
|
+
this.signalTracking.signalTimestamp = 0;
|
|
89
|
+
this.signalTracking.signalsSentSinceLastLatencyMeasurement = 0;
|
|
90
|
+
this.signalTracking.totalSignalsSentInLatencyWindow = 0;
|
|
91
|
+
this.signalTracking.roundTripSignalSequenceNumber = undefined;
|
|
92
|
+
this.signalTracking.trackingSignalSequenceNumber = undefined;
|
|
93
|
+
this.signalTracking.minimumTrackingSignalSequenceNumber = undefined;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Perform telemetry-related processing of incoming signals.
|
|
98
|
+
* @param envelope - The signal envelope to process.
|
|
99
|
+
* @param logger - The telemetry logger to use for emitting telemetry events.
|
|
100
|
+
* @param consecutiveReconnects - The number of consecutive reconnects that have occurred. Only used for logging.
|
|
101
|
+
*/
|
|
102
|
+
public trackReceivedSignal(
|
|
103
|
+
envelope: ISignalEnvelope,
|
|
104
|
+
logger: ITelemetryLoggerExt,
|
|
105
|
+
consecutiveReconnects: number,
|
|
106
|
+
): void {
|
|
107
|
+
const {
|
|
108
|
+
clientBroadcastSignalSequenceNumber,
|
|
109
|
+
contents: envelopeContents,
|
|
110
|
+
address: envelopeAddress,
|
|
111
|
+
} = envelope;
|
|
112
|
+
|
|
113
|
+
if (clientBroadcastSignalSequenceNumber === undefined) {
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// If no tracking window has been set, nothing to do
|
|
118
|
+
if (
|
|
119
|
+
this.signalTracking.trackingSignalSequenceNumber === undefined ||
|
|
120
|
+
this.signalTracking.minimumTrackingSignalSequenceNumber === undefined
|
|
121
|
+
) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (
|
|
126
|
+
clientBroadcastSignalSequenceNumber >= this.signalTracking.trackingSignalSequenceNumber
|
|
127
|
+
) {
|
|
128
|
+
// Calculate the number of signals lost and log the event.
|
|
129
|
+
const signalsLost =
|
|
130
|
+
clientBroadcastSignalSequenceNumber - this.signalTracking.trackingSignalSequenceNumber;
|
|
131
|
+
if (signalsLost > 0) {
|
|
132
|
+
this.signalTracking.signalsLost += signalsLost;
|
|
133
|
+
logger.sendErrorEvent({
|
|
134
|
+
eventName: "SignalLost",
|
|
135
|
+
details: {
|
|
136
|
+
signalsLost, // Number of lost signals detected.
|
|
137
|
+
expectedSequenceNumber: this.signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
|
|
138
|
+
clientBroadcastSignalSequenceNumber, // Actual signal sequence number received.
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Update the tracking signal sequence number to the next expected signal in the sequence.
|
|
143
|
+
this.signalTracking.trackingSignalSequenceNumber =
|
|
144
|
+
clientBroadcastSignalSequenceNumber + 1;
|
|
145
|
+
} else if (
|
|
146
|
+
// Check if this is a signal in range of interest.
|
|
147
|
+
clientBroadcastSignalSequenceNumber >=
|
|
148
|
+
this.signalTracking.minimumTrackingSignalSequenceNumber
|
|
149
|
+
) {
|
|
150
|
+
this.signalTracking.signalsOutOfOrder++;
|
|
151
|
+
const details: TelemetryEventPropertyTypeExt = {
|
|
152
|
+
expectedSequenceNumber: this.signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
|
|
153
|
+
clientBroadcastSignalSequenceNumber, // Sequence number of the out of order signal.
|
|
154
|
+
};
|
|
155
|
+
// Only log `contents.type` when address is for container to avoid chance that contents type is customer data.
|
|
156
|
+
if (envelopeAddress === undefined) {
|
|
157
|
+
details.contentsType = envelopeContents.type; // Type of signal that was received out of order.
|
|
158
|
+
}
|
|
159
|
+
logger.sendTelemetryEvent({
|
|
160
|
+
eventName: "SignalOutOfOrder",
|
|
161
|
+
details,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (
|
|
166
|
+
this.signalTracking.roundTripSignalSequenceNumber !== undefined &&
|
|
167
|
+
clientBroadcastSignalSequenceNumber >= this.signalTracking.roundTripSignalSequenceNumber
|
|
168
|
+
) {
|
|
169
|
+
if (
|
|
170
|
+
clientBroadcastSignalSequenceNumber ===
|
|
171
|
+
this.signalTracking.roundTripSignalSequenceNumber
|
|
172
|
+
) {
|
|
173
|
+
// Latency tracked signal has been received.
|
|
174
|
+
// We now emit telemetry with the roundtrip duration of the tracked signal.
|
|
175
|
+
// The telemetry event also includes metrics for broadcast signals (sent, lost, and out of order),
|
|
176
|
+
// and these metrics are reset after emitting the event.
|
|
177
|
+
const duration = Date.now() - this.signalTracking.signalTimestamp;
|
|
178
|
+
logger.sendPerformanceEvent({
|
|
179
|
+
eventName: "SignalLatency",
|
|
180
|
+
details: {
|
|
181
|
+
duration, // Roundtrip duration of the tracked signal in milliseconds.
|
|
182
|
+
sent: this.signalTracking.totalSignalsSentInLatencyWindow, // Signals sent since the last logged SignalLatency event.
|
|
183
|
+
lost: this.signalTracking.signalsLost, // Signals lost since the last logged SignalLatency event.
|
|
184
|
+
outOfOrder: this.signalTracking.signalsOutOfOrder, // Out of order signals since the last logged SignalLatency event.
|
|
185
|
+
reconnectCount: consecutiveReconnects, // Container reconnect count.
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
this.signalTracking.signalsLost = 0;
|
|
189
|
+
this.signalTracking.signalsOutOfOrder = 0;
|
|
190
|
+
this.signalTracking.signalTimestamp = 0;
|
|
191
|
+
this.signalTracking.totalSignalsSentInLatencyWindow = 0;
|
|
192
|
+
}
|
|
193
|
+
this.signalTracking.roundTripSignalSequenceNumber = undefined;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Updates tracking state for broadcast signals based on the provided signal envelope, and updates the
|
|
199
|
+
* envelope with additional information that the signal needs to have stamped on it.
|
|
200
|
+
* @remarks Do not call this for non-broadcast signals.
|
|
201
|
+
* @param envelope - The signal envelope to process.
|
|
202
|
+
*/
|
|
203
|
+
public applyTrackingToBroadcastSignalEnvelope(envelope: ISignalEnvelope): void {
|
|
204
|
+
const broadcastSignalSequenceNumber = ++this.broadcastSignalSequenceNumber;
|
|
205
|
+
|
|
206
|
+
// Stamp with the broadcast signal sequence number.
|
|
207
|
+
envelope.clientBroadcastSignalSequenceNumber = broadcastSignalSequenceNumber;
|
|
208
|
+
|
|
209
|
+
this.signalTracking.signalsSentSinceLastLatencyMeasurement++;
|
|
210
|
+
|
|
211
|
+
// If we don't have a signal monitoring window yet,
|
|
212
|
+
// initialize tracking to expect the next signal sent by the connected client.
|
|
213
|
+
if (
|
|
214
|
+
this.signalTracking.minimumTrackingSignalSequenceNumber === undefined ||
|
|
215
|
+
this.signalTracking.trackingSignalSequenceNumber === undefined
|
|
216
|
+
) {
|
|
217
|
+
this.signalTracking.minimumTrackingSignalSequenceNumber = broadcastSignalSequenceNumber;
|
|
218
|
+
this.signalTracking.trackingSignalSequenceNumber = broadcastSignalSequenceNumber;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Start tracking roundtrip for a new signal only if we are not tracking one already (and sampling logic is met)
|
|
222
|
+
if (
|
|
223
|
+
this.signalTracking.roundTripSignalSequenceNumber === undefined &&
|
|
224
|
+
broadcastSignalSequenceNumber % defaultTelemetrySignalSampleCount === 1
|
|
225
|
+
) {
|
|
226
|
+
this.signalTracking.signalTimestamp = Date.now();
|
|
227
|
+
this.signalTracking.roundTripSignalSequenceNumber = broadcastSignalSequenceNumber;
|
|
228
|
+
this.signalTracking.totalSignalsSentInLatencyWindow +=
|
|
229
|
+
this.signalTracking.signalsSentSinceLastLatencyMeasurement;
|
|
230
|
+
this.signalTracking.signalsSentSinceLastLatencyMeasurement = 0;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
@@ -13,9 +13,7 @@ import { pkgVersion } from "../packageVersion.js";
|
|
|
13
13
|
* Please note that for all property types we should use undefined to indicate that particular capability is off.
|
|
14
14
|
* Using false, or some string value (like "off") will result in clients who do not understand that property failing, whereas
|
|
15
15
|
* we want them to continue to collaborate alongside clients who support that capability, but such capability is shipping dark for now.
|
|
16
|
-
* @
|
|
17
|
-
* @alpha
|
|
18
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
16
|
+
* @internal
|
|
19
17
|
*/
|
|
20
18
|
export type DocumentSchemaValueType = string | string[] | true | number | undefined;
|
|
21
19
|
|
|
@@ -58,9 +56,7 @@ export type IdCompressorMode = "on" | "delayed" | undefined;
|
|
|
58
56
|
*
|
|
59
57
|
* For now we are limiting it to just plain properties, and only really simple types, but that can be changed in the future.
|
|
60
58
|
*
|
|
61
|
-
* @
|
|
62
|
-
* @alpha
|
|
63
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
59
|
+
* @internal
|
|
64
60
|
*/
|
|
65
61
|
export interface IDocumentSchema {
|
|
66
62
|
// version that describes how data is stored in this structure.
|
|
@@ -80,9 +76,7 @@ export interface IDocumentSchema {
|
|
|
80
76
|
* ContainerMessageType.DocumentSchemaChange messages use CAS (Compare-and-swap) semantics, and convey
|
|
81
77
|
* regSeq of last known schema change (known to a client proposing schema change).
|
|
82
78
|
* @see ContainerRuntimeDocumentSchemaMessage
|
|
83
|
-
* @
|
|
84
|
-
* @alpha
|
|
85
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
79
|
+
* @internal
|
|
86
80
|
*/
|
|
87
81
|
export type IDocumentSchemaChangeMessage = IDocumentSchema;
|
|
88
82
|
|
|
@@ -92,9 +86,7 @@ export type IDocumentSchemaChangeMessage = IDocumentSchema;
|
|
|
92
86
|
* WARNING: This type is used to infer IDocumentSchemaCurrent type!
|
|
93
87
|
* Any changes here (including renaming of properties) are potentially changing document format and should be considered carefully!
|
|
94
88
|
*
|
|
95
|
-
* @
|
|
96
|
-
* @alpha
|
|
97
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
89
|
+
* @internal
|
|
98
90
|
*/
|
|
99
91
|
export interface IDocumentSchemaFeatures {
|
|
100
92
|
// Tells if client uses legacy behavior of changing schema.
|
|
@@ -123,17 +115,13 @@ export interface IDocumentSchemaFeatures {
|
|
|
123
115
|
* This must be bumped whenever the format of document schema or protocol for changing the current document schema changes.
|
|
124
116
|
* Ex: adding a new configuration property (under IDocumentSchema.runtime) does not require changing this version.
|
|
125
117
|
* Ex: Changing the 'document schema acceptance' mechanism from convert-and-swap to one requiring consensus does require changing this version.
|
|
126
|
-
* @
|
|
127
|
-
* @alpha
|
|
128
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
118
|
+
* @internal
|
|
129
119
|
*/
|
|
130
120
|
export const currentDocumentVersionSchema = 1;
|
|
131
121
|
|
|
132
122
|
/**
|
|
133
123
|
* Current document schema.
|
|
134
|
-
* @
|
|
135
|
-
* @alpha
|
|
136
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
124
|
+
* @internal
|
|
137
125
|
*/
|
|
138
126
|
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
|
|
139
127
|
export type IDocumentSchemaCurrent = {
|
|
@@ -441,9 +429,7 @@ function arrayToProp(arr: string[]): string[] | undefined {
|
|
|
441
429
|
* Clients can retry, but current implementation is simply - they will not (and will rely on next session / reload to do
|
|
442
430
|
* recalc and decide if schema needs to be changed or not).
|
|
443
431
|
*
|
|
444
|
-
* @
|
|
445
|
-
* @alpha
|
|
446
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
432
|
+
* @internal
|
|
447
433
|
* @sealed
|
|
448
434
|
*/
|
|
449
435
|
export class DocumentsSchemaController {
|
|
@@ -614,23 +600,6 @@ export class DocumentsSchemaController {
|
|
|
614
600
|
}
|
|
615
601
|
}
|
|
616
602
|
|
|
617
|
-
/**
|
|
618
|
-
* Process document schema change message
|
|
619
|
-
* Called by ContainerRuntime whenever it sees document schema messages.
|
|
620
|
-
* @param content - content of the message
|
|
621
|
-
* @param local - whether op is local
|
|
622
|
-
* @param sequenceNumber - sequence number of the op
|
|
623
|
-
* @returns - true if schema was accepted, otherwise false (rejected due to failed CAS)
|
|
624
|
-
* @deprecated It has been replaced by processDocumentSchemaMessages instead.
|
|
625
|
-
*/
|
|
626
|
-
public processDocumentSchemaOp(
|
|
627
|
-
content: IDocumentSchemaChangeMessage,
|
|
628
|
-
local: boolean,
|
|
629
|
-
sequenceNumber: number,
|
|
630
|
-
): boolean {
|
|
631
|
-
return this.processDocumentSchemaMessages([content], local, sequenceNumber);
|
|
632
|
-
}
|
|
633
|
-
|
|
634
603
|
/**
|
|
635
604
|
* Process document schema change messages
|
|
636
605
|
* Called by ContainerRuntime whenever it sees document schema messages.
|
package/src/summary/index.ts
CHANGED
|
@@ -65,6 +65,11 @@ export {
|
|
|
65
65
|
SubmitSummaryFailureData,
|
|
66
66
|
SummaryStage,
|
|
67
67
|
IRetriableFailureError,
|
|
68
|
+
type ISummaryConfiguration,
|
|
69
|
+
type ISummaryConfigurationDisableHeuristics,
|
|
70
|
+
type ISummaryConfigurationDisableSummarizer,
|
|
71
|
+
type ISummaryConfigurationHeuristics,
|
|
72
|
+
type ISummaryBaseConfiguration,
|
|
68
73
|
} from "./summarizerTypes.js";
|
|
69
74
|
export {
|
|
70
75
|
IAckedSummary,
|
|
@@ -103,6 +108,13 @@ export {
|
|
|
103
108
|
IFluidDataStoreAttributes2,
|
|
104
109
|
OmitAttributesVersions,
|
|
105
110
|
} from "./summaryFormat.js";
|
|
111
|
+
export {
|
|
112
|
+
formCreateSummarizerFn,
|
|
113
|
+
validateSummaryHeuristicConfiguration,
|
|
114
|
+
summarizerRequestUrl,
|
|
115
|
+
DefaultSummaryConfiguration,
|
|
116
|
+
isSummariesDisabled,
|
|
117
|
+
} from "./summaryHelpers.js";
|
|
106
118
|
export {
|
|
107
119
|
IdCompressorMode,
|
|
108
120
|
IDocumentSchemaCurrent,
|
|
@@ -271,9 +271,7 @@ export interface IOrderedClientElectionEvents extends IEvent {
|
|
|
271
271
|
|
|
272
272
|
/**
|
|
273
273
|
* Serialized state of IOrderedClientElection.
|
|
274
|
-
* @
|
|
275
|
-
* @alpha
|
|
276
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
274
|
+
* @internal
|
|
277
275
|
*/
|
|
278
276
|
export interface ISerializedElection {
|
|
279
277
|
/**
|
|
@@ -6,16 +6,13 @@
|
|
|
6
6
|
import type { SummarizerStopReason } from "@fluidframework/container-runtime-definitions/internal";
|
|
7
7
|
import { assert, Deferred } from "@fluidframework/core-utils/internal";
|
|
8
8
|
|
|
9
|
-
// eslint-disable-next-line import/no-deprecated
|
|
10
9
|
import { IConnectableRuntime, ISummaryCancellationToken } from "./summarizerTypes.js";
|
|
11
10
|
|
|
12
11
|
/**
|
|
13
12
|
* Similar to AbortController, but using promise instead of events
|
|
14
|
-
* @
|
|
15
|
-
* @alpha
|
|
16
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
13
|
+
* @internal
|
|
17
14
|
*/
|
|
18
|
-
|
|
15
|
+
|
|
19
16
|
export interface ICancellableSummarizerController extends ISummaryCancellationToken {
|
|
20
17
|
stop(reason: SummarizerStopReason): void;
|
|
21
18
|
}
|
|
@@ -25,7 +22,7 @@ export interface ICancellableSummarizerController extends ISummaryCancellationTo
|
|
|
25
22
|
* This object implements ISummaryCancellationToken interface but cancellation is never leveraged.
|
|
26
23
|
* @internal
|
|
27
24
|
*/
|
|
28
|
-
|
|
25
|
+
|
|
29
26
|
export const neverCancelledSummaryToken: ISummaryCancellationToken = {
|
|
30
27
|
cancelled: false,
|
|
31
28
|
waitCancelled: new Promise(() => {}),
|
|
@@ -68,7 +65,6 @@ export class RunWhileConnectedCoordinator implements ICancellableSummarizerContr
|
|
|
68
65
|
}
|
|
69
66
|
|
|
70
67
|
public static async create(
|
|
71
|
-
// eslint-disable-next-line import/no-deprecated
|
|
72
68
|
runtime: IConnectableRuntime,
|
|
73
69
|
active: () => boolean,
|
|
74
70
|
): Promise<RunWhileConnectedCoordinator> {
|
|
@@ -78,7 +74,6 @@ export class RunWhileConnectedCoordinator implements ICancellableSummarizerContr
|
|
|
78
74
|
}
|
|
79
75
|
|
|
80
76
|
protected constructor(
|
|
81
|
-
// eslint-disable-next-line import/no-deprecated
|
|
82
77
|
private readonly runtime: IConnectableRuntime,
|
|
83
78
|
private readonly active: () => boolean,
|
|
84
79
|
) {}
|
|
@@ -26,17 +26,15 @@ import {
|
|
|
26
26
|
type ITelemetryLoggerExt,
|
|
27
27
|
} from "@fluidframework/telemetry-utils/internal";
|
|
28
28
|
|
|
29
|
-
import { ISummaryConfiguration } from "../containerRuntime.js";
|
|
30
29
|
import { opSize } from "../opProperties.js";
|
|
31
30
|
|
|
32
31
|
import { SummarizeHeuristicRunner } from "./summarizerHeuristics.js";
|
|
33
|
-
import {
|
|
32
|
+
import type {
|
|
33
|
+
ISummaryConfiguration,
|
|
34
34
|
EnqueueSummarizeResult,
|
|
35
35
|
IEnqueueSummarizeOptions,
|
|
36
36
|
IOnDemandSummarizeOptions,
|
|
37
|
-
// eslint-disable-next-line import/no-deprecated
|
|
38
37
|
IRefreshSummaryAckOptions,
|
|
39
|
-
// eslint-disable-next-line import/no-deprecated
|
|
40
38
|
ISubmitSummaryOptions,
|
|
41
39
|
ISummarizeHeuristicData,
|
|
42
40
|
ISummarizeHeuristicRunner,
|
|
@@ -44,12 +42,10 @@ import {
|
|
|
44
42
|
ISummarizeResults,
|
|
45
43
|
ISummarizeRunnerTelemetry,
|
|
46
44
|
ISummarizeTelemetryProperties,
|
|
47
|
-
// eslint-disable-next-line import/no-deprecated
|
|
48
45
|
ISummarizerRuntime,
|
|
49
|
-
// eslint-disable-next-line import/no-deprecated
|
|
50
46
|
ISummaryCancellationToken,
|
|
51
47
|
SubmitSummaryResult,
|
|
52
|
-
|
|
48
|
+
IRetriableFailureError,
|
|
53
49
|
} from "./summarizerTypes.js";
|
|
54
50
|
import {
|
|
55
51
|
IAckedSummary,
|
|
@@ -92,16 +88,16 @@ export class RunningSummarizer
|
|
|
92
88
|
logger: ITelemetryBaseLogger,
|
|
93
89
|
summaryWatcher: IClientSummaryWatcher,
|
|
94
90
|
configuration: ISummaryConfiguration,
|
|
95
|
-
|
|
91
|
+
|
|
96
92
|
submitSummaryCallback: (options: ISubmitSummaryOptions) => Promise<SubmitSummaryResult>,
|
|
97
|
-
|
|
93
|
+
|
|
98
94
|
refreshLatestSummaryAckCallback: (options: IRefreshSummaryAckOptions) => Promise<void>,
|
|
99
95
|
heuristicData: ISummarizeHeuristicData,
|
|
100
96
|
summaryCollection: SummaryCollection,
|
|
101
|
-
|
|
97
|
+
|
|
102
98
|
cancellationToken: ISummaryCancellationToken,
|
|
103
99
|
stopSummarizerCallback: (reason: SummarizerStopReason) => void,
|
|
104
|
-
|
|
100
|
+
|
|
105
101
|
runtime: ISummarizerRuntime,
|
|
106
102
|
): Promise<RunningSummarizer> {
|
|
107
103
|
const summarizer = new RunningSummarizer(
|
|
@@ -218,19 +214,17 @@ export class RunningSummarizer
|
|
|
218
214
|
private readonly summaryWatcher: IClientSummaryWatcher,
|
|
219
215
|
private readonly configuration: ISummaryConfiguration,
|
|
220
216
|
private readonly submitSummaryCallback: (
|
|
221
|
-
// eslint-disable-next-line import/no-deprecated
|
|
222
217
|
options: ISubmitSummaryOptions,
|
|
223
218
|
) => Promise<SubmitSummaryResult>,
|
|
224
219
|
private readonly refreshLatestSummaryAckCallback: (
|
|
225
|
-
// eslint-disable-next-line import/no-deprecated
|
|
226
220
|
options: IRefreshSummaryAckOptions,
|
|
227
221
|
) => Promise<void>,
|
|
228
222
|
private readonly heuristicData: ISummarizeHeuristicData,
|
|
229
223
|
private readonly summaryCollection: SummaryCollection,
|
|
230
|
-
|
|
224
|
+
|
|
231
225
|
private readonly cancellationToken: ISummaryCancellationToken,
|
|
232
226
|
private readonly stopSummarizerCallback: (reason: SummarizerStopReason) => void,
|
|
233
|
-
|
|
227
|
+
|
|
234
228
|
private readonly runtime: ISummarizerRuntime,
|
|
235
229
|
) {
|
|
236
230
|
super();
|
|
@@ -308,7 +302,7 @@ export class RunningSummarizer
|
|
|
308
302
|
() => {
|
|
309
303
|
this.totalSuccessfulAttempts++;
|
|
310
304
|
},
|
|
311
|
-
|
|
305
|
+
|
|
312
306
|
async (options: IRefreshSummaryAckOptions) => {
|
|
313
307
|
if (immediatelyRefreshLatestSummaryAck) {
|
|
314
308
|
await this.refreshLatestSummaryAckAndHandleError(options);
|
|
@@ -357,7 +351,6 @@ export class RunningSummarizer
|
|
|
357
351
|
await this.lockedSummaryAction(
|
|
358
352
|
() => {},
|
|
359
353
|
async () => {
|
|
360
|
-
// eslint-disable-next-line import/no-deprecated
|
|
361
354
|
const options: IRefreshSummaryAckOptions = {
|
|
362
355
|
proposalHandle: summaryOpHandle,
|
|
363
356
|
ackHandle: summaryAckHandle,
|
|
@@ -371,7 +364,6 @@ export class RunningSummarizer
|
|
|
371
364
|
}
|
|
372
365
|
|
|
373
366
|
private readonly refreshLatestSummaryAckAndHandleError = async (
|
|
374
|
-
// eslint-disable-next-line import/no-deprecated
|
|
375
367
|
options: IRefreshSummaryAckOptions,
|
|
376
368
|
): Promise<void> => {
|
|
377
369
|
return this.refreshLatestSummaryAckCallback(options).catch(async (error) => {
|
|
@@ -647,7 +639,7 @@ export class RunningSummarizer
|
|
|
647
639
|
logger: this.mc.logger,
|
|
648
640
|
properties: { all: summarizeProps },
|
|
649
641
|
});
|
|
650
|
-
|
|
642
|
+
|
|
651
643
|
const summaryOptions: ISubmitSummaryOptions = {
|
|
652
644
|
...options,
|
|
653
645
|
summaryLogger,
|
|
@@ -764,7 +756,7 @@ export class RunningSummarizer
|
|
|
764
756
|
logger: this.mc.logger,
|
|
765
757
|
properties: { all: summarizeProps },
|
|
766
758
|
});
|
|
767
|
-
|
|
759
|
+
|
|
768
760
|
const summaryOptions: ISubmitSummaryOptions = {
|
|
769
761
|
...summarizeOptions,
|
|
770
762
|
summaryLogger,
|
|
@@ -19,38 +19,31 @@ import {
|
|
|
19
19
|
wrapErrorAndLog,
|
|
20
20
|
} from "@fluidframework/telemetry-utils/internal";
|
|
21
21
|
|
|
22
|
-
import { ISummaryConfiguration } from "../containerRuntime.js";
|
|
23
|
-
|
|
24
|
-
// eslint-disable-next-line import/no-deprecated
|
|
25
22
|
import { ICancellableSummarizerController } from "./runWhileConnectedCoordinator.js";
|
|
26
23
|
import { RunningSummarizer } from "./runningSummarizer.js";
|
|
27
24
|
import { SummarizeHeuristicData } from "./summarizerHeuristics.js";
|
|
28
25
|
import {
|
|
29
26
|
EnqueueSummarizeResult,
|
|
30
|
-
// eslint-disable-next-line import/no-deprecated
|
|
31
27
|
IConnectableRuntime,
|
|
32
28
|
IEnqueueSummarizeOptions,
|
|
33
29
|
IOnDemandSummarizeOptions,
|
|
34
30
|
ISummarizeHeuristicData,
|
|
35
31
|
ISummarizeResults,
|
|
36
32
|
ISummarizer,
|
|
37
|
-
// eslint-disable-next-line import/no-deprecated
|
|
38
33
|
ISummarizerInternalsProvider,
|
|
39
|
-
// eslint-disable-next-line import/no-deprecated
|
|
40
34
|
ISummarizerRuntime,
|
|
41
35
|
ISummarizingWarning,
|
|
42
36
|
type IRetriableFailureError,
|
|
37
|
+
type ISummaryConfiguration,
|
|
43
38
|
} from "./summarizerTypes.js";
|
|
44
39
|
import { SummaryCollection } from "./summaryCollection.js";
|
|
45
40
|
import { SummarizeResultBuilder } from "./summaryGenerator.js";
|
|
46
41
|
|
|
47
|
-
const summarizingError = "summarizingError";
|
|
48
|
-
|
|
49
42
|
export class SummarizingWarning
|
|
50
43
|
extends LoggingError
|
|
51
44
|
implements ISummarizingWarning, IFluidErrorBase
|
|
52
45
|
{
|
|
53
|
-
readonly errorType = summarizingError;
|
|
46
|
+
readonly errorType = "summarizingError";
|
|
54
47
|
readonly canRetry = true;
|
|
55
48
|
|
|
56
49
|
constructor(
|
|
@@ -80,9 +73,7 @@ export const createSummarizingWarning = (
|
|
|
80
73
|
* Summarizer is responsible for coordinating when to generate and send summaries.
|
|
81
74
|
* It is the main entry point for summary work.
|
|
82
75
|
* It is created only by summarizing container (i.e. one with clientType === "summarizer")
|
|
83
|
-
* @
|
|
84
|
-
* @alpha
|
|
85
|
-
* @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
|
|
76
|
+
* @internal
|
|
86
77
|
*/
|
|
87
78
|
export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements ISummarizer {
|
|
88
79
|
public get ISummarizer(): this {
|
|
@@ -101,21 +92,19 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
101
92
|
* Reference to runtime that created this object.
|
|
102
93
|
* i.e. runtime with clientType === "summarizer"
|
|
103
94
|
*/
|
|
104
|
-
|
|
95
|
+
|
|
105
96
|
private readonly runtime: ISummarizerRuntime,
|
|
106
97
|
private readonly configurationGetter: () => ISummaryConfiguration,
|
|
107
98
|
/**
|
|
108
99
|
* Represents an object that can generate summary.
|
|
109
100
|
* In practical terms, it's same runtime (this.runtime) with clientType === "summarizer".
|
|
110
101
|
*/
|
|
111
|
-
|
|
102
|
+
|
|
112
103
|
private readonly internalsProvider: ISummarizerInternalsProvider,
|
|
113
104
|
handleContext: IFluidHandleContext,
|
|
114
105
|
public readonly summaryCollection: SummaryCollection,
|
|
115
106
|
private readonly runCoordinatorCreateFn: (
|
|
116
|
-
// eslint-disable-next-line import/no-deprecated
|
|
117
107
|
runtime: IConnectableRuntime,
|
|
118
|
-
// eslint-disable-next-line import/no-deprecated
|
|
119
108
|
) => Promise<ICancellableSummarizerController>,
|
|
120
109
|
) {
|
|
121
110
|
super();
|
|
@@ -165,7 +154,6 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
165
154
|
}
|
|
166
155
|
|
|
167
156
|
private async runCore(onBehalfOf: string): Promise<SummarizerStopReason> {
|
|
168
|
-
// eslint-disable-next-line import/no-deprecated
|
|
169
157
|
const runCoordinator: ICancellableSummarizerController = await this.runCoordinatorCreateFn(
|
|
170
158
|
this.runtime,
|
|
171
159
|
);
|
|
@@ -251,7 +239,7 @@ export class Summarizer extends TypedEventEmitter<ISummarizerEvents> implements
|
|
|
251
239
|
*/
|
|
252
240
|
private async start(
|
|
253
241
|
onBehalfOf: string,
|
|
254
|
-
|
|
242
|
+
|
|
255
243
|
runCoordinator: ICancellableSummarizerController,
|
|
256
244
|
): Promise<RunningSummarizer> {
|
|
257
245
|
if (this.runningSummarizer) {
|
|
@@ -11,7 +11,6 @@ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
|
|
|
11
11
|
|
|
12
12
|
import {
|
|
13
13
|
IOrderedClientElection,
|
|
14
|
-
// eslint-disable-next-line import/no-deprecated
|
|
15
14
|
ISerializedElection,
|
|
16
15
|
ITrackedClient,
|
|
17
16
|
} from "./orderedClientElection.js";
|
|
@@ -120,7 +119,6 @@ export class SummarizerClientElection
|
|
|
120
119
|
});
|
|
121
120
|
}
|
|
122
121
|
|
|
123
|
-
// eslint-disable-next-line import/no-deprecated
|
|
124
122
|
public serialize(): ISerializedElection {
|
|
125
123
|
const { electedClientId, electedParentId, electionSequenceNumber } =
|
|
126
124
|
this.clientElection.serialize();
|
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
import { Timer } from "@fluidframework/core-utils/internal";
|
|
7
7
|
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
|
|
8
8
|
|
|
9
|
-
import { ISummaryConfigurationHeuristics } from "
|
|
10
|
-
|
|
9
|
+
import type { ISummaryConfigurationHeuristics } from "./summarizerTypes.js";
|
|
11
10
|
import {
|
|
12
11
|
ISummarizeAttempt,
|
|
13
12
|
ISummarizeHeuristicData,
|