@fluidframework/container-runtime 2.33.2 → 2.40.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.
- package/CHANGELOG.md +14 -0
- package/api-report/container-runtime.legacy.alpha.api.md +4 -0
- package/container-runtime.test-files.tar +0 -0
- package/dist/blobManager/blobManager.d.ts +31 -8
- package/dist/blobManager/blobManager.d.ts.map +1 -1
- package/dist/blobManager/blobManager.js +90 -17
- package/dist/blobManager/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +26 -10
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +42 -11
- package/dist/channelCollection.js.map +1 -1
- package/dist/compatUtils.d.ts +19 -10
- package/dist/compatUtils.d.ts.map +1 -1
- package/dist/compatUtils.js +39 -32
- package/dist/compatUtils.js.map +1 -1
- package/dist/containerRuntime.d.ts +29 -13
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +139 -149
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStoreContext.d.ts +15 -16
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +37 -19
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -9
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +1 -0
- package/dist/opLifecycle/index.d.ts +1 -1
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +20 -7
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +16 -20
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +22 -8
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +11 -16
- package/dist/pendingStateManager.js.map +1 -1
- package/lib/blobManager/blobManager.d.ts +31 -8
- package/lib/blobManager/blobManager.d.ts.map +1 -1
- package/lib/blobManager/blobManager.js +91 -18
- package/lib/blobManager/blobManager.js.map +1 -1
- package/lib/channelCollection.d.ts +26 -10
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +43 -12
- package/lib/channelCollection.js.map +1 -1
- package/lib/compatUtils.d.ts +19 -10
- package/lib/compatUtils.d.ts.map +1 -1
- package/lib/compatUtils.js +36 -29
- package/lib/compatUtils.js.map +1 -1
- package/lib/containerRuntime.d.ts +29 -13
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +60 -70
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStoreContext.d.ts +15 -16
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +38 -20
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/index.d.ts +1 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +0 -3
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +1 -0
- package/lib/opLifecycle/index.d.ts +1 -1
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +20 -7
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +16 -20
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +22 -8
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +11 -16
- package/lib/pendingStateManager.js.map +1 -1
- package/package.json +18 -18
- package/src/blobManager/blobManager.ts +141 -33
- package/src/channelCollection.ts +77 -19
- package/src/compatUtils.ts +53 -30
- package/src/containerRuntime.ts +102 -81
- package/src/dataStoreContext.ts +48 -38
- package/src/index.ts +1 -13
- package/src/opLifecycle/index.ts +1 -0
- package/src/opLifecycle/outbox.ts +42 -33
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +37 -20
|
@@ -10,12 +10,10 @@ import { type IFluidHandleContext, type IFluidHandleInternal, type ITelemetryBas
|
|
|
10
10
|
import { IClientDetails, IQuorumClients } from "@fluidframework/driver-definitions";
|
|
11
11
|
import { IDocumentStorageService, type ISnapshot, IDocumentMessage, ISnapshotTree, ITreeEntry, ISequencedDocumentMessage } from "@fluidframework/driver-definitions/internal";
|
|
12
12
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
13
|
-
import { ISummaryTreeWithStats, ITelemetryContext, IGarbageCollectionData, CreateChildSummarizerNodeFn, CreateChildSummarizerNodeParam, IContainerRuntimeBase, IDataStore, IFluidDataStoreChannel, IFluidDataStoreContext, IFluidDataStoreContextDetached, IFluidDataStoreRegistry,
|
|
13
|
+
import { ISummaryTreeWithStats, ITelemetryContext, IGarbageCollectionData, CreateChildSummarizerNodeFn, CreateChildSummarizerNodeParam, IContainerRuntimeBase, IDataStore, IFluidDataStoreChannel, IFluidDataStoreContext, IFluidDataStoreContextDetached, IFluidDataStoreRegistry, IGarbageCollectionDetailsBase, IProvideFluidDataStoreFactory, ISummarizeResult, ISummarizerNodeWithGC, SummarizeInternalFn, IInboundSignalMessage, type IRuntimeMessageCollection, type IFluidDataStoreFactory, type IFluidParentContext } from "@fluidframework/runtime-definitions/internal";
|
|
14
14
|
import { MonitoringContext } from "@fluidframework/telemetry-utils/internal";
|
|
15
|
+
import type { IFluidParentContextPrivate } from "./channelCollection.js";
|
|
15
16
|
export declare function createAttributesBlob(pkg: readonly string[], isRootDataStore: boolean): ITreeEntry;
|
|
16
|
-
/**
|
|
17
|
-
* @internal
|
|
18
|
-
*/
|
|
19
17
|
export interface ISnapshotDetails {
|
|
20
18
|
pkg: readonly string[];
|
|
21
19
|
isRootDataStore: boolean;
|
|
@@ -26,7 +24,6 @@ export interface ISnapshotDetails {
|
|
|
26
24
|
* This is interface that every context should implement.
|
|
27
25
|
* This interface is used for context's parent - ChannelCollection.
|
|
28
26
|
* It should not be exposed to any other users of context.
|
|
29
|
-
* @internal
|
|
30
27
|
*/
|
|
31
28
|
export interface IFluidDataStoreContextInternal extends IFluidDataStoreContext {
|
|
32
29
|
getAttachSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats;
|
|
@@ -37,11 +34,10 @@ export interface IFluidDataStoreContextInternal extends IFluidDataStoreContext {
|
|
|
37
34
|
}
|
|
38
35
|
/**
|
|
39
36
|
* Properties necessary for creating a FluidDataStoreContext
|
|
40
|
-
* @internal
|
|
41
37
|
*/
|
|
42
38
|
export interface IFluidDataStoreContextProps {
|
|
43
39
|
readonly id: string;
|
|
44
|
-
readonly parentContext:
|
|
40
|
+
readonly parentContext: IFluidParentContextPrivate;
|
|
45
41
|
readonly storage: IDocumentStorageService;
|
|
46
42
|
readonly scope: FluidObject;
|
|
47
43
|
readonly createSummarizerNodeFn: CreateChildSummarizerNodeFn;
|
|
@@ -50,7 +46,6 @@ export interface IFluidDataStoreContextProps {
|
|
|
50
46
|
}
|
|
51
47
|
/**
|
|
52
48
|
* Properties necessary for creating a local FluidDataStoreContext
|
|
53
|
-
* @internal
|
|
54
49
|
*/
|
|
55
50
|
export interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContextProps {
|
|
56
51
|
readonly pkg: Readonly<string[]> | undefined;
|
|
@@ -59,27 +54,23 @@ export interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContext
|
|
|
59
54
|
}
|
|
60
55
|
/**
|
|
61
56
|
* Properties necessary for creating a local FluidDataStoreContext
|
|
62
|
-
* @internal
|
|
63
57
|
*/
|
|
64
58
|
export interface ILocalDetachedFluidDataStoreContextProps extends ILocalFluidDataStoreContextProps {
|
|
65
59
|
readonly channelToDataStoreFn: (channel: IFluidDataStoreChannel) => IDataStore;
|
|
66
60
|
}
|
|
67
61
|
/**
|
|
68
62
|
* Properties necessary for creating a remote FluidDataStoreContext
|
|
69
|
-
* @internal
|
|
70
63
|
*/
|
|
71
64
|
export interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {
|
|
72
65
|
readonly snapshot: ISnapshotTree | ISnapshot | undefined;
|
|
73
66
|
}
|
|
74
67
|
/**
|
|
75
|
-
* @internal
|
|
76
68
|
*/
|
|
77
69
|
export interface IFluidDataStoreContextEvents extends IEvent {
|
|
78
70
|
(event: "attaching" | "attached", listener: () => void): any;
|
|
79
71
|
}
|
|
80
72
|
/**
|
|
81
73
|
* Represents the context for the store. This context is passed to the store runtime.
|
|
82
|
-
* @internal
|
|
83
74
|
*/
|
|
84
75
|
export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IFluidDataStoreContextEvents> implements IFluidDataStoreContextInternal, IFluidParentContext, IDisposable {
|
|
85
76
|
private readonly existing;
|
|
@@ -92,6 +83,7 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
92
83
|
get baseLogger(): ITelemetryBaseLogger;
|
|
93
84
|
private readonly _contextDeltaManagerProxy;
|
|
94
85
|
get deltaManager(): IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>;
|
|
86
|
+
private isStagingMode;
|
|
95
87
|
isReadOnly: () => boolean;
|
|
96
88
|
get connected(): boolean;
|
|
97
89
|
get IFluidHandleContext(): IFluidHandleContext;
|
|
@@ -198,7 +190,14 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
198
190
|
* its new client ID when we are connecting or connected.
|
|
199
191
|
*/
|
|
200
192
|
setConnectionState(connected: boolean, clientId?: string): void;
|
|
201
|
-
notifyReadOnlyState(
|
|
193
|
+
notifyReadOnlyState(): void;
|
|
194
|
+
/**
|
|
195
|
+
* Updates the readonly state of the data store based on the staging mode.
|
|
196
|
+
*
|
|
197
|
+
* @param staging - A boolean indicating whether the container is in staging mode.
|
|
198
|
+
* If true, the data store is set to readonly unless explicitly allowed by its policies.
|
|
199
|
+
*/
|
|
200
|
+
notifyStagingMode(staging: boolean): void;
|
|
202
201
|
/**
|
|
203
202
|
* Process messages for this data store. The messages here are contiguous messages for this data store in a batch.
|
|
204
203
|
* @param messageCollection - The collection of messages to process.
|
|
@@ -291,16 +290,16 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
291
290
|
* @deprecated The functionality to get base GC details has been moved to summarizer node.
|
|
292
291
|
*/
|
|
293
292
|
getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
|
|
294
|
-
reSubmit(type: string, contents: unknown, localOpMetadata: unknown): void;
|
|
293
|
+
reSubmit(type: string, contents: unknown, localOpMetadata: unknown, squash: boolean): void;
|
|
295
294
|
rollback(type: string, contents: unknown, localOpMetadata: unknown): void;
|
|
296
295
|
applyStashedOp(contents: unknown): Promise<unknown>;
|
|
297
296
|
private verifyNotClosed;
|
|
298
297
|
/**
|
|
299
|
-
*
|
|
298
|
+
* Readonly client, including summarizer, should not have local changes. These changes can become part of the summary and can break
|
|
300
299
|
* eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas
|
|
301
300
|
* other clients that are up-to-date till seq# 100 may not have them yet.
|
|
302
301
|
*/
|
|
303
|
-
protected
|
|
302
|
+
protected identifyLocalChangeIfReadonly(eventName: string, type?: string): void;
|
|
304
303
|
getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam): (summarizeInternal: SummarizeInternalFn, getGCDataFn: (fullGC?: boolean) => Promise<IGarbageCollectionData>) => ISummarizerNodeWithGC;
|
|
305
304
|
deleteChildSummarizerNode(id: string): void;
|
|
306
305
|
uploadBlob(blob: ArrayBufferLike, signal?: AbortSignal): Promise<IFluidHandleInternal<ArrayBufferLike>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EACN,aAAa,EAIb,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACN,WAAW,EACX,WAAW,
|
|
1
|
+
{"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EACN,aAAa,EAIb,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACN,WAAW,EACX,WAAW,EAEX,KAAK,MAAM,EACX,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EACN,uBAAuB,EACvB,KAAK,SAAS,EACd,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,yBAAyB,EACzB,MAAM,6CAA6C,CAAC;AAMrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,8BAA8B,EAE9B,qBAAqB,EACrB,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,uBAAuB,EACvB,6BAA6B,EAC7B,6BAA6B,EAE7B,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EAEnB,qBAAqB,EAErB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,MAAM,8CAA8C,CAAC;AAKtD,OAAO,EAGN,iBAAiB,EAOjB,MAAM,0CAA0C,CAAC;AAElD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AA4BzE,wBAAgB,oBAAoB,CACnC,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,eAAe,EAAE,OAAO,GACtB,UAAU,CAGZ;AAED,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,8BAA+B,SAAQ,sBAAsB;IAC7E,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,GAAG,qBAAqB,CAAC;IAE9E,eAAe,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,GAAG,sBAAsB,CAAC;IAE9E,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEvD,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE3C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gCAAiC,SAAQ,2BAA2B;IACpF,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,aAAa,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,wCAChB,SAAQ,gCAAgC;IACxC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,UAAU,CAAC;CAC/E;AAED;;GAEG;AACH,MAAM,WAAW,iCAAkC,SAAQ,2BAA2B;IACrF,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;CACzD;AAID;GACG;AACH,MAAM,WAAW,4BAA6B,SAAQ,MAAM;IAC3D,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,OAAE;CACxD;AAmDD;;GAEG;AACH,8BAAsB,qBACrB,SAAQ,iBAAiB,CAAC,4BAA4B,CACtD,YAAW,8BAA8B,EAAE,mBAAmB,EAAE,WAAW;IAuL1E,OAAO,CAAC,QAAQ,CAAC,QAAQ;aACT,gBAAgB,EAAE,OAAO;IACzC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAvLtC,IAAW,WAAW,IAAI,SAAS,MAAM,EAAE,CAG1C;IAED,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAErD;IAED,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAW,aAAa,IAAI,cAAc,CAEzC;IAED,IAAW,UAAU,IAAI,oBAAoB,CAE5C;IAED,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAA2B;IACrE,IAAW,YAAY,IAAI,aAAa,CAAC,yBAAyB,EAAE,gBAAgB,CAAC,CAEpF;IAED,OAAO,CAAC,aAAa,CAAkB;IAChC,UAAU,QAAO,OAAO,CAEE;IAEjC,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,IAAW,mBAAmB,IAAI,mBAAmB,CAEpD;IAED,IAAW,gBAAgB,IAAI,qBAAqB,CAEnD;IACD,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,YAAY,IAAI,aAAa,GAAG,SAAS,CAEnD;IAED,IAAW,YAAY,IAAI,aAAa,GAAG,SAAS,CAEnD;IAED,OAAO,CAAC,SAAS,CAAS;IAC1B,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAS;IAC5B,IAAW,UAAU,IAAI,OAAO,CAE/B;IACD;;;OAGG;IACH,SAAgB,uBAAuB,EAAE,OAAO,CAAS;IACzD;;OAEG;IACH,SAAgB,6BAA6B,EAAE,OAAO,CAAS;IAE/D;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,CAAS;IAEnC,IAAW,WAAW,IAAI,WAAW,CAEpC;IAED,IAAW,uBAAuB,IAAI,uBAAuB,GAAG,SAAS,CAExE;IAED;;;OAGG;IACH,IAAW,mBAAmB,IAAI,mBAAmB,CAEpD;IAED,OAAO,CAAC,0BAA0B,CAAqB;IAEvD;;;;;OAKG;IACU,MAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBtE;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,IAAI,OAAO;IAInC;;OAEG;IACH,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,SAAS,CAAC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAExD,SAAS,CAAC,uBAAuB,UAAS;IAC1C,SAAS,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAG1B;IACF,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;IAChE,SAAS,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IACnD,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,OAAO,CAAC,eAAe,CAAkB;IACzC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAmB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAQ;IAExD;;;;OAIG;IACH,OAAO,CAAC,0BAA0B,CAAS;IAE3C,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,SAAgB,OAAO,EAAE,uBAAuB,CAAC;IACjD,SAAgB,KAAK,EAAE,WAAW,CAAC;IAEnC,SAAgB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnD,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;gBAGjC,KAAK,EAAE,2BAA2B,EACjB,QAAQ,EAAE,OAAO,EAClB,gBAAgB,EAAE,OAAO,EACxB,oBAAoB,EAAE,MAAM,IAAI;IA2D3C,OAAO,IAAI,IAAI;IAkBtB;;;;OAIG;IACI,MAAM,IAAI,IAAI;IAId,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;aAQ7B,cAAc,CAC7B,WAAW,EAAE,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,GACvD,IAAI;IAEP,OAAO,CAAC,qBAAqB;IAchB,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAAC;cAwBvC,sBAAsB,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAoCzE,oBAAoB,CAAC,CAAC,SAAS,sBAAsB,EACpD,YAAY,EAAE,CAAC,GACb,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,CAAC;YAkCzC,WAAW;IAwBzB;;;;;OAKG;IACI,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAe/D,mBAAmB,IAAI,IAAI;IAQlC;;;;;OAKG;IACI,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAUhD;;;OAGG;IACI,eAAe,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,IAAI;IA8BnE,aAAa,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAWnE,SAAS,IAAI,cAAc;IAI3B,WAAW,IAAI,SAAS;IAI/B;;;;;OAKG;IACU,SAAS,CACrB,QAAQ,GAAE,OAAe,EACzB,UAAU,GAAE,OAAc,EAC1B,gBAAgB,CAAC,EAAE,iBAAiB,GAClC,OAAO,CAAC,gBAAgB,CAAC;YAId,iBAAiB;IA2C/B;;;;;;;OAOG;IACU,SAAS,CAAC,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIhF;;;;OAIG;YACW,iBAAiB;IAU/B;;;;;;;;OAQG;IACI,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAiBnD;;;;;;;OAOG;IACI,oBAAoB,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,MAAM,GACzB,IAAI;IAIA,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IASpF;;;;;;;;OAQG;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAetC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAOlF;;;OAGG;IACI,kBAAkB,IAAI,IAAI;IAKjC,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAkBlE,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;cAuBvD,WAAW,CAC1B,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC;IA0BH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAO7E;;;OAGG;aACa,gBAAgB,CAC/B,gBAAgB,CAAC,EAAE,iBAAiB,GAClC,qBAAqB;IAExB;;;OAGG;aACa,eAAe,CAC9B,gBAAgB,CAAC,EAAE,iBAAiB,GAClC,sBAAsB;aAET,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAGtE;;;;OAIG;IACI,eAAe,IAAI,IAAI;IAK9B;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,6BAA6B,CAAC;IAIhE,QAAQ,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,eAAe,EAAE,OAAO,EACxB,MAAM,EAAE,OAAO,GACb,IAAI;IAKA,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAUnE,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAQhE,OAAO,CAAC,eAAe;IAiDvB;;;;OAIG;IACH,SAAS,CAAC,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAmBxE,8BAA8B,CACpC,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,8BAA8B,uBAGvB,mBAAmB,eACzB,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,QAAQ,sBAAsB,CAAC,KAChE,qBAAqB;IAUlB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIrC,UAAU,CACtB,IAAI,EAAE,eAAe,EACrB,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;CAGjD;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,qBAAqB;IAErE,OAAO,CAAC,qBAAqB,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;IACpE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAsB;gBAEtD,KAAK,EAAE,iCAAiC;IAgBpD;;;;;;;;;;;;;OAaG;IACI,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,GAAG,IAAI;IAGtF,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAwFrC;IAEU,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAInE;;OAEG;IACI,gBAAgB,IAAI,qBAAqB;IAIhD;;OAEG;IACI,eAAe,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,GAAG,sBAAsB;CAGpF;AAED;;;GAGG;AACH,qBAAa,8BAA+B,SAAQ,qBAAqB;IACxE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;gBAE7C,KAAK,EAAE,gCAAgC;IAc5C,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,GAAG,IAAI;IA+CtF;;OAEG;IACI,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,GAAG,qBAAqB;IA2BpF;;OAEG;IACI,eAAe,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,GAAG,sBAAsB;IASpF,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAkCrC;IAEU,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAInE;;;;;;OAMG;IACI,MAAM,IAAI,IAAI;CAQrB;AAED;;;;;;GAMG;AACH,qBAAa,0BAA2B,SAAQ,8BAA8B;gBACjE,KAAK,EAAE,gCAAgC;CAGnD;AAED;;;;;GAKG;AACH,qBAAa,kCACZ,SAAQ,8BACR,YAAW,8BAA8B;gBAE7B,KAAK,EAAE,wCAAwC;IAK3D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAkD;IAE1E,aAAa,CACzB,QAAQ,EAAE,6BAA6B,EACvC,gBAAgB,EAAE,sBAAsB,GACtC,OAAO,CAAC,UAAU,CAAC;IAiCtB;;;;;;;;;;OAUG;IACI,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,GAAG,UAAU;IAO/D,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAQnE"}
|
package/lib/dataStoreContext.js
CHANGED
|
@@ -12,7 +12,7 @@ import { addBlobToSummary, isSnapshotFetchRequiredForLoadingGroupId, } from "@fl
|
|
|
12
12
|
import { DataProcessingError, LoggingError, ThresholdCounter, UsageError, createChildMonitoringContext, extractSafePropertiesFromMessage, generateStack, tagCodeArtifacts, } from "@fluidframework/telemetry-utils/internal";
|
|
13
13
|
import { BaseDeltaManagerProxy } from "./deltaManagerProxies.js";
|
|
14
14
|
import { runtimeCompatDetailsForDataStore, validateDatastoreCompatibility, } from "./runtimeLayerCompatState.js";
|
|
15
|
-
import { dataStoreAttributesBlobName, getAttributesFormatVersion, getFluidDataStoreAttributes, hasIsolatedChannels,
|
|
15
|
+
import { dataStoreAttributesBlobName, getAttributesFormatVersion, getFluidDataStoreAttributes, hasIsolatedChannels, wrapSummaryInChannelsTree, } from "./summary/index.js";
|
|
16
16
|
function createAttributes(pkg, isRootDataStore) {
|
|
17
17
|
const stringifiedPkg = JSON.stringify(pkg);
|
|
18
18
|
return {
|
|
@@ -60,19 +60,18 @@ class ContextDeltaManagerProxy extends BaseDeltaManagerProxy {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
|
-
* Called by the owning datastore context to
|
|
64
|
-
*
|
|
63
|
+
* Called by the owning datastore context to emit the readonly
|
|
64
|
+
* event on the delta manger that is projected down to the datastore
|
|
65
65
|
* runtime. This state may not align with that of the true delta
|
|
66
66
|
* manager if the context wishes to control the read only state
|
|
67
67
|
* differently than the delta manager itself.
|
|
68
68
|
*/
|
|
69
|
-
|
|
70
|
-
this.emit("readonly",
|
|
69
|
+
emitReadonly() {
|
|
70
|
+
this.emit("readonly", this.isReadOnly());
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* Represents the context for the store. This context is passed to the store runtime.
|
|
75
|
-
* @internal
|
|
76
75
|
*/
|
|
77
76
|
export class FluidDataStoreContext extends TypedEventEmitter {
|
|
78
77
|
get packagePath() {
|
|
@@ -173,7 +172,9 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
173
172
|
this.existing = existing;
|
|
174
173
|
this.isLocalDataStore = isLocalDataStore;
|
|
175
174
|
this.makeLocallyVisibleFn = makeLocallyVisibleFn;
|
|
176
|
-
this.
|
|
175
|
+
this.isStagingMode = false;
|
|
176
|
+
this.isReadOnly = () => (this.isStagingMode && this.channel?.policies?.readonlyInStagingMode !== false) ||
|
|
177
|
+
this.parentContext.isReadOnly();
|
|
177
178
|
this._disposed = false;
|
|
178
179
|
/**
|
|
179
180
|
* A Tombstoned object has been unreferenced long enough that GC knows it won't be referenced again.
|
|
@@ -372,10 +373,26 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
372
373
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
373
374
|
this.channel.setConnectionState(connected, clientId);
|
|
374
375
|
}
|
|
375
|
-
notifyReadOnlyState(
|
|
376
|
+
notifyReadOnlyState() {
|
|
376
377
|
this.verifyNotClosed("notifyReadOnlyState", false /* checkTombstone */);
|
|
377
|
-
|
|
378
|
-
this.
|
|
378
|
+
// These two calls achieve the same purpose, and are both needed for a time for back compat
|
|
379
|
+
this.channel?.notifyReadOnlyState?.(this.isReadOnly());
|
|
380
|
+
this._contextDeltaManagerProxy.emitReadonly();
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Updates the readonly state of the data store based on the staging mode.
|
|
384
|
+
*
|
|
385
|
+
* @param staging - A boolean indicating whether the container is in staging mode.
|
|
386
|
+
* If true, the data store is set to readonly unless explicitly allowed by its policies.
|
|
387
|
+
*/
|
|
388
|
+
notifyStagingMode(staging) {
|
|
389
|
+
// If the `readonlyInStagingMode` policy is not explicitly set to `false`,
|
|
390
|
+
// the data store is treated as readonly in staging mode.
|
|
391
|
+
const oldReadOnlyState = this.isReadOnly();
|
|
392
|
+
this.isStagingMode = staging;
|
|
393
|
+
if (this.isReadOnly() !== oldReadOnlyState) {
|
|
394
|
+
this.notifyReadOnlyState();
|
|
395
|
+
}
|
|
379
396
|
}
|
|
380
397
|
/**
|
|
381
398
|
* Process messages for this data store. The messages here are contiguous messages for this data store in a batch.
|
|
@@ -512,8 +529,8 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
512
529
|
submitMessage(type, content, localOpMetadata) {
|
|
513
530
|
this.verifyNotClosed("submitMessage");
|
|
514
531
|
assert(!!this.channel, 0x146 /* "Channel must exist when submitting message" */);
|
|
515
|
-
//
|
|
516
|
-
this.
|
|
532
|
+
// Readonly clients should not submit messages.
|
|
533
|
+
this.identifyLocalChangeIfReadonly("DataStoreMessageWhileReadonly", type);
|
|
517
534
|
this.parentContext.submitMessage(type, content, localOpMetadata);
|
|
518
535
|
}
|
|
519
536
|
/**
|
|
@@ -617,9 +634,9 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
617
634
|
async getBaseGCDetails() {
|
|
618
635
|
return {};
|
|
619
636
|
}
|
|
620
|
-
reSubmit(type, contents, localOpMetadata) {
|
|
637
|
+
reSubmit(type, contents, localOpMetadata, squash) {
|
|
621
638
|
assert(!!this.channel, 0x14b /* "Channel must exist when resubmitting ops" */);
|
|
622
|
-
this.channel.reSubmit(type, contents, localOpMetadata);
|
|
639
|
+
this.channel.reSubmit(type, contents, localOpMetadata, squash);
|
|
623
640
|
}
|
|
624
641
|
rollback(type, contents, localOpMetadata) {
|
|
625
642
|
if (!this.channel) {
|
|
@@ -661,16 +678,15 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
661
678
|
}
|
|
662
679
|
}
|
|
663
680
|
/**
|
|
664
|
-
*
|
|
681
|
+
* Readonly client, including summarizer, should not have local changes. These changes can become part of the summary and can break
|
|
665
682
|
* eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas
|
|
666
683
|
* other clients that are up-to-date till seq# 100 may not have them yet.
|
|
667
684
|
*/
|
|
668
|
-
|
|
669
|
-
if (this.
|
|
670
|
-
this.localChangesTelemetryCount <= 0) {
|
|
685
|
+
identifyLocalChangeIfReadonly(eventName, type) {
|
|
686
|
+
if (!this.isReadOnly() || this.localChangesTelemetryCount <= 0) {
|
|
671
687
|
return;
|
|
672
688
|
}
|
|
673
|
-
// Log a telemetry if there are local changes in
|
|
689
|
+
// Log a telemetry if there are local changes in readonly. This will give us data on how often
|
|
674
690
|
// this is happening and which data stores do this. The eventual goal is to disallow local changes
|
|
675
691
|
// in the summarizer and the data will help us plan this.
|
|
676
692
|
this.mc.logger.sendTelemetryEvent({
|
|
@@ -678,6 +694,8 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
678
694
|
type,
|
|
679
695
|
isSummaryInProgress: this.summarizerNode.isSummaryInProgress?.(),
|
|
680
696
|
stack: generateStack(30),
|
|
697
|
+
readonly: this.isReadOnly(),
|
|
698
|
+
isStagingMode: this.isStagingMode,
|
|
681
699
|
});
|
|
682
700
|
this.localChangesTelemetryCount--;
|
|
683
701
|
}
|
|
@@ -842,7 +860,7 @@ export class LocalFluidDataStoreContextBase extends FluidDataStoreContext {
|
|
|
842
860
|
};
|
|
843
861
|
});
|
|
844
862
|
// Summarizer client should not create local data stores.
|
|
845
|
-
this.
|
|
863
|
+
this.identifyLocalChangeIfReadonly("DataStoreCreatedWhileReadonly");
|
|
846
864
|
this.snapshotTree = props.snapshotTree;
|
|
847
865
|
}
|
|
848
866
|
setAttachState(attachState) {
|