@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.
Files changed (104) hide show
  1. package/dist/benchmark/get-samples.js +190 -64
  2. package/dist/benchmark/get-samples.js.map +1 -1
  3. package/dist/benchmark/index.js +16 -38
  4. package/dist/benchmark/index.js.map +1 -1
  5. package/dist/benchmark/memory/child.js.map +1 -1
  6. package/dist/benchmark/partial-sync.d.ts +3 -0
  7. package/dist/benchmark/partial-sync.d.ts.map +1 -0
  8. package/dist/benchmark/partial-sync.js +121 -0
  9. package/dist/benchmark/partial-sync.js.map +1 -0
  10. package/dist/benchmark/replication-prune.js.map +1 -1
  11. package/dist/benchmark/replication.js.map +1 -1
  12. package/dist/benchmark/to-rebalance.d.ts +2 -0
  13. package/dist/benchmark/to-rebalance.d.ts.map +1 -0
  14. package/dist/benchmark/to-rebalance.js +117 -0
  15. package/dist/benchmark/to-rebalance.js.map +1 -0
  16. package/dist/benchmark/utils.d.ts +24 -0
  17. package/dist/benchmark/utils.d.ts.map +1 -0
  18. package/dist/benchmark/utils.js +47 -0
  19. package/dist/benchmark/utils.js.map +1 -0
  20. package/dist/src/debounce.d.ts +2 -2
  21. package/dist/src/debounce.d.ts.map +1 -1
  22. package/dist/src/debounce.js +17 -47
  23. package/dist/src/debounce.js.map +1 -1
  24. package/dist/src/exchange-heads.d.ts +1 -13
  25. package/dist/src/exchange-heads.d.ts.map +1 -1
  26. package/dist/src/exchange-heads.js +0 -32
  27. package/dist/src/exchange-heads.js.map +1 -1
  28. package/dist/src/index.d.ts +119 -60
  29. package/dist/src/index.d.ts.map +1 -1
  30. package/dist/src/index.js +1116 -762
  31. package/dist/src/index.js.map +1 -1
  32. package/dist/src/integers.d.ts +22 -0
  33. package/dist/src/integers.d.ts.map +1 -0
  34. package/dist/src/integers.js +76 -0
  35. package/dist/src/integers.js.map +1 -0
  36. package/dist/src/pid.d.ts.map +1 -1
  37. package/dist/src/pid.js +22 -22
  38. package/dist/src/pid.js.map +1 -1
  39. package/dist/src/ranges.d.ts +168 -38
  40. package/dist/src/ranges.d.ts.map +1 -1
  41. package/dist/src/ranges.js +869 -272
  42. package/dist/src/ranges.js.map +1 -1
  43. package/dist/src/replication-domain-hash.d.ts +2 -3
  44. package/dist/src/replication-domain-hash.d.ts.map +1 -1
  45. package/dist/src/replication-domain-hash.js +40 -15
  46. package/dist/src/replication-domain-hash.js.map +1 -1
  47. package/dist/src/replication-domain-time.d.ts +5 -5
  48. package/dist/src/replication-domain-time.d.ts.map +1 -1
  49. package/dist/src/replication-domain-time.js +2 -0
  50. package/dist/src/replication-domain-time.js.map +1 -1
  51. package/dist/src/replication-domain.d.ts +17 -19
  52. package/dist/src/replication-domain.d.ts.map +1 -1
  53. package/dist/src/replication-domain.js +2 -6
  54. package/dist/src/replication-domain.js.map +1 -1
  55. package/dist/src/replication.d.ts +6 -6
  56. package/dist/src/replication.d.ts.map +1 -1
  57. package/dist/src/replication.js +4 -4
  58. package/dist/src/replication.js.map +1 -1
  59. package/dist/src/role.d.ts +3 -6
  60. package/dist/src/role.d.ts.map +1 -1
  61. package/dist/src/role.js +4 -5
  62. package/dist/src/role.js.map +1 -1
  63. package/dist/src/sync/index.d.ts +40 -0
  64. package/dist/src/sync/index.d.ts.map +1 -0
  65. package/dist/src/sync/index.js +2 -0
  66. package/dist/src/sync/index.js.map +1 -0
  67. package/dist/src/sync/rateless-iblt.d.ts +124 -0
  68. package/dist/src/sync/rateless-iblt.d.ts.map +1 -0
  69. package/dist/src/sync/rateless-iblt.js +495 -0
  70. package/dist/src/sync/rateless-iblt.js.map +1 -0
  71. package/dist/src/sync/simple.d.ts +69 -0
  72. package/dist/src/sync/simple.d.ts.map +1 -0
  73. package/dist/src/sync/simple.js +338 -0
  74. package/dist/src/sync/simple.js.map +1 -0
  75. package/dist/src/sync/wasm-init.browser.d.ts +1 -0
  76. package/dist/src/sync/wasm-init.browser.d.ts.map +1 -0
  77. package/dist/src/sync/wasm-init.browser.js +3 -0
  78. package/dist/src/sync/wasm-init.browser.js.map +1 -0
  79. package/dist/src/sync/wasm-init.d.ts +2 -0
  80. package/dist/src/sync/wasm-init.d.ts.map +1 -0
  81. package/dist/src/sync/wasm-init.js +13 -0
  82. package/dist/src/sync/wasm-init.js.map +1 -0
  83. package/dist/src/utils.d.ts +3 -3
  84. package/dist/src/utils.d.ts.map +1 -1
  85. package/dist/src/utils.js +2 -2
  86. package/dist/src/utils.js.map +1 -1
  87. package/package.json +10 -6
  88. package/src/debounce.ts +16 -51
  89. package/src/exchange-heads.ts +1 -23
  90. package/src/index.ts +1532 -1038
  91. package/src/integers.ts +102 -0
  92. package/src/pid.ts +23 -22
  93. package/src/ranges.ts +1204 -413
  94. package/src/replication-domain-hash.ts +43 -18
  95. package/src/replication-domain-time.ts +9 -9
  96. package/src/replication-domain.ts +21 -31
  97. package/src/replication.ts +10 -9
  98. package/src/role.ts +4 -6
  99. package/src/sync/index.ts +51 -0
  100. package/src/sync/rateless-iblt.ts +617 -0
  101. package/src/sync/simple.ts +403 -0
  102. package/src/sync/wasm-init.browser.ts +1 -0
  103. package/src/sync/wasm-init.ts +14 -0
  104. package/src/utils.ts +10 -4
@@ -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
- const { memoryUsage, totalFactor, peerCount, cpuUsage, currentFactor } =
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
- /* console.log({
138
- id: this.id,
139
- currentFactor,
140
- newFactor,
141
- factorDiff: newFactor - currentFactor,
142
- pTerm,
143
- dTerm,
144
- iTerm,
145
- totalError,
146
- errorFromEven,
147
- errorTarget: errorBalance,
148
- errorCoverage,
149
- errorMemory,
150
- errorCPU,
151
- peerCount,
152
- totalFactor,
153
- targetScaler: balanceErrorScaler,
154
- memoryUsage,
155
- estimatedTotalSize,
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
  }