@fluidframework/container-loader 0.51.3 → 0.53.0-46105
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/dist/connectionStateHandler.d.ts +1 -0
- package/dist/connectionStateHandler.d.ts.map +1 -1
- package/dist/connectionStateHandler.js +11 -3
- package/dist/connectionStateHandler.js.map +1 -1
- package/dist/container.d.ts +15 -23
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +125 -140
- package/dist/container.js.map +1 -1
- package/dist/containerContext.d.ts +5 -4
- package/dist/containerContext.d.ts.map +1 -1
- package/dist/containerContext.js +4 -0
- package/dist/containerContext.js.map +1 -1
- package/dist/deltaManager.d.ts +0 -7
- package/dist/deltaManager.d.ts.map +1 -1
- package/dist/deltaManager.js +38 -50
- package/dist/deltaManager.js.map +1 -1
- package/dist/deltaQueue.d.ts +5 -1
- package/dist/deltaQueue.d.ts.map +1 -1
- package/dist/deltaQueue.js.map +1 -1
- package/dist/loader.d.ts +8 -3
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +6 -1
- package/dist/loader.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/utils.js +6 -5
- package/dist/utils.js.map +1 -1
- package/lib/connectionStateHandler.d.ts +1 -0
- package/lib/connectionStateHandler.d.ts.map +1 -1
- package/lib/connectionStateHandler.js +11 -3
- package/lib/connectionStateHandler.js.map +1 -1
- package/lib/container.d.ts +15 -23
- package/lib/container.d.ts.map +1 -1
- package/lib/container.js +127 -142
- package/lib/container.js.map +1 -1
- package/lib/containerContext.d.ts +5 -4
- package/lib/containerContext.d.ts.map +1 -1
- package/lib/containerContext.js +4 -0
- package/lib/containerContext.js.map +1 -1
- package/lib/deltaManager.d.ts +0 -7
- package/lib/deltaManager.d.ts.map +1 -1
- package/lib/deltaManager.js +38 -50
- package/lib/deltaManager.js.map +1 -1
- package/lib/deltaQueue.d.ts +5 -1
- package/lib/deltaQueue.d.ts.map +1 -1
- package/lib/deltaQueue.js.map +1 -1
- package/lib/loader.d.ts +8 -3
- package/lib/loader.d.ts.map +1 -1
- package/lib/loader.js +6 -1
- package/lib/loader.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/utils.js +6 -5
- package/lib/utils.js.map +1 -1
- package/package.json +11 -11
- package/src/connectionStateHandler.ts +14 -4
- package/src/container.ts +150 -160
- package/src/containerContext.ts +8 -3
- package/src/deltaManager.ts +50 -56
- package/src/deltaQueue.ts +10 -1
- package/src/loader.ts +33 -24
- package/src/packageVersion.ts +1 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
6
|
-
import { IFluidObject, IFluidConfiguration, IRequest, IResponse, IFluidCodeDetails } from "@fluidframework/core-interfaces";
|
|
6
|
+
import { IFluidObject, IFluidConfiguration, IRequest, IResponse, IFluidCodeDetails, FluidObject } from "@fluidframework/core-interfaces";
|
|
7
7
|
import { IAudience, IContainerContext, IDeltaManager, ILoader, ICriticalContainerError, ContainerWarning, AttachState, ILoaderOptions, ICodeLoader } from "@fluidframework/container-definitions";
|
|
8
8
|
import { IDocumentStorageService } from "@fluidframework/driver-definitions";
|
|
9
9
|
import { IClientConfiguration, IClientDetails, IDocumentMessage, IQuorum, ISequencedDocumentMessage, ISignalMessage, ISnapshotTree, ITree, MessageType, ISummaryTree, IVersion } from "@fluidframework/protocol-definitions";
|
|
@@ -11,7 +11,7 @@ import { Container } from "./container";
|
|
|
11
11
|
import { ICodeDetailsLoader } from "./loader";
|
|
12
12
|
export declare class ContainerContext implements IContainerContext {
|
|
13
13
|
private readonly container;
|
|
14
|
-
readonly scope: IFluidObject;
|
|
14
|
+
readonly scope: IFluidObject & FluidObject;
|
|
15
15
|
private readonly codeLoader;
|
|
16
16
|
private readonly _codeDetails;
|
|
17
17
|
private readonly _baseSnapshot;
|
|
@@ -26,7 +26,7 @@ export declare class ContainerContext implements IContainerContext {
|
|
|
26
26
|
readonly updateDirtyContainerState: (dirty: boolean) => void;
|
|
27
27
|
readonly existing: boolean;
|
|
28
28
|
readonly pendingLocalState?: unknown;
|
|
29
|
-
static createOrLoad(container: Container, scope:
|
|
29
|
+
static createOrLoad(container: Container, scope: FluidObject, codeLoader: ICodeDetailsLoader | ICodeLoader, codeDetails: IFluidCodeDetails, baseSnapshot: ISnapshotTree | undefined, deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>, quorum: IQuorum, loader: ILoader, raiseContainerWarning: (warning: ContainerWarning) => void, submitFn: (type: MessageType, contents: any, batch: boolean, appData: any) => number, submitSignalFn: (contents: any) => void, closeFn: (error?: ICriticalContainerError) => void, version: string, updateDirtyContainerState: (dirty: boolean) => void, existing: boolean, pendingLocalState?: unknown): Promise<ContainerContext>;
|
|
30
30
|
readonly taggedLogger: ITelemetryLogger;
|
|
31
31
|
/**
|
|
32
32
|
* Subtlety: returns this.taggedLogger since vanilla this.logger is now deprecated. See IContainerContext for more
|
|
@@ -51,7 +51,8 @@ export declare class ContainerContext implements IContainerContext {
|
|
|
51
51
|
get disposed(): boolean;
|
|
52
52
|
get codeDetails(): IFluidCodeDetails;
|
|
53
53
|
private readonly _fluidModuleP;
|
|
54
|
-
constructor(container: Container, scope: IFluidObject, codeLoader: ICodeDetailsLoader | ICodeLoader, _codeDetails: IFluidCodeDetails, _baseSnapshot: ISnapshotTree | undefined, deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>, quorum: IQuorum, loader: ILoader, raiseContainerWarning: (warning: ContainerWarning) => void, submitFn: (type: MessageType, contents: any, batch: boolean, appData: any) => number, submitSignalFn: (contents: any) => void, closeFn: (error?: ICriticalContainerError) => void, version: string, updateDirtyContainerState: (dirty: boolean) => void, existing: boolean, pendingLocalState?: unknown);
|
|
54
|
+
constructor(container: Container, scope: IFluidObject & FluidObject, codeLoader: ICodeDetailsLoader | ICodeLoader, _codeDetails: IFluidCodeDetails, _baseSnapshot: ISnapshotTree | undefined, deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>, quorum: IQuorum, loader: ILoader, raiseContainerWarning: (warning: ContainerWarning) => void, submitFn: (type: MessageType, contents: any, batch: boolean, appData: any) => number, submitSignalFn: (contents: any) => void, closeFn: (error?: ICriticalContainerError) => void, version: string, updateDirtyContainerState: (dirty: boolean) => void, existing: boolean, pendingLocalState?: unknown);
|
|
55
|
+
getSpecifiedCodeDetails(): IFluidCodeDetails | undefined;
|
|
55
56
|
dispose(error?: Error): void;
|
|
56
57
|
snapshot(tagMessage?: string, fullTree?: boolean): Promise<ITree | null>;
|
|
57
58
|
getLoadedFromVersion(): IVersion | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerContext.d.ts","sourceRoot":"","sources":["../src/containerContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EACH,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,iBAAiB,
|
|
1
|
+
{"version":3,"file":"containerContext.d.ts","sourceRoot":"","sources":["../src/containerContext.ts"],"names":[],"mappings":"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"}
|
package/lib/containerContext.js
CHANGED
|
@@ -88,6 +88,10 @@ export class ContainerContext {
|
|
|
88
88
|
return this._disposed;
|
|
89
89
|
}
|
|
90
90
|
get codeDetails() { return this._codeDetails; }
|
|
91
|
+
getSpecifiedCodeDetails() {
|
|
92
|
+
var _a;
|
|
93
|
+
return ((_a = this.quorum.get("code")) !== null && _a !== void 0 ? _a : this.quorum.get("code2"));
|
|
94
|
+
}
|
|
91
95
|
dispose(error) {
|
|
92
96
|
if (this._disposed) {
|
|
93
97
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerContext.js","sourceRoot":"","sources":["../src/containerContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport {\n IFluidObject,\n IFluidConfiguration,\n IRequest,\n IResponse,\n IFluidCodeDetails,\n IFluidCodeDetailsComparer,\n IProvideFluidCodeDetailsComparer,\n} from \"@fluidframework/core-interfaces\";\nimport {\n IAudience,\n IContainerContext,\n IDeltaManager,\n ILoader,\n IRuntime,\n ICriticalContainerError,\n ContainerWarning,\n AttachState,\n ILoaderOptions,\n IRuntimeFactory,\n ICodeLoader,\n IProvideRuntimeFactory,\n} from \"@fluidframework/container-definitions\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport {\n IClientConfiguration,\n IClientDetails,\n IDocumentMessage,\n IQuorum,\n ISequencedDocumentMessage,\n ISignalMessage,\n ISnapshotTree,\n ITree,\n MessageType,\n ISummaryTree,\n IVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { assert, LazyPromise } from \"@fluidframework/common-utils\";\nimport { Container } from \"./container\";\nimport { ICodeDetailsLoader, IFluidModuleWithDetails } from \"./loader\";\n\nconst PackageNotFactoryError = \"Code package does not implement IRuntimeFactory\";\n\nexport class ContainerContext implements IContainerContext {\n public static async createOrLoad(\n container: Container,\n scope: IFluidObject,\n codeLoader: ICodeDetailsLoader | ICodeLoader,\n codeDetails: IFluidCodeDetails,\n baseSnapshot: ISnapshotTree | undefined,\n deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n quorum: IQuorum,\n loader: ILoader,\n raiseContainerWarning: (warning: ContainerWarning) => void,\n submitFn: (type: MessageType, contents: any, batch: boolean, appData: any) => number,\n submitSignalFn: (contents: any) => void,\n closeFn: (error?: ICriticalContainerError) => void,\n version: string,\n updateDirtyContainerState: (dirty: boolean) => void,\n existing: boolean,\n pendingLocalState?: unknown,\n ): Promise<ContainerContext> {\n const context = new ContainerContext(\n container,\n scope,\n codeLoader,\n codeDetails,\n baseSnapshot,\n deltaManager,\n quorum,\n loader,\n raiseContainerWarning,\n submitFn,\n submitSignalFn,\n closeFn,\n version,\n updateDirtyContainerState,\n existing,\n pendingLocalState);\n await context.instantiateRuntime(existing);\n return context;\n }\n\n public readonly taggedLogger: ITelemetryLogger;\n\n /**\n * Subtlety: returns this.taggedLogger since vanilla this.logger is now deprecated. See IContainerContext for more\n * details.\n */\n /** @deprecated See IContainerContext for more details. */\n public get logger(): ITelemetryLogger {\n return this.taggedLogger;\n }\n\n public get id(): string {\n return this.container.id;\n }\n\n public get clientId(): string | undefined {\n return this.container.clientId;\n }\n\n public get clientDetails(): IClientDetails {\n return this.container.clientDetails;\n }\n\n public get connected(): boolean {\n return this.container.connected;\n }\n\n public get canSummarize(): boolean {\n return \"summarize\" in this.runtime;\n }\n\n public get serviceConfiguration(): IClientConfiguration | undefined {\n return this.container.serviceConfiguration;\n }\n\n public get audience(): IAudience {\n return this.container.audience;\n }\n\n public get options(): ILoaderOptions {\n return this.container.options;\n }\n\n public get configuration(): IFluidConfiguration {\n const config: Partial<IFluidConfiguration> = {\n scopes: this.container.scopes,\n };\n return config as IFluidConfiguration;\n }\n\n public get baseSnapshot() {\n return this._baseSnapshot;\n }\n\n public get storage(): IDocumentStorageService {\n return this.container.storage;\n }\n\n private _runtime: IRuntime | undefined;\n private get runtime() {\n if (this._runtime === undefined) {\n throw new Error(\"Attempted to access runtime before it was defined\");\n }\n return this._runtime;\n }\n\n private _disposed = false;\n\n public get disposed() {\n return this._disposed;\n }\n\n public get codeDetails() { return this._codeDetails; }\n\n private readonly _fluidModuleP: Promise<IFluidModuleWithDetails>;\n\n constructor(\n private readonly container: Container,\n public readonly scope: IFluidObject,\n private readonly codeLoader: ICodeDetailsLoader | ICodeLoader,\n private readonly _codeDetails: IFluidCodeDetails,\n private readonly _baseSnapshot: ISnapshotTree | undefined,\n public readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n public readonly quorum: IQuorum,\n public readonly loader: ILoader,\n public readonly raiseContainerWarning: (warning: ContainerWarning) => void,\n public readonly submitFn: (type: MessageType, contents: any, batch: boolean, appData: any) => number,\n public readonly submitSignalFn: (contents: any) => void,\n public readonly closeFn: (error?: ICriticalContainerError) => void,\n public readonly version: string,\n public readonly updateDirtyContainerState: (dirty: boolean) => void,\n public readonly existing: boolean,\n public readonly pendingLocalState?: unknown,\n\n ) {\n this.taggedLogger = container.subLogger;\n this._fluidModuleP = new LazyPromise<IFluidModuleWithDetails>(\n async () => this.loadCodeModule(_codeDetails),\n );\n this.attachListener();\n }\n\n public dispose(error?: Error): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n\n this.runtime.dispose(error);\n this.quorum.dispose();\n this.deltaManager.dispose();\n }\n\n public async snapshot(tagMessage: string = \"\", fullTree: boolean = false): Promise<ITree | null> {\n return this.runtime.snapshot(tagMessage, fullTree);\n }\n\n public getLoadedFromVersion(): IVersion | undefined {\n return this.container.loadedFromVersion;\n }\n\n public get attachState(): AttachState {\n return this.container.attachState;\n }\n\n /**\n * Create a summary. Used when attaching or serializing a detached container.\n *\n * @param blobRedirectTable - A table passed during the attach process. While detached, blob upload is supported\n * using IDs generated locally. After attach, these IDs cannot be used, so this table maps the old local IDs to the\n * new storage IDs so requests can be redirected.\n */\n public createSummary(blobRedirectTable?: Map<string, string>): ISummaryTree {\n return this.runtime.createSummary(blobRedirectTable);\n }\n\n public setConnectionState(connected: boolean, clientId?: string) {\n const runtime = this.runtime;\n\n assert(connected === this.connected, 0x0de /* \"Mismatch in connection state while setting\" */);\n\n runtime.setConnectionState(connected, clientId);\n }\n\n public process(message: ISequencedDocumentMessage, local: boolean, context: any) {\n this.runtime.process(message, local, context);\n }\n\n public processSignal(message: ISignalMessage, local: boolean) {\n this.runtime.processSignal(message, local);\n }\n\n public async request(path: IRequest): Promise<IResponse> {\n return this.runtime.request(path);\n }\n\n public async getAbsoluteUrl(relativeUrl: string): Promise<string | undefined> {\n return this.container.getAbsoluteUrl(relativeUrl);\n }\n\n public getPendingLocalState(): unknown {\n return this.runtime.getPendingLocalState();\n }\n\n /**\n * Determines if the current code details of the context\n * satisfy the incoming constraint code details\n */\n public async satisfies(constraintCodeDetails: IFluidCodeDetails) {\n const comparers: IFluidCodeDetailsComparer[] = [];\n\n const maybeCompareCodeLoader = this.codeLoader;\n if (maybeCompareCodeLoader.IFluidCodeDetailsComparer !== undefined) {\n comparers.push(maybeCompareCodeLoader.IFluidCodeDetailsComparer);\n }\n\n const moduleWithDetails = await this._fluidModuleP;\n const maybeCompareExport: Partial<IProvideFluidCodeDetailsComparer> | undefined =\n moduleWithDetails.module?.fluidExport;\n if (maybeCompareExport?.IFluidCodeDetailsComparer !== undefined) {\n comparers.push(maybeCompareExport.IFluidCodeDetailsComparer);\n }\n\n // if there are not comparers it is not possible to know\n // if the current satisfy the incoming, so return false,\n // as assuming they do not satisfy is safer .e.g we will\n // reload, rather than potentially running with\n // incompatible code\n if (comparers.length === 0) {\n return false;\n }\n\n for (const comparer of comparers) {\n const satisfies = await comparer.satisfies(\n moduleWithDetails.details,\n constraintCodeDetails,\n );\n if (satisfies === false) {\n return false;\n }\n }\n return true;\n }\n\n public notifyAttaching() {\n this.runtime.setAttachState(AttachState.Attaching);\n }\n\n // #region private\n\n private async getRuntimeFactory(): Promise<IRuntimeFactory> {\n const fluidExport: Partial<IProvideRuntimeFactory> | undefined =\n (await this._fluidModuleP).module?.fluidExport;\n const runtimeFactory = fluidExport?.IRuntimeFactory;\n if (runtimeFactory === undefined) {\n throw new Error(PackageNotFactoryError);\n }\n\n return runtimeFactory;\n }\n\n private async instantiateRuntime(existing: boolean) {\n const runtimeFactory = await this.getRuntimeFactory();\n this._runtime = await runtimeFactory.instantiateRuntime(this, existing);\n }\n\n private attachListener() {\n this.container.once(\"attached\", () => {\n this.runtime.setAttachState(AttachState.Attached);\n });\n }\n\n private async loadCodeModule(codeDetails: IFluidCodeDetails) {\n const loadCodeResult = await PerformanceEvent.timedExecAsync(\n this.taggedLogger,\n { eventName: \"CodeLoad\" },\n async () => this.codeLoader.load(codeDetails),\n );\n\n if (\"module\" in loadCodeResult) {\n const { module, details } = loadCodeResult;\n return {\n module,\n details: details ?? codeDetails,\n };\n } else {\n return { module: loadCodeResult, details: codeDetails };\n }\n }\n // #endregion\n}\n"]}
|
|
1
|
+
{"version":3,"file":"containerContext.js","sourceRoot":"","sources":["../src/containerContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport {\n IFluidObject,\n IFluidConfiguration,\n IRequest,\n IResponse,\n IFluidCodeDetails,\n IFluidCodeDetailsComparer,\n IProvideFluidCodeDetailsComparer,\n FluidObject,\n} from \"@fluidframework/core-interfaces\";\nimport {\n IAudience,\n IContainerContext,\n IDeltaManager,\n ILoader,\n IRuntime,\n ICriticalContainerError,\n ContainerWarning,\n AttachState,\n ILoaderOptions,\n IRuntimeFactory,\n ICodeLoader,\n IProvideRuntimeFactory,\n} from \"@fluidframework/container-definitions\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport {\n IClientConfiguration,\n IClientDetails,\n IDocumentMessage,\n IQuorum,\n ISequencedDocumentMessage,\n ISignalMessage,\n ISnapshotTree,\n ITree,\n MessageType,\n ISummaryTree,\n IVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { assert, LazyPromise } from \"@fluidframework/common-utils\";\nimport { Container } from \"./container\";\nimport { ICodeDetailsLoader, IFluidModuleWithDetails } from \"./loader\";\n\nconst PackageNotFactoryError = \"Code package does not implement IRuntimeFactory\";\n\nexport class ContainerContext implements IContainerContext {\n public static async createOrLoad(\n container: Container,\n scope: FluidObject,\n codeLoader: ICodeDetailsLoader | ICodeLoader,\n codeDetails: IFluidCodeDetails,\n baseSnapshot: ISnapshotTree | undefined,\n deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n quorum: IQuorum,\n loader: ILoader,\n raiseContainerWarning: (warning: ContainerWarning) => void,\n submitFn: (type: MessageType, contents: any, batch: boolean, appData: any) => number,\n submitSignalFn: (contents: any) => void,\n closeFn: (error?: ICriticalContainerError) => void,\n version: string,\n updateDirtyContainerState: (dirty: boolean) => void,\n existing: boolean,\n pendingLocalState?: unknown,\n ): Promise<ContainerContext> {\n const context = new ContainerContext(\n container,\n scope,\n codeLoader,\n codeDetails,\n baseSnapshot,\n deltaManager,\n quorum,\n loader,\n raiseContainerWarning,\n submitFn,\n submitSignalFn,\n closeFn,\n version,\n updateDirtyContainerState,\n existing,\n pendingLocalState);\n await context.instantiateRuntime(existing);\n return context;\n }\n\n public readonly taggedLogger: ITelemetryLogger;\n\n /**\n * Subtlety: returns this.taggedLogger since vanilla this.logger is now deprecated. See IContainerContext for more\n * details.\n */\n /** @deprecated See IContainerContext for more details. */\n public get logger(): ITelemetryLogger {\n return this.taggedLogger;\n }\n\n public get id(): string {\n return this.container.id;\n }\n\n public get clientId(): string | undefined {\n return this.container.clientId;\n }\n\n public get clientDetails(): IClientDetails {\n return this.container.clientDetails;\n }\n\n public get connected(): boolean {\n return this.container.connected;\n }\n\n public get canSummarize(): boolean {\n return \"summarize\" in this.runtime;\n }\n\n public get serviceConfiguration(): IClientConfiguration | undefined {\n return this.container.serviceConfiguration;\n }\n\n public get audience(): IAudience {\n return this.container.audience;\n }\n\n public get options(): ILoaderOptions {\n return this.container.options;\n }\n\n public get configuration(): IFluidConfiguration {\n const config: Partial<IFluidConfiguration> = {\n scopes: this.container.scopes,\n };\n return config as IFluidConfiguration;\n }\n\n public get baseSnapshot() {\n return this._baseSnapshot;\n }\n\n public get storage(): IDocumentStorageService {\n return this.container.storage;\n }\n\n private _runtime: IRuntime | undefined;\n private get runtime() {\n if (this._runtime === undefined) {\n throw new Error(\"Attempted to access runtime before it was defined\");\n }\n return this._runtime;\n }\n\n private _disposed = false;\n\n public get disposed() {\n return this._disposed;\n }\n\n public get codeDetails() { return this._codeDetails; }\n\n private readonly _fluidModuleP: Promise<IFluidModuleWithDetails>;\n\n constructor(\n private readonly container: Container,\n public readonly scope: IFluidObject & FluidObject,\n private readonly codeLoader: ICodeDetailsLoader | ICodeLoader,\n private readonly _codeDetails: IFluidCodeDetails,\n private readonly _baseSnapshot: ISnapshotTree | undefined,\n public readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n public readonly quorum: IQuorum,\n public readonly loader: ILoader,\n public readonly raiseContainerWarning: (warning: ContainerWarning) => void,\n public readonly submitFn: (type: MessageType, contents: any, batch: boolean, appData: any) => number,\n public readonly submitSignalFn: (contents: any) => void,\n public readonly closeFn: (error?: ICriticalContainerError) => void,\n public readonly version: string,\n public readonly updateDirtyContainerState: (dirty: boolean) => void,\n public readonly existing: boolean,\n public readonly pendingLocalState?: unknown,\n\n ) {\n this.taggedLogger = container.subLogger;\n this._fluidModuleP = new LazyPromise<IFluidModuleWithDetails>(\n async () => this.loadCodeModule(_codeDetails),\n );\n this.attachListener();\n }\n\n public getSpecifiedCodeDetails(): IFluidCodeDetails | undefined {\n return (this.quorum.get(\"code\") ?? this.quorum.get(\"code2\")) as IFluidCodeDetails | undefined;\n }\n\n public dispose(error?: Error): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n\n this.runtime.dispose(error);\n this.quorum.dispose();\n this.deltaManager.dispose();\n }\n\n public async snapshot(tagMessage: string = \"\", fullTree: boolean = false): Promise<ITree | null> {\n return this.runtime.snapshot(tagMessage, fullTree);\n }\n\n public getLoadedFromVersion(): IVersion | undefined {\n return this.container.loadedFromVersion;\n }\n\n public get attachState(): AttachState {\n return this.container.attachState;\n }\n\n /**\n * Create a summary. Used when attaching or serializing a detached container.\n *\n * @param blobRedirectTable - A table passed during the attach process. While detached, blob upload is supported\n * using IDs generated locally. After attach, these IDs cannot be used, so this table maps the old local IDs to the\n * new storage IDs so requests can be redirected.\n */\n public createSummary(blobRedirectTable?: Map<string, string>): ISummaryTree {\n return this.runtime.createSummary(blobRedirectTable);\n }\n\n public setConnectionState(connected: boolean, clientId?: string) {\n const runtime = this.runtime;\n\n assert(connected === this.connected, 0x0de /* \"Mismatch in connection state while setting\" */);\n\n runtime.setConnectionState(connected, clientId);\n }\n\n public process(message: ISequencedDocumentMessage, local: boolean, context: any) {\n this.runtime.process(message, local, context);\n }\n\n public processSignal(message: ISignalMessage, local: boolean) {\n this.runtime.processSignal(message, local);\n }\n\n public async request(path: IRequest): Promise<IResponse> {\n return this.runtime.request(path);\n }\n\n public async getAbsoluteUrl(relativeUrl: string): Promise<string | undefined> {\n return this.container.getAbsoluteUrl(relativeUrl);\n }\n\n public getPendingLocalState(): unknown {\n return this.runtime.getPendingLocalState();\n }\n\n /**\n * Determines if the current code details of the context\n * satisfy the incoming constraint code details\n */\n public async satisfies(constraintCodeDetails: IFluidCodeDetails) {\n const comparers: IFluidCodeDetailsComparer[] = [];\n\n const maybeCompareCodeLoader = this.codeLoader;\n if (maybeCompareCodeLoader.IFluidCodeDetailsComparer !== undefined) {\n comparers.push(maybeCompareCodeLoader.IFluidCodeDetailsComparer);\n }\n\n const moduleWithDetails = await this._fluidModuleP;\n const maybeCompareExport: Partial<IProvideFluidCodeDetailsComparer> | undefined =\n moduleWithDetails.module?.fluidExport;\n if (maybeCompareExport?.IFluidCodeDetailsComparer !== undefined) {\n comparers.push(maybeCompareExport.IFluidCodeDetailsComparer);\n }\n\n // if there are not comparers it is not possible to know\n // if the current satisfy the incoming, so return false,\n // as assuming they do not satisfy is safer .e.g we will\n // reload, rather than potentially running with\n // incompatible code\n if (comparers.length === 0) {\n return false;\n }\n\n for (const comparer of comparers) {\n const satisfies = await comparer.satisfies(\n moduleWithDetails.details,\n constraintCodeDetails,\n );\n if (satisfies === false) {\n return false;\n }\n }\n return true;\n }\n\n public notifyAttaching() {\n this.runtime.setAttachState(AttachState.Attaching);\n }\n\n // #region private\n\n private async getRuntimeFactory(): Promise<IRuntimeFactory> {\n const fluidExport: FluidObject<IProvideRuntimeFactory> | undefined =\n (await this._fluidModuleP).module?.fluidExport;\n const runtimeFactory = fluidExport?.IRuntimeFactory;\n if (runtimeFactory === undefined) {\n throw new Error(PackageNotFactoryError);\n }\n\n return runtimeFactory;\n }\n\n private async instantiateRuntime(existing: boolean) {\n const runtimeFactory = await this.getRuntimeFactory();\n this._runtime = await runtimeFactory.instantiateRuntime(this, existing);\n }\n\n private attachListener() {\n this.container.once(\"attached\", () => {\n this.runtime.setAttachState(AttachState.Attached);\n });\n }\n\n private async loadCodeModule(codeDetails: IFluidCodeDetails) {\n const loadCodeResult = await PerformanceEvent.timedExecAsync(\n this.taggedLogger,\n { eventName: \"CodeLoad\" },\n async () => this.codeLoader.load(codeDetails),\n );\n\n if (\"module\" in loadCodeResult) {\n const { module, details } = loadCodeResult;\n return {\n module,\n details: details ?? codeDetails,\n };\n } else {\n return { module: loadCodeResult, details: codeDetails };\n }\n }\n // #endregion\n}\n"]}
|
package/lib/deltaManager.d.ts
CHANGED
|
@@ -113,13 +113,6 @@ export declare class DeltaManager extends TypedEventEmitter<IDeltaManagerInterna
|
|
|
113
113
|
* @deprecated - use readOnlyInfo
|
|
114
114
|
*/
|
|
115
115
|
get readonly(): boolean | undefined;
|
|
116
|
-
/**
|
|
117
|
-
* Tells if user has no write permissions for file in storage
|
|
118
|
-
* It is undefined if we have not yet established websocket connection
|
|
119
|
-
* and do not know if user has write access to a file.
|
|
120
|
-
* @deprecated - use readOnlyInfo
|
|
121
|
-
*/
|
|
122
|
-
get readonlyPermissions(): boolean | undefined;
|
|
123
116
|
get readOnlyInfo(): ReadOnlyInfo;
|
|
124
117
|
/**
|
|
125
118
|
* Automatic reconnecting enabled or disabled.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deltaManager.d.ts","sourceRoot":"","sources":["../src/deltaManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAEH,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,EACf,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAiC,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAQhG,OAAO,EAEH,gBAAgB,EAKnB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACH,cAAc,EACd,OAAO,EACP,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAGhB,yBAAyB,EAEzB,cAAc,EAGd,WAAW,EAGd,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"deltaManager.d.ts","sourceRoot":"","sources":["../src/deltaManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAEH,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,EACf,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAiC,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAQhG,OAAO,EAEH,gBAAgB,EAKnB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACH,cAAc,EACd,OAAO,EACP,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAGhB,yBAAyB,EAEzB,cAAc,EAGd,WAAW,EAGd,MAAM,sCAAsC,CAAC;AAwC9C,MAAM,WAAW,eAAe;IAC5B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,oBAAY,aAAa;IACrB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,OAAO,YAAY;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACpE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,OAAE;IACpE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,uBAAuB,KAAK,IAAI,OAAE;CAC1E;AA+CD;;;GAGG;AACH,qBAAa,YACT,SAAQ,iBAAiB,CAAC,2BAA2B,CACrD,YACA,aAAa,CAAC,yBAAyB,EAAE,gBAAgB,CAAC,EAC1D,cAAc,CAAC,2BAA2B,CAAC;IAuVvC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAzV5B,IAAW,MAAM,IAAI,OAAO,CAA2B;IAEvD,IAAW,QAAQ,YAA0B;IAE7C,SAAgB,aAAa,EAAE,cAAc,CAAC;IAC9C,IAAW,YAAY,SAAmB;IAE1C;;OAEG;IACH,OAAO,CAAC,cAAc,CAAgB;IAGtC,OAAO,CAAC,oBAAoB,CAAsB;IAGlD,OAAO,CAAC,cAAc,CAAS;IAG/B,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiB;IAEzD,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,WAAW,CAAqB;IAGxC,OAAO,CAAC,iBAAiB,CAAa;IAStC,OAAO,CAAC,wBAAwB,CAAa;IAC7C,OAAO,CAAC,qBAAqB,CAAa;IAC1C,OAAO,CAAC,2BAA2B,CAAa;IAChD,OAAO,CAAC,oBAAoB,CAAwC;IACpE,OAAO,CAAC,QAAQ,CAAa;IAE7B,OAAO,CAAC,yBAAyB,CAAqB;IACtD,OAAO,CAAC,0BAA0B,CAAwC;IAG1E,OAAO,CAAC,kBAAkB,CAAa;IAEvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAE3D,OAAO,CAAC,WAAW,CAAgD;IACnE,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,4BAA4B,CAAK;IAEzC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IAG9C,OAAO,CAAC,qBAAqB,CAAqB;IAElD,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,YAAY,CAA2C;IAE/D,OAAO,CAAC,aAAa,CAA0B;IAE/C,OAAO,CAAC,sBAAsB,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,OAAO,CAAC,kBAAkB,CAAa;IAEvC,OAAO,CAAC,oBAAoB,CAAuC;IAInE,OAAO,CAAC,4BAA4B,CAAS;IAE7C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAyB;IAG9D,OAAO,CAAC,gBAAgB,CAAS;IAGjC,OAAO,CAAC,oBAAoB,CAAS;IAErC;;;OAGG;IACH,IAAW,2BAA2B,YAIrC;IAED,IAAW,OAAO,IAAI,WAAW,CAAC,yBAAyB,CAAC,CAE3D;IAED,IAAW,QAAQ,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAErD;IAED,IAAW,aAAa,IAAI,WAAW,CAAC,cAAc,CAAC,CAEtD;IAED,IAAW,qBAAqB,IAAI,MAAM,CAEzC;IAED,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAED,IAAW,WAAW,0CAErB;IAED,IAAW,kBAAkB,WAE5B;IAED,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED,IAAW,qBAAqB,IAAI,MAAM,CAEzC;IAED,IAAW,cAAc,IAAI,MAAM,CAGlC;IAED,IAAW,OAAO,IAAI,MAAM,CAK3B;IAED,IAAW,oBAAoB,IAAI,oBAAoB,GAAG,SAAS,CAElE;IAED,IAAW,MAAM,IAAI,MAAM,EAAE,GAAG,SAAS,CAExC;IAED,IAAW,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAEhD;IAED;;OAEG;IACH,IAAW,cAAc,IAAI,cAAc,CAO1C;IAED;;;;;;;;;OASG;IACF,IAAW,QAAQ,wBAKnB;IAED,IAAW,YAAY,IAAI,YAAY,CAYtC;IAED;;;OAGG;IACH,IAAW,aAAa,IAAI,aAAa,CAExC;IAEM,eAAe,IAAI,OAAO;IAIjC;;;MAGE;IACK,eAAe,IAAI,oBAAoB;IAmB9C;;;OAGG;IACI,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAYlD;;;;;;;;;;;;;;;;OAgBG;IACI,aAAa,CAAC,QAAQ,EAAE,OAAO;IAoCtC;;;;;OAKG;IACI,kBAAkB,CAAC,KAAK,EAAE,oBAAoB;IAuBrD,OAAO,CAAC,uBAAuB;gBASV,eAAe,EAAE,MAAM,gBAAgB,GAAG,SAAS,EAC5D,MAAM,EAAE,OAAO,EACN,MAAM,EAAE,gBAAgB,EACzC,gBAAgB,EAAE,OAAO,EACR,OAAO,EAAE,MAAM,OAAO;IAmDpC,OAAO;IAId;;OAEG;IACU,eAAe,CACxB,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,qBAAqB,EAC9B,YAAY,GAAE,QAAQ,GAAG,KAAK,GAAG,MAAe;IA+CpD,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAcvB,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAKxE;;;;OAIG;IACH,OAAO,CAAC,cAAc;YAcR,WAAW;IAiKlB,KAAK;IAYZ;;;;;;;OAOG;IACI,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,UAAQ,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,MAAM;IA4F/E,YAAY,CAAC,OAAO,EAAE,GAAG;YAQlB,SAAS;IA+FvB;;OAEG;IACI,KAAK,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,IAAI;IA0C5C,gBAAgB,CAAC,EAAE,EAAE,MAAM;IAOlC;;;;;OAKG;IACI,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAgBhE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGxB;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IAGF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAkB1B;IAGF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAQhC;IAEF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAM3B;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAE1B;IAEF;;;;OAIG;IACH,OAAO,CAAC,4BAA4B;IAwHpC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAkCjC;;;;;;OAMG;YACW,gBAAgB;IAU9B;;;;;;OAMG;YACW,oBAAoB;IA+ClC,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,eAAe;IAoIvB,OAAO,CAAC,qBAAqB;IAoG7B;;OAEG;IACF,OAAO,CAAC,kBAAkB;IAM1B;;MAEE;YACW,sBAAsB;IA2DpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,4BAA4B;CAKvC"}
|
package/lib/deltaManager.js
CHANGED
|
@@ -22,6 +22,7 @@ function getNackReconnectInfo(nackContent) {
|
|
|
22
22
|
return createGenericNetworkError(`nack [${nackContent.code}]`, message, canRetry, retryAfterMs, { statusCode: nackContent.code });
|
|
23
23
|
}
|
|
24
24
|
const createReconnectError = (fluidErrorCode, err) => wrapError(err, (errorMessage) => new GenericNetworkError(fluidErrorCode, errorMessage, true /* canRetry */));
|
|
25
|
+
const fatalConnectErrorProp = { fatalConnectError: true };
|
|
25
26
|
export var ReconnectMode;
|
|
26
27
|
(function (ReconnectMode) {
|
|
27
28
|
ReconnectMode["Never"] = "Never";
|
|
@@ -70,8 +71,6 @@ class NoDeltaStream extends TypedEventEmitter {
|
|
|
70
71
|
}
|
|
71
72
|
get disposed() { return this._disposed; }
|
|
72
73
|
dispose() { this._disposed = true; }
|
|
73
|
-
// back-compat: became @deprecated in 0.45 / driver-definitions 0.40
|
|
74
|
-
close() { this.dispose(); }
|
|
75
74
|
}
|
|
76
75
|
/**
|
|
77
76
|
* Manages the flow of both inbound and outbound messages. This class ensures that shared objects receive delta
|
|
@@ -152,10 +151,6 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
152
151
|
this.reconnectOnError(this.defaultReconnectionMode, createReconnectError("dmDocumentDeltaConnectionDisconnected", disconnectReason));
|
|
153
152
|
};
|
|
154
153
|
this.errorHandler = (error) => {
|
|
155
|
-
// Observation based on early pre-production telemetry:
|
|
156
|
-
// We are getting transport errors from WebSocket here, right before or after "disconnect".
|
|
157
|
-
// This happens only in Firefox.
|
|
158
|
-
logNetworkFailure(this.logger, { eventName: "DeltaConnectionError" }, error);
|
|
159
154
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
160
155
|
this.reconnectOnError(this.defaultReconnectionMode, createReconnectError("dmDocumentDeltaConnectionError", error));
|
|
161
156
|
};
|
|
@@ -266,7 +261,7 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
266
261
|
get connectionMode() {
|
|
267
262
|
var _a;
|
|
268
263
|
assert(!this.downgradedConnection || ((_a = this.connection) === null || _a === void 0 ? void 0 : _a.mode) === "write", 0x277 /* "Did we forget to reset downgradedConnection on new connection?" */);
|
|
269
|
-
if (this.connection === undefined
|
|
264
|
+
if (this.connection === undefined) {
|
|
270
265
|
return "read";
|
|
271
266
|
}
|
|
272
267
|
return this.connection.mode;
|
|
@@ -287,15 +282,6 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
287
282
|
}
|
|
288
283
|
return this._readonlyPermissions;
|
|
289
284
|
}
|
|
290
|
-
/**
|
|
291
|
-
* Tells if user has no write permissions for file in storage
|
|
292
|
-
* It is undefined if we have not yet established websocket connection
|
|
293
|
-
* and do not know if user has write access to a file.
|
|
294
|
-
* @deprecated - use readOnlyInfo
|
|
295
|
-
*/
|
|
296
|
-
get readonlyPermissions() {
|
|
297
|
-
return this._readonlyPermissions;
|
|
298
|
-
}
|
|
299
285
|
get readOnlyInfo() {
|
|
300
286
|
const storageOnly = this.connection !== undefined && this.connection instanceof NoDeltaStream;
|
|
301
287
|
if (storageOnly || this._forceReadonly || this._readonlyPermissions === true) {
|
|
@@ -328,7 +314,7 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
328
314
|
sequenceNumber: this.lastSequenceNumber,
|
|
329
315
|
};
|
|
330
316
|
if (this.connection !== undefined) {
|
|
331
|
-
return Object.assign(Object.assign({}, common), { connectionMode: this.connectionMode });
|
|
317
|
+
return Object.assign(Object.assign({}, common), { connectionMode: this.connectionMode, relayServiceAgent: this.connection.relayServiceAgent });
|
|
332
318
|
}
|
|
333
319
|
else {
|
|
334
320
|
return Object.assign(Object.assign({}, common), {
|
|
@@ -372,12 +358,12 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
372
358
|
value: readonly,
|
|
373
359
|
});
|
|
374
360
|
}
|
|
375
|
-
const oldValue = this.readonly;
|
|
361
|
+
const oldValue = this.readOnlyInfo.readonly;
|
|
376
362
|
this._forceReadonly = readonly;
|
|
377
|
-
if (oldValue !== this.readonly) {
|
|
363
|
+
if (oldValue !== this.readOnlyInfo.readonly) {
|
|
378
364
|
assert(this._reconnectMode !== ReconnectMode.Never, 0x279 /* "API is not supported for non-connecting or closed container" */);
|
|
379
365
|
let reconnect = false;
|
|
380
|
-
if (this.readonly === true) {
|
|
366
|
+
if (this.readOnlyInfo.readonly === true) {
|
|
381
367
|
// If we switch to readonly while connected, we should disconnect first
|
|
382
368
|
// See comment in the "readonly" event handler to deltaManager set up by
|
|
383
369
|
// the ContainerRuntime constructor
|
|
@@ -388,7 +374,7 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
388
374
|
}
|
|
389
375
|
reconnect = this.disconnectFromDeltaStream("Force readonly");
|
|
390
376
|
}
|
|
391
|
-
safeRaiseEvent(this, this.logger, "readonly", this.readonly);
|
|
377
|
+
safeRaiseEvent(this, this.logger, "readonly", this.readOnlyInfo.readonly);
|
|
392
378
|
if (reconnect) {
|
|
393
379
|
// reconnect if we disconnected from before.
|
|
394
380
|
this.triggerConnect({ reason: "forceReadonly", mode: "read", fetchOpsFromStorage: false });
|
|
@@ -410,13 +396,13 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
410
396
|
// stalled op processing
|
|
411
397
|
fetchReason: this.fetchReason,
|
|
412
398
|
// A bunch of useful sequence numbers to understand if we are holding some ops from processing
|
|
413
|
-
lastQueuedSequenceNumber: this.lastQueuedSequenceNumber, lastProcessedSequenceNumber: this.lastProcessedSequenceNumber, lastObserved: this.lastObservedSeqNumber }), this.connectionStateProps), { pendingOps: this.pending.length, pendingFirst: (_a = pendingSorted[0]) === null || _a === void 0 ? void 0 : _a.sequenceNumber, haveHandler: this.handler !== undefined,
|
|
399
|
+
lastQueuedSequenceNumber: this.lastQueuedSequenceNumber, lastProcessedSequenceNumber: this.lastProcessedSequenceNumber, lastObserved: this.lastObservedSeqNumber }), this.connectionStateProps), { pendingOps: this.pending.length, pendingFirst: (_a = pendingSorted[0]) === null || _a === void 0 ? void 0 : _a.sequenceNumber, haveHandler: this.handler !== undefined, inboundLength: this.inbound.length, inboundPaused: this.inbound.paused }));
|
|
414
400
|
}
|
|
415
401
|
set_readonlyPermissions(readonly) {
|
|
416
|
-
const oldValue = this.readonly;
|
|
402
|
+
const oldValue = this.readOnlyInfo.readonly;
|
|
417
403
|
this._readonlyPermissions = readonly;
|
|
418
|
-
if (oldValue !== this.readonly) {
|
|
419
|
-
safeRaiseEvent(this, this.logger, "readonly", this.readonly);
|
|
404
|
+
if (oldValue !== this.readOnlyInfo.readonly) {
|
|
405
|
+
safeRaiseEvent(this, this.logger, "readonly", this.readOnlyInfo.readonly);
|
|
420
406
|
}
|
|
421
407
|
}
|
|
422
408
|
dispose() {
|
|
@@ -532,9 +518,7 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
532
518
|
this.fetchMissingDeltas(args.reason, this.lastQueuedSequenceNumber);
|
|
533
519
|
}
|
|
534
520
|
const docService = this.serviceProvider();
|
|
535
|
-
|
|
536
|
-
throw new Error("Container is not attached");
|
|
537
|
-
}
|
|
521
|
+
assert(docService !== undefined, 0x2a7 /* "Container is not attached" */);
|
|
538
522
|
if (((_c = docService.policies) === null || _c === void 0 ? void 0 : _c.storageOnly) === true) {
|
|
539
523
|
const connection = new NoDeltaStream();
|
|
540
524
|
this.connectionP = Promise.resolve(connection); // to keep setupNewSuccessfulConnection happy
|
|
@@ -547,6 +531,7 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
547
531
|
let delayMs = InitialReconnectDelayInMs;
|
|
548
532
|
let connectRepeatCount = 0;
|
|
549
533
|
const connectStartTime = performance.now();
|
|
534
|
+
let lastError;
|
|
550
535
|
// This loop will keep trying to connect until successful, with a delay between each iteration.
|
|
551
536
|
while (connection === undefined) {
|
|
552
537
|
if (this.closed) {
|
|
@@ -571,9 +556,8 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
571
556
|
}
|
|
572
557
|
// Socket.io error when we connect to wrong socket, or hit some multiplexing bug
|
|
573
558
|
if (!canRetryOnError(origError)) {
|
|
574
|
-
const error = normalizeError(origError);
|
|
559
|
+
const error = normalizeError(origError, { props: fatalConnectErrorProp });
|
|
575
560
|
this.close(error);
|
|
576
|
-
// eslint-disable-next-line @typescript-eslint/no-throw-literal
|
|
577
561
|
throw error;
|
|
578
562
|
}
|
|
579
563
|
// Log error once - we get too many errors in logs when we are offline,
|
|
@@ -582,8 +566,10 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
582
566
|
logNetworkFailure(this.logger, {
|
|
583
567
|
delay: delayMs,
|
|
584
568
|
eventName: "DeltaConnectionFailureToConnect",
|
|
569
|
+
duration: TelemetryLogger.formatTick(performance.now() - connectStartTime),
|
|
585
570
|
}, origError);
|
|
586
571
|
}
|
|
572
|
+
lastError = origError;
|
|
587
573
|
const retryDelayFromError = getRetryDelayFromError(origError);
|
|
588
574
|
delayMs = retryDelayFromError !== null && retryDelayFromError !== void 0 ? retryDelayFromError : Math.min(delayMs * 2, MaxReconnectDelayInMs);
|
|
589
575
|
if (retryDelayFromError !== undefined) {
|
|
@@ -595,10 +581,10 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
595
581
|
// If we retried more than once, log an event about how long it took
|
|
596
582
|
if (connectRepeatCount > 1) {
|
|
597
583
|
this.logger.sendTelemetryEvent({
|
|
584
|
+
eventName: "MultipleDeltaConnectionFailures",
|
|
598
585
|
attempts: connectRepeatCount,
|
|
599
586
|
duration: TelemetryLogger.formatTick(performance.now() - connectStartTime),
|
|
600
|
-
|
|
601
|
-
});
|
|
587
|
+
}, lastError);
|
|
602
588
|
}
|
|
603
589
|
this.setupNewSuccessfulConnection(connection, requestedMode);
|
|
604
590
|
return connection;
|
|
@@ -615,8 +601,9 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
615
601
|
this.connectionP = undefined;
|
|
616
602
|
this.removeListener("closed", cleanupAndReject);
|
|
617
603
|
// This error came from some logic error in this file. Fail-fast to learn and fix the issue faster
|
|
618
|
-
|
|
619
|
-
|
|
604
|
+
const normalizedError = normalizeError(error, { props: fatalConnectErrorProp });
|
|
605
|
+
this.close(normalizedError);
|
|
606
|
+
deferred.reject(normalizedError);
|
|
620
607
|
};
|
|
621
608
|
this.on("closed", cleanupAndReject);
|
|
622
609
|
// Attempt the connection
|
|
@@ -648,7 +635,7 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
648
635
|
// const serializedContent = JSON.stringify(this.messageBuffer);
|
|
649
636
|
// const maxOpSize = this.context.deltaManager.maxMessageSize;
|
|
650
637
|
var _a, _b;
|
|
651
|
-
if (this.readonly === true) {
|
|
638
|
+
if (this.readOnlyInfo.readonly === true) {
|
|
652
639
|
assert(this.readOnlyInfo.readonly === true, 0x1f0 /* "Unexpected mismatch in readonly" */);
|
|
653
640
|
const error = new GenericError("deltaManagerReadonlySubmit", undefined /* error */, {
|
|
654
641
|
readonly: this.readOnlyInfo.readonly,
|
|
@@ -674,7 +661,7 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
674
661
|
// Note that we also want nacks to be rare and be treated as catastrophic failures.
|
|
675
662
|
// Be careful with reentrancy though - disconnected event should not be be raised in the
|
|
676
663
|
// middle of the current workflow, but rather on clean stack!
|
|
677
|
-
if (this.connectionMode === "read") {
|
|
664
|
+
if (this.connectionMode === "read" || this.downgradedConnection) {
|
|
678
665
|
if (!this.pendingReconnect) {
|
|
679
666
|
this.pendingReconnect = true;
|
|
680
667
|
Promise.resolve().then(async () => {
|
|
@@ -785,7 +772,7 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
785
772
|
try {
|
|
786
773
|
const stream = this.deltaStorage.fetchMessages(from, // inclusive
|
|
787
774
|
to, // exclusive
|
|
788
|
-
controller.signal, cacheOnly);
|
|
775
|
+
controller.signal, cacheOnly, this.fetchReason);
|
|
789
776
|
// eslint-disable-next-line no-constant-condition
|
|
790
777
|
while (true) {
|
|
791
778
|
const result = await stream.read();
|
|
@@ -818,8 +805,11 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
818
805
|
// Ensure that things like triggerConnect() will short circuit
|
|
819
806
|
this._reconnectMode = ReconnectMode.Never;
|
|
820
807
|
this.closeAbortController.abort();
|
|
808
|
+
const disconnectReason = error !== undefined
|
|
809
|
+
? `Closing DeltaManager (${error.message})`
|
|
810
|
+
: "Closing DeltaManager";
|
|
821
811
|
// This raises "disconnect" event if we have active connection.
|
|
822
|
-
this.disconnectFromDeltaStream(
|
|
812
|
+
this.disconnectFromDeltaStream(disconnectReason);
|
|
823
813
|
this._inbound.clear();
|
|
824
814
|
this._outbound.clear();
|
|
825
815
|
this._inboundSignal.clear();
|
|
@@ -884,7 +874,7 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
884
874
|
this.refreshDelayInfo(this.deltaStreamDelayId);
|
|
885
875
|
if (this.closed) {
|
|
886
876
|
// Raise proper events, Log telemetry event and close connection.
|
|
887
|
-
this.disconnectFromDeltaStream(
|
|
877
|
+
this.disconnectFromDeltaStream("DeltaManager already closed");
|
|
888
878
|
return;
|
|
889
879
|
}
|
|
890
880
|
// We cancel all ops on lost of connectivity, and rely on DDSes to resubmit them.
|
|
@@ -911,6 +901,9 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
911
901
|
clientId: connection.clientId,
|
|
912
902
|
mode: connection.mode,
|
|
913
903
|
};
|
|
904
|
+
if (connection.relayServiceAgent !== undefined) {
|
|
905
|
+
this.connectionStateProps.relayServiceAgent = connection.relayServiceAgent;
|
|
906
|
+
}
|
|
914
907
|
this._hasCheckpointSequenceNumber = false;
|
|
915
908
|
// Some storages may provide checkpointSequenceNumber to identify how far client is behind.
|
|
916
909
|
const checkpointSequenceNumber = connection.checkpointSequenceNumber;
|
|
@@ -983,14 +976,7 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
983
976
|
this._outbound.pause();
|
|
984
977
|
this._outbound.clear();
|
|
985
978
|
this.emit("disconnect", reason);
|
|
986
|
-
|
|
987
|
-
const disposable = connection;
|
|
988
|
-
if (disposable.dispose !== undefined) {
|
|
989
|
-
disposable.dispose();
|
|
990
|
-
}
|
|
991
|
-
else {
|
|
992
|
-
connection.close();
|
|
993
|
-
}
|
|
979
|
+
connection.dispose();
|
|
994
980
|
this.connectionStateProps = {};
|
|
995
981
|
return true;
|
|
996
982
|
}
|
|
@@ -1019,11 +1005,14 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
1019
1005
|
this.disconnectFromDeltaStream(disconnectMessage);
|
|
1020
1006
|
const canRetry = error !== undefined ? canRetryOnError(error) : true;
|
|
1021
1007
|
// If reconnection is not an option, close the DeltaManager
|
|
1022
|
-
if (
|
|
1008
|
+
if (!canRetry) {
|
|
1009
|
+
this.close(normalizeError(error, { props: fatalConnectErrorProp }));
|
|
1010
|
+
}
|
|
1011
|
+
else if (this.reconnectMode === ReconnectMode.Never) {
|
|
1023
1012
|
// Do not raise container error if we are closing just because we lost connection.
|
|
1024
1013
|
// Those errors (like IdleDisconnect) would show up in telemetry dashboards and
|
|
1025
1014
|
// are very misleading, as first initial reaction - some logic is broken.
|
|
1026
|
-
this.close(
|
|
1015
|
+
this.close();
|
|
1027
1016
|
}
|
|
1028
1017
|
// If closed then we can't reconnect
|
|
1029
1018
|
if (this.closed) {
|
|
@@ -1180,7 +1169,6 @@ export class DeltaManager extends TypedEventEmitter {
|
|
|
1180
1169
|
// We have been kicked out from quorum
|
|
1181
1170
|
this.logger.sendPerformanceEvent({ eventName: "ReadConnectionTransition" });
|
|
1182
1171
|
this.downgradedConnection = true;
|
|
1183
|
-
assert(this.connectionMode === "read", 0x27c /* "effective connectionMode should be 'read' after downgrade" */);
|
|
1184
1172
|
}
|
|
1185
1173
|
}
|
|
1186
1174
|
// Add final ack trace.
|