@fluidframework/container-runtime 0.52.0 → 0.54.0-47413
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/containerHandleContext.d.ts +0 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js +0 -1
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +43 -19
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +201 -111
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStoreContext.d.ts +33 -4
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +45 -17
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStores.d.ts +14 -10
- package/dist/dataStores.d.ts.map +1 -1
- package/dist/dataStores.js +73 -41
- package/dist/dataStores.js.map +1 -1
- package/dist/garbageCollection.d.ts +82 -15
- package/dist/garbageCollection.d.ts.map +1 -1
- package/dist/garbageCollection.js +359 -26
- package/dist/garbageCollection.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.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/pendingStateManager.d.ts +0 -1
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +0 -36
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/runningSummarizer.d.ts +3 -2
- package/dist/runningSummarizer.d.ts.map +1 -1
- package/dist/runningSummarizer.js +6 -6
- package/dist/runningSummarizer.js.map +1 -1
- package/dist/summarizer.d.ts +23 -3
- package/dist/summarizer.d.ts.map +1 -1
- package/dist/summarizer.js +135 -45
- package/dist/summarizer.js.map +1 -1
- package/dist/summarizerTypes.d.ts +3 -10
- package/dist/summarizerTypes.d.ts.map +1 -1
- package/dist/summarizerTypes.js.map +1 -1
- package/dist/summaryFormat.d.ts +10 -1
- package/dist/summaryFormat.d.ts.map +1 -1
- package/dist/summaryFormat.js +2 -1
- package/dist/summaryFormat.js.map +1 -1
- package/dist/summaryGenerator.d.ts.map +1 -1
- package/dist/summaryGenerator.js +1 -3
- package/dist/summaryGenerator.js.map +1 -1
- package/dist/summaryManager.d.ts +0 -15
- package/dist/summaryManager.d.ts.map +1 -1
- package/dist/summaryManager.js +1 -35
- package/dist/summaryManager.js.map +1 -1
- package/lib/containerHandleContext.d.ts +0 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js +0 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +43 -19
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +206 -117
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStoreContext.d.ts +33 -4
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +45 -17
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStores.d.ts +14 -10
- package/lib/dataStores.d.ts.map +1 -1
- package/lib/dataStores.js +76 -44
- package/lib/dataStores.js.map +1 -1
- package/lib/garbageCollection.d.ts +82 -15
- package/lib/garbageCollection.d.ts.map +1 -1
- package/lib/garbageCollection.js +361 -28
- package/lib/garbageCollection.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.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/pendingStateManager.d.ts +0 -1
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +0 -36
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/runningSummarizer.d.ts +3 -2
- package/lib/runningSummarizer.d.ts.map +1 -1
- package/lib/runningSummarizer.js +6 -6
- package/lib/runningSummarizer.js.map +1 -1
- package/lib/summarizer.d.ts +23 -3
- package/lib/summarizer.d.ts.map +1 -1
- package/lib/summarizer.js +135 -45
- package/lib/summarizer.js.map +1 -1
- package/lib/summarizerTypes.d.ts +3 -10
- package/lib/summarizerTypes.d.ts.map +1 -1
- package/lib/summarizerTypes.js.map +1 -1
- package/lib/summaryFormat.d.ts +10 -1
- package/lib/summaryFormat.d.ts.map +1 -1
- package/lib/summaryFormat.js +1 -0
- package/lib/summaryFormat.js.map +1 -1
- package/lib/summaryGenerator.d.ts.map +1 -1
- package/lib/summaryGenerator.js +1 -3
- package/lib/summaryGenerator.js.map +1 -1
- package/lib/summaryManager.d.ts +0 -15
- package/lib/summaryManager.d.ts.map +1 -1
- package/lib/summaryManager.js +1 -34
- package/lib/summaryManager.js.map +1 -1
- package/package.json +14 -14
- package/src/containerHandleContext.ts +0 -1
- package/src/containerRuntime.ts +280 -140
- package/src/dataStoreContext.ts +59 -20
- package/src/dataStores.ts +116 -54
- package/src/garbageCollection.ts +492 -29
- package/src/index.ts +20 -2
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +0 -43
- package/src/runningSummarizer.ts +12 -10
- package/src/summarizer.ts +154 -53
- package/src/summarizerTypes.ts +3 -11
- package/src/summaryFormat.ts +11 -1
- package/src/summaryGenerator.ts +2 -3
- package/src/summaryManager.ts +2 -49
- package/dist/localStorageFeatureGates.d.ts +0 -13
- package/dist/localStorageFeatureGates.d.ts.map +0 -1
- package/dist/localStorageFeatureGates.js +0 -31
- package/dist/localStorageFeatureGates.js.map +0 -1
- package/lib/localStorageFeatureGates.d.ts +0 -13
- package/lib/localStorageFeatureGates.d.ts.map +0 -1
- package/lib/localStorageFeatureGates.js +0 -27
- package/lib/localStorageFeatureGates.js.map +0 -1
- package/src/localStorageFeatureGates.ts +0 -27
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
6
|
-
import {
|
|
6
|
+
import { ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
7
|
+
import { IGarbageCollectionData, IGarbageCollectionSummaryDetails, ISummaryTreeWithStats } from "@fluidframework/runtime-definitions";
|
|
7
8
|
import { ReadAndParseBlob, RefreshSummaryResult } from "@fluidframework/runtime-utils";
|
|
8
9
|
import { IGCRuntimeOptions } from "./containerRuntime";
|
|
9
10
|
import { IContainerRuntimeMetadata } from "./summaryFormat";
|
|
11
|
+
export declare const gcTreeKey = "gc";
|
|
12
|
+
export declare const gcBlobPrefix = "__gc";
|
|
10
13
|
/** The used state statistics of a node. */
|
|
11
14
|
export interface IUsedStateStats {
|
|
12
15
|
totalNodeCount: number;
|
|
@@ -24,7 +27,7 @@ export interface IGarbageCollectionRuntime {
|
|
|
24
27
|
/** Returns the garbage collection data of the runtime. */
|
|
25
28
|
getGCData(fullGC?: boolean): Promise<IGarbageCollectionData>;
|
|
26
29
|
/** After GC has run, called to notify the runtime of routes that are used in it. */
|
|
27
|
-
updateUsedRoutes(usedRoutes: string[]): IUsedStateStats;
|
|
30
|
+
updateUsedRoutes(usedRoutes: string[], gcTimestamp?: number): IUsedStateStats;
|
|
28
31
|
}
|
|
29
32
|
/** Defines the contract for the garbage collector. */
|
|
30
33
|
export interface IGarbageCollector {
|
|
@@ -32,12 +35,14 @@ export interface IGarbageCollector {
|
|
|
32
35
|
readonly shouldRunGC: boolean;
|
|
33
36
|
/**
|
|
34
37
|
* This tracks two things:
|
|
35
|
-
* 1. Whether GC is enabled - If this is 0, GC is disabled. If this is
|
|
38
|
+
* 1. Whether GC is enabled - If this is 0, GC is disabled. If this is greater than 0, GC is enabled.
|
|
36
39
|
* 2. If GC is enabled, the version of GC used to generate the GC data written in a summary.
|
|
37
40
|
*/
|
|
38
41
|
readonly gcSummaryFeatureVersion: number;
|
|
39
42
|
/** Tells whether the GC version has changed compared to the version in the latest summary. */
|
|
40
43
|
readonly hasGCVersionChanged: boolean;
|
|
44
|
+
/** Tells whether GC data should be written to the root of the summary tree. */
|
|
45
|
+
readonly writeDataAtRoot: boolean;
|
|
41
46
|
/** Run garbage collection and update the reference / used state of the system. */
|
|
42
47
|
collectGarbage(options: {
|
|
43
48
|
logger?: ITelemetryLogger;
|
|
@@ -45,8 +50,16 @@ export interface IGarbageCollector {
|
|
|
45
50
|
runSweep?: boolean;
|
|
46
51
|
fullGC?: boolean;
|
|
47
52
|
}): Promise<IGCStats>;
|
|
53
|
+
/** Summarizes the GC data and returns it as a summary tree. */
|
|
54
|
+
summarize(): ISummaryTreeWithStats | undefined;
|
|
55
|
+
/** Returns a map of each data store id to its GC details in the base summary. */
|
|
56
|
+
getDataStoreBaseGCDetails(): Promise<Map<string, IGarbageCollectionSummaryDetails>>;
|
|
48
57
|
/** Called when the latest summary of the system has been refreshed. */
|
|
49
58
|
latestSummaryStateRefreshed(result: RefreshSummaryResult, readAndParseBlob: ReadAndParseBlob): Promise<void>;
|
|
59
|
+
/** Called when a node is changed. Used to detect and log when an inactive node is changed. */
|
|
60
|
+
nodeChanged(id: string): void;
|
|
61
|
+
/** Called when a reference is added to a node. Used to identify nodes that were referenced between summaries. */
|
|
62
|
+
addedOutboundReference(fromNodeId: string, toNodeId: string): void;
|
|
50
63
|
}
|
|
51
64
|
/**
|
|
52
65
|
* The garbage collector for the container runtime. It consolidates the garbage collection functionality and maintains
|
|
@@ -55,19 +68,18 @@ export interface IGarbageCollector {
|
|
|
55
68
|
export declare class GarbageCollector implements IGarbageCollector {
|
|
56
69
|
private readonly provider;
|
|
57
70
|
private readonly gcOptions;
|
|
58
|
-
/**
|
|
59
|
-
* After GC has run, called to delete objects in the runtime whose routes are unused. This is not part of the
|
|
60
|
-
* provider because its specific to this garbage collector implementation and is not part of the contract.
|
|
61
|
-
*/
|
|
71
|
+
/** After GC has run, called to delete objects in the runtime whose routes are unused. */
|
|
62
72
|
private readonly deleteUnusedRoutes;
|
|
63
|
-
|
|
73
|
+
/** Returns the current timestamp to be assigned to nodes that become unreferenced. */
|
|
74
|
+
private readonly getCurrentTimestampMs;
|
|
75
|
+
static create(provider: IGarbageCollectionRuntime, gcOptions: IGCRuntimeOptions, deleteUnusedRoutes: (unusedRoutes: string[]) => void, getCurrentTimestampMs: () => number, baseSnapshot: ISnapshotTree | undefined, readAndParseBlob: ReadAndParseBlob, baseLogger: ITelemetryLogger, existing: boolean, metadata?: IContainerRuntimeMetadata): IGarbageCollector;
|
|
64
76
|
/**
|
|
65
77
|
* Tells whether GC should be run based on the GC options and local storage flags.
|
|
66
78
|
*/
|
|
67
79
|
readonly shouldRunGC: boolean;
|
|
68
80
|
/**
|
|
69
81
|
* This tracks two things:
|
|
70
|
-
* 1. Whether GC is enabled - If this is 0, GC is disabled. If this is
|
|
82
|
+
* 1. Whether GC is enabled - If this is 0, GC is disabled. If this is greater than 0, GC is enabled.
|
|
71
83
|
* 2. If GC is enabled, the version of GC used to generate the GC data written in a summary.
|
|
72
84
|
*/
|
|
73
85
|
get gcSummaryFeatureVersion(): number;
|
|
@@ -82,15 +94,28 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
82
94
|
private readonly gcEnabled;
|
|
83
95
|
private readonly shouldRunSweep;
|
|
84
96
|
private readonly testMode;
|
|
85
|
-
private readonly
|
|
97
|
+
private readonly mc;
|
|
98
|
+
/**
|
|
99
|
+
* Tells whether the GC data should be written to the root of the summary tree. We do this under 2 conditions:
|
|
100
|
+
* 1. If `writeDataAtRoot` GC option is enabled.
|
|
101
|
+
* 2. If the base summary has the GC data written at the root. This is to support forward compatibility where when
|
|
102
|
+
* we start writing the GC data at root, older versions can detect that and write at root too.
|
|
103
|
+
*/
|
|
104
|
+
private _writeDataAtRoot;
|
|
105
|
+
get writeDataAtRoot(): boolean;
|
|
86
106
|
private readonly currentGCVersion;
|
|
87
107
|
private latestSummaryGCVersion;
|
|
108
|
+
private gcDataFromLastRun;
|
|
109
|
+
private readonly referencesSinceLastRun;
|
|
110
|
+
private readonly initializeBaseStateP;
|
|
111
|
+
private readonly dataStoreGCDetailsP;
|
|
112
|
+
private readonly deleteTimeoutMs;
|
|
113
|
+
private readonly unreferencedNodesState;
|
|
88
114
|
protected constructor(provider: IGarbageCollectionRuntime, gcOptions: IGCRuntimeOptions,
|
|
89
|
-
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
deleteUnusedRoutes: (unusedRoutes: string[]) => void, baseLogger: ITelemetryLogger, existing: boolean, metadata?: IContainerRuntimeMetadata);
|
|
115
|
+
/** After GC has run, called to delete objects in the runtime whose routes are unused. */
|
|
116
|
+
deleteUnusedRoutes: (unusedRoutes: string[]) => void,
|
|
117
|
+
/** Returns the current timestamp to be assigned to nodes that become unreferenced. */
|
|
118
|
+
getCurrentTimestampMs: () => number, baseSnapshot: ISnapshotTree | undefined, readAndParseBlob: ReadAndParseBlob, baseLogger: ITelemetryLogger, existing: boolean, metadata?: IContainerRuntimeMetadata);
|
|
94
119
|
/**
|
|
95
120
|
* Runs garbage collection and udpates the reference / used state of the nodes in the container.
|
|
96
121
|
* @returns the number of data stores that have been marked as unreferenced.
|
|
@@ -103,14 +128,56 @@ export declare class GarbageCollector implements IGarbageCollector {
|
|
|
103
128
|
/** True to generate full GC data */
|
|
104
129
|
fullGC?: boolean;
|
|
105
130
|
}): Promise<IGCStats>;
|
|
131
|
+
/**
|
|
132
|
+
* Summarizes the GC data and returns it as a summary tree.
|
|
133
|
+
* We current write the entire GC state in a single blob. This can be modified later to write multiple
|
|
134
|
+
* blobs. All the blob keys should start with `gcBlobPrefix`.
|
|
135
|
+
*/
|
|
136
|
+
summarize(): ISummaryTreeWithStats | undefined;
|
|
137
|
+
/**
|
|
138
|
+
* Returns a map of data store ids to their base GC details generated from the base summary.This is used to
|
|
139
|
+
* initialize the data stores with their base GC state.
|
|
140
|
+
*/
|
|
141
|
+
getDataStoreBaseGCDetails(): Promise<Map<string, IGarbageCollectionSummaryDetails>>;
|
|
106
142
|
/**
|
|
107
143
|
* Called when the latest summary of the system has been refreshed. This will be used to update the state of the
|
|
108
144
|
* latest summary tracked.
|
|
109
145
|
*/
|
|
110
146
|
latestSummaryStateRefreshed(result: RefreshSummaryResult, readAndParseBlob: ReadAndParseBlob): Promise<void>;
|
|
147
|
+
/**
|
|
148
|
+
* Called when a node with the given id is changed. If the node is inactive, log an error.
|
|
149
|
+
*/
|
|
150
|
+
nodeChanged(id: string): void;
|
|
151
|
+
/**
|
|
152
|
+
* Called when an outbound reference is added to a node. This is used to identify all nodes that have been
|
|
153
|
+
* referenced between summaries so that their unreferenced timestamp can be reset.
|
|
154
|
+
*
|
|
155
|
+
* @param fromNodeId - The node from which the reference is added.
|
|
156
|
+
* @param toNodeId - The node to which the reference is added.
|
|
157
|
+
*/
|
|
158
|
+
addedOutboundReference(fromNodeId: string, toNodeId: string): void;
|
|
111
159
|
/**
|
|
112
160
|
* Update the latest summary GC version from the metadata blob in the given snapshot.
|
|
113
161
|
*/
|
|
114
162
|
private updateSummaryGCVersionFromSnapshot;
|
|
163
|
+
/**
|
|
164
|
+
* Updates the state of the system as per the current GC run. It does the following:
|
|
165
|
+
* 1. Sets up the current GC state as per the gcData.
|
|
166
|
+
* 2. Starts tracking for nodes that have become unreferenced in this run.
|
|
167
|
+
* 3. Clears tracking for nodes that were unreferenced but became referenced in this run.
|
|
168
|
+
* @param gcData - The data representing the reference graph on which GC is run.
|
|
169
|
+
* @param gcResult - The result of the GC run on the gcData.
|
|
170
|
+
* @param currentTimestampMs - The current timestamp to be used for unreferenced nodes' timestamp.
|
|
171
|
+
*/
|
|
172
|
+
private updateCurrentState;
|
|
173
|
+
/**
|
|
174
|
+
* Since GC runs periodically, the GC data that is generated only tells us the state of the world at that point in
|
|
175
|
+
* time. It's possible that nodes transition from `unreferenced -> referenced -> unreferenced` between two runs. The
|
|
176
|
+
* unreferenced timestamp of such nodes needs to be reset as they may have been accessed when they were referenced.
|
|
177
|
+
*
|
|
178
|
+
* This function identifies nodes that were referenced since last run and removes their unreferenced state, if any.
|
|
179
|
+
* If these nodes are currently unreferenced, they will be assigned new unreferenced state by the current run.
|
|
180
|
+
*/
|
|
181
|
+
private updateStateSinceLatestRun;
|
|
115
182
|
}
|
|
116
183
|
//# sourceMappingURL=garbageCollection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../src/garbageCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../src/garbageCollection.ts"],"names":[],"mappings":"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"}
|