@fluidframework/container-runtime 2.0.0-dev.4.4.0.162574 → 2.0.0-dev.5.2.0.169897

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 (262) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/batchTracker.d.ts +4 -4
  3. package/dist/batchTracker.d.ts.map +1 -1
  4. package/dist/batchTracker.js +2 -2
  5. package/dist/batchTracker.js.map +1 -1
  6. package/dist/blobManager.js +2 -2
  7. package/dist/blobManager.js.map +1 -1
  8. package/dist/connectionTelemetry.d.ts +2 -2
  9. package/dist/connectionTelemetry.d.ts.map +1 -1
  10. package/dist/connectionTelemetry.js.map +1 -1
  11. package/dist/containerRuntime.d.ts +12 -11
  12. package/dist/containerRuntime.d.ts.map +1 -1
  13. package/dist/containerRuntime.js +42 -15
  14. package/dist/containerRuntime.js.map +1 -1
  15. package/dist/dataStore.d.ts +2 -2
  16. package/dist/dataStore.d.ts.map +1 -1
  17. package/dist/dataStore.js +1 -1
  18. package/dist/dataStore.js.map +1 -1
  19. package/dist/dataStoreContext.d.ts +3 -3
  20. package/dist/dataStoreContext.d.ts.map +1 -1
  21. package/dist/dataStoreContext.js +1 -2
  22. package/dist/dataStoreContext.js.map +1 -1
  23. package/dist/dataStoreContexts.d.ts.map +1 -1
  24. package/dist/dataStoreContexts.js.map +1 -1
  25. package/dist/deltaScheduler.d.ts +2 -2
  26. package/dist/deltaScheduler.d.ts.map +1 -1
  27. package/dist/deltaScheduler.js +1 -1
  28. package/dist/deltaScheduler.js.map +1 -1
  29. package/dist/gc/garbageCollection.d.ts +2 -2
  30. package/dist/gc/garbageCollection.d.ts.map +1 -1
  31. package/dist/gc/garbageCollection.js.map +1 -1
  32. package/dist/gc/gcDefinitions.d.ts +3 -3
  33. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  34. package/dist/gc/gcDefinitions.js.map +1 -1
  35. package/dist/gc/gcTelemetry.d.ts +5 -5
  36. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  37. package/dist/gc/gcTelemetry.js.map +1 -1
  38. package/dist/id-compressor/idCompressor.d.ts +2 -2
  39. package/dist/id-compressor/idCompressor.d.ts.map +1 -1
  40. package/dist/id-compressor/idCompressor.js.map +1 -1
  41. package/dist/opLifecycle/definitions.d.ts +2 -2
  42. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  43. package/dist/opLifecycle/definitions.js.map +1 -1
  44. package/dist/opLifecycle/opCompressor.d.ts +2 -2
  45. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  46. package/dist/opLifecycle/opCompressor.js +3 -6
  47. package/dist/opLifecycle/opCompressor.js.map +1 -1
  48. package/dist/opLifecycle/opDecompressor.d.ts +2 -2
  49. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  50. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  51. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  52. package/dist/opLifecycle/opGroupingManager.js +5 -6
  53. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  54. package/dist/opLifecycle/opSplitter.d.ts +2 -2
  55. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  56. package/dist/opLifecycle/opSplitter.js +3 -3
  57. package/dist/opLifecycle/opSplitter.js.map +1 -1
  58. package/dist/opLifecycle/outbox.d.ts +2 -2
  59. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  60. package/dist/opLifecycle/outbox.js +7 -3
  61. package/dist/opLifecycle/outbox.js.map +1 -1
  62. package/dist/packageVersion.d.ts +1 -1
  63. package/dist/packageVersion.js +1 -1
  64. package/dist/packageVersion.js.map +1 -1
  65. package/dist/pendingStateManager.d.ts +18 -14
  66. package/dist/pendingStateManager.d.ts.map +1 -1
  67. package/dist/pendingStateManager.js +35 -55
  68. package/dist/pendingStateManager.js.map +1 -1
  69. package/dist/scheduleManager.d.ts +2 -2
  70. package/dist/scheduleManager.d.ts.map +1 -1
  71. package/dist/scheduleManager.js.map +1 -1
  72. package/dist/summary/orderedClientElection.d.ts +4 -3
  73. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  74. package/dist/summary/orderedClientElection.js +3 -18
  75. package/dist/summary/orderedClientElection.js.map +1 -1
  76. package/dist/summary/runningSummarizer.d.ts +4 -3
  77. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  78. package/dist/summary/runningSummarizer.js +5 -6
  79. package/dist/summary/runningSummarizer.js.map +1 -1
  80. package/dist/summary/summarizer.d.ts +2 -3
  81. package/dist/summary/summarizer.d.ts.map +1 -1
  82. package/dist/summary/summarizer.js +2 -3
  83. package/dist/summary/summarizer.js.map +1 -1
  84. package/dist/summary/summarizerClientElection.d.ts +3 -2
  85. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  86. package/dist/summary/summarizerClientElection.js.map +1 -1
  87. package/dist/summary/summarizerHeuristics.d.ts +2 -2
  88. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  89. package/dist/summary/summarizerHeuristics.js.map +1 -1
  90. package/dist/summary/summarizerNode/summarizerNode.d.ts +10 -9
  91. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  92. package/dist/summary/summarizerNode/summarizerNode.js +1 -1
  93. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  94. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +3 -3
  95. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  96. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  97. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +6 -6
  98. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  99. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
  100. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  101. package/dist/summary/summarizerTypes.d.ts +8 -8
  102. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  103. package/dist/summary/summarizerTypes.js.map +1 -1
  104. package/dist/summary/summaryCollection.d.ts +3 -2
  105. package/dist/summary/summaryCollection.d.ts.map +1 -1
  106. package/dist/summary/summaryCollection.js.map +1 -1
  107. package/dist/summary/summaryGenerator.d.ts +2 -2
  108. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  109. package/dist/summary/summaryGenerator.js +1 -1
  110. package/dist/summary/summaryGenerator.js.map +1 -1
  111. package/dist/summary/summaryManager.d.ts +3 -2
  112. package/dist/summary/summaryManager.d.ts.map +1 -1
  113. package/dist/summary/summaryManager.js.map +1 -1
  114. package/dist/tsdoc-metadata.json +11 -0
  115. package/lib/batchTracker.d.ts +4 -4
  116. package/lib/batchTracker.d.ts.map +1 -1
  117. package/lib/batchTracker.js +2 -2
  118. package/lib/batchTracker.js.map +1 -1
  119. package/lib/blobManager.js +2 -2
  120. package/lib/blobManager.js.map +1 -1
  121. package/lib/connectionTelemetry.d.ts +2 -2
  122. package/lib/connectionTelemetry.d.ts.map +1 -1
  123. package/lib/connectionTelemetry.js.map +1 -1
  124. package/lib/containerRuntime.d.ts +12 -11
  125. package/lib/containerRuntime.d.ts.map +1 -1
  126. package/lib/containerRuntime.js +42 -15
  127. package/lib/containerRuntime.js.map +1 -1
  128. package/lib/dataStore.d.ts +2 -2
  129. package/lib/dataStore.d.ts.map +1 -1
  130. package/lib/dataStore.js +1 -1
  131. package/lib/dataStore.js.map +1 -1
  132. package/lib/dataStoreContext.d.ts +3 -3
  133. package/lib/dataStoreContext.d.ts.map +1 -1
  134. package/lib/dataStoreContext.js +1 -2
  135. package/lib/dataStoreContext.js.map +1 -1
  136. package/lib/dataStoreContexts.d.ts.map +1 -1
  137. package/lib/dataStoreContexts.js.map +1 -1
  138. package/lib/deltaScheduler.d.ts +2 -2
  139. package/lib/deltaScheduler.d.ts.map +1 -1
  140. package/lib/deltaScheduler.js +1 -1
  141. package/lib/deltaScheduler.js.map +1 -1
  142. package/lib/gc/garbageCollection.d.ts +2 -2
  143. package/lib/gc/garbageCollection.d.ts.map +1 -1
  144. package/lib/gc/garbageCollection.js.map +1 -1
  145. package/lib/gc/gcDefinitions.d.ts +3 -3
  146. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  147. package/lib/gc/gcDefinitions.js.map +1 -1
  148. package/lib/gc/gcTelemetry.d.ts +5 -5
  149. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  150. package/lib/gc/gcTelemetry.js +1 -1
  151. package/lib/gc/gcTelemetry.js.map +1 -1
  152. package/lib/id-compressor/idCompressor.d.ts +2 -2
  153. package/lib/id-compressor/idCompressor.d.ts.map +1 -1
  154. package/lib/id-compressor/idCompressor.js.map +1 -1
  155. package/lib/opLifecycle/definitions.d.ts +2 -2
  156. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  157. package/lib/opLifecycle/definitions.js.map +1 -1
  158. package/lib/opLifecycle/opCompressor.d.ts +2 -2
  159. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  160. package/lib/opLifecycle/opCompressor.js +3 -6
  161. package/lib/opLifecycle/opCompressor.js.map +1 -1
  162. package/lib/opLifecycle/opDecompressor.d.ts +2 -2
  163. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  164. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  165. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  166. package/lib/opLifecycle/opGroupingManager.js +5 -6
  167. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  168. package/lib/opLifecycle/opSplitter.d.ts +2 -2
  169. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  170. package/lib/opLifecycle/opSplitter.js +3 -3
  171. package/lib/opLifecycle/opSplitter.js.map +1 -1
  172. package/lib/opLifecycle/outbox.d.ts +2 -2
  173. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  174. package/lib/opLifecycle/outbox.js +7 -3
  175. package/lib/opLifecycle/outbox.js.map +1 -1
  176. package/lib/packageVersion.d.ts +1 -1
  177. package/lib/packageVersion.js +1 -1
  178. package/lib/packageVersion.js.map +1 -1
  179. package/lib/pendingStateManager.d.ts +18 -14
  180. package/lib/pendingStateManager.d.ts.map +1 -1
  181. package/lib/pendingStateManager.js +35 -55
  182. package/lib/pendingStateManager.js.map +1 -1
  183. package/lib/scheduleManager.d.ts +2 -2
  184. package/lib/scheduleManager.d.ts.map +1 -1
  185. package/lib/scheduleManager.js.map +1 -1
  186. package/lib/summary/orderedClientElection.d.ts +4 -3
  187. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  188. package/lib/summary/orderedClientElection.js +3 -18
  189. package/lib/summary/orderedClientElection.js.map +1 -1
  190. package/lib/summary/runningSummarizer.d.ts +4 -3
  191. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  192. package/lib/summary/runningSummarizer.js +5 -6
  193. package/lib/summary/runningSummarizer.js.map +1 -1
  194. package/lib/summary/summarizer.d.ts +2 -3
  195. package/lib/summary/summarizer.d.ts.map +1 -1
  196. package/lib/summary/summarizer.js +2 -3
  197. package/lib/summary/summarizer.js.map +1 -1
  198. package/lib/summary/summarizerClientElection.d.ts +3 -2
  199. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  200. package/lib/summary/summarizerClientElection.js.map +1 -1
  201. package/lib/summary/summarizerHeuristics.d.ts +2 -2
  202. package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
  203. package/lib/summary/summarizerHeuristics.js.map +1 -1
  204. package/lib/summary/summarizerNode/summarizerNode.d.ts +10 -9
  205. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  206. package/lib/summary/summarizerNode/summarizerNode.js +1 -1
  207. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  208. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +3 -3
  209. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  210. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  211. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +6 -6
  212. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  213. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +1 -1
  214. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  215. package/lib/summary/summarizerTypes.d.ts +8 -8
  216. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  217. package/lib/summary/summarizerTypes.js.map +1 -1
  218. package/lib/summary/summaryCollection.d.ts +3 -2
  219. package/lib/summary/summaryCollection.d.ts.map +1 -1
  220. package/lib/summary/summaryCollection.js.map +1 -1
  221. package/lib/summary/summaryGenerator.d.ts +2 -2
  222. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  223. package/lib/summary/summaryGenerator.js +1 -1
  224. package/lib/summary/summaryGenerator.js.map +1 -1
  225. package/lib/summary/summaryManager.d.ts +3 -2
  226. package/lib/summary/summaryManager.d.ts.map +1 -1
  227. package/lib/summary/summaryManager.js +1 -1
  228. package/lib/summary/summaryManager.js.map +1 -1
  229. package/package.json +22 -39
  230. package/src/batchTracker.ts +5 -6
  231. package/src/blobManager.ts +2 -2
  232. package/src/connectionTelemetry.ts +4 -5
  233. package/src/containerRuntime.ts +60 -31
  234. package/src/dataStore.ts +3 -4
  235. package/src/dataStoreContext.ts +4 -8
  236. package/src/dataStoreContexts.ts +3 -7
  237. package/src/deltaScheduler.ts +2 -3
  238. package/src/gc/garbageCollection.ts +5 -5
  239. package/src/gc/gcDefinitions.ts +3 -3
  240. package/src/gc/gcTelemetry.ts +9 -5
  241. package/src/id-compressor/idCompressor.ts +2 -2
  242. package/src/opLifecycle/definitions.ts +2 -2
  243. package/src/opLifecycle/opCompressor.ts +4 -8
  244. package/src/opLifecycle/opDecompressor.ts +2 -3
  245. package/src/opLifecycle/opGroupingManager.ts +6 -7
  246. package/src/opLifecycle/opSplitter.ts +4 -5
  247. package/src/opLifecycle/outbox.ts +10 -9
  248. package/src/packageVersion.ts +1 -1
  249. package/src/pendingStateManager.ts +60 -91
  250. package/src/scheduleManager.ts +3 -4
  251. package/src/summary/orderedClientElection.ts +7 -20
  252. package/src/summary/runningSummarizer.ts +11 -10
  253. package/src/summary/summarizer.ts +8 -8
  254. package/src/summary/summarizerClientElection.ts +3 -2
  255. package/src/summary/summarizerHeuristics.ts +2 -2
  256. package/src/summary/summarizerNode/summarizerNode.ts +15 -14
  257. package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -3
  258. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +10 -7
  259. package/src/summary/summarizerTypes.ts +8 -13
  260. package/src/summary/summaryCollection.ts +3 -2
  261. package/src/summary/summaryGenerator.ts +7 -3
  262. package/src/summary/summaryManager.ts +8 -9
