@fluidframework/container-runtime 2.4.0-299707 → 2.5.0-302463

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 (84) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/container-runtime.test-files.tar +0 -0
  3. package/dist/blobManager/blobManager.d.ts.map +1 -1
  4. package/dist/blobManager/blobManager.js +10 -4
  5. package/dist/blobManager/blobManager.js.map +1 -1
  6. package/dist/channelCollection.d.ts.map +1 -1
  7. package/dist/channelCollection.js +10 -2
  8. package/dist/channelCollection.js.map +1 -1
  9. package/dist/containerRuntime.d.ts +6 -2
  10. package/dist/containerRuntime.d.ts.map +1 -1
  11. package/dist/containerRuntime.js +46 -28
  12. package/dist/containerRuntime.js.map +1 -1
  13. package/dist/dataStoreContexts.d.ts.map +1 -1
  14. package/dist/dataStoreContexts.js +14 -6
  15. package/dist/dataStoreContexts.js.map +1 -1
  16. package/dist/opLifecycle/index.d.ts +1 -1
  17. package/dist/opLifecycle/index.d.ts.map +1 -1
  18. package/dist/opLifecycle/index.js +2 -1
  19. package/dist/opLifecycle/index.js.map +1 -1
  20. package/dist/opLifecycle/outbox.d.ts +6 -0
  21. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  22. package/dist/opLifecycle/outbox.js +9 -1
  23. package/dist/opLifecycle/outbox.js.map +1 -1
  24. package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  25. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  26. package/dist/opLifecycle/remoteMessageProcessor.js +6 -18
  27. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  28. package/dist/opProperties.js +1 -1
  29. package/dist/opProperties.js.map +1 -1
  30. package/dist/packageVersion.d.ts +1 -1
  31. package/dist/packageVersion.js +1 -1
  32. package/dist/packageVersion.js.map +1 -1
  33. package/dist/summary/documentSchema.js +2 -2
  34. package/dist/summary/documentSchema.js.map +1 -1
  35. package/dist/summary/summaryCollection.d.ts.map +1 -1
  36. package/dist/summary/summaryCollection.js +3 -4
  37. package/dist/summary/summaryCollection.js.map +1 -1
  38. package/lib/blobManager/blobManager.d.ts.map +1 -1
  39. package/lib/blobManager/blobManager.js +10 -4
  40. package/lib/blobManager/blobManager.js.map +1 -1
  41. package/lib/channelCollection.d.ts.map +1 -1
  42. package/lib/channelCollection.js +11 -3
  43. package/lib/channelCollection.js.map +1 -1
  44. package/lib/containerRuntime.d.ts +6 -2
  45. package/lib/containerRuntime.d.ts.map +1 -1
  46. package/lib/containerRuntime.js +44 -27
  47. package/lib/containerRuntime.js.map +1 -1
  48. package/lib/dataStoreContexts.d.ts.map +1 -1
  49. package/lib/dataStoreContexts.js +15 -7
  50. package/lib/dataStoreContexts.js.map +1 -1
  51. package/lib/opLifecycle/index.d.ts +1 -1
  52. package/lib/opLifecycle/index.d.ts.map +1 -1
  53. package/lib/opLifecycle/index.js +1 -1
  54. package/lib/opLifecycle/index.js.map +1 -1
  55. package/lib/opLifecycle/outbox.d.ts +6 -0
  56. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  57. package/lib/opLifecycle/outbox.js +7 -0
  58. package/lib/opLifecycle/outbox.js.map +1 -1
  59. package/lib/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  60. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  61. package/lib/opLifecycle/remoteMessageProcessor.js +6 -18
  62. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  63. package/lib/opProperties.js +1 -1
  64. package/lib/opProperties.js.map +1 -1
  65. package/lib/packageVersion.d.ts +1 -1
  66. package/lib/packageVersion.js +1 -1
  67. package/lib/packageVersion.js.map +1 -1
  68. package/lib/summary/documentSchema.js +2 -2
  69. package/lib/summary/documentSchema.js.map +1 -1
  70. package/lib/summary/summaryCollection.d.ts.map +1 -1
  71. package/lib/summary/summaryCollection.js +3 -4
  72. package/lib/summary/summaryCollection.js.map +1 -1
  73. package/package.json +22 -26
  74. package/src/blobManager/blobManager.ts +10 -4
  75. package/src/channelCollection.ts +16 -7
  76. package/src/containerRuntime.ts +49 -27
  77. package/src/dataStoreContexts.ts +20 -7
  78. package/src/opLifecycle/index.ts +1 -1
  79. package/src/opLifecycle/outbox.ts +11 -0
  80. package/src/opLifecycle/remoteMessageProcessor.ts +8 -22
  81. package/src/opProperties.ts +1 -1
  82. package/src/packageVersion.ts +1 -1
  83. package/src/summary/documentSchema.ts +2 -2
  84. package/src/summary/summaryCollection.ts +3 -4
