@fluidframework/container-runtime 0.57.0 → 0.58.0-55983

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 (112) hide show
  1. package/dist/batchTracker.d.ts +26 -0
  2. package/dist/batchTracker.d.ts.map +1 -0
  3. package/dist/batchTracker.js +59 -0
  4. package/dist/batchTracker.js.map +1 -0
  5. package/dist/containerRuntime.d.ts +10 -5
  6. package/dist/containerRuntime.d.ts.map +1 -1
  7. package/dist/containerRuntime.js +113 -35
  8. package/dist/containerRuntime.js.map +1 -1
  9. package/dist/dataStore.d.ts +1 -36
  10. package/dist/dataStore.d.ts.map +1 -1
  11. package/dist/dataStore.js +5 -27
  12. package/dist/dataStore.js.map +1 -1
  13. package/dist/dataStoreContext.d.ts +1 -7
  14. package/dist/dataStoreContext.d.ts.map +1 -1
  15. package/dist/dataStoreContext.js +11 -7
  16. package/dist/dataStoreContext.js.map +1 -1
  17. package/dist/dataStores.js +1 -1
  18. package/dist/dataStores.js.map +1 -1
  19. package/dist/garbageCollection.d.ts +1 -0
  20. package/dist/garbageCollection.d.ts.map +1 -1
  21. package/dist/garbageCollection.js +6 -4
  22. package/dist/garbageCollection.js.map +1 -1
  23. package/dist/index.d.ts +0 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -3
  26. package/dist/index.js.map +1 -1
  27. package/dist/packageVersion.d.ts +1 -1
  28. package/dist/packageVersion.d.ts.map +1 -1
  29. package/dist/packageVersion.js +1 -1
  30. package/dist/packageVersion.js.map +1 -1
  31. package/dist/pendingStateManager.d.ts.map +1 -1
  32. package/dist/pendingStateManager.js +1 -6
  33. package/dist/pendingStateManager.js.map +1 -1
  34. package/dist/runningSummarizer.d.ts +1 -1
  35. package/dist/runningSummarizer.d.ts.map +1 -1
  36. package/dist/runningSummarizer.js +1 -1
  37. package/dist/runningSummarizer.js.map +1 -1
  38. package/dist/summarizer.d.ts +3 -4
  39. package/dist/summarizer.d.ts.map +1 -1
  40. package/dist/summarizer.js +8 -9
  41. package/dist/summarizer.js.map +1 -1
  42. package/dist/summaryGenerator.d.ts +1 -1
  43. package/dist/summaryGenerator.d.ts.map +1 -1
  44. package/dist/summaryGenerator.js +1 -1
  45. package/dist/summaryGenerator.js.map +1 -1
  46. package/dist/summaryManager.d.ts +2 -6
  47. package/dist/summaryManager.d.ts.map +1 -1
  48. package/dist/summaryManager.js +4 -10
  49. package/dist/summaryManager.js.map +1 -1
  50. package/lib/batchTracker.d.ts +26 -0
  51. package/lib/batchTracker.d.ts.map +1 -0
  52. package/lib/batchTracker.js +54 -0
  53. package/lib/batchTracker.js.map +1 -0
  54. package/lib/containerRuntime.d.ts +10 -5
  55. package/lib/containerRuntime.d.ts.map +1 -1
  56. package/lib/containerRuntime.js +114 -36
  57. package/lib/containerRuntime.js.map +1 -1
  58. package/lib/dataStore.d.ts +1 -36
  59. package/lib/dataStore.d.ts.map +1 -1
  60. package/lib/dataStore.js +4 -26
  61. package/lib/dataStore.js.map +1 -1
  62. package/lib/dataStoreContext.d.ts +1 -7
  63. package/lib/dataStoreContext.d.ts.map +1 -1
  64. package/lib/dataStoreContext.js +12 -8
  65. package/lib/dataStoreContext.js.map +1 -1
  66. package/lib/dataStores.js +1 -1
  67. package/lib/dataStores.js.map +1 -1
  68. package/lib/garbageCollection.d.ts +1 -0
  69. package/lib/garbageCollection.d.ts.map +1 -1
  70. package/lib/garbageCollection.js +4 -2
  71. package/lib/garbageCollection.js.map +1 -1
  72. package/lib/index.d.ts +0 -1
  73. package/lib/index.d.ts.map +1 -1
  74. package/lib/index.js +0 -1
  75. package/lib/index.js.map +1 -1
  76. package/lib/packageVersion.d.ts +1 -1
  77. package/lib/packageVersion.d.ts.map +1 -1
  78. package/lib/packageVersion.js +1 -1
  79. package/lib/packageVersion.js.map +1 -1
  80. package/lib/pendingStateManager.d.ts.map +1 -1
  81. package/lib/pendingStateManager.js +1 -6
  82. package/lib/pendingStateManager.js.map +1 -1
  83. package/lib/runningSummarizer.d.ts +1 -1
  84. package/lib/runningSummarizer.d.ts.map +1 -1
  85. package/lib/runningSummarizer.js +1 -1
  86. package/lib/runningSummarizer.js.map +1 -1
  87. package/lib/summarizer.d.ts +3 -4
  88. package/lib/summarizer.d.ts.map +1 -1
  89. package/lib/summarizer.js +8 -9
  90. package/lib/summarizer.js.map +1 -1
  91. package/lib/summaryGenerator.d.ts +1 -1
  92. package/lib/summaryGenerator.d.ts.map +1 -1
  93. package/lib/summaryGenerator.js +1 -1
  94. package/lib/summaryGenerator.js.map +1 -1
  95. package/lib/summaryManager.d.ts +2 -6
  96. package/lib/summaryManager.d.ts.map +1 -1
  97. package/lib/summaryManager.js +5 -11
  98. package/lib/summaryManager.js.map +1 -1
  99. package/package.json +16 -16
  100. package/src/batchTracker.ts +80 -0
  101. package/src/containerRuntime.ts +151 -38
  102. package/src/dataStore.ts +6 -42
  103. package/src/dataStoreContext.ts +12 -15
  104. package/src/dataStores.ts +1 -1
  105. package/src/garbageCollection.ts +11 -10
  106. package/src/index.ts +0 -1
  107. package/src/packageVersion.ts +1 -1
  108. package/src/pendingStateManager.ts +4 -8
  109. package/src/runningSummarizer.ts +3 -3
  110. package/src/summarizer.ts +8 -8
  111. package/src/summaryGenerator.ts +2 -2
  112. package/src/summaryManager.ts +5 -20
