@peerbit/shared-log 9.2.13 → 10.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/benchmark/get-samples.js +190 -64
- package/dist/benchmark/get-samples.js.map +1 -1
- package/dist/benchmark/index.js +16 -38
- package/dist/benchmark/index.js.map +1 -1
- package/dist/benchmark/memory/child.js.map +1 -1
- package/dist/benchmark/partial-sync.d.ts +3 -0
- package/dist/benchmark/partial-sync.d.ts.map +1 -0
- package/dist/benchmark/partial-sync.js +121 -0
- package/dist/benchmark/partial-sync.js.map +1 -0
- package/dist/benchmark/replication-prune.js.map +1 -1
- package/dist/benchmark/replication.js.map +1 -1
- package/dist/benchmark/to-rebalance.d.ts +2 -0
- package/dist/benchmark/to-rebalance.d.ts.map +1 -0
- package/dist/benchmark/to-rebalance.js +117 -0
- package/dist/benchmark/to-rebalance.js.map +1 -0
- package/dist/benchmark/utils.d.ts +24 -0
- package/dist/benchmark/utils.d.ts.map +1 -0
- package/dist/benchmark/utils.js +47 -0
- package/dist/benchmark/utils.js.map +1 -0
- package/dist/src/debounce.d.ts +2 -2
- package/dist/src/debounce.d.ts.map +1 -1
- package/dist/src/debounce.js +17 -47
- package/dist/src/debounce.js.map +1 -1
- package/dist/src/exchange-heads.d.ts +1 -13
- package/dist/src/exchange-heads.d.ts.map +1 -1
- package/dist/src/exchange-heads.js +0 -32
- package/dist/src/exchange-heads.js.map +1 -1
- package/dist/src/index.d.ts +119 -60
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1116 -762
- package/dist/src/index.js.map +1 -1
- package/dist/src/integers.d.ts +22 -0
- package/dist/src/integers.d.ts.map +1 -0
- package/dist/src/integers.js +76 -0
- package/dist/src/integers.js.map +1 -0
- package/dist/src/pid.d.ts.map +1 -1
- package/dist/src/pid.js +22 -22
- package/dist/src/pid.js.map +1 -1
- package/dist/src/ranges.d.ts +168 -38
- package/dist/src/ranges.d.ts.map +1 -1
- package/dist/src/ranges.js +869 -272
- package/dist/src/ranges.js.map +1 -1
- package/dist/src/replication-domain-hash.d.ts +2 -3
- package/dist/src/replication-domain-hash.d.ts.map +1 -1
- package/dist/src/replication-domain-hash.js +40 -15
- package/dist/src/replication-domain-hash.js.map +1 -1
- package/dist/src/replication-domain-time.d.ts +5 -5
- package/dist/src/replication-domain-time.d.ts.map +1 -1
- package/dist/src/replication-domain-time.js +2 -0
- package/dist/src/replication-domain-time.js.map +1 -1
- package/dist/src/replication-domain.d.ts +17 -19
- package/dist/src/replication-domain.d.ts.map +1 -1
- package/dist/src/replication-domain.js +2 -6
- package/dist/src/replication-domain.js.map +1 -1
- package/dist/src/replication.d.ts +6 -6
- package/dist/src/replication.d.ts.map +1 -1
- package/dist/src/replication.js +4 -4
- package/dist/src/replication.js.map +1 -1
- package/dist/src/role.d.ts +3 -6
- package/dist/src/role.d.ts.map +1 -1
- package/dist/src/role.js +4 -5
- package/dist/src/role.js.map +1 -1
- package/dist/src/sync/index.d.ts +40 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +2 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/sync/rateless-iblt.d.ts +124 -0
- package/dist/src/sync/rateless-iblt.d.ts.map +1 -0
- package/dist/src/sync/rateless-iblt.js +495 -0
- package/dist/src/sync/rateless-iblt.js.map +1 -0
- package/dist/src/sync/simple.d.ts +69 -0
- package/dist/src/sync/simple.d.ts.map +1 -0
- package/dist/src/sync/simple.js +338 -0
- package/dist/src/sync/simple.js.map +1 -0
- package/dist/src/sync/wasm-init.browser.d.ts +1 -0
- package/dist/src/sync/wasm-init.browser.d.ts.map +1 -0
- package/dist/src/sync/wasm-init.browser.js +3 -0
- package/dist/src/sync/wasm-init.browser.js.map +1 -0
- package/dist/src/sync/wasm-init.d.ts +2 -0
- package/dist/src/sync/wasm-init.d.ts.map +1 -0
- package/dist/src/sync/wasm-init.js +13 -0
- package/dist/src/sync/wasm-init.js.map +1 -0
- package/dist/src/utils.d.ts +3 -3
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +2 -2
- package/dist/src/utils.js.map +1 -1
- package/package.json +10 -6
- package/src/debounce.ts +16 -51
- package/src/exchange-heads.ts +1 -23
- package/src/index.ts +1532 -1038
- package/src/integers.ts +102 -0
- package/src/pid.ts +23 -22
- package/src/ranges.ts +1204 -413
- package/src/replication-domain-hash.ts +43 -18
- package/src/replication-domain-time.ts +9 -9
- package/src/replication-domain.ts +21 -31
- package/src/replication.ts +10 -9
- package/src/role.ts +4 -6
- package/src/sync/index.ts +51 -0
- package/src/sync/rateless-iblt.ts +617 -0
- package/src/sync/simple.ts +403 -0
- package/src/sync/wasm-init.browser.ts +1 -0
- package/src/sync/wasm-init.ts +14 -0
- package/src/utils.ts +10 -4
package/src/integers.ts
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { BinaryReader } from "@dao-xyz/borsh";
|
|
2
|
+
|
|
3
|
+
export type u32 = number;
|
|
4
|
+
export type u64 = bigint;
|
|
5
|
+
export type NumberFromType<U extends "u32" | "u64"> = U extends "u32"
|
|
6
|
+
? number
|
|
7
|
+
: bigint;
|
|
8
|
+
export const MAX_U32 = 4294967295;
|
|
9
|
+
export const MAX_U64 = 18446744073709551615n;
|
|
10
|
+
export const HALF_MAX_U32 = 2147483647; // rounded down
|
|
11
|
+
export const HALF_MAX_U64 = 9223372036854775807n; // rounded down
|
|
12
|
+
|
|
13
|
+
export const denormalizer = <R extends "u32" | "u64">(
|
|
14
|
+
resolution: R,
|
|
15
|
+
): ((number: number) => NumberFromType<R>) => {
|
|
16
|
+
if (resolution === "u32") {
|
|
17
|
+
return ((value: number) => {
|
|
18
|
+
const result = Math.round(value * MAX_U32);
|
|
19
|
+
return result > MAX_U32 ? MAX_U32 : result;
|
|
20
|
+
}) as (number: number) => NumberFromType<R>;
|
|
21
|
+
}
|
|
22
|
+
return ((value: number) => {
|
|
23
|
+
let result = BigInt(Math.round(value * Number(MAX_U64)));
|
|
24
|
+
return result > MAX_U64 ? MAX_U64 : result;
|
|
25
|
+
}) as (number: number) => NumberFromType<R>;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const bytesToNumber = <R extends "u32" | "u64">(
|
|
29
|
+
resolution: R,
|
|
30
|
+
): ((arr: Uint8Array) => NumberFromType<R>) => {
|
|
31
|
+
if (resolution === "u32") {
|
|
32
|
+
return ((arr: Uint8Array): number => {
|
|
33
|
+
const seedNumber = new BinaryReader(arr).u32();
|
|
34
|
+
return seedNumber;
|
|
35
|
+
}) as (arr: Uint8Array) => NumberFromType<R>;
|
|
36
|
+
}
|
|
37
|
+
return ((arr: Uint8Array): bigint => {
|
|
38
|
+
const seedNumber = new BinaryReader(arr).u64();
|
|
39
|
+
return seedNumber;
|
|
40
|
+
}) as (arr: Uint8Array) => NumberFromType<R>;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export interface Numbers<T extends "u32" | "u64"> {
|
|
44
|
+
zero: NumberFromType<T>;
|
|
45
|
+
maxValue: NumberFromType<T>;
|
|
46
|
+
random: () => NumberFromType<T>;
|
|
47
|
+
getGrid: (from: NumberFromType<T>, count: number) => NumberFromType<T>[];
|
|
48
|
+
divRound: (a: NumberFromType<T>, b: number | bigint) => NumberFromType<T>;
|
|
49
|
+
abs: (a: NumberFromType<T>) => NumberFromType<T>;
|
|
50
|
+
min: (a: NumberFromType<T>, b: NumberFromType<T>) => NumberFromType<T>;
|
|
51
|
+
denormalize: (value: number) => NumberFromType<T>;
|
|
52
|
+
bytesToNumber: (bytes: Uint8Array) => NumberFromType<T>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const getEvenlySpacedU32 = (from: number, count: number): number[] => {
|
|
56
|
+
let ret: number[] = new Array(count);
|
|
57
|
+
for (let i = 0; i < count; i++) {
|
|
58
|
+
ret[i] = Math.round(from + (i * MAX_U32) / count) % MAX_U32;
|
|
59
|
+
}
|
|
60
|
+
return ret;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const getEvenlySpacedU64 = (from: bigint, count: number): bigint[] => {
|
|
64
|
+
let ret: bigint[] = new Array(count);
|
|
65
|
+
for (let i = 0; i < count; i++) {
|
|
66
|
+
ret[i] = (from + (BigInt(i) * MAX_U64) / BigInt(count)) % MAX_U64;
|
|
67
|
+
}
|
|
68
|
+
return ret;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export const createNumbers = <N extends "u32" | "u64">(
|
|
72
|
+
resolution: N,
|
|
73
|
+
): Numbers<N> => {
|
|
74
|
+
const denormalizerFn = denormalizer(resolution);
|
|
75
|
+
if (resolution === "u32") {
|
|
76
|
+
return {
|
|
77
|
+
random: () => denormalizerFn(Math.random()),
|
|
78
|
+
zero: 0,
|
|
79
|
+
maxValue: MAX_U32,
|
|
80
|
+
getGrid: getEvenlySpacedU32 as any, // TODO fix this,
|
|
81
|
+
divRound: (a, b) => Math.round(a / Number(b)) as any,
|
|
82
|
+
abs: (a) => Math.abs(a as number),
|
|
83
|
+
min: (a, b) => Math.min(a as number, b as number),
|
|
84
|
+
denormalize: denormalizerFn,
|
|
85
|
+
bytesToNumber: bytesToNumber(resolution),
|
|
86
|
+
} as Numbers<N>;
|
|
87
|
+
} else if (resolution === "u64") {
|
|
88
|
+
return {
|
|
89
|
+
random: () => denormalizerFn(Math.random()),
|
|
90
|
+
zero: 0n,
|
|
91
|
+
maxValue: MAX_U64,
|
|
92
|
+
getGrid: getEvenlySpacedU64 as any, // TODO fix this
|
|
93
|
+
divRound: (a, b) => (a as bigint) / BigInt(b),
|
|
94
|
+
abs: (a) => (a < 0n ? -a : a),
|
|
95
|
+
min: (a, b) => (a < b ? a : b),
|
|
96
|
+
denormalize: denormalizerFn,
|
|
97
|
+
bytesToNumber: bytesToNumber(resolution),
|
|
98
|
+
} as Numbers<N>;
|
|
99
|
+
} else {
|
|
100
|
+
throw new Error("Unsupported resolution");
|
|
101
|
+
}
|
|
102
|
+
};
|
package/src/pid.ts
CHANGED
|
@@ -37,8 +37,9 @@ export class PIDReplicationController {
|
|
|
37
37
|
peerCount: number;
|
|
38
38
|
cpuUsage: number | undefined;
|
|
39
39
|
}) {
|
|
40
|
-
|
|
40
|
+
let { memoryUsage, totalFactor, peerCount, cpuUsage, currentFactor } =
|
|
41
41
|
properties;
|
|
42
|
+
|
|
42
43
|
this.prevTotalFactor = totalFactor;
|
|
43
44
|
this.prevMemoryUsage = memoryUsage;
|
|
44
45
|
|
|
@@ -92,7 +93,6 @@ export class PIDReplicationController {
|
|
|
92
93
|
totalError =
|
|
93
94
|
errorMemory * errorMemoryFactor + totalError * (1 - errorMemoryFactor);
|
|
94
95
|
}
|
|
95
|
-
// (this.id === "rRcHKy8yCun+32/dvRAkNMqvmXVb/N/X3Sis/wkDxKQ=") && console.log("MEMORY ERROR ? ", { errorMemory, errorMemoryFactor, memoryLimit: this.maxMemoryLimit, estimatedTotalSize, currentFactor, memoryUsage });
|
|
96
96
|
|
|
97
97
|
// Computer is getting too hot?
|
|
98
98
|
if (this.maxCPUUsage != null && (cpuUsage || 0) > this.maxCPUUsage) {
|
|
@@ -134,26 +134,27 @@ export class PIDReplicationController {
|
|
|
134
134
|
this.integral = 0;
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
/*
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
137
|
+
/* if (this.id === "3YUU2tgXPB1v7NMdPob37WDcixg4vi7qF1PkbSJFNc4=")
|
|
138
|
+
console.log({
|
|
139
|
+
id: this.id,
|
|
140
|
+
currentFactor,
|
|
141
|
+
newFactor,
|
|
142
|
+
factorDiff: newFactor - currentFactor,
|
|
143
|
+
pTerm,
|
|
144
|
+
dTerm,
|
|
145
|
+
iTerm,
|
|
146
|
+
totalError,
|
|
147
|
+
errorFromEven,
|
|
148
|
+
errorTarget: errorBalance,
|
|
149
|
+
errorCoverage,
|
|
150
|
+
errorMemory,
|
|
151
|
+
errorCPU,
|
|
152
|
+
peerCount,
|
|
153
|
+
totalFactor,
|
|
154
|
+
targetScaler: balanceErrorScaler,
|
|
155
|
+
memoryUsage,
|
|
156
|
+
estimatedTotalSize,
|
|
157
|
+
}); */
|
|
157
158
|
|
|
158
159
|
return Math.max(Math.min(newFactor, 1), 0);
|
|
159
160
|
}
|