@optimystic/db-core 1.0.0-beta.2 → 1.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/src/cluster/structs.d.ts +62 -16
- package/dist/src/cluster/structs.d.ts.map +1 -1
- package/dist/src/cluster/structs.js +5 -3
- package/dist/src/cluster/structs.js.map +1 -1
- package/dist/src/cohort-topic/antidos/bootstrap-evidence-envelope.d.ts +2 -1
- package/dist/src/cohort-topic/antidos/bootstrap-evidence-envelope.d.ts.map +1 -1
- package/dist/src/cohort-topic/antidos/bootstrap-evidence-envelope.js +10 -3
- package/dist/src/cohort-topic/antidos/bootstrap-evidence-envelope.js.map +1 -1
- package/dist/src/cohort-topic/wire/codec.d.ts.map +1 -1
- package/dist/src/cohort-topic/wire/codec.js +8 -2
- package/dist/src/cohort-topic/wire/codec.js.map +1 -1
- package/dist/src/collection/collection.d.ts +467 -35
- package/dist/src/collection/collection.d.ts.map +1 -1
- package/dist/src/collection/collection.js +879 -149
- package/dist/src/collection/collection.js.map +1 -1
- package/dist/src/collection/struct.d.ts +109 -4
- package/dist/src/collection/struct.d.ts.map +1 -1
- package/dist/src/collection/struct.js +88 -1
- package/dist/src/collection/struct.js.map +1 -1
- package/dist/src/collections/diary/diary.d.ts +6 -2
- package/dist/src/collections/diary/diary.d.ts.map +1 -1
- package/dist/src/collections/diary/diary.js +5 -2
- package/dist/src/collections/diary/diary.js.map +1 -1
- package/dist/src/collections/tree/struct.d.ts +192 -5
- package/dist/src/collections/tree/struct.d.ts.map +1 -1
- package/dist/src/collections/tree/struct.js +134 -0
- package/dist/src/collections/tree/struct.js.map +1 -1
- package/dist/src/collections/tree/tree.d.ts +13 -3
- package/dist/src/collections/tree/tree.d.ts.map +1 -1
- package/dist/src/collections/tree/tree.js +109 -6
- package/dist/src/collections/tree/tree.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/logger-registry.d.ts +57 -0
- package/dist/src/logger-registry.d.ts.map +1 -0
- package/dist/src/logger-registry.js +168 -0
- package/dist/src/logger-registry.js.map +1 -0
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +3 -0
- package/dist/src/logger.js.map +1 -1
- package/dist/src/matchmaking/wire.d.ts.map +1 -1
- package/dist/src/matchmaking/wire.js +8 -2
- package/dist/src/matchmaking/wire.js.map +1 -1
- package/dist/src/network/durability.d.ts +45 -0
- package/dist/src/network/durability.d.ts.map +1 -0
- package/dist/src/network/durability.js +114 -0
- package/dist/src/network/durability.js.map +1 -0
- package/dist/src/network/i-key-network.d.ts +14 -6
- package/dist/src/network/i-key-network.d.ts.map +1 -1
- package/dist/src/network/index.d.ts +3 -0
- package/dist/src/network/index.d.ts.map +1 -1
- package/dist/src/network/index.js +3 -0
- package/dist/src/network/index.js.map +1 -1
- package/dist/src/network/lineage.d.ts +39 -0
- package/dist/src/network/lineage.d.ts.map +1 -0
- package/dist/src/network/lineage.js +61 -0
- package/dist/src/network/lineage.js.map +1 -0
- package/dist/src/network/routing-key.d.ts +24 -0
- package/dist/src/network/routing-key.d.ts.map +1 -0
- package/dist/src/network/routing-key.js +9 -0
- package/dist/src/network/routing-key.js.map +1 -0
- package/dist/src/network/stale-failure.d.ts +5 -1
- package/dist/src/network/stale-failure.d.ts.map +1 -1
- package/dist/src/network/stale-failure.js +5 -1
- package/dist/src/network/stale-failure.js.map +1 -1
- package/dist/src/network/struct.d.ts +151 -8
- package/dist/src/network/struct.d.ts.map +1 -1
- package/dist/src/network/struct.js.map +1 -1
- package/dist/src/reactivity/wire.d.ts.map +1 -1
- package/dist/src/reactivity/wire.js +8 -2
- package/dist/src/reactivity/wire.js.map +1 -1
- package/dist/src/testing/test-transactor.d.ts +64 -7
- package/dist/src/testing/test-transactor.d.ts.map +1 -1
- package/dist/src/testing/test-transactor.js +150 -23
- package/dist/src/testing/test-transactor.js.map +1 -1
- package/dist/src/transaction/coordinator.d.ts +141 -21
- package/dist/src/transaction/coordinator.d.ts.map +1 -1
- package/dist/src/transaction/coordinator.js +408 -122
- package/dist/src/transaction/coordinator.js.map +1 -1
- package/dist/src/transaction/errors.d.ts +39 -10
- package/dist/src/transaction/errors.d.ts.map +1 -1
- package/dist/src/transaction/errors.js +34 -9
- package/dist/src/transaction/errors.js.map +1 -1
- package/dist/src/transaction/index.d.ts +1 -0
- package/dist/src/transaction/index.d.ts.map +1 -1
- package/dist/src/transaction/index.js.map +1 -1
- package/dist/src/transactor/block-floors.d.ts +78 -0
- package/dist/src/transactor/block-floors.d.ts.map +1 -0
- package/dist/src/transactor/block-floors.js +62 -0
- package/dist/src/transactor/block-floors.js.map +1 -0
- package/dist/src/transactor/change-notifier.d.ts +43 -0
- package/dist/src/transactor/change-notifier.d.ts.map +1 -1
- package/dist/src/transactor/change-notifier.js +3 -0
- package/dist/src/transactor/change-notifier.js.map +1 -1
- package/dist/src/transactor/index.d.ts +1 -0
- package/dist/src/transactor/index.d.ts.map +1 -1
- package/dist/src/transactor/index.js +1 -0
- package/dist/src/transactor/index.js.map +1 -1
- package/dist/src/transactor/network-transactor.d.ts +43 -6
- package/dist/src/transactor/network-transactor.d.ts.map +1 -1
- package/dist/src/transactor/network-transactor.js +279 -81
- package/dist/src/transactor/network-transactor.js.map +1 -1
- package/dist/src/transactor/transactor-source.d.ts +94 -4
- package/dist/src/transactor/transactor-source.d.ts.map +1 -1
- package/dist/src/transactor/transactor-source.js +120 -42
- package/dist/src/transactor/transactor-source.js.map +1 -1
- package/dist/src/transactor/transactor.d.ts +14 -1
- package/dist/src/transactor/transactor.d.ts.map +1 -1
- package/dist/src/transform/atomic.d.ts.map +1 -1
- package/dist/src/transform/atomic.js +12 -9
- package/dist/src/transform/atomic.js.map +1 -1
- package/dist/src/transform/base-pins.d.ts +50 -17
- package/dist/src/transform/base-pins.d.ts.map +1 -1
- package/dist/src/transform/base-pins.js +58 -11
- package/dist/src/transform/base-pins.js.map +1 -1
- package/dist/src/transform/cache-source.d.ts +75 -11
- package/dist/src/transform/cache-source.d.ts.map +1 -1
- package/dist/src/transform/cache-source.js +162 -36
- package/dist/src/transform/cache-source.js.map +1 -1
- package/dist/src/transform/digest.d.ts +8 -1
- package/dist/src/transform/digest.d.ts.map +1 -1
- package/dist/src/transform/digest.js +19 -9
- package/dist/src/transform/digest.js.map +1 -1
- package/dist/src/transform/helpers.d.ts +6 -2
- package/dist/src/transform/helpers.d.ts.map +1 -1
- package/dist/src/transform/helpers.js +8 -3
- package/dist/src/transform/helpers.js.map +1 -1
- package/dist/src/transform/tracker.d.ts +94 -14
- package/dist/src/transform/tracker.d.ts.map +1 -1
- package/dist/src/transform/tracker.js +222 -68
- package/dist/src/transform/tracker.js.map +1 -1
- package/dist/src/utility/structural-equals.d.ts +38 -0
- package/dist/src/utility/structural-equals.d.ts.map +1 -0
- package/dist/src/utility/structural-equals.js +77 -0
- package/dist/src/utility/structural-equals.js.map +1 -0
- package/package.json +2 -2
- package/src/cluster/structs.ts +298 -255
- package/src/cohort-topic/antidos/bootstrap-evidence-envelope.ts +260 -253
- package/src/cohort-topic/wire/codec.ts +222 -216
- package/src/collection/collection.ts +996 -158
- package/src/collection/struct.ts +99 -4
- package/src/collections/diary/diary.ts +71 -68
- package/src/collections/tree/struct.ts +248 -26
- package/src/collections/tree/tree.ts +130 -9
- package/src/index.ts +2 -1
- package/src/logger-registry.ts +224 -0
- package/src/logger.ts +4 -0
- package/src/matchmaking/wire.ts +8 -2
- package/src/network/durability.ts +123 -0
- package/src/network/i-key-network.ts +60 -52
- package/src/network/index.ts +10 -7
- package/src/network/lineage.ts +80 -0
- package/src/network/routing-key.ts +27 -0
- package/src/network/stale-failure.ts +5 -1
- package/src/network/struct.ts +156 -8
- package/src/reactivity/wire.ts +230 -224
- package/src/testing/test-transactor.ts +152 -24
- package/src/transaction/coordinator.ts +470 -131
- package/src/transaction/errors.ts +34 -9
- package/src/transaction/index.ts +1 -0
- package/src/transactor/block-floors.ts +105 -0
- package/src/transactor/change-notifier.ts +129 -80
- package/src/transactor/index.ts +1 -0
- package/src/transactor/network-transactor.ts +297 -84
- package/src/transactor/transactor-source.ts +131 -42
- package/src/transactor/transactor.ts +13 -1
- package/src/transform/atomic.ts +25 -22
- package/src/transform/base-pins.ts +76 -18
- package/src/transform/cache-source.ts +327 -194
- package/src/transform/digest.ts +21 -10
- package/src/transform/helpers.ts +8 -3
- package/src/transform/tracker.ts +423 -270
- package/src/utility/structural-equals.ts +72 -0
- package/dist/src/utility/block-id-to-bytes.d.ts +0 -3
- package/dist/src/utility/block-id-to-bytes.d.ts.map +0 -1
- package/dist/src/utility/block-id-to-bytes.js +0 -7
- package/dist/src/utility/block-id-to-bytes.js.map +0 -1
- package/src/utility/block-id-to-bytes.ts +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactor.d.ts","sourceRoot":"","sources":["../../../src/transactor/transactor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"transactor.d.ts","sourceRoot":"","sources":["../../../src/transactor/transactor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7K,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,MAAM,qBAAqB,GAAG;IACnC,uEAAuE;IACvE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACzB;;;;OAIG;IACH,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEpD,oCAAoC;IACpC,SAAS,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEpE;;;;OAIG;IACH,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpD;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAEtD;;;OAGG;IACH,oBAAoB,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAExE;;;;;;;;;OASG;IACH,UAAU,CAAC,CAAC,GAAG,EAAE,YAAY,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACzE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomic.d.ts","sourceRoot":"","sources":["../../../src/transform/atomic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGtD,qBAAa,MAAM,CAAC,MAAM,SAAS,MAAM,CAAE,SAAQ,OAAO,CAAC,MAAM,CAAC;aACrC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;gBAAzB,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;IAIrD,MAAM;
|
|
1
|
+
{"version":3,"file":"atomic.d.ts","sourceRoot":"","sources":["../../../src/transform/atomic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGtD,qBAAa,MAAM,CAAC,MAAM,SAAS,MAAM,CAAE,SAAQ,OAAO,CAAC,MAAM,CAAC;aACrC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;gBAAzB,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;IAIrD,MAAM;CAeN"}
|
|
@@ -7,15 +7,18 @@ export class Atomic extends Tracker {
|
|
|
7
7
|
this.store = store;
|
|
8
8
|
}
|
|
9
9
|
commit() {
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
// A parent tracker takes the staged transform AND the bases pinned inside this atomic
|
|
11
|
+
// (Tracker.absorb): without the pins, a single act() carrying more actions than the read
|
|
12
|
+
// cache holds would lose digest coverage, the cache having evicted the early bases by the
|
|
13
|
+
// flush; and without absorb keeping them as the bases of the flushed operations, a base the
|
|
14
|
+
// cache moved on from between the pin and the flush would be re-pinned at the newer revision.
|
|
15
|
+
// Any other store just receives the transform.
|
|
16
|
+
if (this.store instanceof Tracker) {
|
|
17
|
+
this.store.absorb(this);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
applyTransformToStore(this.reset(), this.store);
|
|
21
|
+
}
|
|
19
22
|
}
|
|
20
23
|
}
|
|
21
24
|
//# sourceMappingURL=atomic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomic.js","sourceRoot":"","sources":["../../../src/transform/atomic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,OAAO,MAA8B,SAAQ,OAAe;IACrC;IAA5B,YAA4B,KAAyB;QACpD,KAAK,CAAC,KAAK,CAAC,CAAC;QADc,UAAK,GAAL,KAAK,CAAoB;IAErD,CAAC;IAED,MAAM;QACL,
|
|
1
|
+
{"version":3,"file":"atomic.js","sourceRoot":"","sources":["../../../src/transform/atomic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,OAAO,MAA8B,SAAQ,OAAe;IACrC;IAA5B,YAA4B,KAAyB;QACpD,KAAK,CAAC,KAAK,CAAC,CAAC;QADc,UAAK,GAAL,KAAK,CAAoB;IAErD,CAAC;IAED,MAAM;QACL,sFAAsF;QACtF,yFAAyF;QACzF,0FAA0F;QAC1F,4FAA4F;QAC5F,8FAA8F;QAC9F,+CAA+C;QAC/C,IAAI,IAAI,CAAC,KAAK,YAAY,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACP,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;CAGD"}
|
|
@@ -1,24 +1,37 @@
|
|
|
1
1
|
import type { BlockId, IBlock } from "../index.js";
|
|
2
|
-
/** The committed base of one block,
|
|
2
|
+
/** The committed base of one block, fixed at the moment the FIRST update for it was staged in a
|
|
3
|
+
* tracker. `rev` is the number the staged operations were computed against, and it never changes
|
|
4
|
+
* while those operations remain staged: a later change to what the source holds for the id marks
|
|
5
|
+
* the pin {@link moved} rather than replacing it (see {@link Tracker.revalidatePin}). */
|
|
3
6
|
export type PinnedBase = {
|
|
4
|
-
/** Cloned base content.
|
|
5
|
-
*
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
/** Cloned base content. Absent for a REV-ONLY pin: the block was evicted from the read cache
|
|
8
|
+
* between the read that computed the update and the update itself, so the revision is known
|
|
9
|
+
* (the cache's per-id revision outlives the block) but the content is not — the base can be
|
|
10
|
+
* declared, its digest cannot. Filled in if the same revision is later re-read.
|
|
11
|
+
* Callers MUST clone before applying a transform — applyTransform mutates, and the same pin is
|
|
12
|
+
* re-used by every retry attempt's digest pass. */
|
|
13
|
+
block?: IBlock;
|
|
14
|
+
/** Committed revision of the base (CacheSource.getCachedRevision at pin time). */
|
|
8
15
|
rev: number;
|
|
9
|
-
/** Source drift generation at
|
|
10
|
-
* longer matches the source's
|
|
16
|
+
/** Source drift generation at the last validation (CacheSource.getGeneration). A generation
|
|
17
|
+
* that no longer matches the source's means the source's content for the id changed hands
|
|
18
|
+
* since; whether the BASE moved is decided by comparing revisions, not generations. */
|
|
11
19
|
gen: number;
|
|
20
|
+
/** The source no longer describes this id at `rev`: the staged operations were computed on
|
|
21
|
+
* content that is not the content any commit would now apply them to. Never repaired in
|
|
22
|
+
* place — only a re-stage (which resets the owning tracker) clears it. */
|
|
23
|
+
moved?: true;
|
|
12
24
|
};
|
|
13
25
|
/** Per-transaction map of block id -> {@link PinnedBase}. Owned by a {@link Tracker}, shared by
|
|
14
26
|
* reference across the trackers of one transaction (the collection's live tracker and each
|
|
15
27
|
* per-attempt snapshot tracker), so a base pinned when an update was staged is still available
|
|
16
28
|
* when the digest pass runs — regardless of whether the read cache has since evicted it.
|
|
17
29
|
*
|
|
18
|
-
* NOTE: memory shape — one cloned base block per update-carrying block
|
|
19
|
-
* update staged for it until the owning tracker's next
|
|
20
|
-
* to the transaction's own write footprint (the same set
|
|
21
|
-
* request already carries), and every transaction boundary
|
|
30
|
+
* NOTE: memory shape — one cloned base block per update-carrying block (one number per block for
|
|
31
|
+
* a rev-only pin), held from the first update staged for it until the owning tracker's next
|
|
32
|
+
* reset(). Peak retention is proportional to the transaction's own write footprint (the same set
|
|
33
|
+
* of blocks whose ids and ops the commit request already carries), and every transaction boundary
|
|
34
|
+
* reclaims it via reset(). */
|
|
22
35
|
export declare class BasePins {
|
|
23
36
|
private pins;
|
|
24
37
|
/** The base source every `rev`/`gen` in here was read from — see {@link bindAuthority}. */
|
|
@@ -32,17 +45,37 @@ export declare class BasePins {
|
|
|
32
45
|
* mistake impossible to make quietly. */
|
|
33
46
|
bindAuthority(source: unknown): void;
|
|
34
47
|
get(id: BlockId): PinnedBase | undefined;
|
|
48
|
+
ids(): IterableIterator<BlockId>;
|
|
35
49
|
set(id: BlockId, pin: PinnedBase): void;
|
|
36
50
|
delete(id: BlockId): void;
|
|
51
|
+
/** Record that the base under `id`'s staged operations has moved (see {@link PinnedBase.moved}).
|
|
52
|
+
* No-op for an unpinned id: with no pin there is no base to have moved from. */
|
|
53
|
+
markMoved(id: BlockId): void;
|
|
37
54
|
/** Drop every pin whose id is not in `keep`. Called from Tracker.reset with the ids still
|
|
38
|
-
* carried by the new transforms' `updates`, so a rollback keeps its pins
|
|
39
|
-
* clears them. */
|
|
55
|
+
* carried by the new transforms' `updates`, so a rollback keeps its pins — moved marks
|
|
56
|
+
* included, the operations being the same operations — and a plain reset clears them. */
|
|
40
57
|
retainOnly(keep: Iterable<BlockId>): void;
|
|
41
|
-
/**
|
|
42
|
-
* inside the atomic survive into the parent tracker's store.
|
|
43
|
-
*
|
|
44
|
-
*
|
|
58
|
+
/** Fold every entry of `other` in. Called from Tracker.absorb (Atomic.commit) so pins captured
|
|
59
|
+
* inside the atomic survive into the parent tracker's store.
|
|
60
|
+
*
|
|
61
|
+
* An id the parent does not pin takes the atomic's pin. An id it pins at the SAME revision takes
|
|
62
|
+
* the atomic's too — the later observation of the same committed content — except that a clone
|
|
63
|
+
* the parent holds is never traded for a rev-only pin (same revision, same content; the clone is
|
|
64
|
+
* what makes the digest declarable). An id it pins at a DIFFERENT revision is a base that MOVED
|
|
65
|
+
* between the two actions: the parent's operations were computed on one content and the
|
|
66
|
+
* atomic's on another, and the combined list has no single base. The parent's pin is kept (its
|
|
67
|
+
* revision is what the earlier operations were built on) and marked moved, and a mark on either
|
|
68
|
+
* side survives the fold. */
|
|
45
69
|
adopt(other: BasePins): void;
|
|
70
|
+
/** A copy for a staged-state snapshot (Collection.snapshotPending): the same entries, bound to
|
|
71
|
+
* the same source, in a store of its own. Entries are shared, not cloned — a pin's content is
|
|
72
|
+
* never mutated in place (every consumer clones before applying), and a moved mark set on a
|
|
73
|
+
* shared entry after the copy is a fact about the same operations. */
|
|
74
|
+
copy(): BasePins;
|
|
75
|
+
/** Make this store hold exactly `other`'s entries — the restore half of {@link copy}
|
|
76
|
+
* (Collection.restorePending), applied in place because the live tracker's store is shared by
|
|
77
|
+
* reference with every per-attempt tracker of the transaction. */
|
|
78
|
+
replaceWith(other: BasePins): void;
|
|
46
79
|
get size(): number;
|
|
47
80
|
}
|
|
48
81
|
//# sourceMappingURL=base-pins.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-pins.d.ts","sourceRoot":"","sources":["../../../src/transform/base-pins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEnD
|
|
1
|
+
{"version":3,"file":"base-pins.d.ts","sourceRoot":"","sources":["../../../src/transform/base-pins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEnD;;;yFAGyF;AACzF,MAAM,MAAM,UAAU,GAAG;IACxB;;;;;wDAKoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,GAAG,EAAE,MAAM,CAAC;IACZ;;4FAEwF;IACxF,GAAG,EAAE,MAAM,CAAC;IACZ;;+EAE2E;IAC3E,KAAK,CAAC,EAAE,IAAI,CAAC;CACb,CAAC;AAEF;;;;;;;;;8BAS8B;AAC9B,qBAAa,QAAQ;IACpB,OAAO,CAAC,IAAI,CAAkC;IAC9C,2FAA2F;IAC3F,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,KAAK,CAAS;IAEtB;;;;;6CAKyC;IACzC,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IASpC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS;IAIxC,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC;IAIhC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI;IAIvC,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAIzB;oFACgF;IAChF,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAK5B;;6FAEyF;IACzF,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI;IAOzC;;;;;;;;;;iCAU6B;IAC7B,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAc5B;;;0EAGsE;IACtE,IAAI,IAAI,QAAQ;IAOhB;;sEAEkE;IAClE,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAQlC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACD"}
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
* per-attempt snapshot tracker), so a base pinned when an update was staged is still available
|
|
4
4
|
* when the digest pass runs — regardless of whether the read cache has since evicted it.
|
|
5
5
|
*
|
|
6
|
-
* NOTE: memory shape — one cloned base block per update-carrying block
|
|
7
|
-
* update staged for it until the owning tracker's next
|
|
8
|
-
* to the transaction's own write footprint (the same set
|
|
9
|
-
* request already carries), and every transaction boundary
|
|
6
|
+
* NOTE: memory shape — one cloned base block per update-carrying block (one number per block for
|
|
7
|
+
* a rev-only pin), held from the first update staged for it until the owning tracker's next
|
|
8
|
+
* reset(). Peak retention is proportional to the transaction's own write footprint (the same set
|
|
9
|
+
* of blocks whose ids and ops the commit request already carries), and every transaction boundary
|
|
10
|
+
* reclaims it via reset(). */
|
|
10
11
|
export class BasePins {
|
|
11
12
|
pins = new Map();
|
|
12
13
|
/** The base source every `rev`/`gen` in here was read from — see {@link bindAuthority}. */
|
|
@@ -30,15 +31,25 @@ export class BasePins {
|
|
|
30
31
|
get(id) {
|
|
31
32
|
return this.pins.get(id);
|
|
32
33
|
}
|
|
34
|
+
ids() {
|
|
35
|
+
return this.pins.keys();
|
|
36
|
+
}
|
|
33
37
|
set(id, pin) {
|
|
34
38
|
this.pins.set(id, pin);
|
|
35
39
|
}
|
|
36
40
|
delete(id) {
|
|
37
41
|
this.pins.delete(id);
|
|
38
42
|
}
|
|
43
|
+
/** Record that the base under `id`'s staged operations has moved (see {@link PinnedBase.moved}).
|
|
44
|
+
* No-op for an unpinned id: with no pin there is no base to have moved from. */
|
|
45
|
+
markMoved(id) {
|
|
46
|
+
const pin = this.pins.get(id);
|
|
47
|
+
if (pin)
|
|
48
|
+
pin.moved = true;
|
|
49
|
+
}
|
|
39
50
|
/** Drop every pin whose id is not in `keep`. Called from Tracker.reset with the ids still
|
|
40
|
-
* carried by the new transforms' `updates`, so a rollback keeps its pins
|
|
41
|
-
* clears them. */
|
|
51
|
+
* carried by the new transforms' `updates`, so a rollback keeps its pins — moved marks
|
|
52
|
+
* included, the operations being the same operations — and a plain reset clears them. */
|
|
42
53
|
retainOnly(keep) {
|
|
43
54
|
const keepSet = new Set(keep);
|
|
44
55
|
for (const id of this.pins.keys()) {
|
|
@@ -46,18 +57,54 @@ export class BasePins {
|
|
|
46
57
|
this.pins.delete(id);
|
|
47
58
|
}
|
|
48
59
|
}
|
|
49
|
-
/**
|
|
50
|
-
* inside the atomic survive into the parent tracker's store.
|
|
51
|
-
*
|
|
52
|
-
*
|
|
60
|
+
/** Fold every entry of `other` in. Called from Tracker.absorb (Atomic.commit) so pins captured
|
|
61
|
+
* inside the atomic survive into the parent tracker's store.
|
|
62
|
+
*
|
|
63
|
+
* An id the parent does not pin takes the atomic's pin. An id it pins at the SAME revision takes
|
|
64
|
+
* the atomic's too — the later observation of the same committed content — except that a clone
|
|
65
|
+
* the parent holds is never traded for a rev-only pin (same revision, same content; the clone is
|
|
66
|
+
* what makes the digest declarable). An id it pins at a DIFFERENT revision is a base that MOVED
|
|
67
|
+
* between the two actions: the parent's operations were computed on one content and the
|
|
68
|
+
* atomic's on another, and the combined list has no single base. The parent's pin is kept (its
|
|
69
|
+
* revision is what the earlier operations were built on) and marked moved, and a mark on either
|
|
70
|
+
* side survives the fold. */
|
|
53
71
|
adopt(other) {
|
|
54
72
|
if (other.authority !== this.authority) {
|
|
55
73
|
throw new Error('BasePins.adopt across different base sources: pin revisions and generations are not comparable across them.');
|
|
56
74
|
}
|
|
57
75
|
for (const [id, pin] of other.pins) {
|
|
58
|
-
this.pins.
|
|
76
|
+
const existing = this.pins.get(id);
|
|
77
|
+
if (existing === undefined || (existing.rev === pin.rev && !existing.moved)) {
|
|
78
|
+
this.pins.set(id, pin.block === undefined && existing?.block !== undefined ? { ...pin, block: existing.block } : pin);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
existing.moved = true;
|
|
82
|
+
}
|
|
59
83
|
}
|
|
60
84
|
}
|
|
85
|
+
/** A copy for a staged-state snapshot (Collection.snapshotPending): the same entries, bound to
|
|
86
|
+
* the same source, in a store of its own. Entries are shared, not cloned — a pin's content is
|
|
87
|
+
* never mutated in place (every consumer clones before applying), and a moved mark set on a
|
|
88
|
+
* shared entry after the copy is a fact about the same operations. */
|
|
89
|
+
copy() {
|
|
90
|
+
const copy = new BasePins();
|
|
91
|
+
if (this.bound)
|
|
92
|
+
copy.bindAuthority(this.authority);
|
|
93
|
+
for (const [id, pin] of this.pins)
|
|
94
|
+
copy.pins.set(id, pin);
|
|
95
|
+
return copy;
|
|
96
|
+
}
|
|
97
|
+
/** Make this store hold exactly `other`'s entries — the restore half of {@link copy}
|
|
98
|
+
* (Collection.restorePending), applied in place because the live tracker's store is shared by
|
|
99
|
+
* reference with every per-attempt tracker of the transaction. */
|
|
100
|
+
replaceWith(other) {
|
|
101
|
+
if (other.bound && other.authority !== this.authority) {
|
|
102
|
+
throw new Error('BasePins.replaceWith across different base sources: pin revisions and generations are not comparable across them.');
|
|
103
|
+
}
|
|
104
|
+
this.pins.clear();
|
|
105
|
+
for (const [id, pin] of other.pins)
|
|
106
|
+
this.pins.set(id, pin);
|
|
107
|
+
}
|
|
61
108
|
get size() {
|
|
62
109
|
return this.pins.size;
|
|
63
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-pins.js","sourceRoot":"","sources":["../../../src/transform/base-pins.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-pins.js","sourceRoot":"","sources":["../../../src/transform/base-pins.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,19 @@ export declare class CacheSource<T extends IBlock> implements BlockSource<T> {
|
|
|
19
19
|
* so a hit records a read dependency at the right revision — the whole point of this map, since
|
|
20
20
|
* the underlying source is never consulted on a hit. */
|
|
21
21
|
private revisions;
|
|
22
|
+
/** The most recent answer per id that this cache returned to a reader but did not keep — a
|
|
23
|
+
* below-floor answer, content older than a log entry the collection already walked says the
|
|
24
|
+
* block is (see {@link sourceServed}), or an answer overtaken while in flight over an id nothing
|
|
25
|
+
* is held for (see {@link admit}). NEVER served to a read: {@link tryGet} re-asks the source
|
|
26
|
+
* every time such an id is read, which is the whole point. It exists for the base probes alone
|
|
27
|
+
* ({@link peek} / {@link getCachedRevision}): a write staged over this content must declare the
|
|
28
|
+
* base it was really built on, at the revision it was really served at, so that the storage-side
|
|
29
|
+
* guard which refuses a transform whose declared base is not the one the member holds can fire
|
|
30
|
+
* instead of abstaining and applying edits computed against the old content over newer content.
|
|
31
|
+
* An id is never in both this map and `cache`/`revisions`. It leaves on its next keepable answer,
|
|
32
|
+
* on {@link clear}, and on any {@link transformCache} that touches it, so the map is bounded by
|
|
33
|
+
* the source's unmet floors plus the ids caught mid-flight by a clear or a fold. */
|
|
34
|
+
private unkept;
|
|
22
35
|
constructor(source: BlockSource<T>, maxSize?: number,
|
|
23
36
|
/** Shared per-transaction read-dependency accumulator (same instance the collection's
|
|
24
37
|
* TransactorSource holds). Optional: log-walk caches that never form a transaction omit it. */
|
|
@@ -33,19 +46,70 @@ export declare class CacheSource<T extends IBlock> implements BlockSource<T> {
|
|
|
33
46
|
/** The current generation for an id — advances every time this cache's content for
|
|
34
47
|
* the id changes (miss-load, clear, or transformCache). Stable across pure cache hits. */
|
|
35
48
|
getGeneration(id: BlockId): number;
|
|
49
|
+
/** INVARIANT: what a read returns for an id is what this cache then describes for it — the
|
|
50
|
+
* block {@link peek} answers and the revision {@link getCachedRevision} answers, immediately
|
|
51
|
+
* after, are the content the reader holds, on every path (hit, kept, handed through, evicted
|
|
52
|
+
* since). A write staged over the returned content pins that revision as its base, so a read
|
|
53
|
+
* that returned one thing while the cache described another would put a wrong base on the
|
|
54
|
+
* commit — the one direction the storage-side guard cannot catch. {@link admit} is where the
|
|
55
|
+
* two are decided together. */
|
|
36
56
|
tryGet(id: BlockId, purpose?: ReadPurpose): Promise<T | undefined>;
|
|
37
|
-
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
57
|
+
/** Decide, for an answer the source just gave for `id`, what the reader gets and what this cache
|
|
58
|
+
* describes for the id from now on — one decision, so the two cannot come apart.
|
|
59
|
+
*
|
|
60
|
+
* A keepable answer that is {@link stillWanted} is kept and returned. Otherwise the answer is
|
|
61
|
+
* either below its floor or was overtaken while in flight, and of two answers to one id the
|
|
62
|
+
* higher revision is the truer — so if content is HELD for the id (a concurrent read answered
|
|
63
|
+
* well, a folded commit, or content that met a floor this answer does not), the held content is
|
|
64
|
+
* what the reader gets, exactly as a hit a moment later would get it; the answer leaves no trace.
|
|
65
|
+
* Held content is never older than a below-floor answer: raising a floor forgets the id in the
|
|
66
|
+
* same step, so anything held for it since met the floor. With nothing held, the answer is
|
|
67
|
+
* handed through (see {@link handThrough}): returned, described, not kept. */
|
|
68
|
+
private admit;
|
|
69
|
+
/** Whether an answer at `rev`, asked for when this id's generation was `generationAtMiss`, is
|
|
70
|
+
* still one to keep now that it has arrived.
|
|
71
|
+
*
|
|
72
|
+
* A miss is decided before the `await` and acted on after it. If the generation has not moved,
|
|
73
|
+
* nothing happened to the id meanwhile and the answer is kept. If it has — a second read of the
|
|
74
|
+
* id landed first, a refresh cleared it, a commit folded in ({@link transformCache}) — this answer
|
|
75
|
+
* was asked for in a world that has since changed, and keeping it blindly is how old content gets
|
|
76
|
+
* remembered for good: nothing clears a block but a log entry naming it, and that entry may be
|
|
77
|
+
* the very thing that moved the generation. So it is then kept only to REPLACE strictly older
|
|
78
|
+
* content (every answer to one source is for one view, so of two the higher revision is the
|
|
79
|
+
* truer, whichever arrives last); what an overtaken answer's reader gets is {@link admit}'s call.
|
|
80
|
+
* Only a CACHED id is compared: `revisions` outlives an LRU-evicted block (see its NOTE). */
|
|
81
|
+
private stillWanted;
|
|
82
|
+
/** A keepable answer: cached, and served to every later read of `id` until something clears it. */
|
|
83
|
+
private keep;
|
|
84
|
+
/** An answer this cache will not keep, over an id it holds nothing for: returned to this one
|
|
85
|
+
* reader and described to the base probes (see {@link unkept}), but the next read of `id` asks
|
|
86
|
+
* the source again. Only {@link admit} calls this, after establishing that nothing is held —
|
|
87
|
+
* a cached id is never also in {@link unkept}.
|
|
88
|
+
*
|
|
89
|
+
* Bumped like a load: the answer changes what this cache can say about the id, and the bump is
|
|
90
|
+
* what sends a base pin or a materialized memo built on the previous answer back to be
|
|
91
|
+
* re-judged. */
|
|
92
|
+
private handThrough;
|
|
93
|
+
/** The base this cache can describe for `id`, without consulting the source: the cached block,
|
|
94
|
+
* or the content last handed through unkept (see {@link unkept}) — either way the content the
|
|
95
|
+
* most recent {@link tryGet} of the id returned, unless it has been evicted since. Cloned
|
|
96
|
+
* (callers apply ops to it) and recency-neutral ({@link LruMap.peek}) — an observation pass must
|
|
97
|
+
* neither pay a network read nor reshape eviction order. Records no read dependency: the caller
|
|
98
|
+
* that peeks already read the block through {@link tryGet} (that is how this cache learned it),
|
|
99
|
+
* so the dependency exists; a digest pass merely re-describes it. */
|
|
42
100
|
peek(id: BlockId): T | undefined;
|
|
43
|
-
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* {@link
|
|
47
|
-
|
|
48
|
-
|
|
101
|
+
/** Whether a later {@link tryGet} of `id` is answered from memory with the content this cache
|
|
102
|
+
* holds now. `false` for content handed through unkept, which {@link peek} still describes — so
|
|
103
|
+
* a consumer that would FREEZE a read result ({@link Tracker}'s materialized memo) asks this, not
|
|
104
|
+
* {@link peek}. Recency-neutral. */
|
|
105
|
+
retains(id: BlockId): boolean;
|
|
106
|
+
/** The committed revision of the content this cache last served for `id` — the source-reported
|
|
107
|
+
* materialized revision learned on miss-load (see {@link revisions}) or handed through
|
|
108
|
+
* ({@link unkept}), NOT the block's own `state.latest.rev`. Answers for an LRU-evicted id too
|
|
109
|
+
* (see the NOTE on {@link revisions}): that is the revision a write staged over the evicted
|
|
110
|
+
* read was computed against, and what a rev-only base pin carries. {@link peek} returns
|
|
111
|
+
* `undefined` for the evicted id, so the revision never pairs with content it does not describe.
|
|
112
|
+
* `undefined` once the id has been cleared or folded away, or if it was never served. */
|
|
49
113
|
getCachedRevision(id: BlockId): number | undefined;
|
|
50
114
|
/** Upgrade an already-captured read of `id` to a `value` read in the shared collector,
|
|
51
115
|
* retaining it in the conflict set. The B-tree point-lookup descent calls this (through the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-source.d.ts","sourceRoot":"","sources":["../../../src/transform/cache-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"cache-source.d.ts","sourceRoot":"","sources":["../../../src/transform/cache-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AA4B3F,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAwClE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzC;oGACgG;IAChG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IA3C5B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpC;;;;4FAIwF;IAKxF,OAAO,CAAC,WAAW,CAA8B;IACjD;;;;6DAIyD;IAQzD,OAAO,CAAC,SAAS,CAA8B;IAC/C;;;;;;;;;;;yFAWqF;IACrF,OAAO,CAAC,MAAM,CAAiD;gBAG3C,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EACzC,OAAO,SAAiB;IACxB;oGACgG;IAC/E,SAAS,CAAC,EAAE,uBAAuB,YAAA;IACpD;;;;oDAIgD;IAChD,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAW3C,OAAO,CAAC,IAAI;IAIZ;8FAC0F;IAC1F,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IAIlC;;;;;;oCAMgC;IAC1B,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,GAAE,WAAqB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IA4BjF;;;;;;;;;;mFAU+E;IAC/E,OAAO,CAAC,KAAK;IAeb;;;;;;;;;;;kGAW8F;IAC9F,OAAO,CAAC,WAAW;IAYnB,mGAAmG;IACnG,OAAO,CAAC,IAAI;IAQZ;;;;;;;qBAOiB;IACjB,OAAO,CAAC,WAAW;IAOnB;;;;;;0EAMsE;IACtE,IAAI,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS;IAKhC;;;yCAGqC;IACrC,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAI7B;;;;;;8FAM0F;IAC1F,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAIlD;;;;iGAI6F;IAC7F,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAIhC,UAAU,IAAI,OAAO;IAIrB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW;IAIhE,KAAK,CAAC,QAAQ,GAAE,OAAO,EAAE,GAAG,SAAqB;IAqBjD;;;;qEAIiE;IACjE,eAAe,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAQ9C;;mGAE+F;IAC/F,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM;CA6BtD"}
|