@fluidframework/container-runtime 0.59.1000 → 0.59.2000-63294
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/dist/connectionTelemetry.js +1 -1
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +6 -6
- package/dist/containerRuntime.js.map +1 -1
- package/dist/garbageCollection.d.ts +26 -8
- package/dist/garbageCollection.d.ts.map +1 -1
- package/dist/garbageCollection.js +81 -57
- package/dist/garbageCollection.js.map +1 -1
- package/dist/orderedClientElection.d.ts +57 -6
- package/dist/orderedClientElection.d.ts.map +1 -1
- package/dist/orderedClientElection.js +141 -26
- package/dist/orderedClientElection.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/runningSummarizer.d.ts.map +1 -1
- package/dist/runningSummarizer.js +11 -10
- package/dist/runningSummarizer.js.map +1 -1
- package/dist/summarizer.d.ts +1 -0
- package/dist/summarizer.d.ts.map +1 -1
- package/dist/summarizer.js +8 -4
- package/dist/summarizer.js.map +1 -1
- package/dist/summarizerClientElection.d.ts +2 -0
- package/dist/summarizerClientElection.d.ts.map +1 -1
- package/dist/summarizerClientElection.js +15 -2
- package/dist/summarizerClientElection.js.map +1 -1
- package/dist/summarizerTypes.d.ts +47 -1
- package/dist/summarizerTypes.d.ts.map +1 -1
- package/dist/summarizerTypes.js.map +1 -1
- package/dist/summaryGenerator.d.ts +0 -2
- package/dist/summaryGenerator.d.ts.map +1 -1
- package/dist/summaryGenerator.js +2 -3
- package/dist/summaryGenerator.js.map +1 -1
- package/dist/summaryManager.d.ts.map +1 -1
- package/dist/summaryManager.js +29 -18
- package/dist/summaryManager.js.map +1 -1
- package/lib/connectionTelemetry.js +1 -1
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +6 -6
- package/lib/containerRuntime.js.map +1 -1
- package/lib/garbageCollection.d.ts +26 -8
- package/lib/garbageCollection.d.ts.map +1 -1
- package/lib/garbageCollection.js +81 -57
- package/lib/garbageCollection.js.map +1 -1
- package/lib/orderedClientElection.d.ts +57 -6
- package/lib/orderedClientElection.d.ts.map +1 -1
- package/lib/orderedClientElection.js +141 -26
- package/lib/orderedClientElection.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/runningSummarizer.d.ts.map +1 -1
- package/lib/runningSummarizer.js +11 -10
- package/lib/runningSummarizer.js.map +1 -1
- package/lib/summarizer.d.ts +1 -0
- package/lib/summarizer.d.ts.map +1 -1
- package/lib/summarizer.js +8 -4
- package/lib/summarizer.js.map +1 -1
- package/lib/summarizerClientElection.d.ts +2 -0
- package/lib/summarizerClientElection.d.ts.map +1 -1
- package/lib/summarizerClientElection.js +15 -2
- package/lib/summarizerClientElection.js.map +1 -1
- package/lib/summarizerTypes.d.ts +47 -1
- package/lib/summarizerTypes.d.ts.map +1 -1
- package/lib/summarizerTypes.js.map +1 -1
- package/lib/summaryGenerator.d.ts +0 -2
- package/lib/summaryGenerator.d.ts.map +1 -1
- package/lib/summaryGenerator.js +2 -3
- package/lib/summaryGenerator.js.map +1 -1
- package/lib/summaryManager.d.ts.map +1 -1
- package/lib/summaryManager.js +29 -18
- package/lib/summaryManager.js.map +1 -1
- package/package.json +29 -53
- package/src/connectionTelemetry.ts +2 -2
- package/src/containerRuntime.ts +4 -6
- package/src/garbageCollection.ts +96 -61
- package/src/orderedClientElection.ts +155 -25
- package/src/packageVersion.ts +1 -1
- package/src/runningSummarizer.ts +13 -10
- package/src/summarizer.ts +9 -4
- package/src/summarizerClientElection.ts +15 -2
- package/src/summarizerTypes.ts +60 -1
- package/src/summaryGenerator.ts +3 -51
- package/src/summaryManager.ts +32 -23
package/src/summaryManager.ts
CHANGED
|
@@ -137,9 +137,15 @@ export class SummaryManager implements IDisposable {
|
|
|
137
137
|
state === SummaryManagerState.Starting || state === SummaryManagerState.Running;
|
|
138
138
|
|
|
139
139
|
private getShouldSummarizeState(): ShouldSummarizeState {
|
|
140
|
+
// Note that if we're in the Running state, the electedClient may be a summarizer client, so we can't
|
|
141
|
+
// enforce connectedState.clientId === clientElection.electedClientId. But once we're Running, we should
|
|
142
|
+
// only transition to Stopping when the electedParentId changes. Stopping the summarizer without
|
|
143
|
+
// changing the electedParent will just cause us to transition to Starting again.
|
|
140
144
|
if (!this.connectedState.connected) {
|
|
141
145
|
return { shouldSummarize: false, stopReason: "parentNotConnected" };
|
|
142
|
-
} else if (this.connectedState.clientId !== this.clientElection.
|
|
146
|
+
} else if (this.connectedState.clientId !== this.clientElection.electedParentId ||
|
|
147
|
+
(this.state !== SummaryManagerState.Running &&
|
|
148
|
+
this.connectedState.clientId !== this.clientElection.electedClientId)) {
|
|
143
149
|
return { shouldSummarize: false, stopReason: "parentShouldNotSummarize" };
|
|
144
150
|
} else if (this.disposed) {
|
|
145
151
|
assert(false, 0x260 /* "Disposed should mean disconnected!" */);
|
|
@@ -187,8 +193,6 @@ export class SummaryManager implements IDisposable {
|
|
|
187
193
|
|
|
188
194
|
assert(this.summarizer === undefined, 0x262 /* "Old summarizer is still working!" */);
|
|
189
195
|
|
|
190
|
-
let reason = "unknown";
|
|
191
|
-
|
|
192
196
|
this.delayBeforeCreatingSummarizer().then(async (startWithInitialDelay: boolean) => {
|
|
193
197
|
// Re-validate that it need to be running. Due to asynchrony, it may be not the case anymore
|
|
194
198
|
// but only if creation was delayed. If it was not, then we want to ensure we always create
|
|
@@ -196,32 +200,48 @@ export class SummaryManager implements IDisposable {
|
|
|
196
200
|
// document out of broken state if it has too many ops and ordering service keeps nacking main
|
|
197
201
|
// container (and thus it goes into cycle of reconnects)
|
|
198
202
|
if (startWithInitialDelay && this.getShouldSummarizeState().shouldSummarize === false) {
|
|
199
|
-
return;
|
|
203
|
+
return "early exit";
|
|
200
204
|
}
|
|
201
205
|
|
|
206
|
+
// We transition to Running before requesting the summarizer, because after requesting we can't predict
|
|
207
|
+
// when the electedClient will be replaced with the new summarizer client.
|
|
208
|
+
// The alternative would be to let connectedState.clientId !== clientElection.electedClientId when
|
|
209
|
+
// state === Starting || state === Running.
|
|
210
|
+
assert(this.state === SummaryManagerState.Starting, 0x263 /* "Expected: starting" */);
|
|
211
|
+
this.state = SummaryManagerState.Running;
|
|
212
|
+
|
|
202
213
|
const summarizer = await this.requestSummarizerFn();
|
|
214
|
+
this.summarizer = summarizer;
|
|
203
215
|
|
|
204
216
|
// Re-validate that it need to be running. Due to asynchrony, it may be not the case anymore
|
|
205
217
|
const shouldSummarizeState = this.getShouldSummarizeState();
|
|
206
218
|
if (shouldSummarizeState.shouldSummarize === false) {
|
|
219
|
+
this.state = SummaryManagerState.Starting;
|
|
207
220
|
summarizer.stop(shouldSummarizeState.stopReason);
|
|
208
|
-
return;
|
|
221
|
+
return "early exit after starting summarizer";
|
|
209
222
|
}
|
|
210
223
|
|
|
211
|
-
assert(this.state === SummaryManagerState.Starting, 0x263 /* "Expected: starting" */);
|
|
212
|
-
this.state = SummaryManagerState.Running;
|
|
213
|
-
|
|
214
|
-
this.summarizer = summarizer;
|
|
215
|
-
|
|
216
224
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
217
225
|
const clientId = this.latestClientId!;
|
|
218
226
|
|
|
219
|
-
|
|
227
|
+
return PerformanceEvent.timedExecAsync(
|
|
220
228
|
this.logger,
|
|
221
229
|
{ eventName: "RunningSummarizer", attempt: this.startThrottler.numAttempts },
|
|
222
230
|
async () => summarizer.run(clientId, this.summarizerOptions),
|
|
223
231
|
);
|
|
232
|
+
}).then((reason: string) => {
|
|
233
|
+
this.logger.sendTelemetryEvent({
|
|
234
|
+
eventName: "EndingSummarizer",
|
|
235
|
+
reason,
|
|
236
|
+
});
|
|
224
237
|
}).catch((error) => {
|
|
238
|
+
this.logger.sendTelemetryEvent(
|
|
239
|
+
{
|
|
240
|
+
eventName: "EndingSummarizer",
|
|
241
|
+
reason: "exception",
|
|
242
|
+
},
|
|
243
|
+
error);
|
|
244
|
+
|
|
225
245
|
// Most of exceptions happen due to container being closed while loading it, due to
|
|
226
246
|
// summarizer container loosing connection while load.
|
|
227
247
|
// Not worth reporting such errors as errors. That said, we might miss some real errors if
|
|
@@ -241,25 +261,14 @@ export class SummaryManager implements IDisposable {
|
|
|
241
261
|
category,
|
|
242
262
|
},
|
|
243
263
|
error);
|
|
244
|
-
|
|
245
|
-
// Note that summarizer may keep going (like doing last summary).
|
|
246
|
-
// Ideally we await stopping process, but this code path is due to a bug
|
|
247
|
-
// that needs to be fixed either way.
|
|
248
|
-
if (SummaryManager.isStartingOrRunning(this.state)) {
|
|
249
|
-
this.stop("summarizerException");
|
|
250
|
-
}
|
|
251
264
|
}
|
|
252
265
|
}).finally(() => {
|
|
253
266
|
assert(this.state !== SummaryManagerState.Off, 0x264 /* "Expected: Not Off" */);
|
|
254
267
|
this.state = SummaryManagerState.Off;
|
|
255
268
|
|
|
269
|
+
this.summarizer?.close();
|
|
256
270
|
this.summarizer = undefined;
|
|
257
271
|
|
|
258
|
-
this.logger.sendTelemetryEvent({
|
|
259
|
-
eventName: "EndingSummarizer",
|
|
260
|
-
reason,
|
|
261
|
-
});
|
|
262
|
-
|
|
263
272
|
if (this.getShouldSummarizeState().shouldSummarize) {
|
|
264
273
|
this.startSummarization();
|
|
265
274
|
}
|