@@ -348,7 +348,6 @@ export class ContainerRuntime extends TypedEventEmitter {
348
348
  close: this.closeFn,
349
349
  connected: () => this.connected,
350
350
  reSubmit: this.reSubmit.bind(this),
351
- rollback: this.rollback.bind(this),
352
351
  orderSequentially: this.orderSequentially.bind(this),
353
352
  }, pendingRuntimeState === null || pendingRuntimeState === void 0 ? void 0 : pendingRuntimeState.pending);
354
353
  const disableCompression = this.mc.config.getBoolean("Fluid.ContainerRuntime.CompressionDisabled");
@@ -474,9 +473,6 @@ export class ContainerRuntime extends TypedEventEmitter {
474
473
  return initializeEntryPoint === null || initializeEntryPoint === void 0 ? void 0 : initializeEntryPoint(this);
475
474
  });
476
475
  }
477
- get IContainerRuntime() {
478
- return this;
479
- }
480
476
  get IFluidRouter() {
481
477
  return this;
482
478
  }
@@ -625,7 +621,7 @@ export class ContainerRuntime extends TypedEventEmitter {
625
621
  }
626
622
  get reSubmitFn() {
627
623
  // eslint-disable-next-line @typescript-eslint/unbound-method
628
- return this.reSubmit;
624
+ return this.reSubmitCore;
629
625
  }
