cojson 0.13.0 → 0.13.2
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +6 -0
- package/dist/PeerState.d.ts +1 -7
- package/dist/PeerState.d.ts.map +1 -1
- package/dist/PeerState.js +5 -3
- package/dist/PeerState.js.map +1 -1
- package/dist/PriorityBasedMessageQueue.d.ts +17 -3
- package/dist/PriorityBasedMessageQueue.d.ts.map +1 -1
- package/dist/PriorityBasedMessageQueue.js +57 -29
- package/dist/PriorityBasedMessageQueue.js.map +1 -1
- package/dist/crypto/crypto.d.ts.map +1 -1
- package/dist/crypto/crypto.js +3 -1
- package/dist/crypto/crypto.js.map +1 -1
- package/dist/priority.d.ts +2 -2
- package/dist/priority.d.ts.map +1 -1
- package/dist/priority.js +1 -1
- package/dist/tests/PriorityBasedMessageQueue.test.js +86 -22
- package/dist/tests/PriorityBasedMessageQueue.test.js.map +1 -1
- package/package.json +2 -3
- package/src/PeerState.ts +11 -7
- package/src/PriorityBasedMessageQueue.ts +75 -35
- package/src/crypto/crypto.ts +4 -1
- package/src/priority.ts +2 -2
- package/src/tests/PriorityBasedMessageQueue.test.ts +127 -34
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
package/dist/PeerState.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { RawCoID } from "./ids.js";
|
|
|
4
4
|
import { Peer, SyncMessage } from "./sync.js";
|
|
5
5
|
export declare class PeerState {
|
|
6
6
|
private peer;
|
|
7
|
+
private queue;
|
|
7
8
|
constructor(peer: Peer, knownStates: PeerKnownStates | undefined);
|
|
8
9
|
/**
|
|
9
10
|
* Here we to collect all the known states that a given peer has told us about.
|
|
@@ -28,13 +29,6 @@ export declare class PeerState {
|
|
|
28
29
|
get crashOnClose(): boolean;
|
|
29
30
|
shouldRetryUnavailableCoValues(): boolean;
|
|
30
31
|
isServerOrStoragePeer(): boolean;
|
|
31
|
-
/**
|
|
32
|
-
* We set as default priority HIGH to handle all the messages without a
|
|
33
|
-
* priority property as HIGH priority.
|
|
34
|
-
*
|
|
35
|
-
* This way we consider all the non-content messsages as HIGH priority.
|
|
36
|
-
*/
|
|
37
|
-
private queue;
|
|
38
32
|
private processing;
|
|
39
33
|
closed: boolean;
|
|
40
34
|
processQueue(): Promise<void>;
|
package/dist/PeerState.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeerState.d.ts","sourceRoot":"","sources":["../src/PeerState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAK9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGnC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE9C,qBAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"PeerState.d.ts","sourceRoot":"","sources":["../src/PeerState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAK9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGnC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE9C,qBAAa,SAAS;IAIlB,OAAO,CAAC,IAAI;IAHd,OAAO,CAAC,KAAK,CAA4B;gBAG/B,IAAI,EAAE,IAAI,EAClB,WAAW,EAAE,eAAe,GAAG,SAAS;IAsB1C;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IAEtC;;;;;;OAMG;IACH,QAAQ,CAAC,qBAAqB,EAAE,eAAe,CAAC;IAChD,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAa;IAElD,qBAAqB,CAAC,MAAM,EAAE,qBAAqB;IAQnD,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAa;IAE5E,IAAI,EAAE,WAEL;IAED,IAAI,IAAI,6CAEP;IAED,IAAI,QAAQ,uBAEX;IAED,IAAI,YAAY,YAEf;IAED,8BAA8B;IAI9B,qBAAqB;IAIrB,OAAO,CAAC,UAAU,CAAS;IACpB,MAAM,UAAS;IAEhB,YAAY;IAqBlB,mBAAmB,CAAC,GAAG,EAAE,WAAW;IAYpC,IAAI,QAAQ,2CAQX;IAED,OAAO,CAAC,UAAU;IAQlB,gBAAgB;CASjB"}
|
package/dist/PeerState.js
CHANGED
|
@@ -7,15 +7,17 @@ export class PeerState {
|
|
|
7
7
|
this.peer = peer;
|
|
8
8
|
this.toldKnownState = new Set();
|
|
9
9
|
this.erroredCoValues = new Map();
|
|
10
|
+
this.processing = false;
|
|
11
|
+
this.closed = false;
|
|
10
12
|
/**
|
|
11
13
|
* We set as default priority HIGH to handle all the messages without a
|
|
12
14
|
* priority property as HIGH priority.
|
|
13
15
|
*
|
|
14
16
|
* This way we consider all the non-content messsages as HIGH priority.
|
|
15
17
|
*/
|
|
16
|
-
this.queue = new PriorityBasedMessageQueue(CO_VALUE_PRIORITY.HIGH
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
this.queue = new PriorityBasedMessageQueue(CO_VALUE_PRIORITY.HIGH, {
|
|
19
|
+
peerRole: peer.role,
|
|
20
|
+
});
|
|
19
21
|
this.optimisticKnownStates = knownStates?.clone() ?? new PeerKnownStates();
|
|
20
22
|
// We assume that exchanges with storage peers are always successful
|
|
21
23
|
// hence we don't need to differentiate between knownStates and optimisticKnownStates
|
package/dist/PeerState.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeerState.js","sourceRoot":"","sources":["../src/PeerState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EACL,yBAAyB,GAE1B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,OAAO,SAAS;
|
|
1
|
+
{"version":3,"file":"PeerState.js","sourceRoot":"","sources":["../src/PeerState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EACL,yBAAyB,GAE1B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,OAAO,SAAS;IAGpB,YACU,IAAU,EAClB,WAAwC;QADhC,SAAI,GAAJ,IAAI,CAAM;QAsCX,mBAAc,GAAiB,IAAI,GAAG,EAAE,CAAC;QAUzC,oBAAe,GAA0C,IAAI,GAAG,EAAE,CAAC;QA0BpE,eAAU,GAAG,KAAK,CAAC;QACpB,WAAM,GAAG,KAAK,CAAC;QAxEpB;;;;;WAKG;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,yBAAyB,CAAC,iBAAiB,CAAC,IAAI,EAAE;YACjE,QAAQ,EAAE,IAAI,CAAC,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,qBAAqB,GAAG,WAAW,EAAE,KAAK,EAAE,IAAI,IAAI,eAAe,EAAE,CAAC;QAE3E,oEAAoE;QACpE,qFAAqF;QACrF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,GAAG,WAAW,EAAE,KAAK,EAAE,IAAI,IAAI,eAAe,EAAE,CAAC;QACnE,CAAC;IACH,CAAC;IAmBD,qBAAqB,CAAC,MAA6B;QACjD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAID,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IAChC,CAAC;IAED,8BAA8B;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;IACrC,CAAC;IAED,qBAAqB;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;IACrE,CAAC;IAKD,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACnC,kDAAkD;YAClD,gEAAgE;YAChE,oDAAoD;YACpD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ;iBACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;iBACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;iBACnB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,mBAAmB,CAAC,GAAgB;QAClC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAErC,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAEzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,SAAS,CAAC;gBACrB,MAAM,cAAuB,CAAC;YAChC,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAEO,UAAU;QAChB,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACnC,4DAA4D;YAC5D,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;YACjC,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,QAAQ,EAAE,IAAI,CAAC,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type CoValuePriority } from "./priority.js";
|
|
2
2
|
import type { SyncMessage } from "./sync.js";
|
|
3
3
|
export type QueueEntry = {
|
|
4
4
|
msg: SyncMessage;
|
|
@@ -15,18 +15,32 @@ type LinkedListNode<T> = {
|
|
|
15
15
|
* as our queues can grow very large when the system is under pressure.
|
|
16
16
|
*/
|
|
17
17
|
export declare class LinkedList<T> {
|
|
18
|
+
private meter?;
|
|
19
|
+
constructor(meter?: QueueMeter | undefined);
|
|
18
20
|
head: LinkedListNode<T> | undefined;
|
|
19
21
|
tail: LinkedListNode<T> | undefined;
|
|
20
22
|
length: number;
|
|
21
23
|
push(value: T): void;
|
|
22
24
|
shift(): T | undefined;
|
|
23
25
|
}
|
|
26
|
+
declare class QueueMeter {
|
|
27
|
+
private attrs?;
|
|
28
|
+
private pullCounter;
|
|
29
|
+
private pushCounter;
|
|
30
|
+
constructor(prefix: string, attrs?: Record<string, string | number> | undefined);
|
|
31
|
+
pull(): void;
|
|
32
|
+
push(): void;
|
|
33
|
+
}
|
|
24
34
|
export declare class PriorityBasedMessageQueue {
|
|
25
35
|
private defaultPriority;
|
|
26
36
|
private queues;
|
|
27
|
-
|
|
37
|
+
constructor(defaultPriority: CoValuePriority,
|
|
38
|
+
/**
|
|
39
|
+
* Optional attributes to be added to the generated metrics.
|
|
40
|
+
* By default the metrics will have the priority as an attribute.
|
|
41
|
+
*/
|
|
42
|
+
attrs?: Record<string, string | number>);
|
|
28
43
|
private getQueue;
|
|
29
|
-
constructor(defaultPriority: CoValuePriority);
|
|
30
44
|
push(msg: SyncMessage): Promise<void>;
|
|
31
45
|
pull(): QueueEntry | undefined;
|
|
32
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PriorityBasedMessageQueue.d.ts","sourceRoot":"","sources":["../src/PriorityBasedMessageQueue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"PriorityBasedMessageQueue.d.ts","sourceRoot":"","sources":["../src/PriorityBasedMessageQueue.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAkB7C,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,WAAW,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9B,CAAC;AAaF,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF;;;GAGG;AACH,qBAAa,UAAU,CAAC,CAAC;IACX,OAAO,CAAC,KAAK,CAAC;gBAAN,KAAK,CAAC,EAAE,UAAU,YAAA;IAEtC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAa;IAChD,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAa;IAChD,MAAM,SAAK;IAEX,IAAI,CAAC,KAAK,EAAE,CAAC;IAiBb,KAAK;CAmBN;AAED,cAAM,UAAU;IAMZ,OAAO,CAAC,KAAK,CAAC;IALhB,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,WAAW,CAAU;gBAG3B,MAAM,EAAE,MAAM,EACN,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,YAAA;IA0B1C,IAAI;IAIJ,IAAI;CAGZ;AAYD,qBAAa,yBAAyB;IAIlC,OAAO,CAAC,eAAe;IAHzB,OAAO,CAAC,MAAM,CAAa;gBAGjB,eAAe,EAAE,eAAe;IACxC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IASzC,OAAO,CAAC,QAAQ;IAIT,IAAI,CAAC,GAAG,EAAE,WAAW;IAWrB,IAAI;CAKZ"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ValueType, metrics } from "@opentelemetry/api";
|
|
2
|
+
import { CO_VALUE_PRIORITY } from "./priority.js";
|
|
2
3
|
function promiseWithResolvers() {
|
|
3
4
|
let resolve = (_) => { };
|
|
4
5
|
let reject = (_) => { };
|
|
@@ -17,7 +18,8 @@ function promiseWithResolvers() {
|
|
|
17
18
|
* as our queues can grow very large when the system is under pressure.
|
|
18
19
|
*/
|
|
19
20
|
export class LinkedList {
|
|
20
|
-
constructor() {
|
|
21
|
+
constructor(meter) {
|
|
22
|
+
this.meter = meter;
|
|
21
23
|
this.head = undefined;
|
|
22
24
|
this.tail = undefined;
|
|
23
25
|
this.length = 0;
|
|
@@ -36,6 +38,7 @@ export class LinkedList {
|
|
|
36
38
|
throw new Error("LinkedList is corrupted");
|
|
37
39
|
}
|
|
38
40
|
this.length++;
|
|
41
|
+
this.meter?.push();
|
|
39
42
|
}
|
|
40
43
|
shift() {
|
|
41
44
|
if (!this.head) {
|
|
@@ -49,51 +52,76 @@ export class LinkedList {
|
|
|
49
52
|
this.tail = undefined;
|
|
50
53
|
}
|
|
51
54
|
this.length--;
|
|
55
|
+
this.meter?.pull();
|
|
52
56
|
return value;
|
|
53
57
|
}
|
|
54
58
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
59
|
+
class QueueMeter {
|
|
60
|
+
constructor(prefix, attrs) {
|
|
61
|
+
this.attrs = attrs;
|
|
62
|
+
this.pullCounter = metrics
|
|
63
|
+
.getMeter("cojosn")
|
|
64
|
+
.createCounter(`${prefix}.pulled`, {
|
|
65
|
+
description: "Number of messages pulled from the queue",
|
|
66
|
+
valueType: ValueType.INT,
|
|
67
|
+
unit: "1",
|
|
68
|
+
});
|
|
69
|
+
this.pushCounter = metrics
|
|
70
|
+
.getMeter("cojosn")
|
|
71
|
+
.createCounter(`${prefix}.pushed`, {
|
|
72
|
+
description: "Number of messages pushed to the queue",
|
|
73
|
+
valueType: ValueType.INT,
|
|
74
|
+
unit: "1",
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* This makes sure that those metrics are generated (and emitted) as soon as the queue is created.
|
|
78
|
+
* This is to avoid edge cases where one series reset is delayed, which would cause spikes or dips
|
|
79
|
+
* when queried - and it also more correctly represents the actual state of the queue after a restart.
|
|
80
|
+
*/
|
|
81
|
+
this.pullCounter.add(0, this.attrs);
|
|
82
|
+
this.pushCounter.add(0, this.attrs);
|
|
83
|
+
}
|
|
84
|
+
pull() {
|
|
85
|
+
this.pullCounter.add(1, this.attrs);
|
|
58
86
|
}
|
|
59
|
-
|
|
87
|
+
push() {
|
|
88
|
+
this.pushCounter.add(1, this.attrs);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function meteredList(attrs) {
|
|
92
|
+
return new LinkedList(new QueueMeter("jazz.messagequeue", attrs));
|
|
93
|
+
}
|
|
94
|
+
const PRIORITY_TO_QUEUE_INDEX = {
|
|
95
|
+
[CO_VALUE_PRIORITY.HIGH]: 0,
|
|
96
|
+
[CO_VALUE_PRIORITY.MEDIUM]: 1,
|
|
97
|
+
[CO_VALUE_PRIORITY.LOW]: 2,
|
|
98
|
+
};
|
|
99
|
+
export class PriorityBasedMessageQueue {
|
|
100
|
+
constructor(defaultPriority,
|
|
101
|
+
/**
|
|
102
|
+
* Optional attributes to be added to the generated metrics.
|
|
103
|
+
* By default the metrics will have the priority as an attribute.
|
|
104
|
+
*/
|
|
105
|
+
attrs) {
|
|
60
106
|
this.defaultPriority = defaultPriority;
|
|
61
107
|
this.queues = [
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
new LinkedList(),
|
|
66
|
-
new LinkedList(),
|
|
67
|
-
new LinkedList(),
|
|
68
|
-
new LinkedList(),
|
|
69
|
-
new LinkedList(),
|
|
108
|
+
meteredList({ priority: CO_VALUE_PRIORITY.HIGH, ...attrs }),
|
|
109
|
+
meteredList({ priority: CO_VALUE_PRIORITY.MEDIUM, ...attrs }),
|
|
110
|
+
meteredList({ priority: CO_VALUE_PRIORITY.LOW, ...attrs }),
|
|
70
111
|
];
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
description: "Size of the message queue",
|
|
75
|
-
valueType: ValueType.INT,
|
|
76
|
-
unit: "entry",
|
|
77
|
-
});
|
|
112
|
+
}
|
|
113
|
+
getQueue(priority) {
|
|
114
|
+
return this.queues[PRIORITY_TO_QUEUE_INDEX[priority]];
|
|
78
115
|
}
|
|
79
116
|
push(msg) {
|
|
80
117
|
const { promise, resolve, reject } = promiseWithResolvers();
|
|
81
118
|
const entry = { msg, promise, resolve, reject };
|
|
82
119
|
const priority = "priority" in msg ? msg.priority : this.defaultPriority;
|
|
83
120
|
this.getQueue(priority).push(entry);
|
|
84
|
-
this.queueSizeCounter.add(1, {
|
|
85
|
-
priority,
|
|
86
|
-
});
|
|
87
121
|
return promise;
|
|
88
122
|
}
|
|
89
123
|
pull() {
|
|
90
124
|
const priority = this.queues.findIndex((queue) => queue.length > 0);
|
|
91
|
-
if (priority === -1) {
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
this.queueSizeCounter.add(-1, {
|
|
95
|
-
priority,
|
|
96
|
-
});
|
|
97
125
|
return this.queues[priority]?.shift();
|
|
98
126
|
}
|
|
99
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PriorityBasedMessageQueue.js","sourceRoot":"","sources":["../src/PriorityBasedMessageQueue.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"PriorityBasedMessageQueue.js","sourceRoot":"","sources":["../src/PriorityBasedMessageQueue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto/crypto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto/crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/crypto/crypto.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { randomBytes } from "@noble/ciphers/webcrypto/utils";
|
|
2
1
|
import { base58 } from "@scure/base";
|
|
3
2
|
import { parseJSON, stableStringify } from "../jsonStringify.js";
|
|
4
3
|
import { logger } from "../logger.js";
|
|
4
|
+
function randomBytes(bytesLength = 32) {
|
|
5
|
+
return crypto.getRandomValues(new Uint8Array(bytesLength));
|
|
6
|
+
}
|
|
5
7
|
export const textEncoder = new TextEncoder();
|
|
6
8
|
export const textDecoder = new TextDecoder();
|
|
7
9
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto/crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/priority.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { type CoValueHeader } from "./coValueCore.js";
|
|
|
6
6
|
* The priority value is handled as weight in the weighed round robin algorithm
|
|
7
7
|
* used to determine the order in which messages are sent.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* Loosely follows the HTTP urgency range and order, but limited to 3 values:
|
|
10
10
|
* - https://www.rfc-editor.org/rfc/rfc9218.html#name-urgency
|
|
11
11
|
*/
|
|
12
12
|
export declare const CO_VALUE_PRIORITY: {
|
|
@@ -14,6 +14,6 @@ export declare const CO_VALUE_PRIORITY: {
|
|
|
14
14
|
readonly MEDIUM: 3;
|
|
15
15
|
readonly LOW: 6;
|
|
16
16
|
};
|
|
17
|
-
export type CoValuePriority = 0 |
|
|
17
|
+
export type CoValuePriority = 0 | 3 | 6;
|
|
18
18
|
export declare function getPriorityFromHeader(header: CoValueHeader | undefined | boolean): CoValuePriority;
|
|
19
19
|
//# sourceMappingURL=priority.d.ts.map
|
package/dist/priority.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"priority.d.ts","sourceRoot":"","sources":["../src/priority.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"priority.d.ts","sourceRoot":"","sources":["../src/priority.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAExC,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,GAC1C,eAAe,CAkBjB"}
|
package/dist/priority.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* The priority value is handled as weight in the weighed round robin algorithm
|
|
6
6
|
* used to determine the order in which messages are sent.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* Loosely follows the HTTP urgency range and order, but limited to 3 values:
|
|
9
9
|
* - https://www.rfc-editor.org/rfc/rfc9218.html#name-urgency
|
|
10
10
|
*/
|
|
11
11
|
export const CO_VALUE_PRIORITY = {
|
|
@@ -2,19 +2,101 @@ import { afterEach, describe, expect, test } from "vitest";
|
|
|
2
2
|
import { PriorityBasedMessageQueue } from "../PriorityBasedMessageQueue.js";
|
|
3
3
|
import { CO_VALUE_PRIORITY } from "../priority.js";
|
|
4
4
|
import { createTestMetricReader, tearDownTestMetricReader, } from "./testUtils.js";
|
|
5
|
-
function setup() {
|
|
5
|
+
function setup(attrs) {
|
|
6
6
|
const metricReader = createTestMetricReader();
|
|
7
|
-
const queue = new PriorityBasedMessageQueue(CO_VALUE_PRIORITY.MEDIUM);
|
|
7
|
+
const queue = new PriorityBasedMessageQueue(CO_VALUE_PRIORITY.MEDIUM, attrs);
|
|
8
8
|
return { queue, metricReader };
|
|
9
9
|
}
|
|
10
10
|
describe("PriorityBasedMessageQueue", () => {
|
|
11
11
|
afterEach(() => {
|
|
12
12
|
tearDownTestMetricReader();
|
|
13
13
|
});
|
|
14
|
+
describe("meteredQueue", () => {
|
|
15
|
+
test("should corretly count pushes", async () => {
|
|
16
|
+
const { queue, metricReader } = setup();
|
|
17
|
+
const message = {
|
|
18
|
+
action: "load",
|
|
19
|
+
id: "co_ztest-id",
|
|
20
|
+
header: false,
|
|
21
|
+
sessions: {},
|
|
22
|
+
};
|
|
23
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
24
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
25
|
+
})).toBe(0);
|
|
26
|
+
void queue.push(message);
|
|
27
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
28
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
29
|
+
})).toBe(1);
|
|
30
|
+
void queue.push(message);
|
|
31
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
32
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
33
|
+
})).toBe(2);
|
|
34
|
+
});
|
|
35
|
+
test("should corretly count pulls", async () => {
|
|
36
|
+
const { queue, metricReader } = setup();
|
|
37
|
+
const message = {
|
|
38
|
+
action: "load",
|
|
39
|
+
id: "co_ztest-id",
|
|
40
|
+
header: false,
|
|
41
|
+
sessions: {},
|
|
42
|
+
};
|
|
43
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
44
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
45
|
+
})).toBe(0);
|
|
46
|
+
void queue.push(message);
|
|
47
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
48
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
49
|
+
})).toBe(0);
|
|
50
|
+
void queue.pull();
|
|
51
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
52
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
53
|
+
})).toBe(1);
|
|
54
|
+
// We only have one item in the queue, so this should not change the metric value
|
|
55
|
+
void queue.pull();
|
|
56
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
57
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
58
|
+
})).toBe(1);
|
|
59
|
+
});
|
|
60
|
+
test("should corretly set custom attributes to the metrics", async () => {
|
|
61
|
+
const { queue, metricReader } = setup({ role: "server" });
|
|
62
|
+
const message = {
|
|
63
|
+
action: "load",
|
|
64
|
+
id: "co_ztest-id",
|
|
65
|
+
header: false,
|
|
66
|
+
sessions: {},
|
|
67
|
+
};
|
|
68
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
69
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
70
|
+
role: "server",
|
|
71
|
+
})).toBe(0);
|
|
72
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
73
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
74
|
+
role: "client",
|
|
75
|
+
})).toBeUndefined();
|
|
76
|
+
void queue.push(message);
|
|
77
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
78
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
79
|
+
role: "server",
|
|
80
|
+
})).toBe(1);
|
|
81
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
82
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
83
|
+
role: "server",
|
|
84
|
+
})).toBe(0);
|
|
85
|
+
void queue.pull();
|
|
86
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
87
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
88
|
+
role: "server",
|
|
89
|
+
})).toBe(1);
|
|
90
|
+
expect(await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
91
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
92
|
+
role: "server",
|
|
93
|
+
})).toBe(1);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
14
96
|
test("should initialize with correct properties", () => {
|
|
15
97
|
const { queue } = setup();
|
|
16
98
|
expect(queue["defaultPriority"]).toBe(CO_VALUE_PRIORITY.MEDIUM);
|
|
17
|
-
expect(queue["queues"].length).toBe(
|
|
99
|
+
expect(queue["queues"].length).toBe(3);
|
|
18
100
|
expect(queue["queues"].every((q) => !q.length)).toBe(true);
|
|
19
101
|
});
|
|
20
102
|
test("should push message with default priority", async () => {
|
|
@@ -42,7 +124,7 @@ describe("PriorityBasedMessageQueue", () => {
|
|
|
42
124
|
expect(pulledEntry?.msg).toEqual(message);
|
|
43
125
|
});
|
|
44
126
|
test("should pull messages in priority order", async () => {
|
|
45
|
-
const { queue
|
|
127
|
+
const { queue } = setup();
|
|
46
128
|
const lowPriorityMsg = {
|
|
47
129
|
action: "content",
|
|
48
130
|
id: "co_zlow",
|
|
@@ -62,29 +144,11 @@ describe("PriorityBasedMessageQueue", () => {
|
|
|
62
144
|
priority: CO_VALUE_PRIORITY.HIGH,
|
|
63
145
|
};
|
|
64
146
|
void queue.push(lowPriorityMsg);
|
|
65
|
-
expect(await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
66
|
-
priority: lowPriorityMsg.priority,
|
|
67
|
-
})).toBe(1);
|
|
68
147
|
void queue.push(mediumPriorityMsg);
|
|
69
|
-
expect(await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
70
|
-
priority: mediumPriorityMsg.priority,
|
|
71
|
-
})).toBe(1);
|
|
72
148
|
void queue.push(highPriorityMsg);
|
|
73
|
-
expect(await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
74
|
-
priority: highPriorityMsg.priority,
|
|
75
|
-
})).toBe(1);
|
|
76
149
|
expect(queue.pull()?.msg).toEqual(highPriorityMsg);
|
|
77
|
-
expect(await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
78
|
-
priority: highPriorityMsg.priority,
|
|
79
|
-
})).toBe(0);
|
|
80
150
|
expect(queue.pull()?.msg).toEqual(mediumPriorityMsg);
|
|
81
|
-
expect(await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
82
|
-
priority: mediumPriorityMsg.priority,
|
|
83
|
-
})).toBe(0);
|
|
84
151
|
expect(queue.pull()?.msg).toEqual(lowPriorityMsg);
|
|
85
|
-
expect(await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
86
|
-
priority: lowPriorityMsg.priority,
|
|
87
|
-
})).toBe(0);
|
|
88
152
|
});
|
|
89
153
|
test("should return undefined when pulling from empty queue", () => {
|
|
90
154
|
const { queue } = setup();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PriorityBasedMessageQueue.test.js","sourceRoot":"","sources":["../../src/tests/PriorityBasedMessageQueue.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,SAAS,KAAK;
|
|
1
|
+
{"version":3,"file":"PriorityBasedMessageQueue.test.js","sourceRoot":"","sources":["../../src/tests/PriorityBasedMessageQueue.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -25,11 +25,10 @@
|
|
|
25
25
|
},
|
|
26
26
|
"type": "module",
|
|
27
27
|
"license": "MIT",
|
|
28
|
-
"version": "0.13.
|
|
28
|
+
"version": "0.13.2",
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@opentelemetry/sdk-metrics": "^2.0.0",
|
|
31
|
-
"typescript": "~5.6.2"
|
|
32
|
-
"vitest": "3.0.5"
|
|
31
|
+
"typescript": "~5.6.2"
|
|
33
32
|
},
|
|
34
33
|
"dependencies": {
|
|
35
34
|
"@noble/ciphers": "^0.1.3",
|
package/src/PeerState.ts
CHANGED
|
@@ -10,10 +10,21 @@ import { CO_VALUE_PRIORITY } from "./priority.js";
|
|
|
10
10
|
import { Peer, SyncMessage } from "./sync.js";
|
|
11
11
|
|
|
12
12
|
export class PeerState {
|
|
13
|
+
private queue: PriorityBasedMessageQueue;
|
|
14
|
+
|
|
13
15
|
constructor(
|
|
14
16
|
private peer: Peer,
|
|
15
17
|
knownStates: PeerKnownStates | undefined,
|
|
16
18
|
) {
|
|
19
|
+
/**
|
|
20
|
+
* We set as default priority HIGH to handle all the messages without a
|
|
21
|
+
* priority property as HIGH priority.
|
|
22
|
+
*
|
|
23
|
+
* This way we consider all the non-content messsages as HIGH priority.
|
|
24
|
+
*/
|
|
25
|
+
this.queue = new PriorityBasedMessageQueue(CO_VALUE_PRIORITY.HIGH, {
|
|
26
|
+
peerRole: peer.role,
|
|
27
|
+
});
|
|
17
28
|
this.optimisticKnownStates = knownStates?.clone() ?? new PeerKnownStates();
|
|
18
29
|
|
|
19
30
|
// We assume that exchanges with storage peers are always successful
|
|
@@ -76,13 +87,6 @@ export class PeerState {
|
|
|
76
87
|
return this.peer.role === "server" || this.peer.role === "storage";
|
|
77
88
|
}
|
|
78
89
|
|
|
79
|
-
/**
|
|
80
|
-
* We set as default priority HIGH to handle all the messages without a
|
|
81
|
-
* priority property as HIGH priority.
|
|
82
|
-
*
|
|
83
|
-
* This way we consider all the non-content messsages as HIGH priority.
|
|
84
|
-
*/
|
|
85
|
-
private queue = new PriorityBasedMessageQueue(CO_VALUE_PRIORITY.HIGH);
|
|
86
90
|
private processing = false;
|
|
87
91
|
public closed = false;
|
|
88
92
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ValueType, metrics } from "@opentelemetry/api";
|
|
2
|
-
import type
|
|
1
|
+
import { Counter, ValueType, metrics } from "@opentelemetry/api";
|
|
2
|
+
import { CO_VALUE_PRIORITY, type CoValuePriority } from "./priority.js";
|
|
3
3
|
import type { SyncMessage } from "./sync.js";
|
|
4
4
|
|
|
5
5
|
function promiseWithResolvers<R>() {
|
|
@@ -34,7 +34,7 @@ type Tuple<T, N extends number, A extends unknown[] = []> = A extends {
|
|
|
34
34
|
? A
|
|
35
35
|
: Tuple<T, N, [...A, T]>;
|
|
36
36
|
|
|
37
|
-
type QueueTuple = Tuple<LinkedList<QueueEntry>,
|
|
37
|
+
type QueueTuple = Tuple<LinkedList<QueueEntry>, 3>;
|
|
38
38
|
|
|
39
39
|
type LinkedListNode<T> = {
|
|
40
40
|
value: T;
|
|
@@ -46,6 +46,8 @@ type LinkedListNode<T> = {
|
|
|
46
46
|
* as our queues can grow very large when the system is under pressure.
|
|
47
47
|
*/
|
|
48
48
|
export class LinkedList<T> {
|
|
49
|
+
constructor(private meter?: QueueMeter) {}
|
|
50
|
+
|
|
49
51
|
head: LinkedListNode<T> | undefined = undefined;
|
|
50
52
|
tail: LinkedListNode<T> | undefined = undefined;
|
|
51
53
|
length = 0;
|
|
@@ -64,6 +66,7 @@ export class LinkedList<T> {
|
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
this.length++;
|
|
69
|
+
this.meter?.push();
|
|
67
70
|
}
|
|
68
71
|
|
|
69
72
|
shift() {
|
|
@@ -82,35 +85,84 @@ export class LinkedList<T> {
|
|
|
82
85
|
|
|
83
86
|
this.length--;
|
|
84
87
|
|
|
88
|
+
this.meter?.pull();
|
|
85
89
|
return value;
|
|
86
90
|
}
|
|
87
91
|
}
|
|
88
92
|
|
|
93
|
+
class QueueMeter {
|
|
94
|
+
private pullCounter: Counter;
|
|
95
|
+
private pushCounter: Counter;
|
|
96
|
+
|
|
97
|
+
constructor(
|
|
98
|
+
prefix: string,
|
|
99
|
+
private attrs?: Record<string, string | number>,
|
|
100
|
+
) {
|
|
101
|
+
this.pullCounter = metrics
|
|
102
|
+
.getMeter("cojosn")
|
|
103
|
+
.createCounter(`${prefix}.pulled`, {
|
|
104
|
+
description: "Number of messages pulled from the queue",
|
|
105
|
+
valueType: ValueType.INT,
|
|
106
|
+
unit: "1",
|
|
107
|
+
});
|
|
108
|
+
this.pushCounter = metrics
|
|
109
|
+
.getMeter("cojosn")
|
|
110
|
+
.createCounter(`${prefix}.pushed`, {
|
|
111
|
+
description: "Number of messages pushed to the queue",
|
|
112
|
+
valueType: ValueType.INT,
|
|
113
|
+
unit: "1",
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* This makes sure that those metrics are generated (and emitted) as soon as the queue is created.
|
|
118
|
+
* This is to avoid edge cases where one series reset is delayed, which would cause spikes or dips
|
|
119
|
+
* when queried - and it also more correctly represents the actual state of the queue after a restart.
|
|
120
|
+
*/
|
|
121
|
+
this.pullCounter.add(0, this.attrs);
|
|
122
|
+
this.pushCounter.add(0, this.attrs);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
public pull() {
|
|
126
|
+
this.pullCounter.add(1, this.attrs);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
public push() {
|
|
130
|
+
this.pushCounter.add(1, this.attrs);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function meteredList<T>(attrs?: Record<string, string | number>) {
|
|
135
|
+
return new LinkedList<T>(new QueueMeter("jazz.messagequeue", attrs));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const PRIORITY_TO_QUEUE_INDEX = {
|
|
139
|
+
[CO_VALUE_PRIORITY.HIGH]: 0,
|
|
140
|
+
[CO_VALUE_PRIORITY.MEDIUM]: 1,
|
|
141
|
+
[CO_VALUE_PRIORITY.LOW]: 2,
|
|
142
|
+
} as const;
|
|
143
|
+
|
|
89
144
|
export class PriorityBasedMessageQueue {
|
|
90
|
-
private queues: QueueTuple
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
});
|
|
145
|
+
private queues: QueueTuple;
|
|
146
|
+
|
|
147
|
+
constructor(
|
|
148
|
+
private defaultPriority: CoValuePriority,
|
|
149
|
+
/**
|
|
150
|
+
* Optional attributes to be added to the generated metrics.
|
|
151
|
+
* By default the metrics will have the priority as an attribute.
|
|
152
|
+
*/
|
|
153
|
+
attrs?: Record<string, string | number>,
|
|
154
|
+
) {
|
|
155
|
+
this.queues = [
|
|
156
|
+
meteredList({ priority: CO_VALUE_PRIORITY.HIGH, ...attrs }),
|
|
157
|
+
meteredList({ priority: CO_VALUE_PRIORITY.MEDIUM, ...attrs }),
|
|
158
|
+
meteredList({ priority: CO_VALUE_PRIORITY.LOW, ...attrs }),
|
|
159
|
+
];
|
|
160
|
+
}
|
|
107
161
|
|
|
108
162
|
private getQueue(priority: CoValuePriority) {
|
|
109
|
-
return this.queues[priority];
|
|
163
|
+
return this.queues[PRIORITY_TO_QUEUE_INDEX[priority]];
|
|
110
164
|
}
|
|
111
165
|
|
|
112
|
-
constructor(private defaultPriority: CoValuePriority) {}
|
|
113
|
-
|
|
114
166
|
public push(msg: SyncMessage) {
|
|
115
167
|
const { promise, resolve, reject } = promiseWithResolvers<void>();
|
|
116
168
|
const entry: QueueEntry = { msg, promise, resolve, reject };
|
|
@@ -119,24 +171,12 @@ export class PriorityBasedMessageQueue {
|
|
|
119
171
|
|
|
120
172
|
this.getQueue(priority).push(entry);
|
|
121
173
|
|
|
122
|
-
this.queueSizeCounter.add(1, {
|
|
123
|
-
priority,
|
|
124
|
-
});
|
|
125
|
-
|
|
126
174
|
return promise;
|
|
127
175
|
}
|
|
128
176
|
|
|
129
177
|
public pull() {
|
|
130
178
|
const priority = this.queues.findIndex((queue) => queue.length > 0);
|
|
131
179
|
|
|
132
|
-
if (priority === -1) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
this.queueSizeCounter.add(-1, {
|
|
137
|
-
priority,
|
|
138
|
-
});
|
|
139
|
-
|
|
140
180
|
return this.queues[priority]?.shift();
|
|
141
181
|
}
|
|
142
182
|
}
|
package/src/crypto/crypto.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { randomBytes } from "@noble/ciphers/webcrypto/utils";
|
|
2
1
|
import { base58 } from "@scure/base";
|
|
3
2
|
import { RawAccountID } from "../coValues/account.js";
|
|
4
3
|
import { AgentID, RawCoID, TransactionID } from "../ids.js";
|
|
@@ -7,6 +6,10 @@ import { Stringified, parseJSON, stableStringify } from "../jsonStringify.js";
|
|
|
7
6
|
import { JsonValue } from "../jsonValue.js";
|
|
8
7
|
import { logger } from "../logger.js";
|
|
9
8
|
|
|
9
|
+
function randomBytes(bytesLength = 32): Uint8Array {
|
|
10
|
+
return crypto.getRandomValues(new Uint8Array(bytesLength));
|
|
11
|
+
}
|
|
12
|
+
|
|
10
13
|
export type SignerSecret = `signerSecret_z${string}`;
|
|
11
14
|
export type SignerID = `signer_z${string}`;
|
|
12
15
|
export type Signature = `signature_z${string}`;
|
package/src/priority.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { type CoValueHeader } from "./coValueCore.js";
|
|
|
7
7
|
* The priority value is handled as weight in the weighed round robin algorithm
|
|
8
8
|
* used to determine the order in which messages are sent.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Loosely follows the HTTP urgency range and order, but limited to 3 values:
|
|
11
11
|
* - https://www.rfc-editor.org/rfc/rfc9218.html#name-urgency
|
|
12
12
|
*/
|
|
13
13
|
export const CO_VALUE_PRIORITY = {
|
|
@@ -16,7 +16,7 @@ export const CO_VALUE_PRIORITY = {
|
|
|
16
16
|
LOW: 6,
|
|
17
17
|
} as const;
|
|
18
18
|
|
|
19
|
-
export type CoValuePriority = 0 |
|
|
19
|
+
export type CoValuePriority = 0 | 3 | 6;
|
|
20
20
|
|
|
21
21
|
export function getPriorityFromHeader(
|
|
22
22
|
header: CoValueHeader | undefined | boolean,
|
|
@@ -7,9 +7,9 @@ import {
|
|
|
7
7
|
tearDownTestMetricReader,
|
|
8
8
|
} from "./testUtils.js";
|
|
9
9
|
|
|
10
|
-
function setup() {
|
|
10
|
+
function setup(attrs?: Record<string, string | number>) {
|
|
11
11
|
const metricReader = createTestMetricReader();
|
|
12
|
-
const queue = new PriorityBasedMessageQueue(CO_VALUE_PRIORITY.MEDIUM);
|
|
12
|
+
const queue = new PriorityBasedMessageQueue(CO_VALUE_PRIORITY.MEDIUM, attrs);
|
|
13
13
|
return { queue, metricReader };
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -18,10 +18,133 @@ describe("PriorityBasedMessageQueue", () => {
|
|
|
18
18
|
tearDownTestMetricReader();
|
|
19
19
|
});
|
|
20
20
|
|
|
21
|
+
describe("meteredQueue", () => {
|
|
22
|
+
test("should corretly count pushes", async () => {
|
|
23
|
+
const { queue, metricReader } = setup();
|
|
24
|
+
const message: SyncMessage = {
|
|
25
|
+
action: "load",
|
|
26
|
+
id: "co_ztest-id",
|
|
27
|
+
header: false,
|
|
28
|
+
sessions: {},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
expect(
|
|
32
|
+
await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
33
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
34
|
+
}),
|
|
35
|
+
).toBe(0);
|
|
36
|
+
|
|
37
|
+
void queue.push(message);
|
|
38
|
+
expect(
|
|
39
|
+
await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
40
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
41
|
+
}),
|
|
42
|
+
).toBe(1);
|
|
43
|
+
|
|
44
|
+
void queue.push(message);
|
|
45
|
+
expect(
|
|
46
|
+
await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
47
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
48
|
+
}),
|
|
49
|
+
).toBe(2);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("should corretly count pulls", async () => {
|
|
53
|
+
const { queue, metricReader } = setup();
|
|
54
|
+
const message: SyncMessage = {
|
|
55
|
+
action: "load",
|
|
56
|
+
id: "co_ztest-id",
|
|
57
|
+
header: false,
|
|
58
|
+
sessions: {},
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
expect(
|
|
62
|
+
await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
63
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
64
|
+
}),
|
|
65
|
+
).toBe(0);
|
|
66
|
+
|
|
67
|
+
void queue.push(message);
|
|
68
|
+
expect(
|
|
69
|
+
await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
70
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
71
|
+
}),
|
|
72
|
+
).toBe(0);
|
|
73
|
+
|
|
74
|
+
void queue.pull();
|
|
75
|
+
|
|
76
|
+
expect(
|
|
77
|
+
await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
78
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
79
|
+
}),
|
|
80
|
+
).toBe(1);
|
|
81
|
+
|
|
82
|
+
// We only have one item in the queue, so this should not change the metric value
|
|
83
|
+
void queue.pull();
|
|
84
|
+
expect(
|
|
85
|
+
await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
86
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
87
|
+
}),
|
|
88
|
+
).toBe(1);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test("should corretly set custom attributes to the metrics", async () => {
|
|
92
|
+
const { queue, metricReader } = setup({ role: "server" });
|
|
93
|
+
const message: SyncMessage = {
|
|
94
|
+
action: "load",
|
|
95
|
+
id: "co_ztest-id",
|
|
96
|
+
header: false,
|
|
97
|
+
sessions: {},
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
expect(
|
|
101
|
+
await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
102
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
103
|
+
role: "server",
|
|
104
|
+
}),
|
|
105
|
+
).toBe(0);
|
|
106
|
+
expect(
|
|
107
|
+
await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
108
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
109
|
+
role: "client",
|
|
110
|
+
}),
|
|
111
|
+
).toBeUndefined();
|
|
112
|
+
|
|
113
|
+
void queue.push(message);
|
|
114
|
+
expect(
|
|
115
|
+
await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
116
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
117
|
+
role: "server",
|
|
118
|
+
}),
|
|
119
|
+
).toBe(1);
|
|
120
|
+
expect(
|
|
121
|
+
await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
122
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
123
|
+
role: "server",
|
|
124
|
+
}),
|
|
125
|
+
).toBe(0);
|
|
126
|
+
|
|
127
|
+
void queue.pull();
|
|
128
|
+
|
|
129
|
+
expect(
|
|
130
|
+
await metricReader.getMetricValue("jazz.messagequeue.pushed", {
|
|
131
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
132
|
+
role: "server",
|
|
133
|
+
}),
|
|
134
|
+
).toBe(1);
|
|
135
|
+
expect(
|
|
136
|
+
await metricReader.getMetricValue("jazz.messagequeue.pulled", {
|
|
137
|
+
priority: CO_VALUE_PRIORITY.MEDIUM,
|
|
138
|
+
role: "server",
|
|
139
|
+
}),
|
|
140
|
+
).toBe(1);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
|
|
21
144
|
test("should initialize with correct properties", () => {
|
|
22
145
|
const { queue } = setup();
|
|
23
146
|
expect(queue["defaultPriority"]).toBe(CO_VALUE_PRIORITY.MEDIUM);
|
|
24
|
-
expect(queue["queues"].length).toBe(
|
|
147
|
+
expect(queue["queues"].length).toBe(3);
|
|
25
148
|
expect(queue["queues"].every((q) => !q.length)).toBe(true);
|
|
26
149
|
});
|
|
27
150
|
|
|
@@ -52,7 +175,7 @@ describe("PriorityBasedMessageQueue", () => {
|
|
|
52
175
|
});
|
|
53
176
|
|
|
54
177
|
test("should pull messages in priority order", async () => {
|
|
55
|
-
const { queue
|
|
178
|
+
const { queue } = setup();
|
|
56
179
|
const lowPriorityMsg: SyncMessage = {
|
|
57
180
|
action: "content",
|
|
58
181
|
id: "co_zlow",
|
|
@@ -73,42 +196,12 @@ describe("PriorityBasedMessageQueue", () => {
|
|
|
73
196
|
};
|
|
74
197
|
|
|
75
198
|
void queue.push(lowPriorityMsg);
|
|
76
|
-
expect(
|
|
77
|
-
await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
78
|
-
priority: lowPriorityMsg.priority,
|
|
79
|
-
}),
|
|
80
|
-
).toBe(1);
|
|
81
199
|
void queue.push(mediumPriorityMsg);
|
|
82
|
-
expect(
|
|
83
|
-
await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
84
|
-
priority: mediumPriorityMsg.priority,
|
|
85
|
-
}),
|
|
86
|
-
).toBe(1);
|
|
87
200
|
void queue.push(highPriorityMsg);
|
|
88
|
-
expect(
|
|
89
|
-
await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
90
|
-
priority: highPriorityMsg.priority,
|
|
91
|
-
}),
|
|
92
|
-
).toBe(1);
|
|
93
201
|
|
|
94
202
|
expect(queue.pull()?.msg).toEqual(highPriorityMsg);
|
|
95
|
-
expect(
|
|
96
|
-
await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
97
|
-
priority: highPriorityMsg.priority,
|
|
98
|
-
}),
|
|
99
|
-
).toBe(0);
|
|
100
203
|
expect(queue.pull()?.msg).toEqual(mediumPriorityMsg);
|
|
101
|
-
expect(
|
|
102
|
-
await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
103
|
-
priority: mediumPriorityMsg.priority,
|
|
104
|
-
}),
|
|
105
|
-
).toBe(0);
|
|
106
204
|
expect(queue.pull()?.msg).toEqual(lowPriorityMsg);
|
|
107
|
-
expect(
|
|
108
|
-
await metricReader.getMetricValue("jazz.messagequeue.size", {
|
|
109
|
-
priority: lowPriorityMsg.priority,
|
|
110
|
-
}),
|
|
111
|
-
).toBe(0);
|
|
112
205
|
});
|
|
113
206
|
|
|
114
207
|
test("should return undefined when pulling from empty queue", () => {
|