@fluidframework/datastore 2.0.0-internal.5.3.2 → 2.0.0-internal.6.0.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 +50 -0
- package/dist/channelContext.d.ts.map +1 -1
- package/dist/channelContext.js +15 -32
- package/dist/channelContext.js.map +1 -1
- package/dist/channelStorageService.js +1 -2
- package/dist/channelStorageService.js.map +1 -1
- package/dist/dataStoreRuntime.d.ts +7 -2
- package/dist/dataStoreRuntime.d.ts.map +1 -1
- package/dist/dataStoreRuntime.js +36 -58
- package/dist/dataStoreRuntime.js.map +1 -1
- package/dist/remoteChannelContext.d.ts.map +1 -1
- package/dist/remoteChannelContext.js +5 -2
- package/dist/remoteChannelContext.js.map +1 -1
- package/lib/channelContext.d.ts.map +1 -1
- package/lib/channelContext.js +16 -33
- package/lib/channelContext.js.map +1 -1
- package/lib/channelStorageService.js +1 -2
- package/lib/channelStorageService.js.map +1 -1
- package/lib/dataStoreRuntime.d.ts +7 -2
- package/lib/dataStoreRuntime.d.ts.map +1 -1
- package/lib/dataStoreRuntime.js +38 -60
- package/lib/dataStoreRuntime.js.map +1 -1
- package/lib/remoteChannelContext.d.ts.map +1 -1
- package/lib/remoteChannelContext.js +6 -3
- package/lib/remoteChannelContext.js.map +1 -1
- package/package.json +22 -18
- package/src/channelContext.ts +24 -35
- package/src/dataStoreRuntime.ts +32 -57
- package/src/remoteChannelContext.ts +5 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channelStorageService.js","sourceRoot":"","sources":["../src/channelStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,mCAAmC,EAAE,MAAM,+BAA+B,CAAC;AAGpF,MAAM,OAAO,qBAAqB;IAmBjC,YACkB,IAA+B,EAC/B,OAAkD,EAClD,MAA2B,EAC3B,UAAyC;QAHzC,SAAI,GAAJ,IAAI,CAA2B;QAC/B,YAAO,GAAP,OAAO,CAA2C;QAClD,WAAM,GAAN,MAAM,CAAqB;QAC3B,eAAU,GAAV,UAAU,CAA+B;QAE1D,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,mCAAmC;QACnC,IAAI,IAAI,KAAK,SAAS,EAAE;YACvB,qBAAqB,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;SAChE;IACF,CAAC;IA7BO,MAAM,CAAC,WAAW,CACzB,IAAY,EACZ,IAAmB,EACnB,OAAmC;QAEnC,8DAA8D;QAC9D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC9B,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;SAChF;QAED,8DAA8D;QAC9D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC9B,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC7C;IACF,CAAC;IAiBM,KAAK,CAAC,QAAQ,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAY;QACjC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjF,IAAI,IAAI,KAAK,SAAS,EAAE;YACvB,OAAO,IAAI,CAAC;SACZ;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,EAAE,KAAK,CAAC,CAC3E,CAAC;QAEF,OAAO,KAAK,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,IAAY
|
|
1
|
+
{"version":3,"file":"channelStorageService.js","sourceRoot":"","sources":["../src/channelStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,mCAAmC,EAAE,MAAM,+BAA+B,CAAC;AAGpF,MAAM,OAAO,qBAAqB;IAmBjC,YACkB,IAA+B,EAC/B,OAAkD,EAClD,MAA2B,EAC3B,UAAyC;QAHzC,SAAI,GAAJ,IAAI,CAA2B;QAC/B,YAAO,GAAP,OAAO,CAA2C;QAClD,WAAM,GAAN,MAAM,CAAqB;QAC3B,eAAU,GAAV,UAAU,CAA+B;QAE1D,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,mCAAmC;QACnC,IAAI,IAAI,KAAK,SAAS,EAAE;YACvB,qBAAqB,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;SAChE;IACF,CAAC;IA7BO,MAAM,CAAC,WAAW,CACzB,IAAY,EACZ,IAAmB,EACnB,OAAmC;QAEnC,8DAA8D;QAC9D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC9B,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;SAChF;QAED,8DAA8D;QAC9D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC9B,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC7C;IACF,CAAC;IAiBM,KAAK,CAAC,QAAQ,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAY;QACjC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjF,IAAI,IAAI,KAAK,SAAS,EAAE;YACvB,OAAO,IAAI,CAAC;SACZ;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,EAAE,KAAK,CAAC,CAC3E,CAAC;QAEF,OAAO,KAAK,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,IAAY;QAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,MAAM,SAAS,GAAG,mCAAmC,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAClD,oEAAoE;YACpE,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAG,CAAC;YAChC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACxB;QACD,IAAI,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACjD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;SACvC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,IAAY;QACtC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport { ISnapshotTree } from \"@fluidframework/protocol-definitions\";\nimport { IChannelStorageService } from \"@fluidframework/datastore-definitions\";\nimport { getNormalizedObjectStoragePathParts } from \"@fluidframework/runtime-utils\";\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils\";\n\nexport class ChannelStorageService implements IChannelStorageService {\n\tprivate static flattenTree(\n\t\tbase: string,\n\t\ttree: ISnapshotTree,\n\t\tresults: { [path: string]: string },\n\t) {\n\t\t// eslint-disable-next-line guard-for-in, no-restricted-syntax\n\t\tfor (const path in tree.trees) {\n\t\t\tChannelStorageService.flattenTree(`${base}${path}/`, tree.trees[path], results);\n\t\t}\n\n\t\t// eslint-disable-next-line guard-for-in, no-restricted-syntax\n\t\tfor (const blob in tree.blobs) {\n\t\t\tresults[`${base}${blob}`] = tree.blobs[blob];\n\t\t}\n\t}\n\n\tprivate readonly flattenedTree: { [path: string]: string };\n\n\tconstructor(\n\t\tprivate readonly tree: ISnapshotTree | undefined,\n\t\tprivate readonly storage: Pick<IDocumentStorageService, \"readBlob\">,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t\tprivate readonly extraBlobs?: Map<string, ArrayBufferLike>,\n\t) {\n\t\tthis.flattenedTree = {};\n\t\t// Create a map from paths to blobs\n\t\tif (tree !== undefined) {\n\t\t\tChannelStorageService.flattenTree(\"\", tree, this.flattenedTree);\n\t\t}\n\t}\n\n\tpublic async contains(path: string): Promise<boolean> {\n\t\treturn this.flattenedTree[path] !== undefined;\n\t}\n\n\tpublic async readBlob(path: string): Promise<ArrayBufferLike> {\n\t\tconst id = await this.getIdForPath(path);\n\t\tconst blob = this.extraBlobs !== undefined ? this.extraBlobs.get(id) : undefined;\n\n\t\tif (blob !== undefined) {\n\t\t\treturn blob;\n\t\t}\n\t\tconst blobP = this.storage.readBlob(id);\n\t\tblobP.catch((error) =>\n\t\t\tthis.logger.sendErrorEvent({ eventName: \"ChannelStorageBlobError\" }, error),\n\t\t);\n\n\t\treturn blobP;\n\t}\n\n\tpublic async list(path: string): Promise<string[]> {\n\t\tlet tree = this.tree;\n\t\tconst pathParts = getNormalizedObjectStoragePathParts(path);\n\t\twhile (tree !== undefined && pathParts.length > 0) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst part = pathParts.shift()!;\n\t\t\ttree = tree.trees[part];\n\t\t}\n\t\tif (tree === undefined || pathParts.length !== 0) {\n\t\t\tthrow new Error(\"path does not exist\");\n\t\t}\n\n\t\treturn Object.keys(tree?.blobs ?? {});\n\t}\n\n\tprivate async getIdForPath(path: string): Promise<string> {\n\t\treturn this.flattenedTree[path];\n\t}\n}\n"]}
|
|
@@ -35,6 +35,9 @@ export declare class FluidDataStoreRuntime extends TypedEventEmitter<IFluidDataS
|
|
|
35
35
|
* {@inheritDoc @fluidframework/datastore-definitions#IFluidDataStoreRuntime.entryPoint}
|
|
36
36
|
*/
|
|
37
37
|
readonly entryPoint?: IFluidHandle<FluidObject>;
|
|
38
|
+
/**
|
|
39
|
+
* @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the "entryPoint" pattern. Refer to Removing-IFluidRouter.md
|
|
40
|
+
*/
|
|
38
41
|
get IFluidRouter(): this;
|
|
39
42
|
get connected(): boolean;
|
|
40
43
|
get clientId(): string | undefined;
|
|
@@ -51,7 +54,6 @@ export declare class FluidDataStoreRuntime extends TypedEventEmitter<IFluidDataS
|
|
|
51
54
|
private _disposed;
|
|
52
55
|
get disposed(): boolean;
|
|
53
56
|
private readonly contexts;
|
|
54
|
-
private readonly contextsDeferred;
|
|
55
57
|
private readonly pendingAttach;
|
|
56
58
|
private readonly deferredAttached;
|
|
57
59
|
private readonly localChannelContextQueue;
|
|
@@ -95,6 +97,9 @@ export declare class FluidDataStoreRuntime extends TypedEventEmitter<IFluidDataS
|
|
|
95
97
|
constructor(dataStoreContext: IFluidDataStoreContext, sharedObjectRegistry: ISharedObjectRegistry, existing: boolean, initializeEntryPoint?: (runtime: IFluidDataStoreRuntime) => Promise<FluidObject>);
|
|
96
98
|
dispose(): void;
|
|
97
99
|
resolveHandle(request: IRequest): Promise<IResponse>;
|
|
100
|
+
/**
|
|
101
|
+
* @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the "entryPoint" pattern. Refer to Removing-IFluidRouter.md
|
|
102
|
+
*/
|
|
98
103
|
request(request: IRequest): Promise<IResponse>;
|
|
99
104
|
getChannel(id: string): Promise<IChannel>;
|
|
100
105
|
createChannel(id: string | undefined, type: string): IChannel;
|
|
@@ -132,7 +137,7 @@ export declare class FluidDataStoreRuntime extends TypedEventEmitter<IFluidDataS
|
|
|
132
137
|
setConnectionState(connected: boolean, clientId?: string): void;
|
|
133
138
|
getQuorum(): IQuorumClients;
|
|
134
139
|
getAudience(): IAudience;
|
|
135
|
-
uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>>;
|
|
140
|
+
uploadBlob(blob: ArrayBufferLike, signal?: AbortSignal): Promise<IFluidHandle<ArrayBufferLike>>;
|
|
136
141
|
process(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown): void;
|
|
137
142
|
processSignal(message: IInboundSignalMessage, local: boolean): void;
|
|
138
143
|
private isChannelAttached;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreRuntime.d.ts","sourceRoot":"","sources":["../src/dataStoreRuntime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,mBAAmB,
|
|
1
|
+
{"version":3,"file":"dataStoreRuntime.d.ts","sourceRoot":"","sources":["../src/dataStoreRuntime.ts"],"names":[],"mappings":"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"}
|
package/lib/dataStoreRuntime.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { generateStack, LoggingError, raiseConnectedEvent, createChildMonitoringContext, tagCodeArtifacts, } from "@fluidframework/telemetry-utils";
|
|
6
6
|
import { LazyPromise } from "@fluidframework/core-utils";
|
|
7
7
|
import { AttachState, } from "@fluidframework/container-definitions";
|
|
8
8
|
import { DataProcessingError, UsageError } from "@fluidframework/container-utils";
|
|
@@ -10,7 +10,7 @@ import { assert, Deferred, TypedEventEmitter, unreachableCase } from "@fluidfram
|
|
|
10
10
|
import { buildSnapshotTree } from "@fluidframework/driver-utils";
|
|
11
11
|
import { SummaryType, } from "@fluidframework/protocol-definitions";
|
|
12
12
|
import { CreateSummarizerNodeSource, VisibilityState, } from "@fluidframework/runtime-definitions";
|
|
13
|
-
import { convertSnapshotTreeToSummaryTree, convertSummaryTreeToITree, generateHandleContextPath, RequestParser, SummaryTreeBuilder, create404Response, createResponseError, exceptionToResponse, GCDataBuilder, requestFluidObject,
|
|
13
|
+
import { convertSnapshotTreeToSummaryTree, convertSummaryTreeToITree, generateHandleContextPath, RequestParser, SummaryTreeBuilder, create404Response, createResponseError, exceptionToResponse, GCDataBuilder, requestFluidObject, unpackChildNodesUsedRoutes, } from "@fluidframework/runtime-utils";
|
|
14
14
|
import { v4 as uuid } from "uuid";
|
|
15
15
|
import { summarizeChannel } from "./channelContext";
|
|
16
16
|
import { LocalChannelContext, LocalChannelContextBase, RehydratedLocalChannelContext, } from "./localChannelContext";
|
|
@@ -38,13 +38,11 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
38
38
|
* and the primary way of interacting with some Fluid objects, and should be used if possible.
|
|
39
39
|
*/
|
|
40
40
|
constructor(dataStoreContext, sharedObjectRegistry, existing, initializeEntryPoint) {
|
|
41
|
-
var _a;
|
|
42
41
|
super();
|
|
43
42
|
this.dataStoreContext = dataStoreContext;
|
|
44
43
|
this.sharedObjectRegistry = sharedObjectRegistry;
|
|
45
44
|
this._disposed = false;
|
|
46
45
|
this.contexts = new Map();
|
|
47
|
-
this.contextsDeferred = new Map();
|
|
48
46
|
this.pendingAttach = new Map();
|
|
49
47
|
this.deferredAttached = new Deferred();
|
|
50
48
|
this.localChannelContextQueue = new Map();
|
|
@@ -53,9 +51,13 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
53
51
|
// store becomes visible.
|
|
54
52
|
this.pendingHandlesToMakeVisible = new Set();
|
|
55
53
|
assert(!dataStoreContext.id.includes("/"), 0x30e /* Id cannot contain slashes. DataStoreContext should have validated this. */);
|
|
56
|
-
this.mc =
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
this.mc = createChildMonitoringContext({
|
|
55
|
+
logger: dataStoreContext.logger,
|
|
56
|
+
namespace: "FluidDataStoreRuntime",
|
|
57
|
+
properties: {
|
|
58
|
+
all: { dataStoreId: uuid() },
|
|
59
|
+
},
|
|
60
|
+
});
|
|
59
61
|
this.id = dataStoreContext.id;
|
|
60
62
|
this.options = dataStoreContext.options;
|
|
61
63
|
this.deltaManager = dataStoreContext.deltaManager;
|
|
@@ -63,7 +65,7 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
63
65
|
this.audience = dataStoreContext.getAudience();
|
|
64
66
|
const tree = dataStoreContext.baseSnapshot;
|
|
65
67
|
// Must always receive the data store type inside of the attributes
|
|
66
|
-
if (
|
|
68
|
+
if (tree?.trees !== undefined) {
|
|
67
69
|
Object.keys(tree.trees).forEach((path) => {
|
|
68
70
|
// Issue #4414
|
|
69
71
|
if (path === "_search") {
|
|
@@ -91,10 +93,7 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
91
93
|
type: CreateSummarizerNodeSource.FromSummary,
|
|
92
94
|
}));
|
|
93
95
|
}
|
|
94
|
-
const deferred = new Deferred();
|
|
95
|
-
deferred.resolve(channelContext);
|
|
96
96
|
this.contexts.set(path, channelContext);
|
|
97
|
-
this.contextsDeferred.set(path, deferred);
|
|
98
97
|
});
|
|
99
98
|
}
|
|
100
99
|
if (initializeEntryPoint) {
|
|
@@ -128,7 +127,7 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
128
127
|
}
|
|
129
128
|
// By default, a data store can log maximum 10 local changes telemetry in summarizer.
|
|
130
129
|
this.localChangesTelemetryCount =
|
|
131
|
-
|
|
130
|
+
this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount") ?? 10;
|
|
132
131
|
}
|
|
133
132
|
/**
|
|
134
133
|
* @deprecated - Instantiate the class using its constructor instead.
|
|
@@ -141,6 +140,9 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
141
140
|
static load(context, sharedObjectRegistry, existing) {
|
|
142
141
|
return new FluidDataStoreRuntime(context, sharedObjectRegistry, existing, async (dataStoreRuntime) => requestFluidObject(dataStoreRuntime, "/"));
|
|
143
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the "entryPoint" pattern. Refer to Removing-IFluidRouter.md
|
|
145
|
+
*/
|
|
144
146
|
get IFluidRouter() {
|
|
145
147
|
return this;
|
|
146
148
|
}
|
|
@@ -211,6 +213,9 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
211
213
|
async resolveHandle(request) {
|
|
212
214
|
return this.request(request);
|
|
213
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the "entryPoint" pattern. Refer to Removing-IFluidRouter.md
|
|
218
|
+
*/
|
|
214
219
|
async request(request) {
|
|
215
220
|
try {
|
|
216
221
|
const parser = RequestParser.create(request);
|
|
@@ -219,11 +224,10 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
219
224
|
return this.request(parser.createSubRequest(1));
|
|
220
225
|
}
|
|
221
226
|
// Check for a data type reference first
|
|
222
|
-
|
|
227
|
+
const context = this.contexts.get(id);
|
|
228
|
+
if (context !== undefined && parser.isLeaf(1)) {
|
|
223
229
|
try {
|
|
224
|
-
|
|
225
|
-
const value = await this.contextsDeferred.get(id).promise;
|
|
226
|
-
const channel = await value.getChannel();
|
|
230
|
+
const channel = await context.getChannel();
|
|
227
231
|
return { mimeType: "fluid/object", status: 200, value: channel };
|
|
228
232
|
}
|
|
229
233
|
catch (error) {
|
|
@@ -240,16 +244,11 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
240
244
|
}
|
|
241
245
|
async getChannel(id) {
|
|
242
246
|
this.verifyNotClosed();
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
if (!this.contextsDeferred.has(id)) {
|
|
247
|
-
this.contextsDeferred.set(id, new Deferred());
|
|
247
|
+
const context = this.contexts.get(id);
|
|
248
|
+
if (context === undefined) {
|
|
249
|
+
throw new LoggingError("Channel does not exist");
|
|
248
250
|
}
|
|
249
|
-
|
|
250
|
-
const context = await this.contextsDeferred.get(id).promise;
|
|
251
|
-
const channel = await context.getChannel();
|
|
252
|
-
return channel;
|
|
251
|
+
return context.getChannel();
|
|
253
252
|
}
|
|
254
253
|
createChannel(id = uuid(), type) {
|
|
255
254
|
if (id.includes("/")) {
|
|
@@ -260,15 +259,6 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
260
259
|
this.notBoundedChannelContextSet.add(id);
|
|
261
260
|
const context = new LocalChannelContext(id, this.sharedObjectRegistry, type, this, this.dataStoreContext, this.dataStoreContext.storage, this.logger, (content, localOpMetadata) => this.submitChannelOp(id, content, localOpMetadata), (address) => this.setChannelDirty(address), (srcHandle, outboundHandle) => this.addedGCOutboundReference(srcHandle, outboundHandle));
|
|
262
261
|
this.contexts.set(id, context);
|
|
263
|
-
if (this.contextsDeferred.has(id)) {
|
|
264
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
265
|
-
this.contextsDeferred.get(id).resolve(context);
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
const deferred = new Deferred();
|
|
269
|
-
deferred.resolve(context);
|
|
270
|
-
this.contextsDeferred.set(id, deferred);
|
|
271
|
-
}
|
|
272
262
|
// Channels (DDS) should not be created in summarizer client.
|
|
273
263
|
this.identifyLocalChangeInSummarizer("DDSCreatedInSummarizer", id, type);
|
|
274
264
|
return context.channel;
|
|
@@ -358,9 +348,9 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
358
348
|
getAudience() {
|
|
359
349
|
return this.audience;
|
|
360
350
|
}
|
|
361
|
-
async uploadBlob(blob) {
|
|
351
|
+
async uploadBlob(blob, signal) {
|
|
362
352
|
this.verifyNotClosed();
|
|
363
|
-
return this.dataStoreContext.uploadBlob(blob);
|
|
353
|
+
return this.dataStoreContext.uploadBlob(blob, signal);
|
|
364
354
|
}
|
|
365
355
|
process(message, local, localOpMetadata) {
|
|
366
356
|
this.verifyNotClosed();
|
|
@@ -386,15 +376,6 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
386
376
|
snapshot: attachMessage.snapshot,
|
|
387
377
|
}), attachMessage.type);
|
|
388
378
|
this.contexts.set(id, remoteChannelContext);
|
|
389
|
-
if (this.contextsDeferred.has(id)) {
|
|
390
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
391
|
-
this.contextsDeferred.get(id).resolve(remoteChannelContext);
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
394
|
-
const deferred = new Deferred();
|
|
395
|
-
deferred.resolve(remoteChannelContext);
|
|
396
|
-
this.contextsDeferred.set(id, deferred);
|
|
397
|
-
}
|
|
398
379
|
}
|
|
399
380
|
break;
|
|
400
381
|
}
|
|
@@ -488,7 +469,6 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
488
469
|
* @param usedRoutes - The routes that are used in all contexts in this channel.
|
|
489
470
|
*/
|
|
490
471
|
updateUsedRoutes(usedRoutes) {
|
|
491
|
-
var _a;
|
|
492
472
|
// Get a map of channel ids to routes used in it.
|
|
493
473
|
const usedContextRoutes = unpackChildNodesUsedRoutes(usedRoutes);
|
|
494
474
|
// Verify that the used routes are correct.
|
|
@@ -497,7 +477,7 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
497
477
|
}
|
|
498
478
|
// Update the used routes in each context. Used routes is empty for unused context.
|
|
499
479
|
for (const [contextId, context] of this.contexts) {
|
|
500
|
-
context.updateUsedRoutes(
|
|
480
|
+
context.updateUsedRoutes(usedContextRoutes.get(contextId) ?? []);
|
|
501
481
|
}
|
|
502
482
|
}
|
|
503
483
|
/**
|
|
@@ -507,8 +487,7 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
507
487
|
* @param outboundHandle - The handle of the outbound node that is referenced.
|
|
508
488
|
*/
|
|
509
489
|
addedGCOutboundReference(srcHandle, outboundHandle) {
|
|
510
|
-
|
|
511
|
-
(_b = (_a = this.dataStoreContext).addedGCOutboundReference) === null || _b === void 0 ? void 0 : _b.call(_a, srcHandle, outboundHandle);
|
|
490
|
+
this.dataStoreContext.addedGCOutboundReference?.(srcHandle, outboundHandle);
|
|
512
491
|
}
|
|
513
492
|
/**
|
|
514
493
|
* Returns a summary at the current sequence number.
|
|
@@ -683,7 +662,10 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
683
662
|
processChannelOp(message, local, localOpMetadata) {
|
|
684
663
|
this.verifyNotClosed();
|
|
685
664
|
const envelope = message.contents;
|
|
686
|
-
const transformed =
|
|
665
|
+
const transformed = {
|
|
666
|
+
...message,
|
|
667
|
+
contents: envelope.contents,
|
|
668
|
+
};
|
|
687
669
|
const channelContext = this.contexts.get(envelope.address);
|
|
688
670
|
assert(!!channelContext, 0x185 /* "Channel not found" */);
|
|
689
671
|
channelContext.processOp(transformed, local, localOpMetadata);
|
|
@@ -739,16 +721,12 @@ export class FluidDataStoreRuntime extends TypedEventEmitter {
|
|
|
739
721
|
// in the summarizer and the data will help us plan this.
|
|
740
722
|
this.mc.logger.sendTelemetryEvent({
|
|
741
723
|
eventName,
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
value: this.id,
|
|
749
|
-
tag: TelemetryDataTag.CodeArtifact,
|
|
750
|
-
},
|
|
751
|
-
fluidDataStorePackagePath: packagePathToTelemetryProperty(this.dataStoreContext.packagePath),
|
|
724
|
+
...tagCodeArtifacts({
|
|
725
|
+
channelType,
|
|
726
|
+
channelId,
|
|
727
|
+
fluidDataStoreId: this.id,
|
|
728
|
+
fluidDataStorePackagePath: this.dataStoreContext.packagePath.join("/"),
|
|
729
|
+
}),
|
|
752
730
|
stack: generateStack(),
|
|
753
731
|
});
|
|
754
732
|
this.localChangesTelemetryCount--;
|