@fluidframework/container-runtime 2.0.0-rc.2.0.5 → 2.0.0-rc.2.0.7

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/lib/metadata.d.ts CHANGED
@@ -16,9 +16,9 @@ export interface IBlobMetadata {
16
16
  localId?: string;
17
17
  }
18
18
  /**
19
- * The IdCompressor needs to know if this is a replayed savedOp as those need to be skipped in stashed ops scenarios.
19
+ * ContainerRuntime needs to know if this is a replayed savedOp as those need to be skipped in stashed ops scenarios.
20
20
  */
21
- export interface IIdAllocationMetadata {
21
+ export interface ISavedOpMetadata {
22
22
  savedOp?: boolean;
23
23
  }
24
24
  //# sourceMappingURL=metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB"}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Batching makes assumptions about what might be on the metadata. This interface codifies those assumptions, but does not validate them.\n */\nexport interface IBatchMetadata {\n\tbatch?: boolean;\n}\n\n/**\n * Blob handling makes assumptions about what might be on the metadata. This interface codifies those assumptions, but does not validate them.\n */\nexport interface IBlobMetadata {\n\tblobId?: string;\n\tlocalId?: string;\n}\n\n/**\n * The IdCompressor needs to know if this is a replayed savedOp as those need to be skipped in stashed ops scenarios.\n */\nexport interface IIdAllocationMetadata {\n\tsavedOp?: boolean;\n}\n"]}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Batching makes assumptions about what might be on the metadata. This interface codifies those assumptions, but does not validate them.\n */\nexport interface IBatchMetadata {\n\tbatch?: boolean;\n}\n\n/**\n * Blob handling makes assumptions about what might be on the metadata. This interface codifies those assumptions, but does not validate them.\n */\nexport interface IBlobMetadata {\n\tblobId?: string;\n\tlocalId?: string;\n}\n\n/**\n * ContainerRuntime needs to know if this is a replayed savedOp as those need to be skipped in stashed ops scenarios.\n */\nexport interface ISavedOpMetadata {\n\tsavedOp?: boolean;\n}\n"]}
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export declare const pkgName = "@fluidframework/container-runtime";
8
- export declare const pkgVersion = "2.0.0-rc.2.0.5";
8
+ export declare const pkgVersion = "2.0.0-rc.2.0.7";
9
9
  //# sourceMappingURL=packageVersion.d.ts.map
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export const pkgName = "@fluidframework/container-runtime";
8
- export const pkgVersion = "2.0.0-rc.2.0.5";
8
+ export const pkgVersion = "2.0.0-rc.2.0.7";
9
9
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,mCAAmC,CAAC;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/container-runtime\";\nexport const pkgVersion = \"2.0.0-rc.2.0.5\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,mCAAmC,CAAC;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/container-runtime\";\nexport const pkgVersion = \"2.0.0-rc.2.0.7\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/container-runtime",
3
- "version": "2.0.0-rc.2.0.5",
3
+ "version": "2.0.0-rc.2.0.7",
4
4
  "description": "Fluid container runtime",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -137,19 +137,19 @@
137
137
  "temp-directory": "nyc/.nyc_output"
138
138
  },
139
139
  "dependencies": {
140
- "@fluid-internal/client-utils": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
141
- "@fluidframework/container-definitions": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
142
- "@fluidframework/container-runtime-definitions": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
143
- "@fluidframework/core-interfaces": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
144
- "@fluidframework/core-utils": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
145
- "@fluidframework/datastore": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
146
- "@fluidframework/driver-definitions": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
147
- "@fluidframework/driver-utils": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
148
- "@fluidframework/id-compressor": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
140
+ "@fluid-internal/client-utils": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
141
+ "@fluidframework/container-definitions": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
142
+ "@fluidframework/container-runtime-definitions": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
143
+ "@fluidframework/core-interfaces": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
144
+ "@fluidframework/core-utils": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
145
+ "@fluidframework/datastore": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
146
+ "@fluidframework/driver-definitions": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
147
+ "@fluidframework/driver-utils": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
148
+ "@fluidframework/id-compressor": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
149
149
  "@fluidframework/protocol-definitions": "^3.2.0",
150
- "@fluidframework/runtime-definitions": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
151
- "@fluidframework/runtime-utils": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
152
- "@fluidframework/telemetry-utils": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
150
+ "@fluidframework/runtime-definitions": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
151
+ "@fluidframework/runtime-utils": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
152
+ "@fluidframework/telemetry-utils": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
153
153
  "@tylerbu/sorted-btree-es6": "^1.8.0",
154
154
  "double-ended-queue": "^2.1.0-0",
155
155
  "lz4js": "^0.2.0",
@@ -157,15 +157,15 @@
157
157
  },
