@fluidframework/datastore 2.41.0 → 2.42.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 +4 -0
- package/dist/dataStoreRuntime.d.ts +20 -0
- package/dist/dataStoreRuntime.d.ts.map +1 -1
- package/dist/dataStoreRuntime.js +60 -11
- package/dist/dataStoreRuntime.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/dataStoreRuntime.d.ts +20 -0
- package/lib/dataStoreRuntime.d.ts.map +1 -1
- package/lib/dataStoreRuntime.js +60 -11
- package/lib/dataStoreRuntime.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 +15 -15
- package/src/dataStoreRuntime.ts +74 -11
- package/src/packageVersion.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -109,6 +109,14 @@ export declare class FluidDataStoreRuntime extends TypedEventEmitter<IFluidDataS
|
|
|
109
109
|
* and the primary way of interacting with some Fluid objects, and should be used if possible.
|
|
110
110
|
*/
|
|
111
111
|
constructor(dataStoreContext: IFluidDataStoreContext, sharedObjectRegistry: ISharedObjectRegistry, existing: boolean, provideEntryPoint: (runtime: IFluidDataStoreRuntime) => Promise<FluidObject>, policies?: Partial<IFluidDataStorePolicies>);
|
|
112
|
+
/**
|
|
113
|
+
* Implementation of IFluidDataStoreRuntimeExperimental.inStagingMode
|
|
114
|
+
*/
|
|
115
|
+
private get inStagingMode();
|
|
116
|
+
/**
|
|
117
|
+
* Implementation of IFluidDataStoreRuntimeExperimental.isDirty
|
|
118
|
+
*/
|
|
119
|
+
private get isDirty();
|
|
112
120
|
get deltaManager(): IDeltaManagerErased;
|
|
113
121
|
dispose(): void;
|
|
114
122
|
resolveHandle(request: IRequest): Promise<IResponse>;
|
|
@@ -256,6 +264,11 @@ export declare class FluidDataStoreRuntime extends TypedEventEmitter<IFluidDataS
|
|
|
256
264
|
*/
|
|
257
265
|
private makeChannelLocallyVisible;
|
|
258
266
|
private submitChannelOp;
|
|
267
|
+
/**
|
|
268
|
+
* Count of pending ops that have been submitted but not yet ack'd.
|
|
269
|
+
* Used to compute {@link FluidDataStoreRuntime.isDirty}
|
|
270
|
+
*/
|
|
271
|
+
private readonly pendingOpCount;
|
|
259
272
|
private submit;
|
|
260
273
|
/**
|
|
261
274
|
* For messages of type MessageType.Operation, finds the right channel and asks it to resubmit the message.
|
|
@@ -272,6 +285,13 @@ export declare class FluidDataStoreRuntime extends TypedEventEmitter<IFluidDataS
|
|
|
272
285
|
*/
|
|
273
286
|
rollback?(type: DataStoreMessageType, content: any, localOpMetadata: unknown): void;
|
|
274
287
|
applyStashedOp(content: any): Promise<unknown>;
|
|
288
|
+
/**
|
|
289
|
+
* Indicates the given channel is dirty from Summarizer's point of view,
|
|
290
|
+
* i.e. it has local changes that need to be included in the summary.
|
|
291
|
+
*
|
|
292
|
+
* @remarks - If a channel's changes are rolled back or rebased away, we won't
|
|
293
|
+
* clear the dirty flag set here.
|
|
294
|
+
*/
|
|
275
295
|
private setChannelDirty;
|
|
276
296
|
private attachListener;
|
|
277
297
|
private verifyNotClosed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreRuntime.d.ts","sourceRoot":"","sources":["../src/dataStoreRuntime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAA4B,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,EACN,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAQrF,OAAO,EACN,QAAQ,EACR,eAAe,EACf,sBAAsB,EACtB,4BAA4B,EAC5B,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"dataStoreRuntime.d.ts","sourceRoot":"","sources":["../src/dataStoreRuntime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAA4B,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,EACN,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAQrF,OAAO,EACN,QAAQ,EACR,eAAe,EACf,sBAAsB,EACtB,4BAA4B,EAC5B,KAAK,mBAAmB,EAGxB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACN,cAAc,EACd,cAAc,EAId,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACN,gBAAgB,EAEhB,yBAAyB,EACzB,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EAKtB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EAEf,qBAAqB,EACrB,KAAK,yBAAyB,EAM9B,KAAK,uBAAuB,EAC5B,MAAM,8CAA8C,CAAC;AAkBtD,OAAO,EACN,mBAAmB,EASnB,MAAM,0CAA0C,CAAC;AAkClD;;;GAGG;AACH,oBAAY,oBAAoB;IAE/B,MAAM,WAAW;IACjB,SAAS,OAAO;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAGrC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;CAC/C;AAsBD;;;;GAIG;AACH,qBAAa,qBACZ,SAAQ,iBAAiB,CAAC,4BAA4B,CACtD,YAAW,sBAAsB,EAAE,sBAAsB,EAAE,mBAAmB;IAqI7E,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IApItC;;OAEG;IACH,SAAgB,UAAU,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAE9D,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,SAAgB,QAAQ,EAAE,uBAAuB,CAAC;IAElD;;OAEG;IACH,SAAgB,UAAU,QAAO,OAAO,CAAmB;IAE3D,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAW,aAAa,IAAI,cAAc,CAEzC;IAED,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,IAAW,WAAW,IAAI,WAAW,CAEpC;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,IAAW,YAAY,IAAI,mBAAmB,CAE7C;IAED,IAAW,YAAY,IAAI,aAAa,GAAG,SAAS,CAEnD;IAKD,IAAW,mBAAmB,IAAI,IAAI,CAErC;IAED,IAAW,kBAAkB,IAAI,IAAI,CAEpC;IACD,IAAW,sBAAsB,IAAI,IAAI,CAExC;IACD,IAAW,qBAAqB,IAAI,IAAI,CAEvC;IAED,OAAO,CAAC,SAAS,CAAS;IAC1B,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IAEnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA8C;IACvF,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAqB;IACjE,OAAO,CAAC,YAAY,CAAc;IAC3B,eAAe,EAAE,eAAe,CAAC;IAGxC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAwC;IAEpF,SAAgB,EAAE,EAAE,MAAM,CAAC;IAI3B,SAAgB,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;IACtD,SAAgB,oBAAoB,EAAE,aAAa,CAClD,yBAAyB,EACzB,gBAAgB,CAChB,CAAC;IACF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,IAAW,MAAM,IAAI,mBAAmB,CAEvC;IAED;;;;OAIG;IACH,OAAO,CAAC,0BAA0B,CAAS;IAE3C;;;;;;OAMG;IACH,SAAgB,mBAAmB,CAAC,EAAE,OAAO,CAAoC;IAEjF;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAAU;IAE/D;;;;;;;;;;OAUG;gBAEe,gBAAgB,EAAE,sBAAsB,EACxC,oBAAoB,EAAE,qBAAqB,EAC5D,QAAQ,EAAE,OAAO,EACjB,iBAAiB,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,WAAW,CAAC,EAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAuI5C;;OAEG;IAEH,OAAO,KAAK,aAAa,GAMxB;IAED;;OAEG;IAEH,OAAO,KAAK,OAAO,GAElB;IAED,IAAI,YAAY,IAAI,mBAAmB,CAEtC;IAEM,OAAO,IAAI,IAAI;IAUT,aAAa,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IAIpD,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IA4C9C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAWtD;;;;;OAKG;IACH,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAS7C;;;;;;OAMG;IACI,UAAU,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAmBnC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAiDvE,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,mCAAmC;IAmB3C;;;;OAIG;IACI,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IA+B3C;;;;;;;;;;OAUG;IACI,yBAAyB,IAAI,IAAI;IAaxC;;OAEG;IACI,WAAW,IAAI,IAAI;IAInB,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAShC,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAUtE,OAAO,CAAC,SAAS,CAAU;IAC3B;;;;OAIG;IACI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAQ5C,SAAS,IAAI,cAAc;IAI3B,WAAW,IAAI,SAAS;IAIlB,UAAU,CACtB,IAAI,EAAE,eAAe,EACrB,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IAMzC,OAAO,CAAC,0BAA0B;IA0BlC;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAkD9B,OAAO,CAAC,qBAAqB;IAsC7B;;;OAGG;IACI,eAAe,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,IAAI;IAkCnE,aAAa,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI1E,OAAO,CAAC,iBAAiB;IAczB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IASrB;;;;;OAKG;IACU,SAAS,CACrB,QAAQ,GAAE,OAAe,EACzB,UAAU,GAAE,OAAc,EAC1B,gBAAgB,CAAC,EAAE,iBAAiB,GAClC,OAAO,CAAC,qBAAqB,CAAC;IAWjC;;;;;;;;;;;;;;OAcG;IACU,SAAS,CAAC,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAchF;;;;OAIG;IACI,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAkB5C,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,GAAG,qBAAqB;IAiCpF;;OAEG;IACI,eAAe,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,GAAG,sBAAsB;IAkBpF;;;OAGG;YACW,0BAA0B;IAWxC;;;OAGG;IACH,OAAO,CAAC,mCAAmC;IAgDpC,aAAa,CACnB,IAAI,EAAE,oBAAoB,EAG1B,OAAO,EAAE,GAAG,EACZ,eAAe,EAAE,OAAO,GACtB,IAAI;IAIP;;;;;OAKG;IACI,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlF;;OAEG;IACU,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1C;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA2CjC,OAAO,CAAC,eAAe;IAKvB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiD;IAEhF,OAAO,CAAC,MAAM;IAUd;;;;;;OAMG;IACI,QAAQ,CACd,IAAI,EAAE,oBAAoB,EAG1B,OAAO,EAAE,GAAG,EACZ,eAAe,EAAE,OAAO,EACxB,MAAM,CAAC,EAAE,OAAO,GACd,IAAI;IA4BP;;;;OAIG;IACI,QAAQ,CAAC,CACf,IAAI,EAAE,oBAAoB,EAG1B,OAAO,EAAE,GAAG,EACZ,eAAe,EAAE,OAAO,GACtB,IAAI;IAwBM,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IA4C3D;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,eAAe;IAMvB;;;;OAIG;IACH,OAAO,CAAC,+BAA+B;IAyBhC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,GAAG,IAAI;CA+CtF;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,mBACf,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,KAAK,QAAQ,SAAS,CAAC,SACnF,4BAA4B,KAChC,4BAS+B,CAAC;AAEnC;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,YACtB,CACR,OAAO,EAAE,qBAAqB,KAC1B,QAAQ;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,SACvD,4BAA4B,KAChC,4BAyC+B,CAAC"}
|
package/dist/dataStoreRuntime.js
CHANGED
|
@@ -37,6 +37,21 @@ var DataStoreMessageType;
|
|
|
37
37
|
const defaultPolicies = {
|
|
38
38
|
readonlyInStagingMode: true,
|
|
39
39
|
};
|
|
40
|
+
/**
|
|
41
|
+
* Set up the boxed pendingOpCount value.
|
|
42
|
+
*/
|
|
43
|
+
function initializePendingOpCount() {
|
|
44
|
+
let value = 0;
|
|
45
|
+
return {
|
|
46
|
+
get value() {
|
|
47
|
+
return value;
|
|
48
|
+
},
|
|
49
|
+
set value(newValue) {
|
|
50
|
+
(0, internal_1.assert)(newValue >= 0, 0xbbd /* pendingOpCount must be non-negative */);
|
|
51
|
+
value = newValue;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
40
55
|
/**
|
|
41
56
|
* Base data store class
|
|
42
57
|
* @legacy
|
|
@@ -123,6 +138,11 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
123
138
|
* is currently marked as legacy alpha. So, using unknown here.
|
|
124
139
|
*/
|
|
125
140
|
this.ILayerCompatDetails = dataStoreLayerCompatState_js_1.dataStoreCompatDetailsForRuntime;
|
|
141
|
+
/**
|
|
142
|
+
* Count of pending ops that have been submitted but not yet ack'd.
|
|
143
|
+
* Used to compute {@link FluidDataStoreRuntime.isDirty}
|
|
144
|
+
*/
|
|
145
|
+
this.pendingOpCount = initializePendingOpCount();
|
|
126
146
|
(0, internal_1.assert)(!dataStoreContext.id.includes("/"), 0x30e /* Id cannot contain slashes. DataStoreContext should have validated this. */);
|
|
127
147
|
this.policies = { ...defaultPolicies, ...policies };
|
|
128
148
|
// Validate that the Runtime is compatible with this DataStore.
|
|
@@ -212,17 +232,27 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
212
232
|
// By default, a data store can log maximum 10 local changes telemetry in summarizer.
|
|
213
233
|
this.localChangesTelemetryCount =
|
|
214
234
|
this.mc.config.getNumber("Fluid.Telemetry.LocalChangesTelemetryCount") ?? 10;
|
|
235
|
+
// Reference these properties to avoid unused private member errors.
|
|
236
|
+
// They're accessed via IFluidDataStoreRuntimeExperimental interface.
|
|
237
|
+
// eslint-disable-next-line no-void
|
|
238
|
+
void [this.inStagingMode, this.isDirty];
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Implementation of IFluidDataStoreRuntimeExperimental.inStagingMode
|
|
242
|
+
*/
|
|
243
|
+
// eslint-disable-next-line import/no-deprecated
|
|
244
|
+
get inStagingMode() {
|
|
245
|
+
return (
|
|
215
246
|
// eslint-disable-next-line import/no-deprecated
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}
|
|
247
|
+
this.dataStoreContext.containerRuntime
|
|
248
|
+
?.inStagingMode);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Implementation of IFluidDataStoreRuntimeExperimental.isDirty
|
|
252
|
+
*/
|
|
253
|
+
// eslint-disable-next-line import/no-deprecated
|
|
254
|
+
get isDirty() {
|
|
255
|
+
return this.pendingOpCount.value > 0;
|
|
226
256
|
}
|
|
227
257
|
get deltaManager() {
|
|
228
258
|
return (0, internal_4.toDeltaManagerErased)(this.deltaManagerInternal);
|
|
@@ -550,7 +580,10 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
550
580
|
*/
|
|
551
581
|
processMessages(messageCollection) {
|
|
552
582
|
this.verifyNotClosed();
|
|
553
|
-
const { envelope, messagesContent } = messageCollection;
|
|
583
|
+
const { envelope, local, messagesContent } = messageCollection;
|
|
584
|
+
if (local) {
|
|
585
|
+
this.pendingOpCount.value -= messagesContent.length;
|
|
586
|
+
}
|
|
554
587
|
try {
|
|
555
588
|
switch (envelope.type) {
|
|
556
589
|
case DataStoreMessageType.ChannelOp: {
|
|
@@ -820,6 +853,7 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
820
853
|
submit(type, content, localOpMetadata = undefined) {
|
|
821
854
|
this.verifyNotClosed();
|
|
822
855
|
this.dataStoreContext.submitMessage(type, content, localOpMetadata);
|
|
856
|
+
++this.pendingOpCount.value;
|
|
823
857
|
}
|
|
824
858
|
/**
|
|
825
859
|
* For messages of type MessageType.Operation, finds the right channel and asks it to resubmit the message.
|
|
@@ -833,6 +867,9 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
833
867
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
|
834
868
|
content, localOpMetadata, squash) {
|
|
835
869
|
this.verifyNotClosed();
|
|
870
|
+
// The op being resubmitted was not / will not be submitted, so decrement the count.
|
|
871
|
+
// The calls below may result in one or more ops submitted again, which will increment the count (or not if nothing needs to be submitted anymore).
|
|
872
|
+
--this.pendingOpCount.value;
|
|
836
873
|
switch (type) {
|
|
837
874
|
case DataStoreMessageType.ChannelOp: {
|
|
838
875
|
// For Operations, find the right channel and trigger resubmission on it.
|
|
@@ -862,6 +899,8 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
862
899
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
|
863
900
|
content, localOpMetadata) {
|
|
864
901
|
this.verifyNotClosed();
|
|
902
|
+
// The op being rolled back was not/will not be submitted, so decrement the count.
|
|
903
|
+
--this.pendingOpCount.value;
|
|
865
904
|
switch (type) {
|
|
866
905
|
case DataStoreMessageType.ChannelOp: {
|
|
867
906
|
// For Operations, find the right channel and trigger resubmission on it.
|
|
@@ -879,6 +918,9 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
879
918
|
// TODO: use something other than `any` here
|
|
880
919
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
|
881
920
|
async applyStashedOp(content) {
|
|
921
|
+
// The op being applied may have been submitted in a previous session, so we increment the count here.
|
|
922
|
+
// Either the ack will arrive and be processed, or that previous session's connection will end, at which point the op will be resubmitted.
|
|
923
|
+
++this.pendingOpCount.value;
|
|
882
924
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
883
925
|
const type = content?.type;
|
|
884
926
|
switch (type) {
|
|
@@ -912,6 +954,13 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
912
954
|
}
|
|
913
955
|
}
|
|
914
956
|
}
|
|
957
|
+
/**
|
|
958
|
+
* Indicates the given channel is dirty from Summarizer's point of view,
|
|
959
|
+
* i.e. it has local changes that need to be included in the summary.
|
|
960
|
+
*
|
|
961
|
+
* @remarks - If a channel's changes are rolled back or rebased away, we won't
|
|
962
|
+
* clear the dirty flag set here.
|
|
963
|
+
*/
|
|
915
964
|
setChannelDirty(address) {
|
|
916
965
|
this.verifyNotClosed();
|
|
917
966
|
this.dataStoreContext.setChannelDirty(address);
|