@fluidframework/container-runtime 0.58.2002 → 0.58.3000-61081
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/blobManager.d.ts +3 -2
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +13 -9
- package/dist/blobManager.js.map +1 -1
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +63 -23
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerRuntime.d.ts +12 -4
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +61 -15
- package/dist/containerRuntime.js.map +1 -1
- package/dist/opTelemetry.d.ts +22 -0
- package/dist/opTelemetry.d.ts.map +1 -0
- package/dist/opTelemetry.js +59 -0
- package/dist/opTelemetry.js.map +1 -0
- package/dist/orderedClientElection.d.ts +57 -6
- package/dist/orderedClientElection.d.ts.map +1 -1
- package/dist/orderedClientElection.js +140 -25
- package/dist/orderedClientElection.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/summarizerClientElection.d.ts +2 -0
- package/dist/summarizerClientElection.d.ts.map +1 -1
- package/dist/summarizerClientElection.js +7 -2
- package/dist/summarizerClientElection.js.map +1 -1
- package/dist/summarizerTypes.d.ts +9 -0
- package/dist/summarizerTypes.d.ts.map +1 -1
- package/dist/summarizerTypes.js.map +1 -1
- package/dist/summaryGenerator.d.ts.map +1 -1
- package/dist/summaryGenerator.js +1 -1
- package/dist/summaryGenerator.js.map +1 -1
- package/dist/summaryManager.d.ts.map +1 -1
- package/dist/summaryManager.js +14 -3
- package/dist/summaryManager.js.map +1 -1
- package/lib/blobManager.d.ts +3 -2
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +14 -10
- package/lib/blobManager.js.map +1 -1
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +63 -23
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerRuntime.d.ts +12 -4
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +62 -16
- package/lib/containerRuntime.js.map +1 -1
- package/lib/opTelemetry.d.ts +22 -0
- package/lib/opTelemetry.d.ts.map +1 -0
- package/lib/opTelemetry.js +55 -0
- package/lib/opTelemetry.js.map +1 -0
- package/lib/orderedClientElection.d.ts +57 -6
- package/lib/orderedClientElection.d.ts.map +1 -1
- package/lib/orderedClientElection.js +140 -25
- package/lib/orderedClientElection.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/summarizerClientElection.d.ts +2 -0
- package/lib/summarizerClientElection.d.ts.map +1 -1
- package/lib/summarizerClientElection.js +7 -2
- package/lib/summarizerClientElection.js.map +1 -1
- package/lib/summarizerTypes.d.ts +9 -0
- package/lib/summarizerTypes.d.ts.map +1 -1
- package/lib/summarizerTypes.js.map +1 -1
- package/lib/summaryGenerator.d.ts.map +1 -1
- package/lib/summaryGenerator.js +1 -1
- package/lib/summaryGenerator.js.map +1 -1
- package/lib/summaryManager.d.ts.map +1 -1
- package/lib/summaryManager.js +14 -3
- package/lib/summaryManager.js.map +1 -1
- package/package.json +47 -15
- package/src/blobManager.ts +19 -11
- package/src/connectionTelemetry.ts +110 -19
- package/src/containerRuntime.ts +85 -19
- package/src/opTelemetry.ts +71 -0
- package/src/orderedClientElection.ts +154 -25
- package/src/packageVersion.ts +1 -1
- package/src/summarizerClientElection.ts +7 -2
- package/src/summarizerTypes.ts +9 -0
- package/src/summaryGenerator.ts +9 -1
- package/src/summaryManager.ts +15 -4
|
@@ -17,6 +17,7 @@ export interface ISummarizerClientElectionEvents extends IEvent {
|
|
|
17
17
|
|
|
18
18
|
export interface ISummarizerClientElection extends IEventProvider<ISummarizerClientElectionEvents> {
|
|
19
19
|
readonly electedClientId: string | undefined;
|
|
20
|
+
readonly electedParentId: string | undefined;
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
/**
|
|
@@ -44,6 +45,9 @@ export class SummarizerClientElection
|
|
|
44
45
|
public get electedClientId() {
|
|
45
46
|
return this.clientElection.electedClient?.clientId;
|
|
46
47
|
}
|
|
48
|
+
public get electedParentId() {
|
|
49
|
+
return this.clientElection.electedParent?.clientId;
|
|
50
|
+
}
|
|
47
51
|
|
|
48
52
|
constructor(
|
|
49
53
|
private readonly logger: ITelemetryLogger,
|
|
@@ -127,9 +131,10 @@ export class SummarizerClientElection
|
|
|
127
131
|
}
|
|
128
132
|
|
|
129
133
|
public serialize(): ISerializedElection {
|
|
130
|
-
const { electedClientId, electionSequenceNumber } = this.clientElection.serialize();
|
|
134
|
+
const { electedClientId, electedParentId, electionSequenceNumber } = this.clientElection.serialize();
|
|
131
135
|
return {
|
|
132
136
|
electedClientId,
|
|
137
|
+
electedParentId,
|
|
133
138
|
electionSequenceNumber: this.lastSummaryAckSeqForClient ?? electionSequenceNumber,
|
|
134
139
|
};
|
|
135
140
|
}
|
|
@@ -144,5 +149,5 @@ export class SummarizerClientElection
|
|
|
144
149
|
}
|
|
145
150
|
|
|
146
151
|
public static readonly clientDetailsPermitElection = (details: IClientDetails): boolean =>
|
|
147
|
-
details.capabilities.interactive
|
|
152
|
+
details.capabilities.interactive || details.type === summarizerClientType;
|
|
148
153
|
}
|
package/src/summarizerTypes.ts
CHANGED
|
@@ -143,6 +143,14 @@ export interface IGeneratedSummaryStats extends ISummaryStats {
|
|
|
143
143
|
readonly summarizedDataStoreCount: number;
|
|
144
144
|
/** The number of data stores whose GC reference state was updated in this summary. */
|
|
145
145
|
readonly gcStateUpdatedDataStoreCount?: number;
|
|
146
|
+
/** The size of the gc blobs in this summary. */
|
|
147
|
+
readonly gcTotalBlobsSize?: number;
|
|
148
|
+
/** The number of gc blobs in this summary. */
|
|
149
|
+
readonly gcBlobNodeCount?: number;
|
|
150
|
+
/** Sum of the sizes of all op contents since the last summary */
|
|
151
|
+
readonly opsSizesSinceLastSummary: number;
|
|
152
|
+
/** Number of non-system ops since the last summary @see isSystemMessage */
|
|
153
|
+
readonly nonSystemOpsSinceLastSummary: number;
|
|
146
154
|
}
|
|
147
155
|
|
|
148
156
|
/** Base results for all submitSummary attempts. */
|
|
@@ -152,6 +160,7 @@ export interface IBaseSummarizeResult {
|
|
|
152
160
|
readonly error: any;
|
|
153
161
|
/** Reference sequence number as of the generate summary attempt. */
|
|
154
162
|
readonly referenceSequenceNumber: number;
|
|
163
|
+
readonly minimumSequenceNumber: number;
|
|
155
164
|
}
|
|
156
165
|
|
|
157
166
|
/** Results of submitSummary after generating the summary tree. */
|
package/src/summaryGenerator.ts
CHANGED
|
@@ -65,10 +65,17 @@ type SummaryGeneratorRequiredTelemetryProperties =
|
|
|
65
65
|
type SummaryGeneratorOptionalTelemetryProperties =
|
|
66
66
|
/** Reference sequence number as of the generate summary attempt. */
|
|
67
67
|
"referenceSequenceNumber" |
|
|
68
|
+
/** minimum sequence number (at the reference sequence number) */
|
|
69
|
+
"minimumSequenceNumber" |
|
|
68
70
|
/** Delta between the current reference sequence number and the reference sequence number of the last attempt */
|
|
69
71
|
"opsSinceLastAttempt" |
|
|
70
72
|
/** Delta between the current reference sequence number and the reference sequence number of the last summary */
|
|
71
73
|
"opsSinceLastSummary" |
|
|
74
|
+
/** Delta in sum of op sizes between the current reference sequence number and the reference
|
|
75
|
+
* sequence number of the last summary */
|
|
76
|
+
"opsSizesSinceLastSummary" |
|
|
77
|
+
/** Delta between the number of non-system ops since the last summary @see isSystemMessage */
|
|
78
|
+
"nonSystemOpsSinceLastSummary" |
|
|
72
79
|
/** Time it took to generate the summary tree and stats. */
|
|
73
80
|
"generateDuration" |
|
|
74
81
|
/** The handle returned by storage pointing to the uploaded summary tree. */
|
|
@@ -84,7 +91,7 @@ type SummaryGeneratorOptionalTelemetryProperties =
|
|
|
84
91
|
/** Actual sequence number of the summary op proposal. */
|
|
85
92
|
"summarySequenceNumber" |
|
|
86
93
|
/** Optional Retry-After time in seconds. If specified, the client should wait this many seconds before retrying. */
|
|
87
|
-
|
|
94
|
+
"nackRetryAfter";
|
|
88
95
|
type SummaryGeneratorTelemetry =
|
|
89
96
|
Pick<ITelemetryProperties, SummaryGeneratorRequiredTelemetryProperties> &
|
|
90
97
|
Partial<Pick<ITelemetryProperties, SummaryGeneratorOptionalTelemetryProperties>>;
|
|
@@ -298,6 +305,7 @@ export class SummaryGenerator {
|
|
|
298
305
|
summarizeTelemetryProps = {
|
|
299
306
|
...summarizeTelemetryProps,
|
|
300
307
|
referenceSequenceNumber,
|
|
308
|
+
minimumSequenceNumber: summaryData.minimumSequenceNumber,
|
|
301
309
|
opsSinceLastAttempt: referenceSequenceNumber - this.heuristicData.lastAttempt.refSequenceNumber,
|
|
302
310
|
opsSinceLastSummary,
|
|
303
311
|
};
|
package/src/summaryManager.ts
CHANGED
|
@@ -137,9 +137,15 @@ export class SummaryManager implements IDisposable {
|
|
|
137
137
|
state === SummaryManagerState.Starting || state === SummaryManagerState.Running;
|
|
138
138
|
|
|
139
139
|
private getShouldSummarizeState(): ShouldSummarizeState {
|
|
140
|
+
// Note that if we're in the Running state, the electedClient may be a summarizer client, so we can't
|
|
141
|
+
// enforce connectedState.clientId === clientElection.electedClientId. But once we're Running, we should
|
|
142
|
+
// only transition to Stopping when the electedParentId changes. Stopping the summarizer without
|
|
143
|
+
// changing the electedParent will just cause us to transition to Starting again.
|
|
140
144
|
if (!this.connectedState.connected) {
|
|
141
145
|
return { shouldSummarize: false, stopReason: "parentNotConnected" };
|
|
142
|
-
} else if (this.connectedState.clientId !== this.clientElection.
|
|
146
|
+
} else if (this.connectedState.clientId !== this.clientElection.electedParentId ||
|
|
147
|
+
(this.state !== SummaryManagerState.Running &&
|
|
148
|
+
this.connectedState.clientId !== this.clientElection.electedClientId)) {
|
|
143
149
|
return { shouldSummarize: false, stopReason: "parentShouldNotSummarize" };
|
|
144
150
|
} else if (this.disposed) {
|
|
145
151
|
assert(false, 0x260 /* "Disposed should mean disconnected!" */);
|
|
@@ -199,18 +205,23 @@ export class SummaryManager implements IDisposable {
|
|
|
199
205
|
return;
|
|
200
206
|
}
|
|
201
207
|
|
|
208
|
+
// We transition to Running before requesting the summarizer, because after requesting we can't predict
|
|
209
|
+
// when the electedClient will be replaced with the new summarizer client.
|
|
210
|
+
// The alternative would be to let connectedState.clientId !== clientElection.electedClientId when
|
|
211
|
+
// state === Starting || state === Running.
|
|
212
|
+
assert(this.state === SummaryManagerState.Starting, 0x263 /* "Expected: starting" */);
|
|
213
|
+
this.state = SummaryManagerState.Running;
|
|
214
|
+
|
|
202
215
|
const summarizer = await this.requestSummarizerFn();
|
|
203
216
|
|
|
204
217
|
// Re-validate that it need to be running. Due to asynchrony, it may be not the case anymore
|
|
205
218
|
const shouldSummarizeState = this.getShouldSummarizeState();
|
|
206
219
|
if (shouldSummarizeState.shouldSummarize === false) {
|
|
220
|
+
this.state = SummaryManagerState.Starting;
|
|
207
221
|
summarizer.stop(shouldSummarizeState.stopReason);
|
|
208
222
|
return;
|
|
209
223
|
}
|
|
210
224
|
|
|
211
|
-
assert(this.state === SummaryManagerState.Starting, 0x263 /* "Expected: starting" */);
|
|
212
|
-
this.state = SummaryManagerState.Running;
|
|
213
|
-
|
|
214
225
|
this.summarizer = summarizer;
|
|
215
226
|
|
|
216
227
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|