630
626
  get disposeFn() {
631
627
  var _a;
@@ -900,8 +896,14 @@ export class ContainerRuntime extends TypedEventEmitter {
900
896
  }
901
897
  return this.consecutiveReconnects < this.maxConsecutiveReconnects;
902
898
  }
903
- resetReconnectCount() {
904
- this.consecutiveReconnects = 0;
899
+ resetReconnectCount(message) {
900
+ // Chunked ops don't count towards making progress as they are sent
901
+ // in their own batches before the originating batch is sent.
902
+ // Therefore, receiving them while attempting to send the originating batch
903
+ // does not mean that the container is making any progress.
904
+ if ((message === null || message === void 0 ? void 0 : message.type) !== ContainerMessageType.ChunkedOp) {
905
+ this.consecutiveReconnects = 0;
906
+ }
905
907
  }
906
908
  replayPendingStates() {
907
909
  // We need to be able to send ops to replay states
@@ -943,7 +945,19 @@ export class ContainerRuntime extends TypedEventEmitter {
943
945
  const { IdCompressor } = await import("./id-compressor");
944
946
  this.idCompressor = IdCompressor.deserialize(op.stashedState);
945
947
  }
946
- async applyStashedOp(type, contents) {
948
+ /**
949
+ * Parse an op's type and actual content from given serialized content
950
+ * ! Note: this format needs to be in-line with what is set in the "ContainerRuntime.submit(...)" method
951
+ */
952
+ parseOpContent(serializedContent) {
953
+ assert(serializedContent !== undefined, 0x6d5 /* content must be defined */);
954
+ const parsed = JSON.parse(serializedContent);
955
+ assert(parsed.type !== undefined, 0x6d6 /* incorrect op content format */);
956
+ return { type: parsed.type, contents: parsed.contents };
957
+ }
958
+ async applyStashedOp(op) {
959
+ // Need to parse from string for back-compat
960
+ const { type, contents } = this.parseOpContent(op);
947
961
  switch (type) {
948
962
  case ContainerMessageType.FluidDataStoreOp:
949
963
  return this.dataStores.applyStashedOp(contents);
@@ -1102,7 +1116,7 @@ export class ContainerRuntime extends TypedEventEmitter {
1102
1116
  // If we have processed a local op, this means that the container is
1103
1117
  // making progress and we can reset the counter for how many times
1104
1118
  // we have consecutively replayed the pending states
1105
- this.resetReconnectCount();
1119
+ this.resetReconnectCount(message);
1106
1120
  }
1107
1121
  }
1108
1122
  catch (e) {
@@ -1202,7 +1216,7 @@ export class ContainerRuntime extends TypedEventEmitter {
1202
1216
  if (checkpoint) {
1203
1217
  // This will throw and close the container if rollback fails
1204
1218
  try {
1205
- checkpoint.rollback((message) => this.rollback(message.deserializedContent.type, message.deserializedContent.contents, message.localOpMetadata));
1219
+ checkpoint.rollback((message) => this.rollback(message.contents, message.localOpMetadata));
1206
1220
  }
1207
1221
  catch (err) {
1208
1222
  const error2 = wrapError(err, (message) => {
@@ -1807,10 +1821,10 @@ export class ContainerRuntime extends TypedEventEmitter {
1807
1821
  };
1808
1822
  idAllocationBatchMessage = {
1809
1823
  contents: JSON.stringify(idAllocationMessage),
1810
- deserializedContent: idAllocationMessage,
1811
1824
  referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
1812
1825
  metadata: undefined,
1813
1826
  localOpMetadata: (_b = this.idCompressor) === null || _b === void 0 ? void 0 : _b.serialize(true),
1827
+ type: ContainerMessageType.IdAllocation,
1814
1828
  };
1815
1829
  }
1816
1830
  if (idAllocationBatchMessage !== undefined) {
@@ -1834,7 +1848,7 @@ export class ContainerRuntime extends TypedEventEmitter {
1834
1848
  }
1835
1849
  const message = {
1836
1850
  contents: serializedContent,
1837
- deserializedContent: JSON.parse(serializedContent),
1851
+ type,
1838
1852
  metadata,
1839
1853
  localOpMetadata,
1840
1854
  referenceSequenceNumber: this.deltaManager.lastSequenceNumber,
@@ -1966,13 +1980,18 @@ export class ContainerRuntime extends TypedEventEmitter {
1966
1980
  }
1967
1981
  }
1968
1982
  }
1983
+ reSubmit(content, localOpMetadata, opMetadata) {
1984
+ // Need to parse from string for back-compat
1985
+ const { contents, type } = this.parseOpContent(content);
1986
+ this.reSubmitCore(type, contents, localOpMetadata, opMetadata);
1987
+ }
1969
1988
  /**
1970
1989
  * Finds the right store and asks it to resubmit the message. This typically happens when we
1971
1990
  * reconnect and there are pending messages.
1972
1991
  * @param content - The content of the original message.
1973
1992
  * @param localOpMetadata - The local metadata associated with the original message.
1974
1993
  */
1975
- reSubmit(type, content, localOpMetadata, opMetadata) {
1994
+ reSubmitCore(type, content, localOpMetadata, opMetadata) {
1976
1995
  switch (type) {
1977
1996
  case ContainerMessageType.FluidDataStoreOp:
1978
1997
  // For Operations, call resubmitDataStoreOp which will find the right store
@@ -1981,7 +2000,13 @@ export class ContainerRuntime extends TypedEventEmitter {
1981
2000
  break;
1982
2001
  case ContainerMessageType.Attach:
1983
2002
  case ContainerMessageType.Alias:
2003
+ this.submit(type, content, localOpMetadata);
2004
+ break;
1984
2005
  case ContainerMessageType.IdAllocation:
2006
+ // Remove the stashedState from the op if it's a stashed op
2007
+ if (content.stashedState !== undefined) {
2008
+ delete content.stashedState;
2009
+ }
1985
2010
  this.submit(type, content, localOpMetadata);
1986
2011
  break;
1987
2012
  case ContainerMessageType.ChunkedOp:
@@ -1996,12 +2021,14 @@ export class ContainerRuntime extends TypedEventEmitter {
1996
2021
  unreachableCase(type, `Unknown ContainerMessageType: ${type}`);
1997
2022
  }
1998
2023
  }
1999
- rollback(type, content, localOpMetadata) {
2024
+ rollback(content, localOpMetadata) {
2025
+ // Need to parse from string for back-compat
2026
+ const { type, contents } = this.parseOpContent(content);
2000
2027
  switch (type) {
2001
2028
  case ContainerMessageType.FluidDataStoreOp:
2002
2029
  // For operations, call rollbackDataStoreOp which will find the right store
2003
2030
  // and trigger rollback on it.
2004
- this.dataStores.rollbackDataStoreOp(content, localOpMetadata);
2031
+ this.dataStores.rollbackDataStoreOp(contents, localOpMetadata);
2005
2032
  break;
2006
2033
  default:
2007
2034
  throw new Error(`Can't rollback ${type}`);