@fluidframework/container-runtime 2.10.0 → 2.12.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.
Files changed (125) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/api-report/container-runtime.legacy.alpha.api.md +17 -15
  3. package/container-runtime.test-files.tar +0 -0
  4. package/dist/containerRuntime.d.ts +38 -5
  5. package/dist/containerRuntime.d.ts.map +1 -1
  6. package/dist/containerRuntime.js +40 -27
  7. package/dist/containerRuntime.js.map +1 -1
  8. package/dist/dataStoreContext.d.ts +15 -2
  9. package/dist/dataStoreContext.d.ts.map +1 -1
  10. package/dist/dataStoreContext.js +39 -1
  11. package/dist/dataStoreContext.js.map +1 -1
  12. package/dist/dataStoreRegistry.d.ts +1 -0
  13. package/dist/dataStoreRegistry.d.ts.map +1 -1
  14. package/dist/dataStoreRegistry.js +10 -2
  15. package/dist/dataStoreRegistry.js.map +1 -1
  16. package/dist/gc/garbageCollection.d.ts +2 -0
  17. package/dist/gc/garbageCollection.d.ts.map +1 -1
  18. package/dist/gc/garbageCollection.js +40 -11
  19. package/dist/gc/garbageCollection.js.map +1 -1
  20. package/dist/gc/gcSummaryStateTracker.d.ts +0 -7
  21. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  22. package/dist/gc/gcSummaryStateTracker.js +0 -12
  23. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  24. package/dist/index.d.ts +2 -2
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/messageTypes.d.ts +3 -39
  28. package/dist/messageTypes.d.ts.map +1 -1
  29. package/dist/messageTypes.js.map +1 -1
  30. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  31. package/dist/opLifecycle/remoteMessageProcessor.js +1 -5
  32. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  33. package/dist/packageVersion.d.ts +1 -1
  34. package/dist/packageVersion.js +1 -1
  35. package/dist/packageVersion.js.map +1 -1
  36. package/dist/pendingStateManager.d.ts.map +1 -1
  37. package/dist/pendingStateManager.js +2 -3
  38. package/dist/pendingStateManager.js.map +1 -1
  39. package/dist/summary/runWhileConnectedCoordinator.d.ts +2 -1
  40. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  41. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  42. package/dist/summary/runningSummarizer.d.ts +8 -1
  43. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  44. package/dist/summary/runningSummarizer.js +70 -8
  45. package/dist/summary/runningSummarizer.js.map +1 -1
  46. package/dist/summary/summarizer.d.ts +5 -2
  47. package/dist/summary/summarizer.d.ts.map +1 -1
  48. package/dist/summary/summarizer.js +39 -6
  49. package/dist/summary/summarizer.js.map +1 -1
  50. package/dist/summary/summarizerTypes.d.ts +8 -4
  51. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  52. package/dist/summary/summarizerTypes.js.map +1 -1
  53. package/dist/summary/summaryManager.d.ts +5 -2
  54. package/dist/summary/summaryManager.d.ts.map +1 -1
  55. package/dist/summary/summaryManager.js +23 -6
  56. package/dist/summary/summaryManager.js.map +1 -1
  57. package/lib/containerRuntime.d.ts +38 -5
  58. package/lib/containerRuntime.d.ts.map +1 -1
  59. package/lib/containerRuntime.js +40 -27
  60. package/lib/containerRuntime.js.map +1 -1
  61. package/lib/dataStoreContext.d.ts +15 -2
  62. package/lib/dataStoreContext.d.ts.map +1 -1
  63. package/lib/dataStoreContext.js +40 -2
  64. package/lib/dataStoreContext.js.map +1 -1
  65. package/lib/dataStoreRegistry.d.ts +1 -0
  66. package/lib/dataStoreRegistry.d.ts.map +1 -1
  67. package/lib/dataStoreRegistry.js +8 -0
  68. package/lib/dataStoreRegistry.js.map +1 -1
  69. package/lib/gc/garbageCollection.d.ts +2 -0
  70. package/lib/gc/garbageCollection.d.ts.map +1 -1
  71. package/lib/gc/garbageCollection.js +40 -11
  72. package/lib/gc/garbageCollection.js.map +1 -1
  73. package/lib/gc/gcSummaryStateTracker.d.ts +0 -7
  74. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  75. package/lib/gc/gcSummaryStateTracker.js +0 -12
  76. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  77. package/lib/index.d.ts +2 -2
  78. package/lib/index.d.ts.map +1 -1
  79. package/lib/index.js.map +1 -1
  80. package/lib/messageTypes.d.ts +3 -39
  81. package/lib/messageTypes.d.ts.map +1 -1
  82. package/lib/messageTypes.js.map +1 -1
  83. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  84. package/lib/opLifecycle/remoteMessageProcessor.js +1 -5
  85. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  86. package/lib/packageVersion.d.ts +1 -1
  87. package/lib/packageVersion.js +1 -1
  88. package/lib/packageVersion.js.map +1 -1
  89. package/lib/pendingStateManager.d.ts.map +1 -1
  90. package/lib/pendingStateManager.js +2 -3
  91. package/lib/pendingStateManager.js.map +1 -1
  92. package/lib/summary/runWhileConnectedCoordinator.d.ts +2 -1
  93. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  94. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  95. package/lib/summary/runningSummarizer.d.ts +8 -1
  96. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  97. package/lib/summary/runningSummarizer.js +70 -8
  98. package/lib/summary/runningSummarizer.js.map +1 -1
  99. package/lib/summary/summarizer.d.ts +5 -2
  100. package/lib/summary/summarizer.d.ts.map +1 -1
  101. package/lib/summary/summarizer.js +39 -6
  102. package/lib/summary/summarizer.js.map +1 -1
  103. package/lib/summary/summarizerTypes.d.ts +8 -4
  104. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  105. package/lib/summary/summarizerTypes.js.map +1 -1
  106. package/lib/summary/summaryManager.d.ts +5 -2
  107. package/lib/summary/summaryManager.d.ts.map +1 -1
  108. package/lib/summary/summaryManager.js +23 -6
  109. package/lib/summary/summaryManager.js.map +1 -1
  110. package/package.json +21 -73
  111. package/src/containerRuntime.ts +94 -44
  112. package/src/dataStoreContext.ts +57 -1
  113. package/src/dataStoreRegistry.ts +10 -0
  114. package/src/gc/garbageCollection.ts +41 -11
  115. package/src/gc/gcSummaryStateTracker.ts +0 -13
  116. package/src/index.ts +1 -3
  117. package/src/messageTypes.ts +3 -50
  118. package/src/opLifecycle/remoteMessageProcessor.ts +1 -6
  119. package/src/packageVersion.ts +1 -1
  120. package/src/pendingStateManager.ts +2 -3
  121. package/src/summary/runWhileConnectedCoordinator.ts +2 -5
  122. package/src/summary/runningSummarizer.ts +82 -11
  123. package/src/summary/summarizer.ts +49 -10
  124. package/src/summary/summarizerTypes.ts +11 -4
  125. package/src/summary/summaryManager.ts +30 -10