@@ -51,7 +51,7 @@ export class RunningSummarizer implements IDisposable {
51
51
  configuration: ISummaryConfiguration,
52
52
  submitSummaryCallback: (options: ISubmitSummaryOptions) => Promise<SubmitSummaryResult>,
53
53
  heuristicData: ISummarizeHeuristicData,
54
- raiseSummarizingError: (errorCode: string) => void,
54
+ raiseSummarizingError: (errorMessage: string) => void,
55
55
  summaryCollection: SummaryCollection,
56
56
  cancellationToken: ISummaryCancellationToken,
57
57
  stopSummarizerCallback: (reason: SummarizerStopReason) => void,
@@ -101,7 +101,7 @@ export class RunningSummarizer implements IDisposable {
101
101
  private readonly configuration: ISummaryConfiguration,
102
102
  private readonly submitSummaryCallback: (options: ISubmitSummaryOptions) => Promise<SubmitSummaryResult>,
103
103
  private readonly heuristicData: ISummarizeHeuristicData,
104
- private readonly raiseSummarizingError: (errorCode: string) => void,
104
+ private readonly raiseSummarizingError: (errorMessage: string) => void,
105
105
  private readonly summaryCollection: SummaryCollection,
106
106
  private readonly cancellationToken: ISummaryCancellationToken,
107
107
  private readonly stopSummarizerCallback: (reason: SummarizerStopReason) => void,
@@ -131,7 +131,7 @@ export class RunningSummarizer implements IDisposable {
131
131
  this.pendingAckTimer = new PromiseTimer(
132
132
  maxAckWaitTime,
133
133
  () => {
134
- this.raiseSummarizingError("summaryAckWaitTimeout");
134
+ this.raiseSummarizingError("Pending summary ack not received in time");
135
135
  // Note: summarizeCount (from ChildLogger definition) may be 0,
136
136
  // since this code path is hit when RunningSummarizer first starts up,
137
137
  // before this instance has kicked off a new summarize run.
package/src/summarizer.ts CHANGED
@@ -46,20 +46,19 @@ export class SummarizingWarning extends LoggingError implements ISummarizingWarn
46
46
 
47
47
  constructor(
48
48
  errorMessage: string,
49
- readonly fluidErrorCode: string,
50
49
  readonly logged: boolean = false,
51
50
  ) {
52
51
  super(errorMessage);
53
52
  }
54
53
 
55
- static wrap(error: any, errorCode: string, logged: boolean = false, logger: ITelemetryLogger) {
56
- const newErrorFn = (errMsg: string) => new SummarizingWarning(errMsg, errorCode, logged);
54
+ static wrap(error: any, logged: boolean = false, logger: ITelemetryLogger) {
55
+ const newErrorFn = (errMsg: string) => new SummarizingWarning(errMsg, logged);
57
56
  return wrapErrorAndLog<SummarizingWarning>(error, newErrorFn, logger);
58
57
  }
59
58
  }
60
59
 
61
60
  export const createSummarizingWarning =
62
- (errorCode: string, logged: boolean) => new SummarizingWarning(errorCode, errorCode, logged);
61
+ (errorMessage: string, logged: boolean) => new SummarizingWarning(errorMessage, logged);
63
62
 
64
63
  /**
65
64
  * Summarizer is responsible for coordinating when to generate and send summaries.
@@ -144,7 +143,7 @@ export class Summarizer extends EventEmitter implements ISummarizer {
144
143
  return await this.runCore(onBehalfOf, options);
145
144
  } catch (error) {
146
145
  this.stop("summarizerException");
147
- throw SummarizingWarning.wrap(error, "summarizerRun", false /* logged */, this.logger);
146
+ throw SummarizingWarning.wrap(error, false /* logged */, this.logger);
148
147
  } finally {
149
148
  this.dispose();
150
149
  this.runtime.closeFn();
@@ -257,9 +256,10 @@ export class Summarizer extends EventEmitter implements ISummarizer {
257
256
  summaryTime: Date.now(),
258
257
  } as const,
259
258
  ),
260
- (errorCode: string) => {
259
+ (errorMessage: string) => {
261
260
  if (!this._disposed) {
262
- this.emit("summarizingError", createSummarizingWarning(errorCode, true));
261
+ this.logger.sendErrorEvent({ eventName: "summarizingError" },
262
+ createSummarizingWarning(errorMessage, true));
263
263
  }
264
264
  },
265
265
  this.summaryCollection,
@@ -356,7 +356,7 @@ export class Summarizer extends EventEmitter implements ISummarizer {
356
356
  return builder.build();
357
357
  }
358
358
  catch (error) {
359
- throw SummarizingWarning.wrap(error, "summarizerRun", false /* logged */, this.logger);
359
+ throw SummarizingWarning.wrap(error, false /* logged */, this.logger);
360
360
  }
361
361
  };
362
362
 
@@ -152,7 +152,7 @@ export class SummaryGenerator {
152
152
  private readonly pendingAckTimer: IPromiseTimer,
153
153
  private readonly heuristicData: ISummarizeHeuristicData,
154
154
  private readonly submitSummaryCallback: (options: ISubmitSummaryOptions) => Promise<SubmitSummaryResult>,
155
- private readonly raiseSummarizingError: (errorCode: string) => void,
155
+ private readonly raiseSummarizingError: (errorMessage: string) => void,
156
156
  private readonly successfulSummaryCallback: () => void,
157
157
  private readonly summaryWatcher: Pick<IClientSummaryWatcher, "watchSummary">,
158
158
  private readonly logger: ITelemetryLogger,
@@ -394,7 +394,7 @@ export class SummaryGenerator {
394
394
  const message = summaryNack?.message;
395
395
  const retryAfterSeconds = summaryNack?.retryAfter;
396
396
 
397
- const error = new LoggingError(`summaryNack: ${message}`, { retryAfterSeconds });
397
+ const error = new LoggingError(`Received summaryNack: ${message}`, { retryAfterSeconds });
398
398
  logger.sendErrorEvent(
399
399
  { eventName: "SummaryNack", ...summarizeTelemetryProps, retryAfterSeconds }, error);
400
400
 
@@ -4,16 +4,14 @@
4
4
  */
5
5
 
6
6
  import { IDisposable, IEvent, IEventProvider, ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import { TypedEventEmitter, assert } from "@fluidframework/common-utils";
7
+ import { assert } from "@fluidframework/common-utils";
8
8
  import { ChildLogger, PerformanceEvent } from "@fluidframework/telemetry-utils";
9
9
  import { DriverErrorType } from "@fluidframework/driver-definitions";
10
- import { createSummarizingWarning } from "./summarizer";
11
10
  import { ISummarizerClientElection } from "./summarizerClientElection";
12
11
  import { IThrottler } from "./throttler";
13
12
  import {
14
13
  ISummarizer,
15
14
  ISummarizerOptions,
16
- ISummarizingWarning,
17
15
  SummarizerStopReason,
18
16
  } from "./summarizerTypes";
19
17
  import { SummaryCollection } from "./summaryCollection";
@@ -60,10 +58,6 @@ export interface IConnectedState extends IEventProvider<IConnectedEvents> {
60
58
  readonly clientId: string | undefined;
61
59
  }
62
60
 
63
- export interface ISummaryManagerEvents extends IEvent {
64
- (event: "summarizerWarning", listener: (warning: ISummarizingWarning) => void);
65
- }
66
-
67
61
  export interface ISummaryManagerConfig {
68
62
  initialDelayMs: number;
69
63
  opsToBypassInitialDelay: number;
@@ -74,7 +68,7 @@ export interface ISummaryManagerConfig {
74
68
  * It observes changes in calculated summarizer and reacts to changes by either creating summarizer client or
75
69
  * stopping existing summarizer client.
76
70
  */
77
- export class SummaryManager extends TypedEventEmitter<ISummaryManagerEvents> implements IDisposable {
71
+ export class SummaryManager implements IDisposable {
78
72
  private readonly logger: ITelemetryLogger;
79
73
  private readonly opsToBypassInitialDelay: number;
80
74
  private readonly initialDelayMs: number;
@@ -105,7 +99,6 @@ export class SummaryManager extends TypedEventEmitter<ISummaryManagerEvents> imp
105
99
  }: Readonly<Partial<ISummaryManagerConfig>> = {},
106
100
  private readonly summarizerOptions?: Readonly<Partial<ISummarizerOptions>>,
107
101
  ) {
108
- super();
109
102
 
110
103
  this.logger = ChildLogger.create(
111
104
  parentLogger,
@@ -219,8 +212,6 @@ export class SummaryManager extends TypedEventEmitter<ISummaryManagerEvents> imp
219
212
  assert(this.state === SummaryManagerState.Starting, 0x263 /* "Expected: starting" */);
220
213
  this.state = SummaryManagerState.Running;
221
214
 
222
- summarizer.on("summarizingError",
223
- (warning: ISummarizingWarning) => this.emit("summarizerWarning", warning));
224
215
  this.summarizer = summarizer;
225
216
 
226
217
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -238,8 +229,8 @@ export class SummaryManager extends TypedEventEmitter<ISummaryManagerEvents> imp
238
229
  // we ignore blindly, so try to narrow signature we are looking for - skip logging
239
230
  // error only if this client should no longer be a summarizer (which in practice
240
231
  // means it also lost connection), and error happened on load (we do not have summarizer).
241
- // We could add error.fluidErrorCode !== "containerClosedWithoutErrorDuringLoad" check to narrow it down,
242
- // but that does not seem to be necessary.
232
+ // We could annotate the error raised in Container.load where the container closed during load with no error
233
+ // and check for that case here, but that does not seem to be necessary.
243
234
  if (this.getShouldSummarizeState().shouldSummarize || this.summarizer !== undefined) {
244
235
  // Report any failure as an error unless it was due to cancellation (like "disconnected" error)
245
236
  // If failure happened on container load, we may not yet realized that socket disconnected, so check
@@ -251,7 +242,6 @@ export class SummaryManager extends TypedEventEmitter<ISummaryManagerEvents> imp
251
242
  category,
252
243
  },
253
244
  error);
254
- this.emit("summarizerWarning", error);
255
245
 
256
246
  // Note that summarizer may keep going (like doing last summary).
257
247
  // Ideally we await stopping process, but this code path is due to a bug
@@ -296,12 +286,6 @@ export class SummaryManager extends TypedEventEmitter<ISummaryManagerEvents> imp
296
286
  private async delayBeforeCreatingSummarizer(): Promise<boolean> {
297
287
  // throttle creation of new summarizer containers to prevent spamming the server with websocket connections
298
288
  let delayMs = this.startThrottler.getDelay();
299
- if (delayMs > 0 && delayMs > this.startThrottler.maxDelayMs) {
300
- this.emit(
301
- "summarizerWarning",
302
- createSummarizingWarning("summaryManagerCreateSummarizerMaxThrottleDelay", false),
303
- );
304
- }
305
289
 
306
290
  // We have been elected the summarizer. Some day we may be able to summarize with a live document but for
307
291
  // now we play it safe and launch a second copy.
@@ -309,6 +293,7 @@ export class SummaryManager extends TypedEventEmitter<ISummaryManagerEvents> imp
309
293
  eventName: "CreatingSummarizer",
310
294
  throttlerDelay: delayMs,
311
295
  initialDelay: this.initialDelayMs,
296
+ startThrottlerMaxDelayMs: this.startThrottler.maxDelayMs,
312
297
  opsSinceLastAck: this.summaryCollection.opsSinceLastAck,
313
298
  opsToBypassInitialDelay: this.opsToBypassInitialDelay,
314
299
  });