@fluidframework/container-runtime 2.0.0-internal.3.4.1 → 2.0.0-internal.4.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/dist/containerRuntime.d.ts +1 -5
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +12 -16
- package/dist/containerRuntime.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +2 -1
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +2 -3
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +2 -1
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +1 -2
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +2 -8
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +6 -12
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/summary/index.d.ts +2 -2
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +4 -5
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/summarizer.d.ts +2 -5
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +8 -13
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerNode/index.d.ts +8 -0
- package/dist/summary/summarizerNode/index.d.ts.map +1 -0
- package/dist/summary/summarizerNode/index.js +12 -0
- package/dist/summary/summarizerNode/index.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts +149 -0
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNode.js +520 -0
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +132 -0
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +420 -0
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/dist/summary/summarizerTypes.d.ts +5 -17
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js +0 -5
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/lib/containerRuntime.d.ts +1 -5
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +13 -17
- package/lib/containerRuntime.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +2 -1
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +1 -1
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +2 -3
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +2 -1
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +1 -1
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/index.d.ts +1 -2
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js.map +1 -1
- package/lib/index.d.ts +1 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +2 -8
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +6 -12
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/summary/index.d.ts +2 -2
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +1 -2
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/summarizer.d.ts +2 -5
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +8 -13
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerNode/index.d.ts +8 -0
- package/lib/summary/summarizerNode/index.d.ts.map +1 -0
- package/lib/summary/summarizerNode/index.js +7 -0
- package/lib/summary/summarizerNode/index.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNode.d.ts +149 -0
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNode.js +515 -0
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +125 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +125 -0
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +22 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +416 -0
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
- package/lib/summary/summarizerTypes.d.ts +5 -17
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js +1 -4
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/package.json +52 -15
- package/src/containerRuntime.ts +19 -19
- package/src/gc/garbageCollection.ts +2 -6
- package/src/gc/gcDefinitions.ts +6 -4
- package/src/gc/gcSummaryStateTracker.ts +2 -7
- package/src/gc/index.ts +1 -1
- package/src/index.ts +0 -7
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +8 -20
- package/src/summary/index.ts +8 -2
- package/src/summary/summarizer.ts +7 -21
- package/src/summary/summarizerNode/index.ts +12 -0
- package/src/summary/summarizerNode/summarizerNode.ts +744 -0
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +214 -0
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +631 -0
- package/src/summary/summarizerTypes.ts +6 -22
- package/dist/summary/summarizerHandle.d.ts +0 -12
- package/dist/summary/summarizerHandle.d.ts.map +0 -1
- package/dist/summary/summarizerHandle.js +0 -22
- package/dist/summary/summarizerHandle.js.map +0 -1
- package/lib/summary/summarizerHandle.d.ts +0 -12
- package/lib/summary/summarizerHandle.d.ts.map +0 -1
- package/lib/summary/summarizerHandle.js +0 -18
- package/lib/summary/summarizerHandle.js.map +0 -1
- package/src/summary/summarizerHandle.ts +0 -23
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
6
|
+
import { ISnapshotTree, ISummaryTree, SummaryObject } from "@fluidframework/protocol-definitions";
|
|
7
|
+
import { ISummaryTreeWithStats } from "@fluidframework/runtime-definitions";
|
|
8
|
+
import { ReadAndParseBlob } from "@fluidframework/runtime-utils";
|
|
9
|
+
/**
|
|
10
|
+
* Return type of refreshSummaryAck function. There can be three different scenarios based on the passed params:
|
|
11
|
+
*
|
|
12
|
+
* 1. The latest summary was not updated.
|
|
13
|
+
*
|
|
14
|
+
* 2. The latest summary was updated and the summary corresponding to the params was tracked by this client.
|
|
15
|
+
*
|
|
16
|
+
* 3. The latest summary was updated but the summary corresponding to the params was not tracked. In this case, the
|
|
17
|
+
* latest snapshot is fetched and the latest summary state is updated based on it.
|
|
18
|
+
*/
|
|
19
|
+
export declare type RefreshSummaryResult = {
|
|
20
|
+
latestSummaryUpdated: false;
|
|
21
|
+
} | {
|
|
22
|
+
latestSummaryUpdated: true;
|
|
23
|
+
wasSummaryTracked: true;
|
|
24
|
+
summaryRefSeq: number;
|
|
25
|
+
} | {
|
|
26
|
+
latestSummaryUpdated: true;
|
|
27
|
+
wasSummaryTracked: false;
|
|
28
|
+
snapshotTree: ISnapshotTree;
|
|
29
|
+
summaryRefSeq: number;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Result of snapshot fetch during refreshing latest summary state.
|
|
33
|
+
*/
|
|
34
|
+
export interface IFetchSnapshotResult {
|
|
35
|
+
snapshotTree: ISnapshotTree;
|
|
36
|
+
snapshotRefSeq: number;
|
|
37
|
+
}
|
|
38
|
+
export interface ISummarizerNodeRootContract {
|
|
39
|
+
startSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryLogger): void;
|
|
40
|
+
completeSummary(proposalHandle: string): void;
|
|
41
|
+
clearSummary(): void;
|
|
42
|
+
refreshLatestSummary(proposalHandle: string | undefined, summaryRefSeq: number, fetchLatestSnapshot: () => Promise<IFetchSnapshotResult>, readAndParseBlob: ReadAndParseBlob, correlatedSummaryLogger: ITelemetryLogger): Promise<RefreshSummaryResult>;
|
|
43
|
+
}
|
|
44
|
+
/** Path for nodes in a tree with escaped special characters */
|
|
45
|
+
export declare class EscapedPath {
|
|
46
|
+
readonly path: string;
|
|
47
|
+
private constructor();
|
|
48
|
+
static create(path: string): EscapedPath;
|
|
49
|
+
static createAndConcat(pathParts: string[]): EscapedPath;
|
|
50
|
+
toString(): string;
|
|
51
|
+
concat(path: EscapedPath): EscapedPath;
|
|
52
|
+
}
|
|
53
|
+
/** Information about a summary relevant to a specific node in the tree */
|
|
54
|
+
export declare class SummaryNode {
|
|
55
|
+
private readonly summary;
|
|
56
|
+
/** Creates an instance that is valid for the root with specific basePath and localPath */
|
|
57
|
+
static createForRoot(referenceSequenceNumber: number): SummaryNode;
|
|
58
|
+
/** Summary reference sequence number, i.e. last sequence number seen when it was created */
|
|
59
|
+
get referenceSequenceNumber(): number;
|
|
60
|
+
/** Full path to parent node, or undefined if this is the root */
|
|
61
|
+
get basePath(): EscapedPath | undefined;
|
|
62
|
+
/** Relative path to this node from its parent node */
|
|
63
|
+
get localPath(): EscapedPath;
|
|
64
|
+
/** Relative path from this node to its node innermost base summary */
|
|
65
|
+
get additionalPath(): EscapedPath | undefined;
|
|
66
|
+
set additionalPath(additionalPath: EscapedPath | undefined);
|
|
67
|
+
constructor(summary: {
|
|
68
|
+
readonly referenceSequenceNumber: number;
|
|
69
|
+
readonly basePath: EscapedPath | undefined;
|
|
70
|
+
readonly localPath: EscapedPath;
|
|
71
|
+
additionalPath?: EscapedPath;
|
|
72
|
+
});
|
|
73
|
+
/** Gets the full path to this node, to be used when sending a handle */
|
|
74
|
+
get fullPath(): EscapedPath;
|
|
75
|
+
/**
|
|
76
|
+
* Gets the full path to this node's innermost base summary.
|
|
77
|
+
* The children nodes can use this as their basePath to determine their path.
|
|
78
|
+
*/
|
|
79
|
+
get fullPathForChildren(): EscapedPath;
|
|
80
|
+
/**
|
|
81
|
+
* Creates a new node within the same summary for a child of this node.
|
|
82
|
+
* @param id - id of the child node
|
|
83
|
+
*/
|
|
84
|
+
createForChild(id: string): SummaryNode;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Information about the initial summary tree found from an attach op.
|
|
88
|
+
*/
|
|
89
|
+
export interface IInitialSummary {
|
|
90
|
+
sequenceNumber: number;
|
|
91
|
+
id: string;
|
|
92
|
+
summary: ISummaryTreeWithStats | undefined;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Represents the details needed to create a child summarizer node.
|
|
96
|
+
*/
|
|
97
|
+
export interface ICreateChildDetails {
|
|
98
|
+
/** Summary from attach op if known */
|
|
99
|
+
initialSummary: IInitialSummary | undefined;
|
|
100
|
+
/** Latest summary from server node data */
|
|
101
|
+
latestSummary: SummaryNode | undefined;
|
|
102
|
+
/** Sequence number of latest known change to the node */
|
|
103
|
+
changeSequenceNumber: number;
|
|
104
|
+
/** A unique id of this child to be logged when sending telemetry. */
|
|
105
|
+
telemetryNodeId: string;
|
|
106
|
+
}
|
|
107
|
+
export interface ISubtreeInfo<T extends ISnapshotTree | SummaryObject> {
|
|
108
|
+
/** Tree to use to find children subtrees */
|
|
109
|
+
childrenTree: T;
|
|
110
|
+
/** Additional path part where children are isolated */
|
|
111
|
+
childrenPathPart: string | undefined;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Checks if the summary contains .channels subtree where the children subtrees
|
|
115
|
+
* would be located if exists.
|
|
116
|
+
* @param baseSummary - summary to check
|
|
117
|
+
*/
|
|
118
|
+
export declare function parseSummaryForSubtrees(baseSummary: ISnapshotTree): ISubtreeInfo<ISnapshotTree>;
|
|
119
|
+
/**
|
|
120
|
+
* Checks if the summary contains .channels subtree where the children subtrees
|
|
121
|
+
* would be located if exists.
|
|
122
|
+
* @param baseSummary - summary to check
|
|
123
|
+
*/
|
|
124
|
+
export declare function parseSummaryTreeForSubtrees(summary: ISummaryTree): ISubtreeInfo<SummaryObject>;
|
|
125
|
+
//# sourceMappingURL=summarizerNodeUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizerNodeUtils.d.ts","sourceRoot":"","sources":["../../../src/summary/summarizerNode/summarizerNodeUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.parseSummaryTreeForSubtrees = exports.parseSummaryForSubtrees = exports.SummaryNode = exports.EscapedPath = void 0;
|
|
8
|
+
const runtime_definitions_1 = require("@fluidframework/runtime-definitions");
|
|
9
|
+
/** Path for nodes in a tree with escaped special characters */
|
|
10
|
+
class EscapedPath {
|
|
11
|
+
constructor(path) {
|
|
12
|
+
this.path = path;
|
|
13
|
+
}
|
|
14
|
+
static create(path) {
|
|
15
|
+
return new EscapedPath(encodeURIComponent(path));
|
|
16
|
+
}
|
|
17
|
+
static createAndConcat(pathParts) {
|
|
18
|
+
var _a;
|
|
19
|
+
let ret = EscapedPath.create((_a = pathParts[0]) !== null && _a !== void 0 ? _a : "");
|
|
20
|
+
for (let i = 1; i < pathParts.length; i++) {
|
|
21
|
+
ret = ret.concat(EscapedPath.create(pathParts[i]));
|
|
22
|
+
}
|
|
23
|
+
return ret;
|
|
24
|
+
}
|
|
25
|
+
toString() {
|
|
26
|
+
return this.path;
|
|
27
|
+
}
|
|
28
|
+
concat(path) {
|
|
29
|
+
return new EscapedPath(`${this.path}/${path.path}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.EscapedPath = EscapedPath;
|
|
33
|
+
/** Information about a summary relevant to a specific node in the tree */
|
|
34
|
+
class SummaryNode {
|
|
35
|
+
constructor(summary) {
|
|
36
|
+
this.summary = summary;
|
|
37
|
+
}
|
|
38
|
+
/** Creates an instance that is valid for the root with specific basePath and localPath */
|
|
39
|
+
static createForRoot(referenceSequenceNumber) {
|
|
40
|
+
return new SummaryNode({
|
|
41
|
+
referenceSequenceNumber,
|
|
42
|
+
basePath: undefined,
|
|
43
|
+
localPath: EscapedPath.create(""), // root hard-coded to ""
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/** Summary reference sequence number, i.e. last sequence number seen when it was created */
|
|
47
|
+
get referenceSequenceNumber() {
|
|
48
|
+
return this.summary.referenceSequenceNumber;
|
|
49
|
+
}
|
|
50
|
+
/** Full path to parent node, or undefined if this is the root */
|
|
51
|
+
get basePath() {
|
|
52
|
+
return this.summary.basePath;
|
|
53
|
+
}
|
|
54
|
+
/** Relative path to this node from its parent node */
|
|
55
|
+
get localPath() {
|
|
56
|
+
return this.summary.localPath;
|
|
57
|
+
}
|
|
58
|
+
/** Relative path from this node to its node innermost base summary */
|
|
59
|
+
get additionalPath() {
|
|
60
|
+
return this.summary.additionalPath;
|
|
61
|
+
}
|
|
62
|
+
set additionalPath(additionalPath) {
|
|
63
|
+
this.summary.additionalPath = additionalPath;
|
|
64
|
+
}
|
|
65
|
+
/** Gets the full path to this node, to be used when sending a handle */
|
|
66
|
+
get fullPath() {
|
|
67
|
+
var _a, _b;
|
|
68
|
+
return (_b = (_a = this.basePath) === null || _a === void 0 ? void 0 : _a.concat(this.localPath)) !== null && _b !== void 0 ? _b : this.localPath;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Gets the full path to this node's innermost base summary.
|
|
72
|
+
* The children nodes can use this as their basePath to determine their path.
|
|
73
|
+
*/
|
|
74
|
+
get fullPathForChildren() {
|
|
75
|
+
return this.additionalPath !== undefined
|
|
76
|
+
? this.fullPath.concat(this.additionalPath)
|
|
77
|
+
: this.fullPath;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Creates a new node within the same summary for a child of this node.
|
|
81
|
+
* @param id - id of the child node
|
|
82
|
+
*/
|
|
83
|
+
createForChild(id) {
|
|
84
|
+
return new SummaryNode({
|
|
85
|
+
referenceSequenceNumber: this.referenceSequenceNumber,
|
|
86
|
+
basePath: this.fullPathForChildren,
|
|
87
|
+
localPath: EscapedPath.create(id),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.SummaryNode = SummaryNode;
|
|
92
|
+
/**
|
|
93
|
+
* Checks if the summary contains .channels subtree where the children subtrees
|
|
94
|
+
* would be located if exists.
|
|
95
|
+
* @param baseSummary - summary to check
|
|
96
|
+
*/
|
|
97
|
+
function parseSummaryForSubtrees(baseSummary) {
|
|
98
|
+
// New versions of snapshots have child nodes isolated in .channels subtree
|
|
99
|
+
const channelsSubtree = baseSummary.trees[runtime_definitions_1.channelsTreeName];
|
|
100
|
+
if (channelsSubtree !== undefined) {
|
|
101
|
+
return {
|
|
102
|
+
childrenTree: channelsSubtree,
|
|
103
|
+
childrenPathPart: runtime_definitions_1.channelsTreeName,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
childrenTree: baseSummary,
|
|
108
|
+
childrenPathPart: undefined,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
exports.parseSummaryForSubtrees = parseSummaryForSubtrees;
|
|
112
|
+
/**
|
|
113
|
+
* Checks if the summary contains .channels subtree where the children subtrees
|
|
114
|
+
* would be located if exists.
|
|
115
|
+
* @param baseSummary - summary to check
|
|
116
|
+
*/
|
|
117
|
+
function parseSummaryTreeForSubtrees(summary) {
|
|
118
|
+
// New versions of snapshots have child nodes isolated in .channels subtree
|
|
119
|
+
const channelsSubtree = summary.tree[runtime_definitions_1.channelsTreeName];
|
|
120
|
+
if (channelsSubtree !== undefined) {
|
|
121
|
+
return {
|
|
122
|
+
childrenTree: channelsSubtree,
|
|
123
|
+
childrenPathPart: runtime_definitions_1.channelsTreeName,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
childrenTree: summary,
|
|
128
|
+
childrenPathPart: undefined,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
exports.parseSummaryTreeForSubtrees = parseSummaryTreeForSubtrees;
|
|
132
|
+
//# sourceMappingURL=summarizerNodeUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizerNodeUtils.js","sourceRoot":"","sources":["../../../src/summary/summarizerNode/summarizerNodeUtils.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 { ISnapshotTree, ISummaryTree, SummaryObject } from \"@fluidframework/protocol-definitions\";\nimport { channelsTreeName, ISummaryTreeWithStats } from \"@fluidframework/runtime-definitions\";\nimport { ReadAndParseBlob } from \"@fluidframework/runtime-utils\";\n\n/**\n * Return type of refreshSummaryAck function. There can be three different scenarios based on the passed params:\n *\n * 1. The latest summary was not updated.\n *\n * 2. The latest summary was updated and the summary corresponding to the params was tracked by this client.\n *\n * 3. The latest summary was updated but the summary corresponding to the params was not tracked. In this case, the\n * latest snapshot is fetched and the latest summary state is updated based on it.\n */\nexport type RefreshSummaryResult =\n\t| {\n\t\t\tlatestSummaryUpdated: false;\n\t }\n\t| {\n\t\t\tlatestSummaryUpdated: true;\n\t\t\twasSummaryTracked: true;\n\t\t\tsummaryRefSeq: number;\n\t }\n\t| {\n\t\t\tlatestSummaryUpdated: true;\n\t\t\twasSummaryTracked: false;\n\t\t\tsnapshotTree: ISnapshotTree;\n\t\t\tsummaryRefSeq: number;\n\t };\n\n/**\n * Result of snapshot fetch during refreshing latest summary state.\n */\nexport interface IFetchSnapshotResult {\n\tsnapshotTree: ISnapshotTree;\n\tsnapshotRefSeq: number;\n}\n\nexport interface ISummarizerNodeRootContract {\n\tstartSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryLogger): void;\n\tcompleteSummary(proposalHandle: string): void;\n\tclearSummary(): void;\n\trefreshLatestSummary(\n\t\tproposalHandle: string | undefined,\n\t\tsummaryRefSeq: number,\n\t\tfetchLatestSnapshot: () => Promise<IFetchSnapshotResult>,\n\t\treadAndParseBlob: ReadAndParseBlob,\n\t\tcorrelatedSummaryLogger: ITelemetryLogger,\n\t): Promise<RefreshSummaryResult>;\n}\n\n/** Path for nodes in a tree with escaped special characters */\nexport class EscapedPath {\n\tprivate constructor(public readonly path: string) {}\n\tpublic static create(path: string): EscapedPath {\n\t\treturn new EscapedPath(encodeURIComponent(path));\n\t}\n\tpublic static createAndConcat(pathParts: string[]): EscapedPath {\n\t\tlet ret = EscapedPath.create(pathParts[0] ?? \"\");\n\t\tfor (let i = 1; i < pathParts.length; i++) {\n\t\t\tret = ret.concat(EscapedPath.create(pathParts[i]));\n\t\t}\n\t\treturn ret;\n\t}\n\tpublic toString(): string {\n\t\treturn this.path;\n\t}\n\tpublic concat(path: EscapedPath): EscapedPath {\n\t\treturn new EscapedPath(`${this.path}/${path.path}`);\n\t}\n}\n\n/** Information about a summary relevant to a specific node in the tree */\nexport class SummaryNode {\n\t/** Creates an instance that is valid for the root with specific basePath and localPath */\n\tpublic static createForRoot(referenceSequenceNumber: number): SummaryNode {\n\t\treturn new SummaryNode({\n\t\t\treferenceSequenceNumber,\n\t\t\tbasePath: undefined,\n\t\t\tlocalPath: EscapedPath.create(\"\"), // root hard-coded to \"\"\n\t\t});\n\t}\n\n\t/** Summary reference sequence number, i.e. last sequence number seen when it was created */\n\tpublic get referenceSequenceNumber(): number {\n\t\treturn this.summary.referenceSequenceNumber;\n\t}\n\t/** Full path to parent node, or undefined if this is the root */\n\tpublic get basePath(): EscapedPath | undefined {\n\t\treturn this.summary.basePath;\n\t}\n\t/** Relative path to this node from its parent node */\n\tpublic get localPath(): EscapedPath {\n\t\treturn this.summary.localPath;\n\t}\n\t/** Relative path from this node to its node innermost base summary */\n\tpublic get additionalPath(): EscapedPath | undefined {\n\t\treturn this.summary.additionalPath;\n\t}\n\tpublic set additionalPath(additionalPath: EscapedPath | undefined) {\n\t\tthis.summary.additionalPath = additionalPath;\n\t}\n\tconstructor(\n\t\tprivate readonly summary: {\n\t\t\treadonly referenceSequenceNumber: number;\n\t\t\treadonly basePath: EscapedPath | undefined;\n\t\t\treadonly localPath: EscapedPath;\n\t\t\tadditionalPath?: EscapedPath;\n\t\t},\n\t) {}\n\n\t/** Gets the full path to this node, to be used when sending a handle */\n\tpublic get fullPath(): EscapedPath {\n\t\treturn this.basePath?.concat(this.localPath) ?? this.localPath;\n\t}\n\n\t/**\n\t * Gets the full path to this node's innermost base summary.\n\t * The children nodes can use this as their basePath to determine their path.\n\t */\n\tpublic get fullPathForChildren(): EscapedPath {\n\t\treturn this.additionalPath !== undefined\n\t\t\t? this.fullPath.concat(this.additionalPath)\n\t\t\t: this.fullPath;\n\t}\n\n\t/**\n\t * Creates a new node within the same summary for a child of this node.\n\t * @param id - id of the child node\n\t */\n\tpublic createForChild(id: string): SummaryNode {\n\t\treturn new SummaryNode({\n\t\t\treferenceSequenceNumber: this.referenceSequenceNumber,\n\t\t\tbasePath: this.fullPathForChildren,\n\t\t\tlocalPath: EscapedPath.create(id),\n\t\t});\n\t}\n}\n\n/**\n * Information about the initial summary tree found from an attach op.\n */\nexport interface IInitialSummary {\n\tsequenceNumber: number;\n\tid: string;\n\tsummary: ISummaryTreeWithStats | undefined;\n}\n\n/**\n * Represents the details needed to create a child summarizer node.\n */\nexport interface ICreateChildDetails {\n\t/** Summary from attach op if known */\n\tinitialSummary: IInitialSummary | undefined;\n\t/** Latest summary from server node data */\n\tlatestSummary: SummaryNode | undefined;\n\t/** Sequence number of latest known change to the node */\n\tchangeSequenceNumber: number;\n\t/** A unique id of this child to be logged when sending telemetry. */\n\ttelemetryNodeId: string;\n}\n\nexport interface ISubtreeInfo<T extends ISnapshotTree | SummaryObject> {\n\t/** Tree to use to find children subtrees */\n\tchildrenTree: T;\n\t/** Additional path part where children are isolated */\n\tchildrenPathPart: string | undefined;\n}\n\n/**\n * Checks if the summary contains .channels subtree where the children subtrees\n * would be located if exists.\n * @param baseSummary - summary to check\n */\nexport function parseSummaryForSubtrees(baseSummary: ISnapshotTree): ISubtreeInfo<ISnapshotTree> {\n\t// New versions of snapshots have child nodes isolated in .channels subtree\n\tconst channelsSubtree = baseSummary.trees[channelsTreeName];\n\tif (channelsSubtree !== undefined) {\n\t\treturn {\n\t\t\tchildrenTree: channelsSubtree,\n\t\t\tchildrenPathPart: channelsTreeName,\n\t\t};\n\t}\n\treturn {\n\t\tchildrenTree: baseSummary,\n\t\tchildrenPathPart: undefined,\n\t};\n}\n\n/**\n * Checks if the summary contains .channels subtree where the children subtrees\n * would be located if exists.\n * @param baseSummary - summary to check\n */\nexport function parseSummaryTreeForSubtrees(summary: ISummaryTree): ISubtreeInfo<SummaryObject> {\n\t// New versions of snapshots have child nodes isolated in .channels subtree\n\tconst channelsSubtree = summary.tree[channelsTreeName];\n\tif (channelsSubtree !== undefined) {\n\t\treturn {\n\t\t\tchildrenTree: channelsSubtree,\n\t\t\tchildrenPathPart: channelsTreeName,\n\t\t};\n\t}\n\treturn {\n\t\tchildrenTree: summary,\n\t\tchildrenPathPart: undefined,\n\t};\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
6
|
+
import { IGarbageCollectionData, IGarbageCollectionDetailsBase, ISummarizerNodeConfigWithGC, ISummarizerNodeWithGC, SummarizeInternalFn } from "@fluidframework/runtime-definitions";
|
|
7
|
+
import { ISummarizerNodeRootContract } from "./summarizerNodeUtils";
|
|
8
|
+
export interface IRootSummarizerNodeWithGC extends ISummarizerNodeWithGC, ISummarizerNodeRootContract {
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Creates a root summarizer node with GC functionality built-in.
|
|
12
|
+
* @param logger - Logger to use within SummarizerNode
|
|
13
|
+
* @param summarizeInternalFn - Function to generate summary
|
|
14
|
+
* @param changeSequenceNumber - Sequence number of latest change to new node/subtree
|
|
15
|
+
* @param referenceSequenceNumber - Reference sequence number of last acked summary,
|
|
16
|
+
* or undefined if not loaded from summary
|
|
17
|
+
* @param config - Configure behavior of summarizer node
|
|
18
|
+
* @param getGCDataFn - Function to get the GC data of this node
|
|
19
|
+
* @param baseGCDetailsP - Function to get the initial GC details of this node
|
|
20
|
+
*/
|
|
21
|
+
export declare const createRootSummarizerNodeWithGC: (logger: ITelemetryLogger, summarizeInternalFn: SummarizeInternalFn, changeSequenceNumber: number, referenceSequenceNumber: number | undefined, config?: ISummarizerNodeConfigWithGC, getGCDataFn?: ((fullGC?: boolean | undefined) => Promise<IGarbageCollectionData>) | undefined, getBaseGCDetailsFn?: (() => Promise<IGarbageCollectionDetailsBase>) | undefined) => IRootSummarizerNodeWithGC;
|
|
22
|
+
//# sourceMappingURL=summarizerNodeWithGc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizerNodeWithGc.d.ts","sourceRoot":"","sources":["../../../src/summary/summarizerNode/summarizerNodeWithGc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAUtE,OAAO,EAGN,sBAAsB,EACtB,6BAA6B,EAG7B,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,EAEnB,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EAIN,2BAA2B,EAG3B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,yBAChB,SAAQ,qBAAqB,EAC5B,2BAA2B;CAAG;AA4iBhC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,8BAA8B,WAClC,gBAAgB,uBACH,mBAAmB,wBAClB,MAAM,2BACH,MAAM,GAAG,SAAS,WACnC,2BAA2B,mDACC,QAAQ,sBAAsB,CAAC,2CACxC,QAAQ,6BAA6B,CAAC,kBAC/D,yBAcD,CAAC"}
|