@@ -255,6 +255,10 @@ export async function loadContainerRuntime(params) {
255
255
  /**
256
256
  * Represents the runtime of the container. Contains helper functions/state of the container.
257
257
  * It will define the store level mappings.
258
+ *
259
+ * @deprecated To be removed from the Legacy-Alpha API in version 2.20.0.
260
+ * Use the loadContainerRuntime function and interfaces IContainerRuntime / IRuntime instead.
261
+ *
258
262
  * @legacy
259
263
  * @alpha
260
264
  */
@@ -421,7 +425,8 @@ export class ContainerRuntime extends TypedEventEmitter {
421
425
  runtime.onSchemaChange(schema);
422
426
  });
423
427
  const featureGatesForTelemetry = {};
424
- const runtime = new containerRuntimeCtor(context, registry, metadata, electedSummarizerData, chunks ?? [], aliases ?? [], {
428
+ // Make sure we've got all the options including internal ones
429
+ const internalRuntimeOptions = {
425
430
  summaryOptions,
426
431
  gcOptions,
427
432
  loadSequenceNumberVerification,
@@ -433,7 +438,8 @@ export class ContainerRuntime extends TypedEventEmitter {
433
438
  enableRuntimeIdCompressor: enableRuntimeIdCompressor,
434
439
  enableGroupedBatching,
435
440
  explicitSchemaControl,
436
- }, containerScope, logger, existing, blobManagerSnapshot, context.storage, createIdCompressorFn, documentSchemaController, featureGatesForTelemetry, provideEntryPoint, requestHandler, undefined, // summaryConfiguration
441
+ };
442
+ const runtime = new containerRuntimeCtor(context, registry, metadata, electedSummarizerData, chunks ?? [], aliases ?? [], internalRuntimeOptions, containerScope, logger, existing, blobManagerSnapshot, context.storage, createIdCompressorFn, documentSchemaController, featureGatesForTelemetry, provideEntryPoint, requestHandler, undefined, // summaryConfiguration
437
443
  recentBatchInfo);
438
444
  runtime.blobManager.stashedBlobsUploadP.then(() => {
439
445
  // make sure we didn't reconnect before the promise resolved
@@ -593,7 +599,6 @@ export class ContainerRuntime extends TypedEventEmitter {
593
599
  super();
594
600
  this.registry = registry;
595
601
  this.metadata = metadata;
596
- this.runtimeOptions = runtimeOptions;
597
602
  this.containerScope = containerScope;
598
603
  this.baseLogger = baseLogger;
599
604
  this._storage = _storage;
@@ -632,6 +637,12 @@ export class ContainerRuntime extends TypedEventEmitter {
632
637
  expiry: { policy: "absolute", durationMs: 60000 },
633
638
  });
634
639
  const { options, clientDetails, connected, baseSnapshot, submitFn, submitBatchFn, submitSummaryFn, submitSignalFn, disposeFn, closeFn, deltaManager, quorum, audience, loader, pendingLocalState, supportedFeatures, snapshotWithContents, } = context;
640
+ // Backfill in defaults for the internal runtimeOptions, since they may not be present on the provided runtimeOptions object
641
+ this.runtimeOptions = {
642
+ flushMode: defaultFlushMode,
643
+ enableGroupedBatching: true,
644
+ ...runtimeOptions,
645
+ };
635
646
  this.logger = createChildLogger({ logger: this.baseLogger });
636
647
  this.mc = createChildMonitoringContext({
637
648
  logger: this.logger,
@@ -753,14 +764,15 @@ export class ContainerRuntime extends TypedEventEmitter {
753
764
  this.maxConsecutiveReconnects =
754
765
  this.mc.config.getNumber(maxConsecutiveReconnectsKey) ??
755
766
  this.defaultMaxConsecutiveReconnects;
756
- if (runtimeOptions.flushMode === FlushModeExperimental.Async &&
767
+ if (this.runtimeOptions.flushMode ===
768
+ FlushModeExperimental.Async &&
757
769
  supportedFeatures?.get("referenceSequenceNumbers") !== true) {
758
770
  // The loader does not support reference sequence numbers, falling back on FlushMode.TurnBased
759
771
  this.mc.logger.sendErrorEvent({ eventName: "FlushModeFallback" });
760
772
  this._flushMode = FlushMode.TurnBased;
761
773
  }
762
774
  else {
763
- this._flushMode = runtimeOptions.flushMode;
775
+ this._flushMode = this.runtimeOptions.flushMode;
764
776
  }
765
777
  this.offlineEnabled =
766
778
  this.mc.config.getBoolean("Fluid.Container.enableOfflineLoad") ?? false;
@@ -970,8 +982,17 @@ export class ContainerRuntime extends TypedEventEmitter {
970
982
  formExponentialFn({ coefficient: 20, initialDelay: 0 })), {
971
983
  initialDelayMs: this.initialSummarizerDelayMs,
972
984
  });
973
- this.summaryManager.on("summarize", (eventProps) => {
974
- this.emit("summarize", eventProps);
985
+ // Forward events from SummaryManager
986
+ [
987
+ "summarize",
988
+ "summarizeAllAttemptsFailed",
989
+ "summarizerStop",
990
+ "summarizerStart",
991
+ "summarizerStartupFailed",
992
+ ].forEach((eventName) => {
993
+ this.summaryManager?.on(eventName, (...args) => {
994
+ this.emit(eventName, ...args);
995
+ });
975
996
  });
976
997
  this.summaryManager.start();
977
998
  }
@@ -1484,18 +1505,18 @@ export class ContainerRuntime extends TypedEventEmitter {
1484
1505
  this.flush();
1485
1506
  }
1486
1507
  this._connected = connected;
1487
- if (!connected) {
1488
- this._signalTracking.signalsLost = 0;
1489
- this._signalTracking.signalsOutOfOrder = 0;
1490
- this._signalTracking.signalTimestamp = 0;
1491
- this._signalTracking.signalsSentSinceLastLatencyMeasurement = 0;
1492
- this._signalTracking.totalSignalsSentInLatencyWindow = 0;
1493
- this._signalTracking.roundTripSignalSequenceNumber = undefined;
1494
- this._signalTracking.trackingSignalSequenceNumber = undefined;
1495
- this._signalTracking.minimumTrackingSignalSequenceNumber = undefined;
1496
- }
1497
- else {
1508
+ if (connected) {
1498
1509
  assert(this.attachState === AttachState.Attached, 0x3cd /* Connection is possible only if container exists in storage */);
1510
+ if (changeOfState) {
1511
+ this._signalTracking.signalsLost = 0;
1512
+ this._signalTracking.signalsOutOfOrder = 0;
1513
+ this._signalTracking.signalTimestamp = 0;
1514
+ this._signalTracking.signalsSentSinceLastLatencyMeasurement = 0;
1515
+ this._signalTracking.totalSignalsSentInLatencyWindow = 0;
1516
+ this._signalTracking.roundTripSignalSequenceNumber = undefined;
1517
+ this._signalTracking.trackingSignalSequenceNumber = undefined;
1518
+ this._signalTracking.minimumTrackingSignalSequenceNumber = undefined;
1519
+ }
1499
1520
  }
1500
1521
  // Fail while disconnected
1501
1522
  if (reconnection) {
@@ -1909,14 +1930,7 @@ export class ContainerRuntime extends TypedEventEmitter {
1909
1930
  targetClientId: message.targetClientId,
1910
1931
  };
1911
1932
  // Only collect signal telemetry for broadcast messages sent by the current client.
1912
- if (message.clientId === this.clientId &&
1913
- // jason-ha: This `connected` check seems incorrect. Signals that come through
1914
- // here must have been received while connected to service and there is no need
1915
- // to avoid processing when connection has dropped. Because container runtime's
1916
- // `connected` (and `_connected`) state also reflects some ops state, it may
1917
- // easily be false when newly connected and signal tracking may very well
1918
- // complain lost signals (that were simply skipped per this check).
1919
- this.connected) {
1933
+ if (message.clientId === this.clientId) {
1920
1934
  this.processSignalForTelemetry(envelope);
1921
1935
  }
1922
1936
  if (envelope.address === undefined) {
@@ -2957,7 +2971,6 @@ export class ContainerRuntime extends TypedEventEmitter {
2957
2971
  this.channelCollection.rollback(type, contents, localOpMetadata);
2958
2972
  break;
2959
2973
  default:
2960
- // Don't check message.compatDetails because this is for rolling back a local op so the type will be known
2961
2974
  throw new Error(`Can't rollback ${type}`);
2962
2975
  }
2963
2976
  }