@@ -4,7 +4,7 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ContainerRuntime = exports.loadContainerRuntime = exports.makeLegacySendBatchFn = exports.getDeviceSpec = exports.agentSchedulerId = exports.isUnpackedRuntimeMessage = exports.defaultPendingOpsRetryDelayMs = exports.defaultPendingOpsWaitTimeoutMs = exports.disabledCompressionConfig = exports.CompressionAlgorithms = exports.defaultRuntimeHeaderData = exports.InactiveResponseHeaderKey = exports.TombstoneResponseHeaderKey = exports.DeletedResponseHeaderKey = exports.DefaultSummaryConfiguration = void 0;
7
+ exports.ContainerRuntime = exports.loadContainerRuntime = exports.getSingleUseLegacyLogCallback = exports.makeLegacySendBatchFn = exports.getDeviceSpec = exports.agentSchedulerId = exports.isUnpackedRuntimeMessage = exports.defaultPendingOpsRetryDelayMs = exports.defaultPendingOpsWaitTimeoutMs = exports.disabledCompressionConfig = exports.CompressionAlgorithms = exports.InactiveResponseHeaderKey = exports.TombstoneResponseHeaderKey = exports.DeletedResponseHeaderKey = exports.DefaultSummaryConfiguration = void 0;
8
8
  const client_utils_1 = require("@fluid-internal/client-utils");
9
9
  const container_definitions_1 = require("@fluidframework/container-definitions");
10
10
  const internal_1 = require("@fluidframework/container-definitions/internal");
@@ -90,12 +90,6 @@ exports.TombstoneResponseHeaderKey = "isTombstoned";
90
90
  * to this was experimental and is no longer supported.
91
91
  */
92
92
  exports.InactiveResponseHeaderKey = "isInactive";