158
158
  "devDependencies": {
159
159
  "@arethetypeswrong/cli": "^0.13.3",
160
- "@fluid-internal/mocha-test-setup": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
161
- "@fluid-private/stochastic-test-utils": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
160
+ "@fluid-internal/mocha-test-setup": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
161
+ "@fluid-private/stochastic-test-utils": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
162
162
  "@fluid-tools/benchmark": "^0.48.0",
163
163
  "@fluid-tools/build-cli": "^0.34.0",
164
164
  "@fluidframework/build-common": "^2.0.3",
165
165
  "@fluidframework/build-tools": "^0.34.0",
166
166
  "@fluidframework/container-runtime-previous": "npm:@fluidframework/container-runtime@2.0.0-internal.8.0.0",
167
167
  "@fluidframework/eslint-config-fluid": "^4.0.0",
168
- "@fluidframework/test-runtime-utils": ">=2.0.0-rc.2.0.5 <2.0.0-rc.2.1.0",
168
+ "@fluidframework/test-runtime-utils": ">=2.0.0-rc.2.0.7 <2.0.0-rc.2.1.0",
169
169
  "@microsoft/api-extractor": "^7.42.3",
170
170
  "@types/double-ended-queue": "^2.1.0",
171
171
  "@types/mocha": "^9.1.1",
@@ -186,7 +186,7 @@ import {
186
186
  getLongStack,
187
187
  } from "./opLifecycle/index.js";
188
188
  import { DeltaManagerSummarizerProxy } from "./deltaManagerSummarizerProxy.js";
189
- import { IBatchMetadata, IIdAllocationMetadata } from "./metadata.js";
189
+ import { IBatchMetadata, ISavedOpMetadata } from "./metadata.js";
190
190
  import {
191
191
  ContainerMessageType,
192
192
  type InboundSequencedContainerRuntimeMessage,
@@ -652,11 +652,13 @@ type MessageWithContext =
652
652
  message: InboundSequencedContainerRuntimeMessage;
653
653
  modernRuntimeMessage: true;
654
654
  local: boolean;
655
+ savedOp?: boolean;
655
656
  }
656
657
  | {
657
658
  message: InboundSequencedContainerRuntimeMessageOrSystemMessage;
658
659
  modernRuntimeMessage: false;
659
660
  local: boolean;
661
+ savedOp?: boolean;
660
662
  };
661
663
 
662
664
  const summarizerRequestUrl = "_summarizer";
@@ -1017,7 +1019,7 @@ export class ContainerRuntime
1017
1019
  // Id Compressor serializes final state (see getPendingLocalState()). As result, it needs to skip all ops that preceeded that state
1018
1020
  // (such ops will be marked by Loader layer as savedOp === true)
1019
1021
  // That said, in "delayed" mode it's possible that Id Compressor was never initialized before getPendingLocalState() is called.
1020
- // In such case we have to process all ops, including those marked with saveOp === true.
1022
+ // In such case we have to process all ops, including those marked with savedOp === true.
1021
1023
  private readonly skipSavedCompressorOps: boolean;
1022
1024
 
1023
1025
  /**
@@ -2369,21 +2371,28 @@ export class ContainerRuntime
2369
2371
  // We do not need to make a deep copy. Each layer will just replace message.contents itself,
2370
2372
  // but will not modify the contents object (likely it will replace it on the message).
2371
2373
  const messageCopy = { ...messageArg };
2374
+ const savedOp = (messageCopy.metadata as ISavedOpMetadata)?.savedOp;
2372
2375
  for (const message of this.remoteMessageProcessor.process(messageCopy)) {
2373
- if (modernRuntimeMessage) {
2374
- this.processCore({
2375
- // Cast it since we expect it to be this based on modernRuntimeMessage computation above.
2376
- // There is nothing really ensuring that anytime original message.type is Operation that
2377
- // the result messages will be so. In the end modern bool being true only directs to
2378
- // throw error if ultimately unrecognized without compat details saying otherwise.
2379
- message: message as InboundSequencedContainerRuntimeMessage,
2380
- local,
2381
- modernRuntimeMessage,
2382
- });
2383
- } else {
2384
- // Unrecognized message will be ignored.
2385
- this.processCore({ message, local, modernRuntimeMessage });
2386
- }
2376
+ const msg: MessageWithContext = modernRuntimeMessage
2377
+ ? {
2378
+ // Cast it since we expect it to be this based on modernRuntimeMessage computation above.
2379
+ // There is nothing really ensuring that anytime original message.type is Operation that
2380
+ // the result messages will be so. In the end modern bool being true only directs to
2381
+ // throw error if ultimately unrecognized without compat details saying otherwise.
2382
+ message: message as InboundSequencedContainerRuntimeMessage,
2383
+ local,
2384
+ modernRuntimeMessage,
2385
+ }
2386
+ : // Unrecognized message will be ignored.
2387
+ {
2388
+ message,
2389
+ local,
2390
+ modernRuntimeMessage,
2391
+ };
2392
+ msg.savedOp = savedOp;
2393
+
2394
+ // ensure that we observe any re-entrancy, and if needed, rebase ops
2395
+ this.ensureNoDataModelChanges(() => this.processCore(msg));
2387
2396
  }
2388
2397
  }
2389
2398
 
@@ -2466,13 +2475,7 @@ export class ContainerRuntime
2466
2475
  // stashed ops flow. The compressor is stashed with these ops already processed.
2467
2476
  // That said, in idCompressorMode === "delayed", we might not serialize ID compressor, and
2468
2477
  // thus we need to process all the ops.
2469
- if (
2470
- !(
2471
- this.skipSavedCompressorOps &&
2472
- (messageWithContext.message.metadata as IIdAllocationMetadata)?.savedOp ===
2473
- true
2474
- )
2475
- ) {
2478
+ if (!(this.skipSavedCompressorOps && messageWithContext.savedOp === true)) {
2476
2479
  const range = messageWithContext.message.contents;
2477
2480
  if (this._idCompressor === undefined) {
2478
2481
  this.pendingIdCompressorOps.push(range);
package/src/metadata.ts CHANGED
@@ -19,8 +19,8 @@ export interface IBlobMetadata {
19
19
  }
20
20
 
21
21
  /**
22
- * The IdCompressor needs to know if this is a replayed savedOp as those need to be skipped in stashed ops scenarios.
22
+ * ContainerRuntime needs to know if this is a replayed savedOp as those need to be skipped in stashed ops scenarios.
23
23
  */
24
- export interface IIdAllocationMetadata {
24
+ export interface ISavedOpMetadata {
25
25
  savedOp?: boolean;
26
26
  }
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/container-runtime";
9
- export const pkgVersion = "2.0.0-rc.2.0.5";
9
+ export const pkgVersion = "2.0.0-rc.2.0.7";