@fluidframework/container-loader 2.0.0-internal.1.1.3 → 2.0.0-internal.1.2.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/catchUpMonitor.d.ts +6 -17
- package/dist/catchUpMonitor.d.ts.map +1 -1
- package/dist/catchUpMonitor.js +5 -36
- package/dist/catchUpMonitor.js.map +1 -1
- package/dist/collabWindowTracker.d.ts +1 -1
- package/dist/collabWindowTracker.d.ts.map +1 -1
- package/dist/collabWindowTracker.js +2 -1
- package/dist/collabWindowTracker.js.map +1 -1
- package/dist/connectionManager.d.ts +1 -1
- package/dist/connectionManager.d.ts.map +1 -1
- package/dist/connectionManager.js +8 -11
- package/dist/connectionManager.js.map +1 -1
- package/dist/connectionStateHandler.d.ts +80 -26
- package/dist/connectionStateHandler.d.ts.map +1 -1
- package/dist/connectionStateHandler.js +170 -89
- package/dist/connectionStateHandler.js.map +1 -1
- package/dist/container.d.ts +22 -11
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +107 -125
- package/dist/container.js.map +1 -1
- package/dist/containerContext.d.ts +18 -7
- package/dist/containerContext.d.ts.map +1 -1
- package/dist/containerContext.js +18 -8
- package/dist/containerContext.js.map +1 -1
- package/dist/containerStorageAdapter.d.ts +10 -24
- package/dist/containerStorageAdapter.d.ts.map +1 -1
- package/dist/containerStorageAdapter.js +50 -16
- package/dist/containerStorageAdapter.js.map +1 -1
- package/dist/deltaManager.d.ts +1 -1
- package/dist/deltaManager.d.ts.map +1 -1
- package/dist/deltaManager.js +18 -6
- package/dist/deltaManager.js.map +1 -1
- package/dist/loader.d.ts +1 -1
- package/dist/loader.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/protocol.d.ts.map +1 -1
- package/dist/protocol.js +2 -1
- package/dist/protocol.js.map +1 -1
- package/lib/catchUpMonitor.d.ts +6 -17
- package/lib/catchUpMonitor.d.ts.map +1 -1
- package/lib/catchUpMonitor.js +5 -35
- package/lib/catchUpMonitor.js.map +1 -1
- package/lib/collabWindowTracker.d.ts +1 -1
- package/lib/collabWindowTracker.d.ts.map +1 -1
- package/lib/collabWindowTracker.js +3 -2
- package/lib/collabWindowTracker.js.map +1 -1
- package/lib/connectionManager.d.ts +1 -1
- package/lib/connectionManager.d.ts.map +1 -1
- package/lib/connectionManager.js +9 -14
- package/lib/connectionManager.js.map +1 -1
- package/lib/connectionStateHandler.d.ts +80 -26
- package/lib/connectionStateHandler.d.ts.map +1 -1
- package/lib/connectionStateHandler.js +170 -90
- package/lib/connectionStateHandler.js.map +1 -1
- package/lib/container.d.ts +22 -11
- package/lib/container.d.ts.map +1 -1
- package/lib/container.js +110 -128
- package/lib/container.js.map +1 -1
- package/lib/containerContext.d.ts +18 -7
- package/lib/containerContext.d.ts.map +1 -1
- package/lib/containerContext.js +19 -9
- package/lib/containerContext.js.map +1 -1
- package/lib/containerStorageAdapter.d.ts +10 -24
- package/lib/containerStorageAdapter.d.ts.map +1 -1
- package/lib/containerStorageAdapter.js +50 -15
- package/lib/containerStorageAdapter.js.map +1 -1
- package/lib/deltaManager.d.ts +1 -1
- package/lib/deltaManager.d.ts.map +1 -1
- package/lib/deltaManager.js +18 -6
- package/lib/deltaManager.js.map +1 -1
- package/lib/loader.d.ts +1 -1
- package/lib/loader.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/protocol.d.ts.map +1 -1
- package/lib/protocol.js +2 -1
- package/lib/protocol.js.map +1 -1
- package/package.json +13 -13
- package/src/catchUpMonitor.ts +7 -47
- package/src/collabWindowTracker.ts +4 -3
- package/src/connectionManager.ts +9 -11
- package/src/connectionStateHandler.ts +231 -106
- package/src/container.ts +132 -147
- package/src/containerContext.ts +22 -8
- package/src/containerStorageAdapter.ts +64 -15
- package/src/deltaManager.ts +20 -7
- package/src/loader.ts +1 -1
- package/src/packageVersion.ts +1 -1
- package/src/protocol.ts +2 -1
package/src/catchUpMonitor.ts
CHANGED
|
@@ -3,34 +3,29 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { IDisposable
|
|
7
|
-
import { assert
|
|
6
|
+
import { IDisposable } from "@fluidframework/common-definitions";
|
|
7
|
+
import { assert } from "@fluidframework/common-utils";
|
|
8
8
|
import { IDeltaManager } from "@fluidframework/container-definitions";
|
|
9
9
|
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
10
10
|
|
|
11
|
-
/** @see
|
|
11
|
+
/** @see CatchUpMonitor for usage */
|
|
12
12
|
type CaughtUpListener = () => void;
|
|
13
13
|
|
|
14
|
-
/** @see ICatchUpMonitor for usage */
|
|
15
|
-
export interface ICatchUpMonitorEvents extends IEvent {
|
|
16
|
-
(event: "caughtUp", listener: CaughtUpListener): void;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
14
|
/** Monitor that emits an event when a Container has caught up to a given point in the op stream */
|
|
20
|
-
export
|
|
15
|
+
export type ICatchUpMonitor = IDisposable;
|
|
21
16
|
|
|
22
17
|
/**
|
|
23
18
|
* Monitors a Container's DeltaManager, notifying listeners when all ops have been processed
|
|
24
19
|
* that were known at the time the monitor was created.
|
|
25
20
|
*/
|
|
26
|
-
export class CatchUpMonitor
|
|
21
|
+
export class CatchUpMonitor implements ICatchUpMonitor {
|
|
27
22
|
private readonly targetSeqNumber: number;
|
|
28
23
|
private caughtUp: boolean = false;
|
|
29
24
|
|
|
30
25
|
private readonly opHandler = (message: Pick<ISequencedDocumentMessage, "sequenceNumber">) => {
|
|
31
26
|
if (!this.caughtUp && message.sequenceNumber >= this.targetSeqNumber) {
|
|
32
27
|
this.caughtUp = true;
|
|
33
|
-
this.
|
|
28
|
+
this.listener();
|
|
34
29
|
}
|
|
35
30
|
};
|
|
36
31
|
|
|
@@ -39,9 +34,8 @@ export class CatchUpMonitor extends TypedEventEmitter<ICatchUpMonitorEvents> imp
|
|
|
39
34
|
*/
|
|
40
35
|
constructor(
|
|
41
36
|
private readonly deltaManager: IDeltaManager<any, any>,
|
|
37
|
+
private readonly listener: CaughtUpListener,
|
|
42
38
|
) {
|
|
43
|
-
super();
|
|
44
|
-
|
|
45
39
|
this.targetSeqNumber = this.deltaManager.lastKnownSeqNumber;
|
|
46
40
|
|
|
47
41
|
assert(this.targetSeqNumber >= this.deltaManager.lastSequenceNumber,
|
|
@@ -51,16 +45,6 @@ export class CatchUpMonitor extends TypedEventEmitter<ICatchUpMonitorEvents> imp
|
|
|
51
45
|
|
|
52
46
|
// Simulate the last processed op to set caughtUp in case we already are
|
|
53
47
|
this.opHandler({ sequenceNumber: this.deltaManager.lastSequenceNumber });
|
|
54
|
-
|
|
55
|
-
// If a listener is added after we are already caught up, notify that new listener immediately
|
|
56
|
-
this.on("newListener", (event: string, listener) => {
|
|
57
|
-
if (event === "caughtUp") {
|
|
58
|
-
const caughtUpListener = listener as CaughtUpListener;
|
|
59
|
-
if (this.caughtUp) {
|
|
60
|
-
caughtUpListener();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
48
|
}
|
|
65
49
|
|
|
66
50
|
public disposed: boolean = false;
|
|
@@ -70,30 +54,6 @@ export class CatchUpMonitor extends TypedEventEmitter<ICatchUpMonitorEvents> imp
|
|
|
70
54
|
}
|
|
71
55
|
this.disposed = true;
|
|
72
56
|
|
|
73
|
-
this.removeAllListeners();
|
|
74
57
|
this.deltaManager.off("op", this.opHandler);
|
|
75
58
|
}
|
|
76
59
|
}
|
|
77
|
-
|
|
78
|
-
/** Monitor that always notifies listeners immediately */
|
|
79
|
-
export class ImmediateCatchUpMonitor extends TypedEventEmitter<ICatchUpMonitorEvents> implements ICatchUpMonitor {
|
|
80
|
-
constructor() {
|
|
81
|
-
super();
|
|
82
|
-
this.on("newListener", (event: string, listener) => {
|
|
83
|
-
if (event === "caughtUp") {
|
|
84
|
-
const caughtUpListener = listener as CaughtUpListener;
|
|
85
|
-
caughtUpListener();
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
public disposed: boolean = false;
|
|
91
|
-
public dispose() {
|
|
92
|
-
if (this.disposed) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
this.disposed = true;
|
|
96
|
-
|
|
97
|
-
this.removeAllListeners();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import { assert, Timer } from "@fluidframework/common-utils";
|
|
7
7
|
import { ISequencedDocumentMessage, MessageType } from "@fluidframework/protocol-definitions";
|
|
8
|
-
import { isRuntimeMessage } from "@fluidframework/driver-utils";
|
|
8
|
+
import { isRuntimeMessage, MessageType2 } from "@fluidframework/driver-utils";
|
|
9
9
|
|
|
10
10
|
const defaultNoopTimeFrequency = 2000;
|
|
11
11
|
const defaultNoopCountFrequency = 50;
|
|
@@ -34,7 +34,7 @@ export class CollabWindowTracker {
|
|
|
34
34
|
private readonly timer: Timer | undefined;
|
|
35
35
|
|
|
36
36
|
constructor(
|
|
37
|
-
private readonly submit: (type: MessageType
|
|
37
|
+
private readonly submit: (type: MessageType) => void,
|
|
38
38
|
NoopTimeFrequency: number = defaultNoopTimeFrequency,
|
|
39
39
|
private readonly NoopCountFrequency: number = defaultNoopCountFrequency,
|
|
40
40
|
) {
|
|
@@ -93,7 +93,8 @@ export class CollabWindowTracker {
|
|
|
93
93
|
|
|
94
94
|
private submitNoop(immediate: boolean) {
|
|
95
95
|
// Anything other than null is immediate noop
|
|
96
|
-
|
|
96
|
+
// ADO:1385: Remove cast and use MessageType once definition changes propagate
|
|
97
|
+
this.submit(immediate ? (MessageType2.Accept as unknown as MessageType) : MessageType.NoOp);
|
|
97
98
|
assert(this.opsCountSinceNoop === 0,
|
|
98
99
|
0x243 /* "stopSequenceNumberUpdate should be called as result of sending any op!" */);
|
|
99
100
|
}
|
package/src/connectionManager.ts
CHANGED
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
waitForConnectedState,
|
|
32
32
|
DeltaStreamConnectionForbiddenError,
|
|
33
33
|
logNetworkFailure,
|
|
34
|
-
|
|
34
|
+
isRuntimeMessage,
|
|
35
35
|
} from "@fluidframework/driver-utils";
|
|
36
36
|
import {
|
|
37
37
|
ConnectionMode,
|
|
@@ -168,7 +168,7 @@ export class ConnectionManager implements IConnectionManager {
|
|
|
168
168
|
private clientSequenceNumber = 0;
|
|
169
169
|
private clientSequenceNumberObserved = 0;
|
|
170
170
|
/** Counts the number of noops sent by the client which may not be acked. */
|
|
171
|
-
private
|
|
171
|
+
private localOpsToIgnore = 0;
|
|
172
172
|
|
|
173
173
|
/** track clientId used last time when we sent any ops */
|
|
174
174
|
private lastSubmittedClientId: string | undefined;
|
|
@@ -234,20 +234,18 @@ export class ConnectionManager implements IConnectionManager {
|
|
|
234
234
|
* about current or last connection (if there is no connection at the moment)
|
|
235
235
|
*/
|
|
236
236
|
public get connectionProps(): ITelemetryProperties {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
return {
|
|
237
|
+
return this.connection !== undefined
|
|
238
|
+
? this._connectionProps
|
|
239
|
+
: {
|
|
241
240
|
...this._connectionProps,
|
|
242
241
|
// Report how many ops this client sent in last disconnected session
|
|
243
242
|
sentOps: this.clientSequenceNumber,
|
|
244
243
|
};
|
|
245
|
-
}
|
|
246
244
|
}
|
|
247
245
|
|
|
248
246
|
public shouldJoinWrite(): boolean {
|
|
249
247
|
// We don't have to wait for ack for topmost NoOps. So subtract those.
|
|
250
|
-
return this.clientSequenceNumberObserved < (this.clientSequenceNumber - this.
|
|
248
|
+
return this.clientSequenceNumberObserved < (this.clientSequenceNumber - this.localOpsToIgnore);
|
|
251
249
|
}
|
|
252
250
|
|
|
253
251
|
/**
|
|
@@ -819,10 +817,10 @@ export class ConnectionManager implements IConnectionManager {
|
|
|
819
817
|
this.clientSequenceNumberObserved = 0;
|
|
820
818
|
}
|
|
821
819
|
|
|
822
|
-
if (message
|
|
823
|
-
this.
|
|
820
|
+
if (!isRuntimeMessage(message)) {
|
|
821
|
+
this.localOpsToIgnore++;
|
|
824
822
|
} else {
|
|
825
|
-
this.
|
|
823
|
+
this.localOpsToIgnore = 0;
|
|
826
824
|
}
|
|
827
825
|
|
|
828
826
|
return {
|