93
- /** Default values for Runtime Headers */
94
- exports.defaultRuntimeHeaderData = {
95
- wait: true,
96
- viaHandle: false,
97
- allowTombstone: false,
98
- };
99
93
  /**
100
94
  * Available compression algorithms for op compression.
101
95
  * @legacy
@@ -243,9 +237,10 @@ let getSingleUseLegacyLogCallback = (logger, type) => {
243
237
  details: { codePath, type },
244
238
  });
245
239
  // Now that we've logged, prevent future logging (globally).
246
- getSingleUseLegacyLogCallback = () => () => { };
240
+ exports.getSingleUseLegacyLogCallback = () => () => { };
247
241
  };
248
242
  };
243
+ exports.getSingleUseLegacyLogCallback = getSingleUseLegacyLogCallback;
249
244
  /**
250
245
  * This is meant to be used by a {@link @fluidframework/container-definitions#IRuntimeFactory} to instantiate a container runtime.
251
246
  * @param params - An object which specifies all required and optional params necessary to instantiate a runtime.
@@ -1523,9 +1518,12 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
1523
1518
  // or something different, like a system message.
1524
1519
  const hasModernRuntimeMessageEnvelope = messageCopy.type === internal_3.MessageType.Operation;
1525
1520
  const savedOp = messageCopy.metadata?.savedOp;
1526
- const logLegacyCase = getSingleUseLegacyLogCallback(this.logger, messageCopy.type);
1527
- // We expect runtime messages to have JSON contents - deserialize it in place.
1528
- (0, index_js_3.ensureContentsDeserialized)(messageCopy, hasModernRuntimeMessageEnvelope, logLegacyCase);
1521
+ const logLegacyCase = (0, exports.getSingleUseLegacyLogCallback)(this.logger, messageCopy.type);
1522
+ let runtimeBatch = hasModernRuntimeMessageEnvelope || isUnpackedRuntimeMessage(messageCopy);
1523
+ if (runtimeBatch) {
1524
+ // We expect runtime messages to have JSON contents - deserialize it in place.
1525
+ (0, index_js_3.ensureContentsDeserialized)(messageCopy);
1526
+ }
1529
1527
  if (hasModernRuntimeMessageEnvelope) {
1530
1528
  // If the message has the modern message envelope, then process it here.
1531
1529
  // Here we unpack the message (decompress, unchunk, and/or ungroup) into a batch of messages with ContainerMessageType
@@ -1554,7 +1552,6 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
1554
1552
  throw error;
1555
1553
  }
1556
1554
  }
1557
- let runtimeBatch = true;
1558
1555
  // Reach out to PendingStateManager, either to zip localOpMetadata into the *local* message list,
1559
1556
  // or to check to ensure the *remote* messages don't match the batchId of a pending local batch.
1560
1557
  // This latter case would indicate that the container has forked - two copies are trying to persist the same local changes.
@@ -1593,8 +1590,17 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
1593
1590
  this.processInboundMessages(messagesWithPendingState, locationInBatch, local, savedOp, runtimeBatch);
1594
1591
  }
1595
1592
  else {
1593
+ if (!runtimeBatch) {
1594
+ // The DeltaManager used to do this, but doesn't anymore as of Loader v2.4
1595
+ // Anyone listening to our "op" event would expect the contents to be parsed per this same logic
1596
+ if (typeof messageCopy.contents === "string" &&
1597
+ messageCopy.contents !== "" &&
1598
+ messageCopy.type !== internal_3.MessageType.ClientLeave) {
1599
+ messageCopy.contents = JSON.parse(messageCopy.contents);
1600
+ }
1601
+ }
1596
1602
  this.processInboundMessages([{ message: messageCopy, localOpMetadata: undefined }], { batchStart: true, batchEnd: true }, // Single message
1597
- local, savedOp, isUnpackedRuntimeMessage(messageCopy) /* runtimeBatch */);
1603
+ local, savedOp, runtimeBatch);
1598
1604
  }
1599
1605
  if (local) {
1600
1606
  // If we have processed a local op, this means that the container is
@@ -1737,11 +1743,13 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
1737
1743
  const duration = Date.now() - this._signalTracking.signalTimestamp;
1738
1744
  this.mc.logger.sendPerformanceEvent({
1739
1745
  eventName: "SignalLatency",
1740
- duration, // Roundtrip duration of the tracked signal in milliseconds.
1741
- signalsSent: this._signalTracking.totalSignalsSentInLatencyWindow, // Signals sent since the last logged SignalLatency event.
1742
- signalsLost: this._signalTracking.signalsLost, // Signals lost since the last logged SignalLatency event.
1743
- outOfOrderSignals: this._signalTracking.signalsOutOfOrder, // Out of order signals since the last logged SignalLatency event.
1744
- reconnectCount: this.consecutiveReconnects, // Container reconnect count.
1746
+ details: {
1747
+ duration, // Roundtrip duration of the tracked signal in milliseconds.
1748
+ sent: this._signalTracking.totalSignalsSentInLatencyWindow, // Signals sent since the last logged SignalLatency event.
1749
+ lost: this._signalTracking.signalsLost, // Signals lost since the last logged SignalLatency event.
1750
+ outOfOrder: this._signalTracking.signalsOutOfOrder, // Out of order signals since the last logged SignalLatency event.
1751
+ reconnectCount: this.consecutiveReconnects, // Container reconnect count.
1752
+ },
1745
1753
  });
1746
1754
  this._signalTracking.signalsLost = 0;
1747
1755
  this._signalTracking.signalsOutOfOrder = 0;
@@ -1768,9 +1776,11 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
1768
1776
  this._signalTracking.signalsLost += signalsLost;
1769
1777
  this.mc.logger.sendErrorEvent({
1770
1778
  eventName: "SignalLost",
1771
- signalsLost, // Number of lost signals detected.
1772
- trackingSequenceNumber: this._signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
1773
- clientBroadcastSignalSequenceNumber, // Actual signal sequence number received.
1779
+ details: {
1780
+ signalsLost, // Number of lost signals detected.
1781
+ expectedSequenceNumber: this._signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
1782
+ clientBroadcastSignalSequenceNumber, // Actual signal sequence number received.
1783
+ },
1774
1784
  });
1775
1785
  }
