@harperfast/harper-pro 5.0.28 → 5.0.29
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/core/package-lock.json +6 -6
- package/core/resources/RecordEncoder.ts +56 -3
- package/core/resources/Table.ts +23 -0
- package/core/resources/auditStore.ts +4 -1
- package/core/resources/databases.ts +10 -10
- package/core/static/defaultConfig.yaml +1 -0
- package/core/utility/hdbTerms.ts +1 -0
- package/dist/cloneNode/cloneNode.js +70 -18
- package/dist/cloneNode/cloneNode.js.map +1 -1
- package/dist/core/resources/RecordEncoder.js +57 -4
- package/dist/core/resources/RecordEncoder.js.map +1 -1
- package/dist/core/resources/Table.js +22 -0
- package/dist/core/resources/Table.js.map +1 -1
- package/dist/core/resources/auditStore.js +5 -1
- package/dist/core/resources/auditStore.js.map +1 -1
- package/dist/core/resources/databases.js +9 -9
- package/dist/core/resources/databases.js.map +1 -1
- package/dist/core/utility/hdbTerms.js +1 -0
- package/dist/core/utility/hdbTerms.js.map +1 -1
- package/npm-shrinkwrap.json +6 -6
- package/package.json +2 -2
- package/studio/web/assets/{index-BJjklK4V.js → index-BFZovM68.js} +5 -5
- package/studio/web/assets/{index-BJjklK4V.js.map → index-BFZovM68.js.map} +1 -1
- package/studio/web/assets/{index.lazy-DPTCQseJ.js → index.lazy-CTCt7C_C.js} +2 -2
- package/studio/web/assets/{index.lazy-DPTCQseJ.js.map → index.lazy-CTCt7C_C.js.map} +1 -1
- package/studio/web/assets/{profile-D77bwywc.js → profile-Dy4qT0vm.js} +2 -2
- package/studio/web/assets/{profile-D77bwywc.js.map → profile-Dy4qT0vm.js.map} +1 -1
- package/studio/web/assets/{status-ChxVrrli.js → status-DQBR5qBd.js} +2 -2
- package/studio/web/assets/{status-ChxVrrli.js.map → status-DQBR5qBd.js.map} +1 -1
- package/studio/web/index.html +1 -1
package/core/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "harper",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.29",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "harper",
|
|
9
|
-
"version": "5.0.
|
|
9
|
+
"version": "5.0.29",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@aws-sdk/client-s3": "^3.1012.0",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"minimist": "1.2.8",
|
|
61
61
|
"moment": "2.30.1",
|
|
62
62
|
"mqtt-packet": "~9.0.1",
|
|
63
|
-
"msgpackr": "1.
|
|
63
|
+
"msgpackr": "1.12.0",
|
|
64
64
|
"needle": "3.5.0",
|
|
65
65
|
"node-forge": "^1.3.1",
|
|
66
66
|
"node-stream-zip": "1.15.0",
|
|
@@ -8249,9 +8249,9 @@
|
|
|
8249
8249
|
"license": "MIT"
|
|
8250
8250
|
},
|
|
8251
8251
|
"node_modules/msgpackr": {
|
|
8252
|
-
"version": "1.
|
|
8253
|
-
"resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.
|
|
8254
|
-
"integrity": "sha512-
|
|
8252
|
+
"version": "1.12.0",
|
|
8253
|
+
"resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.12.0.tgz",
|
|
8254
|
+
"integrity": "sha512-ShViuAPS67t4m33mZtSokhAtfzTTZPxN7L6JwkhpTfCadm8NcMGBAZMakg1b7cZqFnJLqhh5b+lHJ2ejcM3qlw==",
|
|
8255
8255
|
"license": "MIT",
|
|
8256
8256
|
"optionalDependencies": {
|
|
8257
8257
|
"msgpackr-extract": "^3.0.2"
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { Encoder } from 'msgpackr';
|
|
9
|
+
import { get as envGet } from '../utility/environment/environmentManager.js';
|
|
10
|
+
import { CONFIG_PARAMS } from '../utility/hdbTerms.ts';
|
|
9
11
|
import {
|
|
10
12
|
HAS_PREVIOUS_RESIDENCY_ID,
|
|
11
13
|
HAS_CURRENT_RESIDENCY_ID,
|
|
@@ -90,6 +92,16 @@ export class RecordEncoder extends Encoder {
|
|
|
90
92
|
// long-lived primary store, so a wide/sparse schema (whose records vary by per-field value
|
|
91
93
|
// width) can grow it unbounded and exhaust memory. Caller-overridable; default caps it.
|
|
92
94
|
options.maxOwnStructures ??= 256;
|
|
95
|
+
// When random-access fields are disabled (storage.randomAccessFields=false), write records as
|
|
96
|
+
// classic shared structures instead of typed random-access structures. randomAccessStructure stays
|
|
97
|
+
// on so reads still decode either form — existing typed-struct data remains readable; only new
|
|
98
|
+
// writes change. lmdb-js does not forward non-whitelisted encoder options, so the flag is derived
|
|
99
|
+
// from the global config here rather than passed through the store options. Read at construction
|
|
100
|
+
// (DBI open, a cold path) so env/CLI config overrides are applied; an explicit option still wins
|
|
101
|
+
// (e.g. rocksdb-js's option spread, or tests).
|
|
102
|
+
if (options.readOnlyStructures === undefined && envGet(CONFIG_PARAMS.STORAGE_RANDOMACCESSFIELDS) === false) {
|
|
103
|
+
options.readOnlyStructures = true;
|
|
104
|
+
}
|
|
93
105
|
/**
|
|
94
106
|
* The base class for records that provides the read-only methods for accessing
|
|
95
107
|
* metadata and will be assigned computed property getters. On its own, these instances
|
|
@@ -206,7 +218,18 @@ export class RecordEncoder extends Encoder {
|
|
|
206
218
|
const superGetStructures = this.getStructures;
|
|
207
219
|
this.saveStructures = function (structures, isCompatible): boolean | undefined {
|
|
208
220
|
if (this.isRocksDB) {
|
|
209
|
-
|
|
221
|
+
// transactionSync returns the callback's value on commit, but returns `undefined`
|
|
222
|
+
// when the txn was aborted (it swallows ERR_ALREADY_ABORTED). The success path here
|
|
223
|
+
// returns an explicit `true`; anything else means the shared structures were NOT
|
|
224
|
+
// durably committed (a CAS conflict → `false`, or a swallowed abort → `undefined`).
|
|
225
|
+
//
|
|
226
|
+
// We must report a non-commit as `false` (not the buggy `undefined`, which msgpackr
|
|
227
|
+
// reads as success and then writes a record referencing a structure that was never
|
|
228
|
+
// saved → later "Record id is not defined" on decode). Returning `false` makes msgpackr
|
|
229
|
+
// re-pack; paired with msgpackr 1.11.14's structures-rebuild-on-save-failure fix, the
|
|
230
|
+
// re-pack reloads the durable structures, rebuilds the transition trie, re-mints, and
|
|
231
|
+
// re-saves — so the record always references a persisted structure.
|
|
232
|
+
const committed = this.rootStore.transactionSync(
|
|
210
233
|
(txn) => {
|
|
211
234
|
const sharedStructuresKey = [Symbol.for('structures'), this.name];
|
|
212
235
|
const existingStructuresBuffer = txn.getBinarySync(sharedStructuresKey);
|
|
@@ -219,10 +242,18 @@ export class RecordEncoder extends Encoder {
|
|
|
219
242
|
return false;
|
|
220
243
|
}
|
|
221
244
|
txn.putSync(sharedStructuresKey, structures);
|
|
222
|
-
|
|
245
|
+
return true;
|
|
223
246
|
},
|
|
224
247
|
{ retryOnBusy: true }
|
|
225
248
|
);
|
|
249
|
+
// Only record the structure update once the txn has actually committed. Setting it
|
|
250
|
+
// inside the callback would leave it dangling on an aborted txn and could flag a
|
|
251
|
+
// HAS_STRUCTURE_UPDATE in the audit log for a structure that was never persisted.
|
|
252
|
+
if (committed === true) {
|
|
253
|
+
this.structureUpdate = structures;
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
return false;
|
|
226
257
|
} else {
|
|
227
258
|
const result = superSaveStructures.call(this, structures, isCompatible);
|
|
228
259
|
this.structureUpdate = structures;
|
|
@@ -246,7 +277,14 @@ export class RecordEncoder extends Encoder {
|
|
|
246
277
|
let nextByte = buffer[start];
|
|
247
278
|
let metadataFlags = 0;
|
|
248
279
|
try {
|
|
249
|
-
|
|
280
|
+
// The metadata/timestamp prefix is detected heuristically by the first byte. For rocksdb a
|
|
281
|
+
// local-timestamp prefix starts with 66 — but 66 (0x42) is also classic shared-structure
|
|
282
|
+
// record-id #2, so a timestamp-less classic record beginning with that id is misread as a
|
|
283
|
+
// timestamped record (8 bytes stripped → corrupt). Callers that pass a value known to have no
|
|
284
|
+
// prefix (e.g. the audit store's getValue) set options.noMetadata to skip the heuristic. Typed
|
|
285
|
+
// structs start at 0x20-0x3f and never hit this, which is why it only surfaces with classic
|
|
286
|
+
// structures (random-access fields off).
|
|
287
|
+
if (!options?.noMetadata && ((this.isRocksDB && nextByte === 66) || (nextByte < 32 && end > 2))) {
|
|
250
288
|
// record with metadata
|
|
251
289
|
// this means that the record starts with a local timestamp (that was assigned by lmdb-js).
|
|
252
290
|
// we copy it so we can decode it as float-64; we need to do it first because if structural data
|
|
@@ -343,6 +381,21 @@ export class RecordEncoder extends Encoder {
|
|
|
343
381
|
}
|
|
344
382
|
}
|
|
345
383
|
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Encoder for custom-index object stores (e.g. HNSW vector graphs). These hold fixed-shape internal
|
|
387
|
+
* nodes — numeric-keyed per-level connection arrays and quantized bins — that depend on random-access
|
|
388
|
+
* struct encoding and are mutated in place during graph maintenance. Keep them writing typed structs
|
|
389
|
+
* even when storage.randomAccessFields disables structs for user tables: their node shapes are
|
|
390
|
+
* controlled, so the wide/heterogeneous OOM risk that motivates opt-out doesn't apply, and classic
|
|
391
|
+
* (frozen) decoding would break the in-place graph mutation.
|
|
392
|
+
*/
|
|
393
|
+
export class IndexRecordEncoder extends RecordEncoder {
|
|
394
|
+
constructor(options) {
|
|
395
|
+
options.readOnlyStructures = false;
|
|
396
|
+
super(options);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
346
399
|
function getTimestamp() {
|
|
347
400
|
TIMESTAMP_HOLDER[0] = TIMESTAMP_HOLDER[0] ^ 0x40; // restore the first byte, we xor to differentiate the first byte from structures
|
|
348
401
|
return TIMESTAMP_VIEW.getFloat64(0);
|
package/core/resources/Table.ts
CHANGED
|
@@ -94,6 +94,19 @@ const RECORD_PRUNING_INTERVAL = 60000; // one minute
|
|
|
94
94
|
envMngr.initSync();
|
|
95
95
|
const LMDB_PREFETCH_WRITES = envMngr.get(CONFIG_PARAMS.STORAGE_PREFETCHWRITES);
|
|
96
96
|
const LOCK_TIMEOUT = 10000;
|
|
97
|
+
|
|
98
|
+
// True only for frozen plain/record objects (the immutable decoded records). Excludes Buffers,
|
|
99
|
+
// TypedArrays, ArrayBuffers and primitives/null, which must not be shallow-copied via spread (that
|
|
100
|
+
// would corrupt binary values). Used to decide when to copy-on-mutate before stamping a record.
|
|
101
|
+
function isFrozenRecordObject(value: any): boolean {
|
|
102
|
+
return (
|
|
103
|
+
value !== null &&
|
|
104
|
+
typeof value === 'object' &&
|
|
105
|
+
!ArrayBuffer.isView(value) &&
|
|
106
|
+
!(value instanceof ArrayBuffer) &&
|
|
107
|
+
Object.isFrozen(value)
|
|
108
|
+
);
|
|
109
|
+
}
|
|
97
110
|
export const INVALIDATED = 1;
|
|
98
111
|
export const EVICTED = 8; // note that 2 is reserved for timestamps
|
|
99
112
|
const TEST_WRITE_KEY_BUFFER = Buffer.allocUnsafeSlow(8192);
|
|
@@ -1639,6 +1652,12 @@ export function makeTable(options) {
|
|
|
1639
1652
|
if (fullUpdate || (recordUpdate && hasChanges(this.#changes === recordUpdate ? this : recordUpdate))) {
|
|
1640
1653
|
if (!context?.source) {
|
|
1641
1654
|
transaction.checkOverloaded();
|
|
1655
|
+
// Records are intentionally immutable: decoded records are frozen (and 5.2 record
|
|
1656
|
+
// caching relies on it), so mutating in place would corrupt cached/shared state.
|
|
1657
|
+
// validate() coerces values and we stamp created/updated times + the primary key
|
|
1658
|
+
// below, so copy-on-mutate when recordUpdate is frozen (e.g. a record decoded during
|
|
1659
|
+
// log replay) instead of writing through the frozen object.
|
|
1660
|
+
if (isFrozenRecordObject(recordUpdate)) recordUpdate = { ...recordUpdate };
|
|
1642
1661
|
this.validate(recordUpdate, !fullUpdate);
|
|
1643
1662
|
if (updatedTimeProperty) {
|
|
1644
1663
|
recordUpdate[updatedTimeProperty.name] =
|
|
@@ -4255,6 +4274,10 @@ export function makeTable(options) {
|
|
|
4255
4274
|
}
|
|
4256
4275
|
}
|
|
4257
4276
|
if (typeof updatedRecord.toJSON === 'function') updatedRecord = updatedRecord.toJSON();
|
|
4277
|
+
// updatedRecord may still be a frozen record (e.g. a reused existingRecord); copy-on-mutate
|
|
4278
|
+
// before stamping the primary key below (records are immutable — 5.2 record caching relies
|
|
4279
|
+
// on it — so we must not write through the frozen object).
|
|
4280
|
+
if (isFrozenRecordObject(updatedRecord)) updatedRecord = { ...updatedRecord };
|
|
4258
4281
|
if (primaryKey && updatedRecord[primaryKey] !== id) updatedRecord[primaryKey] = id;
|
|
4259
4282
|
}
|
|
4260
4283
|
resolved = true;
|
|
@@ -552,7 +552,10 @@ export function readAuditEntry(buffer: Uint8Array, start = 0, end = undefined):
|
|
|
552
552
|
if (action & HAS_RECORD || (action & HAS_PARTIAL_RECORD && !fullRecord)) {
|
|
553
553
|
if (!value) {
|
|
554
554
|
value = decodeFromDatabase(
|
|
555
|
-
|
|
555
|
+
// the audit value has no on-disk timestamp/metadata prefix (the audit entry carries
|
|
556
|
+
// its own time), so skip the prefix heuristic — otherwise a classic record whose
|
|
557
|
+
// structure-id byte is 66 (0x42) is misread as a rocksdb timestamp. See RecordEncoder.decode.
|
|
558
|
+
() => store.decoder.decode(buffer.subarray(decoder.position, end), { noMetadata: true }),
|
|
556
559
|
store.rootStore
|
|
557
560
|
);
|
|
558
561
|
}
|
|
@@ -22,7 +22,7 @@ import harperLogger from '../utility/logging/harper_logger.js';
|
|
|
22
22
|
const { forComponent } = harperLogger;
|
|
23
23
|
import * as manageThreads from '../server/threads/manageThreads.js';
|
|
24
24
|
import { openAuditStore, readAuditEntry, createAuditEntry, type AuditRecord } from './auditStore.ts';
|
|
25
|
-
import { handleLocalTimeForGets } from './RecordEncoder.ts';
|
|
25
|
+
import { handleLocalTimeForGets, IndexRecordEncoder } from './RecordEncoder.ts';
|
|
26
26
|
import { deleteRootBlobPathsForDB } from './blob.ts';
|
|
27
27
|
import { CUSTOM_INDEXES } from './indexes/customIndexes.ts';
|
|
28
28
|
import { OpenDBIObject } from '../utility/lmdb/OpenDBIObject.js';
|
|
@@ -134,15 +134,9 @@ function openRocksDatabase(path: string, options: RocksDatabaseOptions & { dupSo
|
|
|
134
134
|
const writeBufferManagerAllowStall = envGet(CONFIG_PARAMS.STORAGE_ROCKS_WRITEBUFFERMANAGERALLOWSTALL);
|
|
135
135
|
RocksDatabase.config({
|
|
136
136
|
blockCacheSize,
|
|
137
|
-
...(typeof writeBufferManagerSize === 'number' && writeBufferManagerSize > 0
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
...(typeof writeBufferManagerCostToCache === 'boolean'
|
|
141
|
-
? { writeBufferManagerCostToCache }
|
|
142
|
-
: {}),
|
|
143
|
-
...(typeof writeBufferManagerAllowStall === 'boolean'
|
|
144
|
-
? { writeBufferManagerAllowStall }
|
|
145
|
-
: {}),
|
|
137
|
+
...(typeof writeBufferManagerSize === 'number' && writeBufferManagerSize > 0 ? { writeBufferManagerSize } : {}),
|
|
138
|
+
...(typeof writeBufferManagerCostToCache === 'boolean' ? { writeBufferManagerCostToCache } : {}),
|
|
139
|
+
...(typeof writeBufferManagerAllowStall === 'boolean' ? { writeBufferManagerAllowStall } : {}),
|
|
146
140
|
});
|
|
147
141
|
if (!existsSync(path)) {
|
|
148
142
|
mkdirSync(path, { recursive: true });
|
|
@@ -824,6 +818,12 @@ function openIndex(dbiKey: string, rootStore: RootDatabaseKind, attribute: any)
|
|
|
824
818
|
const objectStorage =
|
|
825
819
|
attribute.isPrimaryKey || (attribute.indexed.type && CUSTOM_INDEXES[attribute.indexed.type]?.useObjectStore);
|
|
826
820
|
const dbiInit = createOpenDBIObject(!objectStorage, objectStorage);
|
|
821
|
+
// Custom-index object stores (e.g. HNSW vector graphs) must keep writing typed structs regardless
|
|
822
|
+
// of the storage.randomAccessFields opt-out — their internal nodes are mutated in place and depend
|
|
823
|
+
// on random-access struct encoding (see IndexRecordEncoder).
|
|
824
|
+
if (attribute.indexed?.type && CUSTOM_INDEXES[attribute.indexed.type]?.useObjectStore) {
|
|
825
|
+
dbiInit.encoder = { Encoder: IndexRecordEncoder };
|
|
826
|
+
}
|
|
827
827
|
let dbi:
|
|
828
828
|
| LMDBDatabase
|
|
829
829
|
| (RocksDatabase & {
|
package/core/utility/hdbTerms.ts
CHANGED
|
@@ -554,6 +554,7 @@ export const CONFIG_PARAMS = {
|
|
|
554
554
|
STORAGE_WRITEASYNC: 'storage_writeAsync',
|
|
555
555
|
STORAGE_OVERLAPPINGSYNC: 'storage_overlappingSync',
|
|
556
556
|
STORAGE_CACHING: 'storage_caching',
|
|
557
|
+
STORAGE_RANDOMACCESSFIELDS: 'storage_randomAccessFields',
|
|
557
558
|
STORAGE_COMPRESSION: 'storage_compression',
|
|
558
559
|
STORAGE_NOREADAHEAD: 'storage_noReadAhead',
|
|
559
560
|
STORAGE_PREFETCHWRITES: 'storage_prefetchWrites',
|
|
@@ -72,8 +72,7 @@ const hdbTerms_ts_1 = require("../core/utility/hdbTerms.js");
|
|
|
72
72
|
* - CLONE_SSH_KEYS: Clone SSH keys from leader (default: true)
|
|
73
73
|
* - CLONE_JWT_KEYS: Clone JWT keys from leader (default: true)
|
|
74
74
|
* - ALLOW_SELF_SIGNED: Allow self-signed certificates to be used for authentication (default: false)
|
|
75
|
-
* -
|
|
76
|
-
* - CLONE_SYNC_TIMEOUT: Sync timeout in milliseconds (default: 30000)
|
|
75
|
+
* - CLONE_SYNC_TIMEOUT: Sync timeout in milliseconds (default: 300000)
|
|
77
76
|
* - REPLICATION_PORT: Port for replication
|
|
78
77
|
* - FORCE_CLONE: Force clone even if node exists (default: false)
|
|
79
78
|
* - ROOTPATH: HarperDB installation root path
|
|
@@ -88,7 +87,7 @@ const hdbTerms_ts_1 = require("../core/utility/hdbTerms.js");
|
|
|
88
87
|
* --node-hostname: Hostname for this node
|
|
89
88
|
* --replication-port: Port for replication
|
|
90
89
|
* --skip-sync-monitor: Skip monitoring sync status (default: false)
|
|
91
|
-
* --sync-timeout: Sync timeout in milliseconds (default:
|
|
90
|
+
* --sync-timeout: Sync timeout in milliseconds (default: 300000)
|
|
92
91
|
* --skip-ssh-keys: Skip cloning SSH keys (default: false)
|
|
93
92
|
* --skip-jwt-keys: Skip cloning JWT keys (default: false)
|
|
94
93
|
* --force-clone: Force clone even if node exists (default: false)
|
|
@@ -254,8 +253,21 @@ async function cloneNode() {
|
|
|
254
253
|
log(`Response from set node: ${setNodeResponse}`);
|
|
255
254
|
await cloneJWTKeys();
|
|
256
255
|
await cloneSSHKeys();
|
|
257
|
-
// Monitor
|
|
258
|
-
|
|
256
|
+
// Monitor synchronization after cloning. Only finalize the clone (mark it cloned, log complete)
|
|
257
|
+
// once sync is confirmed and availability has been published as Available — a timeout or failure
|
|
258
|
+
// must not be treated as success.
|
|
259
|
+
const syncOutcome = await monitorSync();
|
|
260
|
+
if (syncOutcome === 'failed') {
|
|
261
|
+
// Leave Harper running so get_status stays queryable for the control plane (availability is
|
|
262
|
+
// now Unavailable). Throwing here would propagate to bin/harper.js and exit the already-started
|
|
263
|
+
// process. Explicitly clear the cloned flag rather than just skipping the write: on a forced
|
|
264
|
+
// reclone, cloneConfig() has already carried the previous `cloned: true` into the rewritten
|
|
265
|
+
// config, so a bare return would leave it set and the next non-forced start would skip cloning
|
|
266
|
+
// despite the unconfirmed sync. Clearing it ensures a subsequent start retries the clone.
|
|
267
|
+
(0, configUtils_js_1.updateConfigValue)(hdbTerms_ts_1.CONFIG_PARAMS.CLONED, false);
|
|
268
|
+
log(`Clone from leader node ${leaderURL} did not complete synchronization; node is running but Unavailable and not marked as cloned`, 'error');
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
259
271
|
// Delete clone-temp-admin only after monitorSync() so that the account remains valid while
|
|
260
272
|
// the leader establishes replication and syncs real users. Deleting it earlier leaves the
|
|
261
273
|
// node with no users during setNode(), which prevents replication from being established.
|
|
@@ -301,38 +313,76 @@ async function cloneNode() {
|
|
|
301
313
|
log(`Clone from leader node ${leaderURL} complete`);
|
|
302
314
|
}
|
|
303
315
|
/**
|
|
304
|
-
* Monitors database synchronization
|
|
305
|
-
*
|
|
316
|
+
* Monitors database synchronization after cloning and drives this node's `availability` status.
|
|
317
|
+
*
|
|
318
|
+
* `availability` is a cooperative, multi-writer status whose contract is owned by core; this is the
|
|
319
|
+
* clone producer upholding it. It is published as Unavailable up front so `get_status` always
|
|
320
|
+
* carries a definite signal for the control plane — never an absent field — and is only flipped to
|
|
321
|
+
* Available once sync is confirmed and that write succeeds. On any failure it is left Unavailable.
|
|
322
|
+
*
|
|
323
|
+
* Polls at regular intervals until sync completes or the timeout is reached.
|
|
306
324
|
*/
|
|
307
325
|
async function monitorSync() {
|
|
308
|
-
if (skipSyncMonitor)
|
|
309
|
-
return;
|
|
310
|
-
const { clusterStatus } = await import('../replication/clusterStatus.js');
|
|
311
326
|
const { set: setStatus } = await import('../core/server/status/index.js');
|
|
327
|
+
if (skipSyncMonitor) {
|
|
328
|
+
// The operator opted out of the sync gate, so the clone is declared ready. Publish Available
|
|
329
|
+
// (best-effort) — this also clears any Unavailable persisted by a prior failed attempt, since
|
|
330
|
+
// hdb_status is not replicated and survives restarts — keeping availability consistent with the
|
|
331
|
+
// cloned flag the caller sets for this outcome.
|
|
332
|
+
log('Skipping sync monitor (skip-sync-monitor); marking node Available without verifying sync');
|
|
333
|
+
try {
|
|
334
|
+
await setStatus({ id: 'availability', status: 'Available' });
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
log(`Failed to set availability status to Available: ${err}`, 'error');
|
|
338
|
+
}
|
|
339
|
+
return 'skipped';
|
|
340
|
+
}
|
|
341
|
+
const { clusterStatus } = await import('../replication/clusterStatus.js');
|
|
342
|
+
// The node is not ready to serve traffic until the clone has caught up with the leader. Publish
|
|
343
|
+
// Unavailable up front so get_status always carries a definite availability signal for the whole
|
|
344
|
+
// sync wait. Best-effort: a failed write here must not abort the clone (the loop still runs and
|
|
345
|
+
// publishes Available on success).
|
|
346
|
+
try {
|
|
347
|
+
await setStatus({ id: 'availability', status: 'Unavailable' });
|
|
348
|
+
}
|
|
349
|
+
catch (err) {
|
|
350
|
+
log(`Failed to set availability status to Unavailable: ${err}`, 'error');
|
|
351
|
+
}
|
|
352
|
+
// Test/diagnostic hook (not a user-facing option): deterministically exercise the
|
|
353
|
+
// unconfirmed-sync failure path. Loopback replication is too fast and bidirectional to force a
|
|
354
|
+
// real sync timeout in tests, so this lets the failure-branch behavior — stay Unavailable, do not
|
|
355
|
+
// mark cloned, keep the node running — be asserted deterministically.
|
|
356
|
+
if (process.env.CLONE_SIMULATE_SYNC_FAILURE === 'true') {
|
|
357
|
+
log('CLONE_SIMULATE_SYNC_FAILURE set; treating clone sync as unconfirmed', 'error');
|
|
358
|
+
return 'failed';
|
|
359
|
+
}
|
|
312
360
|
// Get last updated record timestamps for all DB and write to file
|
|
313
361
|
// These values can be used for checking when the clone replication has caught up with the leader
|
|
314
362
|
const targetTimestamps = await getLastUpdatedRecord();
|
|
315
363
|
if (!targetTimestamps || Object.keys(targetTimestamps).length === 0) {
|
|
316
|
-
log('No target timestamps available to check synchronization status', 'error');
|
|
317
|
-
return;
|
|
364
|
+
log('No target timestamps available to check synchronization status; leaving availability Unavailable', 'error');
|
|
365
|
+
return 'failed';
|
|
318
366
|
}
|
|
319
367
|
log(`Starting to monitor sync status. Will check every ${DEFAULT_SYNC_CHECK_INTERVAL_MS}ms for up to ${Math.round(syncTimeoutMs / 60000)} minutes`);
|
|
320
368
|
const timeoutAt = Date.now() + syncTimeoutMs;
|
|
321
|
-
let syncComplete = false;
|
|
322
369
|
let loopCount = 0;
|
|
323
|
-
while (
|
|
370
|
+
while (Date.now() < timeoutAt) {
|
|
324
371
|
try {
|
|
325
|
-
syncComplete = await checkSyncStatus(targetTimestamps, clusterStatus);
|
|
372
|
+
const syncComplete = await checkSyncStatus(targetTimestamps, clusterStatus);
|
|
326
373
|
if (syncComplete) {
|
|
327
374
|
log('All databases synchronized');
|
|
375
|
+
// Only report Available — and let the caller finalize the clone — once the status
|
|
376
|
+
// write itself succeeds. A failed write must not be treated as a successful sync,
|
|
377
|
+
// otherwise the node would be marked cloned without a readiness signal.
|
|
328
378
|
try {
|
|
329
379
|
await setStatus({ id: 'availability', status: 'Available' });
|
|
330
380
|
}
|
|
331
381
|
catch (err) {
|
|
332
|
-
|
|
333
|
-
|
|
382
|
+
log(`Synchronized but failed to set availability to Available: ${err}; leaving Unavailable`, 'error');
|
|
383
|
+
return 'failed';
|
|
334
384
|
}
|
|
335
|
-
|
|
385
|
+
return 'synced';
|
|
336
386
|
}
|
|
337
387
|
// Log every other iteration to reduce noise
|
|
338
388
|
if (loopCount % 2 === 0) {
|
|
@@ -346,6 +396,8 @@ async function monitorSync() {
|
|
|
346
396
|
await (0, promises_1.setTimeout)(DEFAULT_SYNC_CHECK_INTERVAL_MS); // Still wait on error
|
|
347
397
|
}
|
|
348
398
|
}
|
|
399
|
+
log(`Databases did not synchronize within ${Math.round(syncTimeoutMs / 60000)} minutes; leaving availability Unavailable and not marking node as cloned`, 'error');
|
|
400
|
+
return 'failed';
|
|
349
401
|
}
|
|
350
402
|
/**
|
|
351
403
|
* Check if all databases are synchronized by comparing timestamps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloneNode.js","sourceRoot":"","sources":["../../cloneNode/cloneNode.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloneNode.js","sourceRoot":"","sources":["../../cloneNode/cloneNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,13 +39,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
39
39
|
};
|
|
40
40
|
})();
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.RecordEncoder = exports.lastMetadata = exports.lastValueEncoding = exports.entryMap = exports.HAS_ADDITIONAL_AUDIT_REFS = exports.HAS_STRUCTURE_UPDATE = exports.PENDING_LOCAL_TIME = exports.HAS_NODE_ID = exports.HAS_RESIDENCY_ID = exports.HAS_EXPIRATION = exports.TIMESTAMP_RECORD_PREVIOUS = exports.TIMESTAMP_ASSIGN_PREVIOUS = exports.TIMESTAMP_ASSIGN_LAST = exports.TIMESTAMP_ASSIGN_NEW = exports.NO_TIMESTAMP = exports.ENTRY = exports.METADATA = exports.LOCAL_TIMESTAMP = exports.NEW_TIMESTAMP_PLACEHOLDER = exports.PREVIOUS_TIMESTAMP_PLACEHOLDER = exports.LAST_TIMESTAMP_PLACEHOLDER = exports.TIMESTAMP_PLACEHOLDER = void 0;
|
|
42
|
+
exports.IndexRecordEncoder = exports.RecordEncoder = exports.lastMetadata = exports.lastValueEncoding = exports.entryMap = exports.HAS_ADDITIONAL_AUDIT_REFS = exports.HAS_STRUCTURE_UPDATE = exports.PENDING_LOCAL_TIME = exports.HAS_NODE_ID = exports.HAS_RESIDENCY_ID = exports.HAS_EXPIRATION = exports.TIMESTAMP_RECORD_PREVIOUS = exports.TIMESTAMP_ASSIGN_PREVIOUS = exports.TIMESTAMP_ASSIGN_LAST = exports.TIMESTAMP_ASSIGN_NEW = exports.NO_TIMESTAMP = exports.ENTRY = exports.METADATA = exports.LOCAL_TIMESTAMP = exports.NEW_TIMESTAMP_PLACEHOLDER = exports.PREVIOUS_TIMESTAMP_PLACEHOLDER = exports.LAST_TIMESTAMP_PLACEHOLDER = exports.TIMESTAMP_PLACEHOLDER = void 0;
|
|
43
43
|
exports.handleLocalTimeForGets = handleLocalTimeForGets;
|
|
44
44
|
exports.setNextEncoding = setNextEncoding;
|
|
45
45
|
exports.recordUpdater = recordUpdater;
|
|
46
46
|
exports.setAdditionalAuditRefs = setAdditionalAuditRefs;
|
|
47
47
|
exports.removeEntry = removeEntry;
|
|
48
48
|
const msgpackr_1 = require("msgpackr");
|
|
49
|
+
const environmentManager_js_1 = require("../utility/environment/environmentManager.js");
|
|
50
|
+
const hdbTerms_ts_1 = require("../utility/hdbTerms.js");
|
|
49
51
|
const auditStore_ts_1 = require("./auditStore.js");
|
|
50
52
|
const harperLogger = __importStar(require("../utility/logging/harper_logger.js"));
|
|
51
53
|
require("./blob.js");
|
|
@@ -94,6 +96,16 @@ class RecordEncoder extends msgpackr_1.Encoder {
|
|
|
94
96
|
// long-lived primary store, so a wide/sparse schema (whose records vary by per-field value
|
|
95
97
|
// width) can grow it unbounded and exhaust memory. Caller-overridable; default caps it.
|
|
96
98
|
options.maxOwnStructures ??= 256;
|
|
99
|
+
// When random-access fields are disabled (storage.randomAccessFields=false), write records as
|
|
100
|
+
// classic shared structures instead of typed random-access structures. randomAccessStructure stays
|
|
101
|
+
// on so reads still decode either form — existing typed-struct data remains readable; only new
|
|
102
|
+
// writes change. lmdb-js does not forward non-whitelisted encoder options, so the flag is derived
|
|
103
|
+
// from the global config here rather than passed through the store options. Read at construction
|
|
104
|
+
// (DBI open, a cold path) so env/CLI config overrides are applied; an explicit option still wins
|
|
105
|
+
// (e.g. rocksdb-js's option spread, or tests).
|
|
106
|
+
if (options.readOnlyStructures === undefined && (0, environmentManager_js_1.get)(hdbTerms_ts_1.CONFIG_PARAMS.STORAGE_RANDOMACCESSFIELDS) === false) {
|
|
107
|
+
options.readOnlyStructures = true;
|
|
108
|
+
}
|
|
97
109
|
/**
|
|
98
110
|
* The base class for records that provides the read-only methods for accessing
|
|
99
111
|
* metadata and will be assigned computed property getters. On its own, these instances
|
|
@@ -212,7 +224,18 @@ class RecordEncoder extends msgpackr_1.Encoder {
|
|
|
212
224
|
const superGetStructures = this.getStructures;
|
|
213
225
|
this.saveStructures = function (structures, isCompatible) {
|
|
214
226
|
if (this.isRocksDB) {
|
|
215
|
-
|
|
227
|
+
// transactionSync returns the callback's value on commit, but returns `undefined`
|
|
228
|
+
// when the txn was aborted (it swallows ERR_ALREADY_ABORTED). The success path here
|
|
229
|
+
// returns an explicit `true`; anything else means the shared structures were NOT
|
|
230
|
+
// durably committed (a CAS conflict → `false`, or a swallowed abort → `undefined`).
|
|
231
|
+
//
|
|
232
|
+
// We must report a non-commit as `false` (not the buggy `undefined`, which msgpackr
|
|
233
|
+
// reads as success and then writes a record referencing a structure that was never
|
|
234
|
+
// saved → later "Record id is not defined" on decode). Returning `false` makes msgpackr
|
|
235
|
+
// re-pack; paired with msgpackr 1.11.14's structures-rebuild-on-save-failure fix, the
|
|
236
|
+
// re-pack reloads the durable structures, rebuilds the transition trie, re-mints, and
|
|
237
|
+
// re-saves — so the record always references a persisted structure.
|
|
238
|
+
const committed = this.rootStore.transactionSync((txn) => {
|
|
216
239
|
const sharedStructuresKey = [Symbol.for('structures'), this.name];
|
|
217
240
|
const existingStructuresBuffer = txn.getBinarySync(sharedStructuresKey);
|
|
218
241
|
const existingStructures = existingStructuresBuffer ? this.decode(existingStructuresBuffer) : undefined;
|
|
@@ -225,8 +248,16 @@ class RecordEncoder extends msgpackr_1.Encoder {
|
|
|
225
248
|
return false;
|
|
226
249
|
}
|
|
227
250
|
txn.putSync(sharedStructuresKey, structures);
|
|
228
|
-
|
|
251
|
+
return true;
|
|
229
252
|
}, { retryOnBusy: true });
|
|
253
|
+
// Only record the structure update once the txn has actually committed. Setting it
|
|
254
|
+
// inside the callback would leave it dangling on an aborted txn and could flag a
|
|
255
|
+
// HAS_STRUCTURE_UPDATE in the audit log for a structure that was never persisted.
|
|
256
|
+
if (committed === true) {
|
|
257
|
+
this.structureUpdate = structures;
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
return false;
|
|
230
261
|
}
|
|
231
262
|
else {
|
|
232
263
|
const result = superSaveStructures.call(this, structures, isCompatible);
|
|
@@ -252,7 +283,14 @@ class RecordEncoder extends msgpackr_1.Encoder {
|
|
|
252
283
|
let nextByte = buffer[start];
|
|
253
284
|
let metadataFlags = 0;
|
|
254
285
|
try {
|
|
255
|
-
|
|
286
|
+
// The metadata/timestamp prefix is detected heuristically by the first byte. For rocksdb a
|
|
287
|
+
// local-timestamp prefix starts with 66 — but 66 (0x42) is also classic shared-structure
|
|
288
|
+
// record-id #2, so a timestamp-less classic record beginning with that id is misread as a
|
|
289
|
+
// timestamped record (8 bytes stripped → corrupt). Callers that pass a value known to have no
|
|
290
|
+
// prefix (e.g. the audit store's getValue) set options.noMetadata to skip the heuristic. Typed
|
|
291
|
+
// structs start at 0x20-0x3f and never hit this, which is why it only surfaces with classic
|
|
292
|
+
// structures (random-access fields off).
|
|
293
|
+
if (!options?.noMetadata && ((this.isRocksDB && nextByte === 66) || (nextByte < 32 && end > 2))) {
|
|
256
294
|
// record with metadata
|
|
257
295
|
// this means that the record starts with a local timestamp (that was assigned by lmdb-js).
|
|
258
296
|
// we copy it so we can decode it as float-64; we need to do it first because if structural data
|
|
@@ -346,6 +384,21 @@ class RecordEncoder extends msgpackr_1.Encoder {
|
|
|
346
384
|
}
|
|
347
385
|
}
|
|
348
386
|
exports.RecordEncoder = RecordEncoder;
|
|
387
|
+
/**
|
|
388
|
+
* Encoder for custom-index object stores (e.g. HNSW vector graphs). These hold fixed-shape internal
|
|
389
|
+
* nodes — numeric-keyed per-level connection arrays and quantized bins — that depend on random-access
|
|
390
|
+
* struct encoding and are mutated in place during graph maintenance. Keep them writing typed structs
|
|
391
|
+
* even when storage.randomAccessFields disables structs for user tables: their node shapes are
|
|
392
|
+
* controlled, so the wide/heterogeneous OOM risk that motivates opt-out doesn't apply, and classic
|
|
393
|
+
* (frozen) decoding would break the in-place graph mutation.
|
|
394
|
+
*/
|
|
395
|
+
class IndexRecordEncoder extends RecordEncoder {
|
|
396
|
+
constructor(options) {
|
|
397
|
+
options.readOnlyStructures = false;
|
|
398
|
+
super(options);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
exports.IndexRecordEncoder = IndexRecordEncoder;
|
|
349
402
|
function getTimestamp() {
|
|
350
403
|
TIMESTAMP_HOLDER[0] = TIMESTAMP_HOLDER[0] ^ 0x40; // restore the first byte, we xor to differentiate the first byte from structures
|
|
351
404
|
return TIMESTAMP_VIEW.getFloat64(0);
|