@fluidframework/container-runtime 2.63.0-359461 → 2.63.0-359962
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/container-runtime.test-files.tar +0 -0
- package/dist/blobManager/blobManager.d.ts +62 -55
- package/dist/blobManager/blobManager.d.ts.map +1 -1
- package/dist/blobManager/blobManager.js +330 -308
- package/dist/blobManager/blobManager.js.map +1 -1
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +3 -9
- package/dist/containerRuntime.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/lib/blobManager/blobManager.d.ts +62 -55
- package/lib/blobManager/blobManager.d.ts.map +1 -1
- package/lib/blobManager/blobManager.js +334 -312
- package/lib/blobManager/blobManager.js.map +1 -1
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +3 -9
- package/lib/containerRuntime.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/package.json +17 -17
- package/src/blobManager/blobManager.ts +425 -352
- package/src/containerRuntime.ts +4 -13
- package/src/packageVersion.ts +1 -1
|
Binary file
|
|
@@ -26,7 +26,7 @@ export declare class BlobHandle extends FluidHandleBase<ArrayBufferLike> impleme
|
|
|
26
26
|
get isAttached(): boolean;
|
|
27
27
|
private _events;
|
|
28
28
|
get events(): Listenable<ILocalFluidHandleEvents>;
|
|
29
|
-
private
|
|
29
|
+
private _payloadState;
|
|
30
30
|
get payloadState(): PayloadState;
|
|
31
31
|
/**
|
|
32
32
|
* The error property starts undefined, signalling that there has been no error yet.
|
|
@@ -42,14 +42,37 @@ export declare class BlobHandle extends FluidHandleBase<ArrayBufferLike> impleme
|
|
|
42
42
|
}
|
|
43
43
|
export type IBlobManagerRuntime = Pick<IContainerRuntime, "attachState" | "baseLogger" | "disposed"> & IEventProvider<IContainerRuntimeEvents>;
|
|
44
44
|
export type ICreateBlobResponseWithTTL = ICreateBlobResponse & Partial<Record<"minTTLInSeconds", number>>;
|
|
45
|
+
/**
|
|
46
|
+
* A blob tracked by BlobManager that is only available on the local client. It is not currently
|
|
47
|
+
* attempting an upload.
|
|
48
|
+
*/
|
|
49
|
+
interface LocalOnlyBlob {
|
|
50
|
+
state: "localOnly";
|
|
51
|
+
blob: ArrayBufferLike;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A blob tracked by BlobManager that has been uploaded to storage. If the TTL has not expired, it
|
|
55
|
+
* should still be available in storage. It is not currently attempting to send a BlobAttach op.
|
|
56
|
+
*/
|
|
57
|
+
interface UploadedBlob {
|
|
58
|
+
state: "uploaded";
|
|
59
|
+
blob: ArrayBufferLike;
|
|
60
|
+
storageId: string;
|
|
61
|
+
uploadTime: number;
|
|
62
|
+
minTTLInSeconds: number | undefined;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Serializable form of the LocalBlobRecord that can be used to save and restore pending state.
|
|
66
|
+
* Omits attached blobs since they are fully uploaded and don't need to be saved and restored.
|
|
67
|
+
* Omits uploading and attaching states since upon restore we will need to restart those processes.
|
|
68
|
+
*/
|
|
69
|
+
type SerializableLocalBlobRecord = (Omit<LocalOnlyBlob, "blob"> & {
|
|
70
|
+
blob: string;
|
|
71
|
+
}) | (Omit<UploadedBlob, "blob"> & {
|
|
72
|
+
blob: string;
|
|
73
|
+
});
|
|
45
74
|
export interface IPendingBlobs {
|
|
46
|
-
[localId: string]:
|
|
47
|
-
blob: string;
|
|
48
|
-
storageId?: string;
|
|
49
|
-
uploadTime?: number;
|
|
50
|
-
minTTLInSeconds?: number;
|
|
51
|
-
acked?: boolean;
|
|
52
|
-
};
|
|
75
|
+
[localId: string]: SerializableLocalBlobRecord;
|
|
53
76
|
}
|
|
54
77
|
export declare const blobManagerBasePath = "_blobs";
|
|
55
78
|
export declare class BlobManager {
|
|
@@ -63,15 +86,19 @@ export declare class BlobManager {
|
|
|
63
86
|
*/
|
|
64
87
|
private readonly redirectTable;
|
|
65
88
|
/**
|
|
66
|
-
*
|
|
89
|
+
* The localBlobCache has a dual role of caching locally-created blobs, as well as tracking their state as they
|
|
90
|
+
* are shared. Keys are localIds.
|
|
91
|
+
*/
|
|
92
|
+
private readonly localBlobCache;
|
|
93
|
+
/**
|
|
94
|
+
* Blobs with an attached handle that have not finished blob-attaching are the set we need to provide from
|
|
95
|
+
* getPendingState(). This stores their local IDs, and then we can look them up against the localBlobCache.
|
|
67
96
|
*/
|
|
68
|
-
private readonly
|
|
97
|
+
private readonly pendingBlobsWithAttachedHandles;
|
|
69
98
|
/**
|
|
70
|
-
*
|
|
71
|
-
* we can resolve all pending blobs with the same storage ID even though they may have different local IDs. That's
|
|
72
|
-
* because we know that the server will not delete the blob corresponding to that storage ID.
|
|
99
|
+
* Local IDs for any pending blobs we loaded with and have not yet started the upload/attach flow for.
|
|
73
100
|
*/
|
|
74
|
-
private readonly
|
|
101
|
+
private readonly pendingOnlyLocalIds;
|
|
75
102
|
private readonly sendBlobAttachOp;
|
|
76
103
|
private readonly routeContext;
|
|
77
104
|
private readonly storage;
|
|
@@ -98,11 +125,13 @@ export declare class BlobManager {
|
|
|
98
125
|
readonly blobRequested: (blobPath: string) => void;
|
|
99
126
|
readonly isBlobDeleted: (blobPath: string) => boolean;
|
|
100
127
|
readonly runtime: IBlobManagerRuntime;
|
|
101
|
-
|
|
128
|
+
pendingBlobs: IPendingBlobs | undefined;
|
|
102
129
|
readonly localIdGenerator?: (() => string) | undefined;
|
|
103
130
|
readonly createBlobPayloadPending: boolean;
|
|
104
131
|
});
|
|
105
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Returns whether a blob with the given localId can be retrieved by the BlobManager via getBlob().
|
|
134
|
+
*/
|
|
106
135
|
hasBlob(localId: string): boolean;
|
|
107
136
|
/**
|
|
108
137
|
* Lookup the blob storage ID for a given local blob id.
|
|
@@ -122,26 +151,19 @@ export declare class BlobManager {
|
|
|
122
151
|
* @returns A promise which resolves to the blob contents
|
|
123
152
|
*/
|
|
124
153
|
getBlob(localId: string, payloadPending: boolean): Promise<ArrayBufferLike>;
|
|
125
|
-
private
|
|
126
|
-
private createBlobDetached;
|
|
154
|
+
private getNonPayloadPendingBlobHandle;
|
|
127
155
|
createBlob(blob: ArrayBufferLike, signal?: AbortSignal): Promise<IFluidHandleInternalPayloadPending<ArrayBufferLike>>;
|
|
156
|
+
private createBlobDetached;
|
|
128
157
|
private createBlobLegacy;
|
|
129
158
|
private createBlobWithPayloadPending;
|
|
130
159
|
/**
|
|
131
|
-
* Upload
|
|
132
|
-
* @returns A promise that resolves when the upload is complete and a blob attach op has been sent (but not ack'd).
|
|
160
|
+
* Upload and attach the localBlobCache entry for the given localId.
|
|
133
161
|
*
|
|
134
|
-
*
|
|
162
|
+
* Expects the localBlobCache entry for the given localId to be in either localOnly or uploaded state
|
|
163
|
+
* when called. Returns a promise that resolves when the blob completes uploading and attaching, or else
|
|
164
|
+
* rejects if an error is encountered or the signal is aborted.
|
|
135
165
|
*/
|
|
136
|
-
private
|
|
137
|
-
/**
|
|
138
|
-
* Set up a mapping in the redirect table from fromId to toId. Also, notify the runtime that a reference is added
|
|
139
|
-
* which is required for GC.
|
|
140
|
-
*/
|
|
141
|
-
private setRedirection;
|
|
142
|
-
private deletePendingBlobMaybe;
|
|
143
|
-
private deletePendingBlob;
|
|
144
|
-
private onUploadResolve;
|
|
166
|
+
private readonly uploadAndAttach;
|
|
145
167
|
/**
|
|
146
168
|
* Resubmit a BlobAttach op. Used to add storage IDs to ops that were
|
|
147
169
|
* submitted to runtime while disconnected.
|
|
@@ -157,15 +179,9 @@ export declare class BlobManager {
|
|
|
157
179
|
* about this for now because the data is a simple list of blob ids.
|
|
158
180
|
*/
|
|
159
181
|
getGCData(fullGC?: boolean): IGarbageCollectionData;
|
|
160
|
-
/**
|
|
161
|
-
* Delete attachment blobs that are sweep ready.
|
|
162
|
-
* @param sweepReadyBlobRoutes - The routes of blobs that are sweep ready and should be deleted. These routes will
|
|
163
|
-
* be based off of local ids.
|
|
164
|
-
* @returns The routes of blobs that were deleted.
|
|
165
|
-
*/
|
|
166
|
-
deleteSweepReadyNodes(sweepReadyBlobRoutes: readonly string[]): readonly string[];
|
|
167
182
|
/**
|
|
168
183
|
* Delete blobs with the given routes from the redirect table.
|
|
184
|
+
* @returns The routes of blobs that were deleted.
|
|
169
185
|
*
|
|
170
186
|
* @remarks
|
|
171
187
|
* The routes are GC nodes paths of format -`/<blobManagerBasePath>/<localId>`.
|
|
@@ -180,7 +196,7 @@ export declare class BlobManager {
|
|
|
180
196
|
* will ensure we don't create an attachment blob for them at the next summary. The service would then delete them
|
|
181
197
|
* some time in the future.
|
|
182
198
|
*/
|
|
183
|
-
|
|
199
|
+
deleteSweepReadyNodes(sweepReadyBlobRoutes: readonly string[]): readonly string[];
|
|
184
200
|
/**
|
|
185
201
|
* Verifies that the blob with given id is not deleted, i.e., it has not been garbage collected. If the blob is GC'd,
|
|
186
202
|
* log an error and throw if necessary.
|
|
@@ -193,29 +209,19 @@ export declare class BlobManager {
|
|
|
193
209
|
* @param detachedStorageTable - A map of pseudo storage IDs to real storage IDs.
|
|
194
210
|
*/
|
|
195
211
|
readonly patchRedirectTable: (detachedStorageTable: Map<string, string>) => void;
|
|
212
|
+
/**
|
|
213
|
+
* Upload and attach any pending blobs that the BlobManager was loaded with that have not already
|
|
214
|
+
* been attached in the meantime.
|
|
215
|
+
* @returns A promise that resolves when all the uploads and attaches have completed, or rejects
|
|
216
|
+
* if any of them fail.
|
|
217
|
+
*/
|
|
218
|
+
readonly sharePendingBlobs: () => Promise<void>;
|
|
196
219
|
/**
|
|
197
220
|
* To be used in getPendingLocalState flow. Get a serializable record of the blobs that are
|
|
198
221
|
* pending upload and/or their BlobAttach op, which can be given to a new BlobManager to
|
|
199
222
|
* resume work.
|
|
200
|
-
*
|
|
201
|
-
* @privateRemarks
|
|
202
|
-
* For now, we don't track any pending blobs since the getPendingBlobs flow doesn't enable
|
|
203
|
-
* restoring to a state where an accessible handle has been stored by the customer (and we'll
|
|
204
|
-
* just drop any BlobAttach ops on the ground during reSubmit). However, once we add support
|
|
205
|
-
* for payload-pending handles, this will return the blobs associated with those handles.
|
|
206
223
|
*/
|
|
207
224
|
getPendingBlobs(): IPendingBlobs | undefined;
|
|
208
|
-
/**
|
|
209
|
-
* Part of container serialization when imminent closure is enabled (Currently when calling closeAndGetPendingLocalState).
|
|
210
|
-
* This asynchronous function resolves all pending createBlob calls and waits for each blob
|
|
211
|
-
* to be attached. It will also send BlobAttach ops for each pending blob that hasn't sent it
|
|
212
|
-
* yet so that serialized container can resubmit them when rehydrated.
|
|
213
|
-
*
|
|
214
|
-
* @param stopBlobAttachingSignal - Optional signal to abort the blob attaching process.
|
|
215
|
-
* @returns - A promise that resolves with the details of the attached blobs,
|
|
216
|
-
* or undefined if no blobs were processed.
|
|
217
|
-
*/
|
|
218
|
-
attachAndGetPendingBlobs(stopBlobAttachingSignal?: AbortSignal): Promise<IPendingBlobs | undefined>;
|
|
219
225
|
}
|
|
220
226
|
/**
|
|
221
227
|
* For a localId, returns its path in GC's graph. The node path is of the format `/<blobManagerBasePath>/<localId>`.
|
|
@@ -227,4 +233,5 @@ export declare const getGCNodePathFromLocalId: (localId: string) => string;
|
|
|
227
233
|
* Returns whether a given path is for attachment blobs that are in the format - "/blobManagerBasePath/...".
|
|
228
234
|
*/
|
|
229
235
|
export declare const isBlobPath: (path: string) => path is `/_blobs/${string}`;
|
|
236
|
+
export {};
|
|
230
237
|
//# sourceMappingURL=blobManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blobManager.d.ts","sourceRoot":"","sources":["../../src/blobManager/blobManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAEN,KAAK,wBAAwB,EAC7B,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EACX,iBAAiB,EACjB,uBAAuB,EACvB,MAAM,wDAAwD,CAAC;AAChE,OAAO,KAAK,EAEX,cAAc,EACd,mBAAmB,EACnB,kCAAkC,EAClC,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,YAAY,EACZ,MAAM,0CAA0C,CAAC;AAElD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,KAAK,EACX,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACN,eAAe,EAIf,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"blobManager.d.ts","sourceRoot":"","sources":["../../src/blobManager/blobManager.ts"],"names":[],"mappings":"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"}
|