1776
1786
  // Update the tracking signal sequence number to the next expected signal in the sequence.
@@ -1782,11 +1792,18 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
1782
1792
  clientBroadcastSignalSequenceNumber >=
1783
1793
  this._signalTracking.minimumTrackingSignalSequenceNumber) {
1784
1794
  this._signalTracking.signalsOutOfOrder++;
1795
+ const details = {
1796
+ expectedSequenceNumber: this._signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
1797
+ clientBroadcastSignalSequenceNumber, // Sequence number of the out of order signal.
1798
+ };
1799
+ // Only log `contents.type` when address is for container to avoid
1800
+ // chance that contents type is customer data.
1801
+ if (envelope.address === undefined) {
1802
+ details.contentsType = envelope.contents.type; // Type of signal that was received out of order.
1803
+ }
1785
1804
  this.mc.logger.sendTelemetryEvent({
1786
1805
  eventName: "SignalOutOfOrder",
1787
- type: envelope.contents.type, // Type of signal that was received out of order.
1788
- trackingSequenceNumber: this._signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
1789
- clientBroadcastSignalSequenceNumber, // Sequence number of the out of order signal.
1806
+ details,
1790
1807
  });
1791
1808
  }
1792
1809
  if (this._signalTracking.roundTripSignalSequenceNumber !== undefined &&
@@ -1795,7 +1812,8 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
1795
1812
  this._signalTracking.roundTripSignalSequenceNumber) {
1796
1813
  // Latency tracked signal has been received.
1797
1814
  // We now log the roundtrip duration of the tracked signal.
1798
- // This telemetry event also logs metrics for signals sent, signals lost, and out of order signals received.
1815
+ // This telemetry event also logs metrics for broadcast signals
1816
+ // sent, lost, and out of order.
1799
1817
  // These metrics are reset after logging the telemetry event.
1800
1818
  this.sendSignalTelemetryEvent();
1801
1819
  }
@@ -2641,7 +2659,7 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
2641
2659
  contents: idRange,
2642
2660
  };
2643
2661
  const idAllocationBatchMessage = {
2644
- contents: JSON.stringify(idAllocationMessage),
2662
+ contents: (0, index_js_3.serializeOpContents)(idAllocationMessage),
2645
2663
  referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
2646
2664
  };
2647
2665
  this.outbox.submitIdAllocation(idAllocationBatchMessage);
@@ -2684,12 +2702,12 @@ class ContainerRuntime extends client_utils_1.TypedEventEmitter {
2684
2702
  contents: schemaChangeMessage,
2685
2703
  };
2686
2704
  this.outbox.submit({
2687
- contents: JSON.stringify(msg),
2705
+ contents: (0, index_js_3.serializeOpContents)(msg),
2688
2706
  referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
2689
2707
  });
2690
2708
  }
2691
2709
  const message = {
2692
- contents: JSON.stringify(containerRuntimeMessage) /* serialized content */,
2710
+ contents: (0, index_js_3.serializeOpContents)(containerRuntimeMessage),
2693
2711
  metadata,
2694
2712
  localOpMetadata,
2695
2713
  referenceSequenceNumber: this.deltaManager.lastSequenceNumber,