@serfab/cadre-core 1.17.0 → 1.18.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/README.md +3 -2
- package/dist/cadre-invite-protocol.d.ts +35 -13
- package/dist/cadre-invite-protocol.js +90 -25
- package/dist/cadre-invite-protocol.js.map +1 -1
- package/dist/cadre-node.d.ts +586 -255
- package/dist/cadre-node.js +1176 -564
- package/dist/cadre-node.js.map +1 -1
- package/dist/control-cohort.d.ts +66 -9
- package/dist/control-cohort.js +67 -9
- package/dist/control-cohort.js.map +1 -1
- package/dist/control-database.d.ts +451 -193
- package/dist/control-database.js +701 -359
- package/dist/control-database.js.map +1 -1
- package/dist/control-formation-recorder.d.ts +46 -43
- package/dist/control-formation-recorder.js +77 -78
- package/dist/control-formation-recorder.js.map +1 -1
- package/dist/control-protocol-guard.d.ts +6 -0
- package/dist/control-protocol-guard.js +14 -2
- package/dist/control-protocol-guard.js.map +1 -1
- package/dist/control-schema-version.d.ts +48 -31
- package/dist/control-schema-version.js +67 -45
- package/dist/control-schema-version.js.map +1 -1
- package/dist/control-schema.d.ts +8 -8
- package/dist/control-schema.js +16 -16
- package/dist/control-schema.js.map +1 -1
- package/dist/control-write-retry.d.ts +42 -7
- package/dist/control-write-retry.js +87 -19
- package/dist/control-write-retry.js.map +1 -1
- package/dist/enrolled-machine-store.d.ts +3 -3
- package/dist/enrolled-machine-store.js +3 -3
- package/dist/formation-token.d.ts +48 -0
- package/dist/formation-token.js +26 -0
- package/dist/formation-token.js.map +1 -0
- package/dist/index.d.ts +14 -13
- package/dist/index.js +16 -13
- package/dist/index.js.map +1 -1
- package/dist/joined-strand-store.d.ts +26 -9
- package/dist/joined-strand-store.js +63 -24
- package/dist/joined-strand-store.js.map +1 -1
- package/dist/link-budget.d.ts +9 -7
- package/dist/link-budget.js +9 -7
- package/dist/link-budget.js.map +1 -1
- package/dist/member-redemption.d.ts +15 -9
- package/dist/member-redemption.js +13 -8
- package/dist/member-redemption.js.map +1 -1
- package/dist/membership-view.d.ts +91 -0
- package/dist/membership-view.js +110 -0
- package/dist/membership-view.js.map +1 -0
- package/dist/owner-grant-protocol.d.ts +11 -7
- package/dist/owner-grant-protocol.js +31 -17
- package/dist/owner-grant-protocol.js.map +1 -1
- package/dist/peer-addr-book.d.ts +10 -1
- package/dist/peer-addr-book.js +4 -3
- package/dist/peer-addr-book.js.map +1 -1
- package/dist/peer-join-backfill.d.ts +89 -20
- package/dist/peer-join-backfill.js +265 -108
- package/dist/peer-join-backfill.js.map +1 -1
- package/dist/pending-join-runner.d.ts +48 -18
- package/dist/pending-join-runner.js +74 -56
- package/dist/pending-join-runner.js.map +1 -1
- package/dist/seed-bootstrap.d.ts +47 -40
- package/dist/seed-bootstrap.js +66 -61
- package/dist/seed-bootstrap.js.map +1 -1
- package/dist/strand-database.d.ts +23 -2
- package/dist/strand-database.js +26 -6
- package/dist/strand-database.js.map +1 -1
- package/dist/strand-first-sync-gate.d.ts +176 -89
- package/dist/strand-first-sync-gate.js +288 -122
- package/dist/strand-first-sync-gate.js.map +1 -1
- package/dist/strand-formation-deadlines.d.ts +9 -9
- package/dist/strand-formation-deadlines.js +9 -9
- package/dist/strand-formation-manager.d.ts +23 -17
- package/dist/strand-formation-manager.js +46 -44
- package/dist/strand-formation-manager.js.map +1 -1
- package/dist/strand-formation-protocol.d.ts +5 -8
- package/dist/strand-formation-protocol.js +101 -16
- package/dist/strand-formation-protocol.js.map +1 -1
- package/dist/strand-instance-manager.d.ts +26 -17
- package/dist/strand-instance-manager.js +119 -50
- package/dist/strand-instance-manager.js.map +1 -1
- package/dist/strand-membership-reconciler.d.ts +16 -13
- package/dist/strand-membership-reconciler.js +30 -22
- package/dist/strand-membership-reconciler.js.map +1 -1
- package/dist/strand-membership-writer.d.ts +40 -28
- package/dist/strand-membership-writer.js +212 -153
- package/dist/strand-membership-writer.js.map +1 -1
- package/dist/strand-move.js +5 -2
- package/dist/strand-move.js.map +1 -1
- package/dist/strand-revocation-enforcer.d.ts +134 -60
- package/dist/strand-revocation-enforcer.js +144 -71
- package/dist/strand-revocation-enforcer.js.map +1 -1
- package/dist/strand-solicitation.d.ts +50 -39
- package/dist/strand-solicitation.js +10 -3
- package/dist/strand-solicitation.js.map +1 -1
- package/dist/strand-watcher.d.ts +80 -13
- package/dist/strand-watcher.js +152 -48
- package/dist/strand-watcher.js.map +1 -1
- package/dist/table-change-watch.d.ts +63 -0
- package/dist/table-change-watch.js +209 -0
- package/dist/table-change-watch.js.map +1 -0
- package/dist/timeout-scheduler.d.ts +4 -3
- package/dist/timeout-scheduler.js +4 -3
- package/dist/timeout-scheduler.js.map +1 -1
- package/dist/types.d.ts +90 -49
- package/dist/types.js +4 -4
- package/dist/types.js.map +1 -1
- package/package.json +8 -8
- package/src/cadre-invite-protocol.ts +119 -31
- package/src/cadre-node.ts +1282 -584
- package/src/control-cohort.ts +86 -9
- package/src/control-database.ts +848 -403
- package/src/control-formation-recorder.ts +359 -353
- package/src/control-protocol-guard.ts +16 -2
- package/src/control-schema-version.ts +101 -51
- package/src/control-schema.ts +16 -16
- package/src/control-write-retry.ts +91 -19
- package/src/delegate-admission.ts +351 -351
- package/src/enrolled-machine-store.ts +3 -3
- package/src/formation-token.ts +63 -0
- package/src/index.ts +30 -17
- package/src/joined-strand-store.ts +69 -24
- package/src/link-budget.ts +9 -7
- package/src/member-redemption.ts +20 -13
- package/src/membership-view.ts +144 -0
- package/src/owner-grant-protocol.ts +33 -18
- package/src/peer-addr-book.ts +4 -3
- package/src/peer-join-backfill.ts +971 -761
- package/src/pending-join-runner.ts +76 -53
- package/src/seed-bootstrap.ts +72 -67
- package/src/strand-database.ts +352 -322
- package/src/strand-first-sync-gate.ts +334 -134
- package/src/strand-formation-deadlines.ts +227 -227
- package/src/strand-formation-manager.ts +731 -725
- package/src/strand-formation-protocol.ts +122 -24
- package/src/strand-instance-manager.ts +2092 -2026
- package/src/strand-membership-reconciler.ts +33 -25
- package/src/strand-membership-writer.ts +2093 -2019
- package/src/strand-move.ts +5 -2
- package/src/strand-revocation-enforcer.ts +740 -654
- package/src/strand-solicitation.ts +61 -34
- package/src/strand-watcher.ts +175 -56
- package/src/table-change-watch.ts +285 -0
- package/src/timeout-scheduler.ts +29 -28
- package/src/types.ts +89 -51
|
@@ -3,42 +3,39 @@
|
|
|
3
3
|
* store after declaring the control schema and before applying it.
|
|
4
4
|
*
|
|
5
5
|
* `apply schema CadreControl` runs whatever DDL makes the hydrated catalog equal the declared
|
|
6
|
-
* schema
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* schema, and that apply is how a store written under an older control schema version is
|
|
7
|
+
* migrated in place: between consecutive versions the difference is limited to statements the
|
|
8
|
+
* optimystic module applies to a table's catalog record without rewriting a row, so running the
|
|
9
|
+
* diff from a store at version K to this build's declaration runs each version's changes from
|
|
10
|
+
* K+1 up to the build's, in order. This module decides, from the stored version and the pending
|
|
11
|
+
* DDL and before any of it runs, whether the apply may go ahead, and throws one typed error
|
|
12
|
+
* naming the reason when it may not.
|
|
11
13
|
*
|
|
12
14
|
* The same change classifier ({@link classifyControlSchemaChange}) is what
|
|
13
15
|
* `control-schema-versions.spec.ts` runs over each pair of consecutive control schema versions,
|
|
14
16
|
* so a schema edit that no store could be migrated across fails when it is made. Where the
|
|
15
17
|
* version lives, when it changes and what a new version may change: docs/architecture.md →
|
|
16
|
-
* "Control schema
|
|
18
|
+
* "Control schema versions and migrations".
|
|
17
19
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* (control-store-migrates-on-start) needs the version a store was upgraded to, so it needs that
|
|
25
|
-
* persisted upstream (optimystic-catalog-only-alter-table).
|
|
20
|
+
* The stored tag is the version of the last start that applied the schema to the store: the
|
|
21
|
+
* apply's `alter table OwnerKey set tags (…)` persists since Optimystic 1.16.0, so after a
|
|
22
|
+
* migrating start the store records this build's version. A store additively upgraded by a build
|
|
23
|
+
* from before that still reads the version it was created under, which is harmless: the diff is
|
|
24
|
+
* computed from the catalog, not from the number, and the number only has to tell a store that
|
|
25
|
+
* a newer release migrated from one this build can migrate.
|
|
26
26
|
*/
|
|
27
27
|
import { Parser } from '@quereus/quereus';
|
|
28
|
-
import { CONTROL_SCHEMA_NAME, CONTROL_SCHEMA_VERSION_TAG } from './control-schema.js';
|
|
28
|
+
import { CONTROL_SCHEMA_BASELINE_VERSION, CONTROL_SCHEMA_NAME, CONTROL_SCHEMA_VERSION_TAG } from './control-schema.js';
|
|
29
29
|
import { controlStorageScope } from './storage-scope.js';
|
|
30
30
|
/** The control table whose tags carry {@link CONTROL_SCHEMA_VERSION_TAG}. */
|
|
31
31
|
const VERSION_TABLE = 'OwnerKey';
|
|
32
|
-
/** A warm control store this build cannot apply its control schema to
|
|
32
|
+
/** A warm control store this build cannot apply its control schema to. */
|
|
33
33
|
export class ControlStoreIncompatibleError extends Error {
|
|
34
|
-
constructor(partyId, storeVersion, buildVersion, pendingDdl) {
|
|
34
|
+
constructor(reason, partyId, storeVersion, buildVersion, pendingDdl) {
|
|
35
35
|
const storageScope = controlStorageScope(partyId);
|
|
36
|
-
super(
|
|
37
|
-
`(it records control schema version ${storeVersion}; this build declares ${buildVersion}), and this build ` +
|
|
38
|
-
'cannot apply its control schema to it without losing data. Run a release whose control schema ' +
|
|
39
|
-
`matches the store, or recreate the control store (storage scope ${storageScope}) as ` +
|
|
40
|
-
'docs/architecture.md describes.');
|
|
36
|
+
super(refusalMessage(reason, partyId, storeVersion, buildVersion, storageScope));
|
|
41
37
|
this.name = 'ControlStoreIncompatibleError';
|
|
38
|
+
this.reason = reason;
|
|
42
39
|
this.partyId = partyId;
|
|
43
40
|
this.storeVersion = storeVersion;
|
|
44
41
|
this.buildVersion = buildVersion;
|
|
@@ -47,32 +44,48 @@ export class ControlStoreIncompatibleError extends Error {
|
|
|
47
44
|
}
|
|
48
45
|
}
|
|
49
46
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
47
|
+
* The message for each {@link ControlStoreIncompatibility}. Only the two recreate cases advise
|
|
48
|
+
* recreating: a store a newer release migrated holds rows written since, and recreating it
|
|
49
|
+
* would throw them away.
|
|
52
50
|
*/
|
|
53
|
-
function
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
function refusalMessage(reason, partyId, storeVersion, buildVersion, storageScope) {
|
|
52
|
+
const store = `The control store for party ${JSON.stringify(partyId)}`;
|
|
53
|
+
const versions = `it records control schema version ${storeVersion}; this build declares ${buildVersion}`;
|
|
54
|
+
const recreate = 'Run a release whose control schema matches the store, or recreate the control store ' +
|
|
55
|
+
`(storage scope ${storageScope}) as docs/architecture.md describes.`;
|
|
56
|
+
switch (reason) {
|
|
57
|
+
case 'newer-release':
|
|
58
|
+
return `${store} was migrated by a newer release (${versions}). Update this app or node to that ` +
|
|
59
|
+
'release or a later one; the store and its rows are intact.';
|
|
60
|
+
case 'before-migrations':
|
|
61
|
+
return `${store} was written before control schema migrations (${versions}; migrations start at ` +
|
|
62
|
+
`version ${CONTROL_SCHEMA_BASELINE_VERSION}, and docs/architecture.md says why earlier stores are not ` +
|
|
63
|
+
`migrated), so this build cannot upgrade it in place. ${recreate}`;
|
|
64
|
+
case 'not-migratable':
|
|
65
|
+
return `${store} cannot be migrated to this build's control schema (${versions}): applying it would ` +
|
|
66
|
+
`rewrite or discard stored rows. ${recreate}`;
|
|
56
67
|
}
|
|
57
|
-
return storeVersion < buildVersion
|
|
58
|
-
? 'was created by an older release'
|
|
59
|
-
: 'was created under the same control schema version';
|
|
60
68
|
}
|
|
61
69
|
/**
|
|
62
|
-
* Throw {@link ControlStoreIncompatibleError} when
|
|
63
|
-
* hydrated store
|
|
64
|
-
* `declare schema CadreControl` to have run, and runs only `diff schema`, which
|
|
70
|
+
* Throw {@link ControlStoreIncompatibleError} when the declared control schema must not be applied
|
|
71
|
+
* to the hydrated store; return having run nothing otherwise, and the apply then migrates the
|
|
72
|
+
* store. Needs `declare schema CadreControl` to have run, and runs only `diff schema`, which
|
|
73
|
+
* executes no DDL.
|
|
65
74
|
*
|
|
66
75
|
* A cold store (the hydrated catalog lists no control table) passes without a diff: the apply
|
|
67
|
-
* creates everything. A warm store is refused
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
76
|
+
* creates everything. A warm store is refused for the first of these that holds
|
|
77
|
+
* ({@link ControlStoreIncompatibility}):
|
|
78
|
+
* - its version is above the build's: even a diff that only adds (the newer release no longer
|
|
79
|
+
* declares something this build does) would put back what that release removed, and the newer
|
|
80
|
+
* release would then refuse its own store;
|
|
81
|
+
* - its version is below the baseline, whatever the diff: a store written by 1.16.0 or earlier,
|
|
82
|
+
* which the baseline paragraph of docs/architecture.md explains cannot be migrated;
|
|
83
|
+
* - any pending statement is `unmigratable` ({@link classifyControlSchemaChange}).
|
|
73
84
|
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
85
|
+
* Every `additive` and `catalog-only` change passes, so a store from an older migratable
|
|
86
|
+
* release warm-starts and the apply brings it to this build's version. A store that is both
|
|
87
|
+
* older than the baseline and not migratable reports `before-migrations`, whose message gives the
|
|
88
|
+
* recreate advice and points at the explanation.
|
|
76
89
|
*/
|
|
77
90
|
export async function refuseIncompatibleControlStore(db, partyId) {
|
|
78
91
|
if (!isWarmControlStore(db)) {
|
|
@@ -81,11 +94,20 @@ export async function refuseIncompatibleControlStore(db, partyId) {
|
|
|
81
94
|
const storeVersion = schemaVersionOf(db.schemaManager.getTable(CONTROL_SCHEMA_NAME, VERSION_TABLE)?.tags);
|
|
82
95
|
const buildVersion = declaredSchemaVersion(db);
|
|
83
96
|
const pending = await pendingControlSchemaChanges(db);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
97
|
+
const reason = incompatibilityOf(storeVersion, buildVersion, pending);
|
|
98
|
+
if (reason !== undefined) {
|
|
99
|
+
throw new ControlStoreIncompatibleError(reason, partyId, storeVersion, buildVersion, pending.map((change) => change.ddl));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/** The first {@link ControlStoreIncompatibility} that holds for a warm store, or undefined when the apply may migrate it. */
|
|
103
|
+
function incompatibilityOf(storeVersion, buildVersion, pending) {
|
|
104
|
+
if (storeVersion > buildVersion) {
|
|
105
|
+
return 'newer-release';
|
|
106
|
+
}
|
|
107
|
+
if (storeVersion < CONTROL_SCHEMA_BASELINE_VERSION) {
|
|
108
|
+
return 'before-migrations';
|
|
88
109
|
}
|
|
110
|
+
return pending.some((change) => change.kind === 'unmigratable') ? 'not-migratable' : undefined;
|
|
89
111
|
}
|
|
90
112
|
/** Whether the hydrated catalog lists at least one control table, i.e. the store was written before. */
|
|
91
113
|
function isWarmControlStore(db) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-schema-version.js","sourceRoot":"","sources":["../src/control-schema-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,MAAM,EAAsE,MAAM,kBAAkB,CAAC;AAE9G,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"control-schema-version.js","sourceRoot":"","sources":["../src/control-schema-version.ts"],"names":[],"mappings":"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"}
|