@optimystic/db-p2p 0.14.0 → 0.16.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/README.md +616 -609
- package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer-service.js +4 -3
- package/dist/src/cluster/block-transfer-service.js.map +1 -1
- package/dist/src/cluster/block-transfer.d.ts +52 -3
- package/dist/src/cluster/block-transfer.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer.js +129 -6
- package/dist/src/cluster/block-transfer.js.map +1 -1
- package/dist/src/cluster/client.d.ts.map +1 -1
- package/dist/src/cluster/client.js +3 -1
- package/dist/src/cluster/client.js.map +1 -1
- package/dist/src/cluster/cluster-repo.d.ts +182 -11
- package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
- package/dist/src/cluster/cluster-repo.js +429 -69
- package/dist/src/cluster/cluster-repo.js.map +1 -1
- package/dist/src/cluster/peer-key-binding.d.ts +25 -0
- package/dist/src/cluster/peer-key-binding.d.ts.map +1 -0
- package/dist/src/cluster/peer-key-binding.js +39 -0
- package/dist/src/cluster/peer-key-binding.js.map +1 -0
- package/dist/src/cluster/quorum-restore.d.ts +72 -0
- package/dist/src/cluster/quorum-restore.d.ts.map +1 -0
- package/dist/src/cluster/quorum-restore.js +0 -0
- package/dist/src/cluster/quorum-restore.js.map +1 -0
- package/dist/src/cluster/rebalance-monitor.d.ts +23 -1
- package/dist/src/cluster/rebalance-monitor.d.ts.map +1 -1
- package/dist/src/cluster/rebalance-monitor.js +17 -2
- package/dist/src/cluster/rebalance-monitor.js.map +1 -1
- package/dist/src/cluster/service.d.ts.map +1 -1
- package/dist/src/cluster/service.js +7 -1
- package/dist/src/cluster/service.js.map +1 -1
- package/dist/src/cluster/spread-on-churn.d.ts +7 -0
- package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
- package/dist/src/cluster/spread-on-churn.js +4 -1
- package/dist/src/cluster/spread-on-churn.js.map +1 -1
- package/dist/src/cluster/supermajority-coupling.d.ts +22 -0
- package/dist/src/cluster/supermajority-coupling.d.ts.map +1 -0
- package/dist/src/cluster/supermajority-coupling.js +27 -0
- package/dist/src/cluster/supermajority-coupling.js.map +1 -0
- package/dist/src/cohort-topic/cohort-gossip-driver.d.ts +46 -4
- package/dist/src/cohort-topic/cohort-gossip-driver.d.ts.map +1 -1
- package/dist/src/cohort-topic/cohort-gossip-driver.js +62 -7
- package/dist/src/cohort-topic/cohort-gossip-driver.js.map +1 -1
- package/dist/src/cohort-topic/cohort-gossip-transport.d.ts +7 -0
- package/dist/src/cohort-topic/cohort-gossip-transport.d.ts.map +1 -1
- package/dist/src/cohort-topic/cohort-gossip-transport.js +9 -0
- package/dist/src/cohort-topic/cohort-gossip-transport.js.map +1 -1
- package/dist/src/cohort-topic/host.d.ts +197 -27
- package/dist/src/cohort-topic/host.d.ts.map +1 -1
- package/dist/src/cohort-topic/host.js +643 -87
- package/dist/src/cohort-topic/host.js.map +1 -1
- package/dist/src/dispute/arbitrator-selection.d.ts +68 -7
- package/dist/src/dispute/arbitrator-selection.d.ts.map +1 -1
- package/dist/src/dispute/arbitrator-selection.js +105 -16
- package/dist/src/dispute/arbitrator-selection.js.map +1 -1
- package/dist/src/dispute/cascade.d.ts +7 -0
- package/dist/src/dispute/cascade.d.ts.map +1 -1
- package/dist/src/dispute/cascade.js +1 -1
- package/dist/src/dispute/cascade.js.map +1 -1
- package/dist/src/dispute/client.d.ts.map +1 -1
- package/dist/src/dispute/client.js +3 -2
- package/dist/src/dispute/client.js.map +1 -1
- package/dist/src/dispute/dispute-service.d.ts +32 -3
- package/dist/src/dispute/dispute-service.d.ts.map +1 -1
- package/dist/src/dispute/dispute-service.js +82 -9
- package/dist/src/dispute/dispute-service.js.map +1 -1
- package/dist/src/dispute/index.d.ts +1 -1
- package/dist/src/dispute/index.d.ts.map +1 -1
- package/dist/src/dispute/index.js +1 -1
- package/dist/src/dispute/index.js.map +1 -1
- package/dist/src/dispute/invalidation.d.ts +25 -0
- package/dist/src/dispute/invalidation.d.ts.map +1 -1
- package/dist/src/dispute/invalidation.js +14 -2
- package/dist/src/dispute/invalidation.js.map +1 -1
- package/dist/src/dispute/service.d.ts.map +1 -1
- package/dist/src/dispute/service.js +7 -1
- package/dist/src/dispute/service.js.map +1 -1
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/it-utility.d.ts +1 -1
- package/dist/src/it-utility.d.ts.map +1 -1
- package/dist/src/it-utility.js +4 -13
- package/dist/src/it-utility.js.map +1 -1
- package/dist/src/libp2p-key-network.d.ts +98 -1
- package/dist/src/libp2p-key-network.d.ts.map +1 -1
- package/dist/src/libp2p-key-network.js +272 -17
- package/dist/src/libp2p-key-network.js.map +1 -1
- package/dist/src/libp2p-node-base.d.ts +12 -0
- package/dist/src/libp2p-node-base.d.ts.map +1 -1
- package/dist/src/libp2p-node-base.js +415 -87
- package/dist/src/libp2p-node-base.js.map +1 -1
- package/dist/src/matchmaking/query-transport.d.ts +2 -0
- package/dist/src/matchmaking/query-transport.d.ts.map +1 -1
- package/dist/src/matchmaking/query-transport.js +6 -0
- package/dist/src/matchmaking/query-transport.js.map +1 -1
- package/dist/src/matchmaking/traffic-validation.js +1 -0
- package/dist/src/matchmaking/traffic-validation.js.map +1 -1
- package/dist/src/network/network-manager-service.d.ts +2 -2
- package/dist/src/network/network-manager-service.d.ts.map +1 -1
- package/dist/src/network/network-manager-service.js +8 -4
- package/dist/src/network/network-manager-service.js.map +1 -1
- package/dist/src/owned-block-seed.d.ts +27 -0
- package/dist/src/owned-block-seed.d.ts.map +1 -0
- package/dist/src/owned-block-seed.js +37 -0
- package/dist/src/owned-block-seed.js.map +1 -0
- package/dist/src/protocol-client.d.ts +1 -0
- package/dist/src/protocol-client.d.ts.map +1 -1
- package/dist/src/protocol-client.js +9 -2
- package/dist/src/protocol-client.js.map +1 -1
- package/dist/src/protocol-limits.d.ts +32 -0
- package/dist/src/protocol-limits.d.ts.map +1 -0
- package/dist/src/protocol-limits.js +32 -0
- package/dist/src/protocol-limits.js.map +1 -0
- package/dist/src/repo/client.d.ts.map +1 -1
- package/dist/src/repo/client.js +3 -0
- package/dist/src/repo/client.js.map +1 -1
- package/dist/src/repo/cluster-coordinator.d.ts +41 -4
- package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
- package/dist/src/repo/cluster-coordinator.js +128 -80
- package/dist/src/repo/cluster-coordinator.js.map +1 -1
- package/dist/src/repo/coordinator-repo.d.ts +38 -1
- package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
- package/dist/src/repo/coordinator-repo.js +92 -13
- package/dist/src/repo/coordinator-repo.js.map +1 -1
- package/dist/src/repo/service.d.ts.map +1 -1
- package/dist/src/repo/service.js +7 -1
- package/dist/src/repo/service.js.map +1 -1
- package/dist/src/reputation/peer-reputation.js +1 -1
- package/dist/src/reputation/peer-reputation.js.map +1 -1
- package/dist/src/reputation/types.d.ts +3 -1
- package/dist/src/reputation/types.d.ts.map +1 -1
- package/dist/src/reputation/types.js +3 -0
- package/dist/src/reputation/types.js.map +1 -1
- package/dist/src/rn.d.ts +5 -1
- package/dist/src/rn.d.ts.map +1 -1
- package/dist/src/rn.js +7 -1
- package/dist/src/rn.js.map +1 -1
- package/dist/src/storage/arachnode-fret-adapter.d.ts +30 -1
- package/dist/src/storage/arachnode-fret-adapter.d.ts.map +1 -1
- package/dist/src/storage/arachnode-fret-adapter.js +15 -2
- package/dist/src/storage/arachnode-fret-adapter.js.map +1 -1
- package/dist/src/storage/arachnode-partition.d.ts +49 -0
- package/dist/src/storage/arachnode-partition.d.ts.map +1 -0
- package/dist/src/storage/arachnode-partition.js +61 -0
- package/dist/src/storage/arachnode-partition.js.map +1 -0
- package/dist/src/storage/block-storage.d.ts +40 -1
- package/dist/src/storage/block-storage.d.ts.map +1 -1
- package/dist/src/storage/block-storage.js +150 -57
- package/dist/src/storage/block-storage.js.map +1 -1
- package/dist/src/storage/i-block-storage.d.ts +8 -0
- package/dist/src/storage/i-block-storage.d.ts.map +1 -1
- package/dist/src/storage/i-raw-storage.d.ts +13 -0
- package/dist/src/storage/i-raw-storage.d.ts.map +1 -1
- package/dist/src/storage/kv-raw-storage.d.ts +45 -0
- package/dist/src/storage/kv-raw-storage.d.ts.map +1 -0
- package/dist/src/storage/kv-raw-storage.js +113 -0
- package/dist/src/storage/kv-raw-storage.js.map +1 -0
- package/dist/src/storage/memory-storage.d.ts +20 -58
- package/dist/src/storage/memory-storage.d.ts.map +1 -1
- package/dist/src/storage/memory-storage.js +22 -148
- package/dist/src/storage/memory-storage.js.map +1 -1
- package/dist/src/storage/memory-store-driver.d.ts +39 -0
- package/dist/src/storage/memory-store-driver.d.ts.map +1 -0
- package/dist/src/storage/memory-store-driver.js +129 -0
- package/dist/src/storage/memory-store-driver.js.map +1 -0
- package/dist/src/storage/raw-store-codec.d.ts +10 -0
- package/dist/src/storage/raw-store-codec.d.ts.map +1 -0
- package/dist/src/storage/raw-store-codec.js +36 -0
- package/dist/src/storage/raw-store-codec.js.map +1 -0
- package/dist/src/storage/raw-store-driver.d.ts +69 -0
- package/dist/src/storage/raw-store-driver.d.ts.map +1 -0
- package/dist/src/storage/raw-store-driver.js +2 -0
- package/dist/src/storage/raw-store-driver.js.map +1 -0
- package/dist/src/storage/restoration-coordinator-v2.d.ts.map +1 -1
- package/dist/src/storage/restoration-coordinator-v2.js +1 -1
- package/dist/src/storage/restoration-coordinator-v2.js.map +1 -1
- package/dist/src/storage/restoration-coordinator.d.ts +73 -0
- package/dist/src/storage/restoration-coordinator.d.ts.map +1 -0
- package/dist/src/storage/restoration-coordinator.js +181 -0
- package/dist/src/storage/restoration-coordinator.js.map +1 -0
- package/dist/src/storage/ring-selector.d.ts +92 -5
- package/dist/src/storage/ring-selector.d.ts.map +1 -1
- package/dist/src/storage/ring-selector.js +153 -51
- package/dist/src/storage/ring-selector.js.map +1 -1
- package/dist/src/storage/ring-shift-coordinator.d.ts +128 -0
- package/dist/src/storage/ring-shift-coordinator.d.ts.map +1 -0
- package/dist/src/storage/ring-shift-coordinator.js +196 -0
- package/dist/src/storage/ring-shift-coordinator.js.map +1 -0
- package/dist/src/storage/storage-monitor.d.ts +28 -0
- package/dist/src/storage/storage-monitor.d.ts.map +1 -1
- package/dist/src/storage/storage-monitor.js +42 -2
- package/dist/src/storage/storage-monitor.js.map +1 -1
- package/dist/src/storage/storage-repo.d.ts +19 -0
- package/dist/src/storage/storage-repo.d.ts.map +1 -1
- package/dist/src/storage/storage-repo.js +172 -22
- package/dist/src/storage/storage-repo.js.map +1 -1
- package/dist/src/sync/client.d.ts.map +1 -1
- package/dist/src/sync/client.js +5 -1
- package/dist/src/sync/client.js.map +1 -1
- package/dist/src/sync/service.d.ts.map +1 -1
- package/dist/src/sync/service.js +2 -1
- package/dist/src/sync/service.js.map +1 -1
- package/dist/src/testing/cohort-topic-mesh-harness.d.ts +28 -4
- package/dist/src/testing/cohort-topic-mesh-harness.d.ts.map +1 -1
- package/dist/src/testing/cohort-topic-mesh-harness.js +51 -10
- package/dist/src/testing/cohort-topic-mesh-harness.js.map +1 -1
- package/dist/src/testing/index.d.ts +1 -0
- package/dist/src/testing/index.d.ts.map +1 -1
- package/dist/src/testing/index.js +1 -0
- package/dist/src/testing/index.js.map +1 -1
- package/dist/src/testing/mesh-harness.d.ts.map +1 -1
- package/dist/src/testing/mesh-harness.js +15 -7
- package/dist/src/testing/mesh-harness.js.map +1 -1
- package/dist/src/testing/raw-storage-conformance.d.ts +24 -0
- package/dist/src/testing/raw-storage-conformance.d.ts.map +1 -0
- package/dist/src/testing/raw-storage-conformance.js +313 -0
- package/dist/src/testing/raw-storage-conformance.js.map +1 -0
- package/package.json +4 -4
- package/src/cluster/block-transfer-service.ts +4 -3
- package/src/cluster/block-transfer.ts +424 -265
- package/src/cluster/client.ts +3 -1
- package/src/cluster/cluster-repo.ts +481 -71
- package/src/cluster/peer-key-binding.ts +37 -0
- package/src/cluster/quorum-restore.ts +0 -0
- package/src/cluster/rebalance-monitor.ts +34 -3
- package/src/cluster/service.ts +7 -1
- package/src/cluster/spread-on-churn.ts +11 -1
- package/src/cluster/supermajority-coupling.ts +37 -0
- package/src/cohort-topic/cohort-gossip-driver.ts +96 -9
- package/src/cohort-topic/cohort-gossip-transport.ts +10 -0
- package/src/cohort-topic/host.ts +831 -105
- package/src/dispute/arbitrator-selection.ts +138 -28
- package/src/dispute/cascade.ts +8 -1
- package/src/dispute/client.ts +3 -2
- package/src/dispute/dispute-service.ts +94 -9
- package/src/dispute/index.ts +7 -1
- package/src/dispute/invalidation.ts +40 -2
- package/src/dispute/service.ts +7 -1
- package/src/index.ts +46 -43
- package/src/it-utility.ts +5 -13
- package/src/libp2p-key-network.ts +281 -18
- package/src/libp2p-node-base.ts +485 -79
- package/src/matchmaking/query-transport.ts +9 -0
- package/src/network/network-manager-service.ts +8 -2
- package/src/owned-block-seed.ts +40 -0
- package/src/protocol-client.ts +10 -3
- package/src/protocol-limits.ts +33 -0
- package/src/repo/client.ts +3 -0
- package/src/repo/cluster-coordinator.ts +145 -82
- package/src/repo/coordinator-repo.ts +96 -16
- package/src/repo/service.ts +7 -1
- package/src/reputation/types.ts +3 -0
- package/src/rn.ts +7 -1
- package/src/storage/arachnode-fret-adapter.ts +33 -2
- package/src/storage/arachnode-partition.ts +74 -0
- package/src/storage/block-storage.ts +169 -61
- package/src/storage/i-block-storage.ts +9 -0
- package/src/storage/i-raw-storage.ts +14 -0
- package/src/storage/kv-raw-storage.ts +135 -0
- package/src/storage/memory-storage.ts +25 -173
- package/src/storage/memory-store-driver.ts +157 -0
- package/src/storage/raw-store-codec.ts +42 -0
- package/src/storage/raw-store-driver.ts +80 -0
- package/src/storage/{restoration-coordinator-v2.ts → restoration-coordinator.ts} +43 -37
- package/src/storage/ring-selector.ts +317 -176
- package/src/storage/ring-shift-coordinator.ts +271 -0
- package/src/storage/storage-monitor.ts +70 -3
- package/src/storage/storage-repo.ts +710 -558
- package/src/sync/client.ts +5 -1
- package/src/sync/service.ts +2 -1
- package/src/testing/cohort-topic-mesh-harness.ts +61 -11
- package/src/testing/index.ts +1 -0
- package/src/testing/mesh-harness.ts +14 -6
- package/src/testing/raw-storage-conformance.ts +397 -0
package/dist/src/rn.d.ts
CHANGED
|
@@ -7,12 +7,15 @@ export * from './repo/cluster-coordinator.js';
|
|
|
7
7
|
export * from './repo/coordinator-repo.js';
|
|
8
8
|
export * from './repo/service.js';
|
|
9
9
|
export * from './storage/block-storage.js';
|
|
10
|
+
export * from './storage/raw-store-driver.js';
|
|
11
|
+
export * from './storage/kv-raw-storage.js';
|
|
12
|
+
export * from './storage/memory-store-driver.js';
|
|
10
13
|
export * from './storage/memory-storage.js';
|
|
11
14
|
export * from './storage/i-block-storage.js';
|
|
12
15
|
export * from './storage/i-raw-storage.js';
|
|
13
16
|
export * from './storage/struct.js';
|
|
14
17
|
export * from './storage/storage-repo.js';
|
|
15
|
-
export * from './storage/restoration-coordinator
|
|
18
|
+
export * from './storage/restoration-coordinator.js';
|
|
16
19
|
export * from './storage/ring-selector.js';
|
|
17
20
|
export * from './storage/storage-monitor.js';
|
|
18
21
|
export * from './storage/arachnode-fret-adapter.js';
|
|
@@ -26,4 +29,5 @@ export * from './routing/responsibility.js';
|
|
|
26
29
|
export * from './routing/libp2p-known-peers.js';
|
|
27
30
|
export * from './network/network-manager-service.js';
|
|
28
31
|
export * from './network/get-network-manager.js';
|
|
32
|
+
export * from './cohort-topic/peer-sig.js';
|
|
29
33
|
//# sourceMappingURL=rn.d.ts.map
|
package/dist/src/rn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rn.d.ts","sourceRoot":"","sources":["../../src/rn.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,
|
|
1
|
+
{"version":3,"file":"rn.d.ts","sourceRoot":"","sources":["../../src/rn.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AAGjD,cAAc,4BAA4B,CAAC"}
|
package/dist/src/rn.js
CHANGED
|
@@ -7,12 +7,15 @@ export * from './repo/cluster-coordinator.js';
|
|
|
7
7
|
export * from './repo/coordinator-repo.js';
|
|
8
8
|
export * from './repo/service.js';
|
|
9
9
|
export * from './storage/block-storage.js';
|
|
10
|
+
export * from './storage/raw-store-driver.js';
|
|
11
|
+
export * from './storage/kv-raw-storage.js';
|
|
12
|
+
export * from './storage/memory-store-driver.js';
|
|
10
13
|
export * from './storage/memory-storage.js';
|
|
11
14
|
export * from './storage/i-block-storage.js';
|
|
12
15
|
export * from './storage/i-raw-storage.js';
|
|
13
16
|
export * from './storage/struct.js';
|
|
14
17
|
export * from './storage/storage-repo.js';
|
|
15
|
-
export * from './storage/restoration-coordinator
|
|
18
|
+
export * from './storage/restoration-coordinator.js';
|
|
16
19
|
export * from './storage/ring-selector.js';
|
|
17
20
|
export * from './storage/storage-monitor.js';
|
|
18
21
|
export * from './storage/arachnode-fret-adapter.js';
|
|
@@ -26,4 +29,7 @@ export * from './routing/responsibility.js';
|
|
|
26
29
|
export * from './routing/libp2p-known-peers.js';
|
|
27
30
|
export * from './network/network-manager-service.js';
|
|
28
31
|
export * from './network/get-network-manager.js';
|
|
32
|
+
// Browser-safe peer signing seam. The rest of ./cohort-topic pulls node-heavy host.js,
|
|
33
|
+
// so only peer-sig (@noble/curves + peer-id) is surfaced through the RN/browser entry.
|
|
34
|
+
export * from './cohort-topic/peer-sig.js';
|
|
29
35
|
//# sourceMappingURL=rn.js.map
|
package/dist/src/rn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rn.js","sourceRoot":"","sources":["../../src/rn.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,
|
|
1
|
+
{"version":3,"file":"rn.js","sourceRoot":"","sources":["../../src/rn.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,uFAAuF;AACvF,uFAAuF;AACvF,cAAc,4BAA4B,CAAC"}
|
|
@@ -19,6 +19,23 @@ export interface ArachnodeInfo {
|
|
|
19
19
|
};
|
|
20
20
|
/** Ring membership status */
|
|
21
21
|
status: 'joining' | 'active' | 'moving' | 'leaving';
|
|
22
|
+
/**
|
|
23
|
+
* The ring/partition this node is moving *from*, present only while `status === 'moving'`.
|
|
24
|
+
*
|
|
25
|
+
* During a ring shift the node advertises its **target** `ringDepth`/`partition` (Phase A) but
|
|
26
|
+
* keeps serving its old range until it has confirmed the shed range is replicated elsewhere
|
|
27
|
+
* (Phase B) and releases it (Phase C). `moveFrom` records that old range so peers can treat a
|
|
28
|
+
* `moving` node as *still responsible for its old range* (fail-toward-old-holder), and so a
|
|
29
|
+
* crash between advertise and release is recoverable. Cleared on release/rollback (→ `active`).
|
|
30
|
+
* See `docs/arachnode-ring-handoff.md` § Part 2 & Part 3.
|
|
31
|
+
*/
|
|
32
|
+
moveFrom?: {
|
|
33
|
+
ringDepth: number;
|
|
34
|
+
partition?: {
|
|
35
|
+
prefixBits: number;
|
|
36
|
+
prefixValue: number;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
22
39
|
}
|
|
23
40
|
/**
|
|
24
41
|
* Adapter that provides Arachnode-specific methods on top of FRET's generic metadata.
|
|
@@ -27,8 +44,20 @@ export interface ArachnodeInfo {
|
|
|
27
44
|
*/
|
|
28
45
|
export declare class ArachnodeFretAdapter {
|
|
29
46
|
private readonly fret;
|
|
47
|
+
/**
|
|
48
|
+
* This node's own peer id string. When provided, {@link getMyArachnodeInfo} uses it
|
|
49
|
+
* directly instead of reaching into the concrete FretService impl's private `.node` —
|
|
50
|
+
* {@link FretService} (the public interface) exposes no self-peer accessor.
|
|
51
|
+
*/
|
|
52
|
+
private readonly selfPeerId?;
|
|
30
53
|
private static readonly ARACHNODE_KEY;
|
|
31
|
-
constructor(fret: FretService
|
|
54
|
+
constructor(fret: FretService,
|
|
55
|
+
/**
|
|
56
|
+
* This node's own peer id string. When provided, {@link getMyArachnodeInfo} uses it
|
|
57
|
+
* directly instead of reaching into the concrete FretService impl's private `.node` —
|
|
58
|
+
* {@link FretService} (the public interface) exposes no self-peer accessor.
|
|
59
|
+
*/
|
|
60
|
+
selfPeerId?: string | undefined);
|
|
32
61
|
/**
|
|
33
62
|
* Set this node's Arachnode ring membership.
|
|
34
63
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arachnode-fret-adapter.d.ts","sourceRoot":"","sources":["../../../src/storage/arachnode-fret-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAElB,8DAA8D;IAC9D,SAAS,CAAC,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,gCAAgC;IAChC,QAAQ,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,6BAA6B;IAC7B,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"arachnode-fret-adapter.d.ts","sourceRoot":"","sources":["../../../src/storage/arachnode-fret-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAElB,8DAA8D;IAC9D,SAAS,CAAC,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,gCAAgC;IAChC,QAAQ,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,6BAA6B;IAC7B,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAEpD;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE;YACX,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;SACpB,CAAC;KACF,CAAC;CACF;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAI/B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAT7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAGlC,IAAI,EAAE,WAAW;IAClC;;;;OAIG;IACc,UAAU,CAAC,EAAE,MAAM,YAAA;IAGrC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAM3C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAK3D;;OAEG;IACH,kBAAkB,IAAI,aAAa,GAAG,SAAS;IAW/C;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAU5C;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAczB;;OAEG;IACH,YAAY,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAwBpF;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI;IAOhD;;OAEG;IACH,OAAO,IAAI,WAAW;CAGtB"}
|
|
@@ -5,9 +5,17 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export class ArachnodeFretAdapter {
|
|
7
7
|
fret;
|
|
8
|
+
selfPeerId;
|
|
8
9
|
static ARACHNODE_KEY = 'arachnode';
|
|
9
|
-
constructor(fret
|
|
10
|
+
constructor(fret,
|
|
11
|
+
/**
|
|
12
|
+
* This node's own peer id string. When provided, {@link getMyArachnodeInfo} uses it
|
|
13
|
+
* directly instead of reaching into the concrete FretService impl's private `.node` —
|
|
14
|
+
* {@link FretService} (the public interface) exposes no self-peer accessor.
|
|
15
|
+
*/
|
|
16
|
+
selfPeerId) {
|
|
10
17
|
this.fret = fret;
|
|
18
|
+
this.selfPeerId = selfPeerId;
|
|
11
19
|
}
|
|
12
20
|
/**
|
|
13
21
|
* Set this node's Arachnode ring membership.
|
|
@@ -28,7 +36,12 @@ export class ArachnodeFretAdapter {
|
|
|
28
36
|
* Get my own Arachnode info.
|
|
29
37
|
*/
|
|
30
38
|
getMyArachnodeInfo() {
|
|
31
|
-
|
|
39
|
+
// Prefer the injected self peer id. Fall back to the concrete Libp2pFretService's private
|
|
40
|
+
// `.node.peerId` only when no id was injected — this cast is load-bearing (it depends on the
|
|
41
|
+
// concrete impl's shape, not the public FretService interface) and silently yields undefined
|
|
42
|
+
// for any impl lacking `.node`, so injection is the intended path.
|
|
43
|
+
const myPeerId = this.selfPeerId
|
|
44
|
+
?? this.fret.node?.peerId?.toString();
|
|
32
45
|
if (!myPeerId)
|
|
33
46
|
return undefined;
|
|
34
47
|
return this.getArachnodeInfo(myPeerId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arachnode-fret-adapter.js","sourceRoot":"","sources":["../../../src/storage/arachnode-fret-adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"arachnode-fret-adapter.js","sourceRoot":"","sources":["../../../src/storage/arachnode-fret-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ArachnodeInfo } from './arachnode-fret-adapter.js';
|
|
2
|
+
/**
|
|
3
|
+
* An Arachnode ring partition: the first `prefixBits` bits of a hashed coordinate must equal
|
|
4
|
+
* `prefixValue` for a key to fall inside it. Structurally identical to `ArachnodeInfo.partition`.
|
|
5
|
+
*/
|
|
6
|
+
export interface RingPartition {
|
|
7
|
+
prefixBits: number;
|
|
8
|
+
prefixValue: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Extract the first `bits` bits of a hashed coordinate as an integer (MSB-first).
|
|
12
|
+
*
|
|
13
|
+
* The single source of truth for the block/peer prefix comparison Arachnode uses to decide
|
|
14
|
+
* responsibility. `RingSelector.calculatePartition` (peer side) and `RestorationCoordinator`
|
|
15
|
+
* (block side) both route through this, so a peer's advertised partition and a block's derived
|
|
16
|
+
* prefix are computed the same way — otherwise "this peer owns this block's slice" would silently
|
|
17
|
+
* stop meaning what it says.
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractPrefix(coord: Uint8Array, bits: number): number;
|
|
20
|
+
/**
|
|
21
|
+
* Does `partition` cover the key at `coord`? Ring 0 (an undefined partition) covers the whole
|
|
22
|
+
* keyspace, so it always returns true.
|
|
23
|
+
*/
|
|
24
|
+
export declare function partitionCovers(partition: RingPartition | undefined, coord: Uint8Array): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Is the node described by `info` a currently-serving responsible holder for the key at `coord`?
|
|
27
|
+
*
|
|
28
|
+
* **Fail-toward-old-holder.** A node mid-move (`status === 'moving'`) advertises its *target*
|
|
29
|
+
* `partition`, but it keeps serving its *old* range (`moveFrom`) until it releases. So a moving
|
|
30
|
+
* node covers the key if EITHER its old range or its target range covers it — it is still counted
|
|
31
|
+
* as a serving holder for everything it served before the move until it transitions to `active` at
|
|
32
|
+
* the new ring. This is what keeps a shed key covered through Phases A–B and across a mid-handoff
|
|
33
|
+
* crash. See `docs/arachnode-ring-handoff.md` § Part 3.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isServingHolder(info: ArachnodeInfo, coord: Uint8Array): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Does the node described by `info` qualify toward *another* mover's Phase-B replication floor for
|
|
38
|
+
* the key at `coord`?
|
|
39
|
+
*
|
|
40
|
+
* A qualifying holder must still cover the key **after its own advertised move** — i.e. its
|
|
41
|
+
* *target* `partition` (the one it currently advertises) must cover it. A concurrent mover that is
|
|
42
|
+
* shedding the same sub-range advertises a target that does NOT cover the key, so it is excluded:
|
|
43
|
+
* two adjacent movers can never both count the other, so at most one reaches "confirmed" on the
|
|
44
|
+
* shared overlap and the other rolls back. For a non-moving (`active`) node, the advertised
|
|
45
|
+
* partition IS its serving range, so this reduces to plain partition coverage. See
|
|
46
|
+
* `docs/arachnode-ring-handoff.md` § Part 3 (concurrent moves).
|
|
47
|
+
*/
|
|
48
|
+
export declare function qualifiesForFloor(info: ArachnodeInfo, coord: Uint8Array): boolean;
|
|
49
|
+
//# sourceMappingURL=arachnode-partition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arachnode-partition.d.ts","sourceRoot":"","sources":["../../../src/storage/arachnode-partition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASrE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAKhG;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAK/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAEjF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract the first `bits` bits of a hashed coordinate as an integer (MSB-first).
|
|
3
|
+
*
|
|
4
|
+
* The single source of truth for the block/peer prefix comparison Arachnode uses to decide
|
|
5
|
+
* responsibility. `RingSelector.calculatePartition` (peer side) and `RestorationCoordinator`
|
|
6
|
+
* (block side) both route through this, so a peer's advertised partition and a block's derived
|
|
7
|
+
* prefix are computed the same way — otherwise "this peer owns this block's slice" would silently
|
|
8
|
+
* stop meaning what it says.
|
|
9
|
+
*/
|
|
10
|
+
export function extractPrefix(coord, bits) {
|
|
11
|
+
let value = 0;
|
|
12
|
+
for (let i = 0; i < bits; i++) {
|
|
13
|
+
const byteIndex = Math.floor(i / 8);
|
|
14
|
+
const bitIndex = 7 - (i % 8);
|
|
15
|
+
const bit = (coord[byteIndex] >> bitIndex) & 1;
|
|
16
|
+
value = (value << 1) | bit;
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Does `partition` cover the key at `coord`? Ring 0 (an undefined partition) covers the whole
|
|
22
|
+
* keyspace, so it always returns true.
|
|
23
|
+
*/
|
|
24
|
+
export function partitionCovers(partition, coord) {
|
|
25
|
+
if (!partition) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return extractPrefix(coord, partition.prefixBits) === partition.prefixValue;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Is the node described by `info` a currently-serving responsible holder for the key at `coord`?
|
|
32
|
+
*
|
|
33
|
+
* **Fail-toward-old-holder.** A node mid-move (`status === 'moving'`) advertises its *target*
|
|
34
|
+
* `partition`, but it keeps serving its *old* range (`moveFrom`) until it releases. So a moving
|
|
35
|
+
* node covers the key if EITHER its old range or its target range covers it — it is still counted
|
|
36
|
+
* as a serving holder for everything it served before the move until it transitions to `active` at
|
|
37
|
+
* the new ring. This is what keeps a shed key covered through Phases A–B and across a mid-handoff
|
|
38
|
+
* crash. See `docs/arachnode-ring-handoff.md` § Part 3.
|
|
39
|
+
*/
|
|
40
|
+
export function isServingHolder(info, coord) {
|
|
41
|
+
if (info.status === 'moving' && info.moveFrom) {
|
|
42
|
+
return partitionCovers(info.moveFrom.partition, coord) || partitionCovers(info.partition, coord);
|
|
43
|
+
}
|
|
44
|
+
return partitionCovers(info.partition, coord);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Does the node described by `info` qualify toward *another* mover's Phase-B replication floor for
|
|
48
|
+
* the key at `coord`?
|
|
49
|
+
*
|
|
50
|
+
* A qualifying holder must still cover the key **after its own advertised move** — i.e. its
|
|
51
|
+
* *target* `partition` (the one it currently advertises) must cover it. A concurrent mover that is
|
|
52
|
+
* shedding the same sub-range advertises a target that does NOT cover the key, so it is excluded:
|
|
53
|
+
* two adjacent movers can never both count the other, so at most one reaches "confirmed" on the
|
|
54
|
+
* shared overlap and the other rolls back. For a non-moving (`active`) node, the advertised
|
|
55
|
+
* partition IS its serving range, so this reduces to plain partition coverage. See
|
|
56
|
+
* `docs/arachnode-ring-handoff.md` § Part 3 (concurrent moves).
|
|
57
|
+
*/
|
|
58
|
+
export function qualifiesForFloor(info, coord) {
|
|
59
|
+
return partitionCovers(info.partition, coord);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=arachnode-partition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arachnode-partition.js","sourceRoot":"","sources":["../../../src/storage/arachnode-partition.ts"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiB,EAAE,IAAY;IAC5D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChD,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAoC,EAAE,KAAiB;IACtF,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,WAAW,CAAC;AAC7E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,IAAmB,EAAE,KAAiB;IACrE,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAmB,EAAE,KAAiB;IACvE,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -6,7 +6,19 @@ export declare class BlockStorage implements IBlockStorage {
|
|
|
6
6
|
private readonly blockId;
|
|
7
7
|
private readonly storage;
|
|
8
8
|
private readonly restoreCallback?;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Revisions where `rev % checkpointInterval === 0` retain a full materialization even after they
|
|
11
|
+
* stop being the tip. Optional (default {@link CHECKPOINT_INTERVAL}); tests inject a small value
|
|
12
|
+
* to exercise sweeping without committing 32+ revisions.
|
|
13
|
+
*/
|
|
14
|
+
private readonly checkpointInterval;
|
|
15
|
+
constructor(blockId: BlockId, storage: IRawStorage, restoreCallback?: RestoreCallback | undefined,
|
|
16
|
+
/**
|
|
17
|
+
* Revisions where `rev % checkpointInterval === 0` retain a full materialization even after they
|
|
18
|
+
* stop being the tip. Optional (default {@link CHECKPOINT_INTERVAL}); tests inject a small value
|
|
19
|
+
* to exercise sweeping without committing 32+ revisions.
|
|
20
|
+
*/
|
|
21
|
+
checkpointInterval?: number);
|
|
10
22
|
getLatest(): Promise<ActionRev | undefined>;
|
|
11
23
|
getBlock(rev?: number): Promise<{
|
|
12
24
|
block: IBlock;
|
|
@@ -19,6 +31,7 @@ export declare class BlockStorage implements IBlockStorage {
|
|
|
19
31
|
deletePendingTransaction(actionId: ActionId): Promise<void>;
|
|
20
32
|
listRevisions(startRev: number, endRev: number): AsyncIterable<ActionRev>;
|
|
21
33
|
saveMaterializedBlock(actionId: ActionId, block: IBlock | undefined): Promise<void>;
|
|
34
|
+
pruneSupersededMaterialization(prior: ActionRev): Promise<void>;
|
|
22
35
|
saveRevision(rev: number, actionId: ActionId): Promise<void>;
|
|
23
36
|
promotePendingTransaction(actionId: ActionId): Promise<void>;
|
|
24
37
|
setLatest(latest: ActionRev): Promise<void>;
|
|
@@ -28,10 +41,36 @@ export declare class BlockStorage implements IBlockStorage {
|
|
|
28
41
|
}>;
|
|
29
42
|
saveReplica(block: IBlock, source?: ActionRev): Promise<ActionRev>;
|
|
30
43
|
saveDeletion(source: ActionRev): Promise<ActionRev>;
|
|
44
|
+
/**
|
|
45
|
+
* Shared forward-write path for saveReplica and saveDeletion. Both append a single new revision
|
|
46
|
+
* that ADVANCES `latest` (never rewrites history): acquire the block's metadata latch, apply the
|
|
47
|
+
* monotonic guard, saveRestored a one-revision archive, then seed/advance/merge metadata.
|
|
48
|
+
*
|
|
49
|
+
* The only per-caller difference is the revision `body`: a replica carries `{ insert: block }`
|
|
50
|
+
* plus the materialized `block`; a deletion carries `{ delete: true }` and no block. `rev` and
|
|
51
|
+
* `actionId` are passed alongside `body` because the guard and the `latest` advance need them
|
|
52
|
+
* independently of the archive body.
|
|
53
|
+
*/
|
|
54
|
+
private saveForwardRevision;
|
|
31
55
|
private ensureRevision;
|
|
32
56
|
private materializeBlock;
|
|
33
57
|
private restoreBlock;
|
|
34
58
|
private saveRestored;
|
|
35
59
|
private inRanges;
|
|
60
|
+
/**
|
|
61
|
+
* Checkpoint retention predicate. A materialization at `rev` must be kept iff it is the tip
|
|
62
|
+
* (`latestRev` — the common read target and the replay base for the next commit), the floor of its
|
|
63
|
+
* contiguous range (`rangeFloor` — the descending walk in {@link materializeBlock} has nothing below
|
|
64
|
+
* the floor to fall back to), or a periodic checkpoint (`rev % checkpointInterval === 0`, which bounds
|
|
65
|
+
* replay depth). Otherwise the materialization is prunable — its forward transform is retained, so the
|
|
66
|
+
* rev stays reconstructible by replay from the nearest retained materialization below it. The floor
|
|
67
|
+
* clause is SEPARATE and mandatory: absolute `rev % K` checkpoints do not automatically land on the
|
|
68
|
+
* floor (e.g. floor `E = 1`, `K = 32`).
|
|
69
|
+
*/
|
|
70
|
+
private isRetainedRev;
|
|
71
|
+
/** Start of the contiguous `ranges` span containing `rev`. Falls back to `rev` itself when no span
|
|
72
|
+
* contains it — unreachable for a committed rev (setLatest always merges the containing span before a
|
|
73
|
+
* prune/read runs), and the conservative direction (treats `rev` as its own floor ⇒ retained). */
|
|
74
|
+
private rangeFloorOf;
|
|
36
75
|
}
|
|
37
76
|
//# sourceMappingURL=block-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-storage.d.ts","sourceRoot":"","sources":["../../../src/storage/block-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"block-storage.d.ts","sourceRoot":"","sources":["../../../src/storage/block-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAmB,MAAM,qBAAqB,CAAC;AAE5G,OAAO,KAAK,EAA+B,eAAe,EAAiB,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAY1D,qBAAa,YAAa,YAAW,aAAa;IAEhD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBARlB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,EACpB,eAAe,CAAC,EAAE,eAAe,YAAA;IAClD;;;;OAIG;IACc,kBAAkB,GAAE,MAA4B;IAG5D,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAK3C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IAkBpF,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAIlE,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAIxE,uBAAuB,IAAI,aAAa,CAAC,QAAQ,CAAC;IAInD,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/E,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC;IAI1E,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAInF,8BAA8B,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/D,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B3C,OAAO,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAuC/D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAkBlE,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAczD;;;;;;;;;OASG;YACW,mBAAmB;YAwDnB,cAAc;YA+Bd,gBAAgB;YAiEhB,YAAY;YAKZ,YAAY;IAc1B,OAAO,CAAC,QAAQ;IAMhB;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAMrB;;sGAEkG;IAClG,OAAO,CAAC,YAAY;CASpB"}
|