@lossless.org/nosqldb 9.0.1 → 10.1.1
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_rust/rustdb_linux_amd64 +0 -0
- package/dist_rust/rustdb_linux_amd64.tsrust-build.json +4 -4
- package/dist_rust/rustdb_linux_amd64_musl +0 -0
- package/dist_rust/rustdb_linux_amd64_musl.tsrust-build.json +4 -4
- package/dist_rust/rustdb_linux_arm64 +0 -0
- package/dist_rust/rustdb_linux_arm64.tsrust-build.json +4 -4
- package/dist_rust/rustdb_linux_arm64_musl +0 -0
- package/dist_rust/rustdb_linux_arm64_musl.tsrust-build.json +4 -4
- package/dist_rust/rustdb_macos_amd64 +0 -0
- package/dist_rust/rustdb_macos_amd64.tsrust-build.json +4 -4
- package/dist_rust/rustdb_macos_arm64 +0 -0
- package/dist_rust/rustdb_macos_arm64.tsrust-build.json +4 -4
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/ts_local/classes.localnosqldb.d.ts +15 -5
- package/dist_ts/ts_local/classes.localnosqldb.js +119 -11
- package/dist_ts/ts_nosqldb/file-storage-startup.d.ts +1 -1
- package/dist_ts/ts_nosqldb/file-storage-startup.js +4 -2
- package/dist_ts/ts_nosqldb/index.d.ts +3 -0
- package/dist_ts/ts_nosqldb/index.js +2 -1
- package/dist_ts/ts_nosqldb/rust-db-bridge.d.ts +10 -0
- package/dist_ts/ts_nosqldb/rust-db-bridge.js +37 -5
- package/dist_ts/ts_nosqldb/server/classes.nosqldbserver.d.ts +1 -1
- package/dist_ts/ts_nosqldb/server/classes.nosqldbserver.js +2 -1
- package/dist_ts/ts_nosqldb/service-types.d.ts +4 -0
- package/dist_ts/ts_nosqldb/service-types.js +1 -1
- package/dist_ts/ts_nosqldb/stopped-storage.d.ts +69 -0
- package/dist_ts/ts_nosqldb/stopped-storage.js +44 -0
- package/dist_ts/ts_nosqldb/storage-root-alignment.d.ts +58 -0
- package/dist_ts/ts_nosqldb/storage-root-alignment.js +129 -0
- package/dist_ts/ts_nosqldb/storage-root-relocation.js +12 -10
- package/package.json +1 -1
- package/readme.md +176 -13
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/ts_local/classes.localnosqldb.ts +123 -15
- package/ts/ts_nosqldb/file-storage-startup.ts +3 -2
- package/ts/ts_nosqldb/index.ts +13 -0
- package/ts/ts_nosqldb/rust-db-bridge.ts +52 -4
- package/ts/ts_nosqldb/server/classes.nosqldbserver.ts +2 -1
- package/ts/ts_nosqldb/service-types.ts +4 -0
- package/ts/ts_nosqldb/stopped-storage.ts +108 -0
- package/ts/ts_nosqldb/storage-root-alignment.ts +176 -0
- package/ts/ts_nosqldb/storage-root-relocation.ts +9 -7
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import { normalizeLocalNoSqlDbStoppedStorageRootRelocationInput } from './storage-root-relocation.js';
|
|
3
|
+
import { NoSqlDbStoppedOperationError, normalizeStoppedStorageRootInspectionInput, } from './stopped-storage.js';
|
|
4
|
+
function fail(code) { throw new NoSqlDbStoppedOperationError(code); }
|
|
5
|
+
const data = (value, required, optional = []) => {
|
|
6
|
+
if (!value || Object.getPrototypeOf(value) !== Object.prototype)
|
|
7
|
+
return false;
|
|
8
|
+
const keys = Reflect.ownKeys(value);
|
|
9
|
+
if (keys.some(key => typeof key !== 'string' || ![...required, ...optional].includes(key)))
|
|
10
|
+
return false;
|
|
11
|
+
return required.every(key => keys.includes(key)) && keys.every(key => {
|
|
12
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
13
|
+
return descriptor.enumerable && 'value' in descriptor;
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
const sha = (value) => typeof value === 'string' && /^[0-9a-f]{64}$/.test(value);
|
|
17
|
+
const decimal = (value) => typeof value === 'string'
|
|
18
|
+
&& /^(0|[1-9][0-9]{0,19})$/.test(value) && BigInt(value) <= 18446744073709551615n;
|
|
19
|
+
const lineage = (value) => typeof value === 'string' && value.length > 0
|
|
20
|
+
&& plugins.buffer.Buffer.byteLength(value) <= 256 && !/\p{Cc}/u.test(value);
|
|
21
|
+
const digest = (domain, payload) => plugins.crypto.createHash('sha256')
|
|
22
|
+
.update(domain).update(JSON.stringify(payload)).digest('hex');
|
|
23
|
+
export const normalizeStoppedStorageRootAlignmentInput = (value) => {
|
|
24
|
+
if (!data(value, ['folderPath', 'receiptPath', 'alignmentId', 'identityPolicy', 'attestLineageNeverFenced'], ['expect', 'acknowledgeUnverifiedCopy', 'dryRun']))
|
|
25
|
+
fail('INVALID_REQUEST');
|
|
26
|
+
try {
|
|
27
|
+
normalizeStoppedStorageRootInspectionInput({ folderPath: value.folderPath });
|
|
28
|
+
normalizeStoppedStorageRootInspectionInput({ folderPath: value.receiptPath });
|
|
29
|
+
normalizeLocalNoSqlDbStoppedStorageRootRelocationInput({ sourceFolderPath: value.folderPath,
|
|
30
|
+
destinationFolderPath: value.receiptPath, relocationId: value.alignmentId });
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
fail('INVALID_REQUEST');
|
|
34
|
+
}
|
|
35
|
+
if (value.identityPolicy !== 'fork' || value.attestLineageNeverFenced !== true
|
|
36
|
+
|| (value.dryRun !== undefined && typeof value.dryRun !== 'boolean'))
|
|
37
|
+
fail('INVALID_REQUEST');
|
|
38
|
+
let expect;
|
|
39
|
+
if (value.expect !== undefined) {
|
|
40
|
+
const pins = value.expect;
|
|
41
|
+
if (value.acknowledgeUnverifiedCopy !== undefined || !data(pins, ['groupId', 'timelineId', 'lsn', 'recordsSha256'], ['providerRootId'])
|
|
42
|
+
|| !lineage(pins.groupId) || !lineage(pins.timelineId) || !decimal(pins.lsn) || pins.lsn === '0'
|
|
43
|
+
|| !sha(pins.recordsSha256) || (pins.providerRootId !== undefined && !sha(pins.providerRootId)))
|
|
44
|
+
fail('INVALID_REQUEST');
|
|
45
|
+
expect = { groupId: pins.groupId, timelineId: pins.timelineId, lsn: pins.lsn, recordsSha256: pins.recordsSha256,
|
|
46
|
+
...(pins.providerRootId === undefined ? {} : { providerRootId: pins.providerRootId }) };
|
|
47
|
+
}
|
|
48
|
+
else if (value.acknowledgeUnverifiedCopy !== true)
|
|
49
|
+
fail('INVALID_REQUEST');
|
|
50
|
+
return { folderPath: value.folderPath, receiptPath: value.receiptPath, alignmentId: value.alignmentId,
|
|
51
|
+
identityPolicy: 'fork', attestLineageNeverFenced: true,
|
|
52
|
+
...(expect ? { expect } : { acknowledgeUnverifiedCopy: true }), ...(value.dryRun ? { dryRun: true } : {}) };
|
|
53
|
+
};
|
|
54
|
+
export const storageRootAlignmentRequestDigest = (request) => digest('smartdb.storage-root-alignment.request.v1\0', [request.folderPath, request.receiptPath, request.alignmentId,
|
|
55
|
+
request.identityPolicy, request.attestLineageNeverFenced, request.expect ? [request.expect.groupId,
|
|
56
|
+
request.expect.timelineId, request.expect.lsn, request.expect.recordsSha256, request.expect.providerRootId ?? null] : null,
|
|
57
|
+
request.acknowledgeUnverifiedCopy ?? null]);
|
|
58
|
+
const receiptFields = ['format', 'status', 'alignmentId', 'folderPath', 'receiptPath', 'requestSha256',
|
|
59
|
+
'previousProviderRootId', 'providerRootId', 'bindingChange', 'groupId', 'timelineId', 'sourceLsn', 'alignedLsn', 'records',
|
|
60
|
+
'sourceRecordsSha256', 'alignedRecordsSha256', 'preservedRecordsSha256', 'pinned'];
|
|
61
|
+
const eligibleGenerations = (value) => {
|
|
62
|
+
if (!data(value, ['manifest', 'onDisk']) || !decimal(value.manifest) || !Array.isArray(value.onDisk)
|
|
63
|
+
|| !value.onDisk.length || !value.onDisk.includes(value.manifest))
|
|
64
|
+
return false;
|
|
65
|
+
const manifest = BigInt(value.manifest);
|
|
66
|
+
return value.onDisk.every(generation => decimal(generation) && BigInt(generation) <= manifest);
|
|
67
|
+
};
|
|
68
|
+
const eligibleInspection = (value, request) => {
|
|
69
|
+
if (!data(value, ['status', 'bindingState', 'bindingChange', 'storagePurpose', 'profileSchema', 'providerRootId',
|
|
70
|
+
'groupId', 'timelineId', 'lsn', 'records', 'recordsSha256', 'recordsWithoutFencingProfileSha256', 'authUsers',
|
|
71
|
+
'authority', 'generations', 'alignmentEligible', 'reasons', 'physicalAdmissionViolations'])
|
|
72
|
+
|| value.status !== 'audited' || value.alignmentEligible !== true || value.storagePurpose !== 'production'
|
|
73
|
+
|| ![1, 4].includes(value.profileSchema) || !sha(value.providerRootId) || !sha(value.recordsSha256)
|
|
74
|
+
|| !sha(value.recordsWithoutFencingProfileSha256) || !lineage(value.groupId) || !lineage(value.timelineId)
|
|
75
|
+
|| !decimal(value.lsn) || value.lsn === '0' || !decimal(value.records) || value.records === '0' || value.authUsers !== '0'
|
|
76
|
+
|| !['none', 'path', 'inode', 'path+inode'].includes(value.bindingChange)
|
|
77
|
+
|| value.bindingState !== (value.bindingChange === 'none' ? 'matching' : 'foreign')
|
|
78
|
+
|| !data(value.authority, ['resourceFences', 'receipts', 'publicationHolds', 'activeAllocations', 'retiredAllocations',
|
|
79
|
+
'allocationReplays', 'activeGrants', 'importStages']) || Object.values(value.authority).some(count => count !== '0')
|
|
80
|
+
|| !eligibleGenerations(value.generations)
|
|
81
|
+
|| !Array.isArray(value.reasons) || value.reasons.length || !Array.isArray(value.physicalAdmissionViolations)
|
|
82
|
+
|| value.physicalAdmissionViolations.length)
|
|
83
|
+
return false;
|
|
84
|
+
const pins = request.expect;
|
|
85
|
+
return !pins || (value.groupId === pins.groupId && value.timelineId === pins.timelineId && value.lsn === pins.lsn
|
|
86
|
+
&& value.recordsSha256 === pins.recordsSha256 && (pins.providerRootId === undefined || value.providerRootId === pins.providerRootId));
|
|
87
|
+
};
|
|
88
|
+
export const normalizeStoppedStorageRootAlignmentResult = (value, request) => {
|
|
89
|
+
if (!value || typeof value !== 'object' || !('status' in value))
|
|
90
|
+
fail('RECOVERY_REQUIRED');
|
|
91
|
+
if (value.status === 'eligible' || value.status === 'already-bound') {
|
|
92
|
+
if (!data(value, value.status === 'eligible' ? ['status', 'inspection'] : ['status', 'inspection', 'bindingChange']))
|
|
93
|
+
fail('RECOVERY_REQUIRED');
|
|
94
|
+
const record = value;
|
|
95
|
+
const inspection = record.inspection;
|
|
96
|
+
if (!eligibleInspection(inspection, request)
|
|
97
|
+
|| (value.status === 'eligible' && !request.dryRun)
|
|
98
|
+
|| (value.status === 'already-bound' && (record.bindingChange !== 'none' || inspection.bindingState !== 'matching')))
|
|
99
|
+
fail('RECOVERY_REQUIRED');
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
if (!data(value, [...receiptFields, 'receiptSha256']))
|
|
103
|
+
fail('RECOVERY_REQUIRED');
|
|
104
|
+
const receipt = value;
|
|
105
|
+
if (receipt.format !== 'smartdb.storage-root-alignment.receipt.v1' || receipt.status !== 'aligned'
|
|
106
|
+
|| receipt.alignmentId !== request.alignmentId || receipt.folderPath !== request.folderPath || receipt.receiptPath !== request.receiptPath
|
|
107
|
+
|| receipt.requestSha256 !== storageRootAlignmentRequestDigest(request) || receipt.pinned !== (request.expect !== undefined)
|
|
108
|
+
|| ![receipt.previousProviderRootId, receipt.providerRootId, receipt.sourceRecordsSha256, receipt.alignedRecordsSha256,
|
|
109
|
+
receipt.preservedRecordsSha256, receipt.receiptSha256].every(sha)
|
|
110
|
+
|| receipt.previousProviderRootId === receipt.providerRootId || !lineage(receipt.groupId) || !lineage(receipt.timelineId)
|
|
111
|
+
|| !['path', 'inode', 'path+inode'].includes(receipt.bindingChange)
|
|
112
|
+
|| !decimal(receipt.sourceLsn) || receipt.sourceLsn === '0' || !decimal(receipt.alignedLsn)
|
|
113
|
+
|| BigInt(receipt.sourceLsn) + 1n !== BigInt(receipt.alignedLsn) || !decimal(receipt.records) || receipt.records === '0'
|
|
114
|
+
|| receipt.receiptSha256 !== digest('smartdb.storage-root-alignment.receipt.v1\0', receiptFields.map(key => receipt[key])))
|
|
115
|
+
fail('RECOVERY_REQUIRED');
|
|
116
|
+
if (request.expect && (receipt.groupId !== request.expect.groupId || receipt.timelineId !== request.expect.timelineId
|
|
117
|
+
|| receipt.sourceLsn !== request.expect.lsn || receipt.sourceRecordsSha256 !== request.expect.recordsSha256
|
|
118
|
+
|| (request.expect.providerRootId !== undefined && receipt.previousProviderRootId !== request.expect.providerRootId)))
|
|
119
|
+
fail('RECOVERY_REQUIRED');
|
|
120
|
+
return { ...receipt };
|
|
121
|
+
};
|
|
122
|
+
export const normalizeStoppedStorageRootAlignmentAbortResult = (value, request) => {
|
|
123
|
+
if (!data(value, ['status', 'alignmentId', 'folderPath', 'receiptPath'])
|
|
124
|
+
|| (value.status !== 'aborted' && value.status !== 'not-pending') || value.alignmentId !== request.alignmentId
|
|
125
|
+
|| value.folderPath !== request.folderPath || value.receiptPath !== request.receiptPath)
|
|
126
|
+
fail('RECOVERY_REQUIRED');
|
|
127
|
+
return value;
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1yb290LWFsaWdubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3RzX25vc3FsZGIvc3RvcmFnZS1yb290LWFsaWdubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsc0RBQXNELEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RyxPQUFPLEVBQ0wsNEJBQTRCLEVBQUUsMENBQTBDLEdBRXpFLE1BQU0sc0JBQXNCLENBQUM7QUFvRDlCLFNBQVMsSUFBSSxDQUFDLElBQTZDLElBQVcsTUFBTSxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySCxNQUFNLElBQUksR0FBRyxDQUFDLEtBQWMsRUFBRSxRQUFrQixFQUFFLFdBQXFCLEVBQUUsRUFBb0MsRUFBRTtJQUM3RyxJQUFJLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6RyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNuRSxNQUFNLFVBQVUsR0FBRyxN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
|
|
@@ -173,7 +173,6 @@ export const normalizeLocalNoSqlDbStoppedStorageRootRelocationReceipt = (valueAr
|
|
|
173
173
|
export const assertNoLocalNoSqlDbStorageRootRelocationWorkspace = async (storagePathArg) => {
|
|
174
174
|
const storagePath = plugins.path.resolve(storagePathArg);
|
|
175
175
|
const internalPath = plugins.path.join(storagePath, '.__rustdb_internal');
|
|
176
|
-
const workspacePath = plugins.path.join(internalPath, 'storage-root-relocation');
|
|
177
176
|
try {
|
|
178
177
|
const storage = await plugins.fs.stat(storagePath);
|
|
179
178
|
if (!storage.isDirectory()) {
|
|
@@ -196,16 +195,19 @@ export const assertNoLocalNoSqlDbStorageRootRelocationWorkspace = async (storage
|
|
|
196
195
|
return;
|
|
197
196
|
throw new Error('NoSQLDB storage-root relocation workspace inspection is ambiguous');
|
|
198
197
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
198
|
+
for (const operation of ['relocation', 'alignment']) {
|
|
199
|
+
const workspacePath = plugins.path.join(internalPath, `storage-root-${operation}`);
|
|
200
|
+
try {
|
|
201
|
+
await plugins.fs.lstat(workspacePath);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
if (error.code === 'ENOENT')
|
|
205
|
+
continue;
|
|
206
|
+
throw new Error(`NoSQLDB storage-root ${operation} workspace inspection is ambiguous`);
|
|
207
|
+
}
|
|
208
|
+
throw new Error(`NoSQLDB storage-root ${operation} recovery must complete before startup`);
|
|
206
209
|
}
|
|
207
|
-
throw new Error('NoSQLDB storage-root relocation recovery must complete before startup');
|
|
208
210
|
};
|
|
209
211
|
export const isLocalNoSqlDbStorageRootRelocationErrorCode = (valueArg) => typeof valueArg === 'string'
|
|
210
212
|
&& localNoSqlDbStorageRootRelocationErrorCodes.includes(valueArg);
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1yb290LXJlbG9jYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19ub3NxbGRiL3N0b3JhZ2Utcm9vdC1yZWxvY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLDJDQUEyQyxHQUFHO0lBQ3pELGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsTUFBTTtJQUNOLFdBQVc7SUFDWCxzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxJQUFJO0lBQ0osbUJBQW1CO0NBQ1gsQ0FBQztBQXdCWCxNQUFNLE9BQU8sc0NBQXVDLFNBQVEsS0FBSztJQUcvRCxZQUFtQixPQUFvRDtRQUNyRSxLQUFLLENBQUMsNERBQTRELE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLElBQUksR0FBRyx3Q0FBd0MsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsY0FBYztDQUNOLENBQUM7QUFDWCxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLFFBQVE7SUFDUixTQUFTO0lBQ1QsY0FBYztJQUNkLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLHVCQUF1QjtDQUNmLENBQUM7QUFDWCxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0FBQ2pELE1BQU0sbUJBQW1CLEdBQUcsOENBQThDLENBQUM7QUFFM0UsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsT0FBb0QsRUFDWixFQUFFLENBQzFDLElBQUksc0NBQXNDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFdEQsTUFBTSxzQkFBc0IsR0FBRyxDQUM3QixRQUFpQixFQUNqQixPQUEwQixFQUNXLEVBQUU7SUFDdkMsSUFDRSxPQUFPLFFBQVEsS0FBSyxRQUFRO1dBQ3pCLFFBQVEsS0FBSyxJQUFJO1dBQ2pCLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1dBQ3ZCLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFDdkQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsSUFDRSxPQUFPLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNO1dBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDcEYsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUM5QixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsT0FBTyxVQUFVLEtBQUssU0FBUztlQUMxQixVQUFVLENBQUMsVUFBVTtlQUNyQixNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLFFBQWdCLEVBQVcsRUFBRTtJQUMvRCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3JELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLElBQUksR0FBRyxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU07Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDakQsS0FBSyxFQUFFLENBQUM7UUFDVixDQUFDO2FBQU0sSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUM1QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLFlBQVksR0FBRyxDQUFDLFNBQWlCLEVBQUUsUUFBZ0IsRUFBVyxFQUFFO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RCxPQUFPLFFBQVEsS0FBSyxFQUFFO1dBQ2pCLFFBQVEsS0FBSyxJQUFJO1dBQ2pCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7V0FDN0MsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBaUIsRUFBVSxFQUFFO0lBQ3hELElBQ0UsT0FBTyxRQUFRLEtBQUssUUFBUTtXQUN6QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztXQUNsQyxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQztXQUNyQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUNuRSxDQUFDO1FBQ0QsTUFBTSxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RSxJQUFJLFlBQVksR0FBRyxDQUFDLElBQUksWUFBWSxHQUFHLHNCQUFzQixFQUFFLENBQUM7UUFDOUQsTUFBTSxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3RSxJQUNFLGVBQWUsR0FBRyxDQUFDO1dBQ2hCLGVBQWUsR0FBRyxzQkFBc0I7V0FDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVU7V0FDbEQsQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLENBQUM7V0FDdkMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFDckUsQ0FBQztRQUNELE1BQU0sZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNEQUFzRCxHQUFHLENBQ3BFLFFBQXdELEVBQ1IsRUFBRTtJQUNsRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUMzRCxNQUFNLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0scUJBQXFCLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDbEYsSUFDRSxnQkFBZ0IsS0FBSyxxQkFBcUI7V0FDdkMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDO1dBQ3JELFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUN4RCxDQUFDO1FBQ0QsTUFBTSxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsSUFDRSxPQUFPLFFBQVEsQ0FBQyxZQUFZLEtBQUssUUFBUTtXQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsR0FBRyx3QkFBd0I7V0FDMUYsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUNoRSxDQUFDO1FBQ0QsTUFBTSxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsT0FBTztRQUNMLGdCQUFnQjtRQUNoQixxQkFBcUI7UUFDckIsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO0tBQ3BDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUNwQixVQUFtRixFQUMzRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU07S0FDeEIsVUFBVSxDQUFDLFFBQVEsQ0FBQztLQUNwQixNQUFNLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDO0tBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztLQUMxQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFakIsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFFBQWlCLEVBQXNCLEVBQUUsQ0FDdEUsT0FBTyxRQUFRLEtBQUssUUFBUTtPQUN6QiwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO09BQ3pDLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksUUFBUSxJQUFJLGlCQUFpQixDQUFDLENBQUM7QUFFN0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQWlCLEVBQXNCLEVBQUUsQ0FDbEUsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSx3REFBd0QsR0FBRyxDQUN0RSxRQUFpQixFQUNqQixRQUF3RCxFQUNOLEVBQUU7SUFDcEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7UUFDN0QsTUFBTSxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsUUFBdUUsQ0FBQztJQUN4RixJQUNFLE9BQU8sQ0FBQyxNQUFNLEtBQUssNENBQTRDO1dBQzVELE9BQU8sQ0FBQyxPQUFPLEtBQUssQ0FBQztXQUNyQixPQUFPLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQyxZQUFZO1dBQzlDLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRLENBQUMsZ0JBQWdCO1dBQ3RELE9BQU8sQ0FBQyxxQkFBcUIsS0FBSyxRQUFRLENBQUMscUJBQXFCO1dBQ2hFLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztXQUMxQyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztXQUNqRCxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztXQUNoRCxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7V0FDekMsT0FBTyxDQUFDLHFCQUFxQixLQUFLLElBQUksRUFDekMsQ0FBQztRQUNELE1BQU0sZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE1BQU0sYUFBYSxHQUFHO1FBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1FBQ2xDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7UUFDMUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQjtRQUNwRCxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7UUFDdEMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGlCQUFpQjtRQUM1QyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO1FBQzFDLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUI7S0FDNkIsQ0FBQztJQUNwRixJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsS0FBSyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0QsTUFBTSxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDcEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0RBQWtELEdBQUcsS0FBSyxFQUNyRSxjQUFzQixFQUNQLEVBQUU7SUFDakIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDMUUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDakYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUssS0FBK0IsQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RELElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUssS0FBK0IsQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSyxLQUErQixDQUFDLElBQUksS0FBSyxRQUFRO1lBQUUsT0FBTztRQUMvRCxNQUFNLElBQUksS0FBSyxDQUFDLG1FQUFtRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUVBQXVFLENBQUMsQ0FBQztBQUMzRixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw0Q0FBNEMsR0FBRyxDQUMxRCxRQUFpQixFQUN3QyxFQUFFLENBQzNELE9BQU8sUUFBUSxLQUFLLFFBQVE7T0FDekIsMkNBQTJDLENBQUMsUUFBUSxDQUNyRCxRQUF1RCxDQUN4RCxDQUFDIn0=
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1yb290LXJlbG9jYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19ub3NxbGRiL3N0b3JhZ2Utcm9vdC1yZWxvY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLDJDQUEyQyxHQUFHO0lBQ3pELGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsTUFBTTtJQUNOLFdBQVc7SUFDWCxzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxJQUFJO0lBQ0osbUJBQW1CO0NBQ1gsQ0FBQztBQXdCWCxNQUFNLE9BQU8sc0NBQXVDLFNBQVEsS0FBSztJQUcvRCxZQUFtQixPQUFvRDtRQUNyRSxLQUFLLENBQUMsNERBQTRELE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLElBQUksR0FBRyx3Q0FBd0MsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsY0FBYztDQUNOLENBQUM7QUFDWCxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLFFBQVE7SUFDUixTQUFTO0lBQ1QsY0FBYztJQUNkLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLHVCQUF1QjtDQUNmLENBQUM7QUFDWCxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0FBQ2pELE1BQU0sbUJBQW1CLEdBQUcsOENBQThDLENBQUM7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
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -365,39 +365,76 @@ accepts `folderPath`, `socketPath`, `binaryPath` and the same `auth` options.
|
|
|
365
365
|
|
|
366
366
|
#### Native query and maintenance efficiency
|
|
367
367
|
|
|
368
|
-
Bounded synchronous reads
|
|
369
|
-
and
|
|
370
|
-
|
|
368
|
+
Bounded synchronous reads, including principal resolution, publication authority
|
|
369
|
+
and query setup, share a retained generation lease. Filesystem ownership and
|
|
370
|
+
generation bindings are validated before and after the batch; mutation,
|
|
371
|
+
durability, cancellation and close checks remain enforced. No lease or resolved
|
|
372
|
+
authorization is reused across requests or asynchronous suspensions.
|
|
373
|
+
|
|
374
|
+
Compound indexes combine leading equality fields with a range on the next field.
|
|
375
|
+
For example, `{ serverId: 1, timestamp: 1 }` seeks directly into the requested
|
|
376
|
+
server's time interval. Inclusive/exclusive endpoints, descending components,
|
|
377
|
+
trailing fields and reverse pagination retain their normal semantics. The full
|
|
378
|
+
predicate is still checked for every selected candidate.
|
|
371
379
|
|
|
372
380
|
For a query whose filter references only `_id` and whose projection is exactly
|
|
373
381
|
`{ _id: 1 }`, the native primary index can supply the original BSON identity
|
|
374
382
|
without loading the document payload. Range endpoints, order, skip, limit and
|
|
375
383
|
cursor pagination retain their normal semantics. The engine verifies the index
|
|
376
|
-
and unique-owner values, the document frame's existence and
|
|
377
|
-
versions
|
|
378
|
-
|
|
379
|
-
|
|
384
|
+
and unique-owner values, the document frame's existence, and either matching
|
|
385
|
+
commit versions or a storage-owned SHA-256 certificate of the exact BSON `_id`.
|
|
386
|
+
Updates that keep the same identity leave the primary owner and its certificate
|
|
387
|
+
unchanged, avoiding an extra index rewrite. Numeric BSON width changes update
|
|
388
|
+
the certificate and primary identity atomically with the body. A covered read
|
|
389
|
+
does not checksum an unrequested document payload. Older records without a
|
|
390
|
+
usable identity proof use the normal bounded body read; the next actual write
|
|
391
|
+
adds the certificate.
|
|
380
392
|
Secondary-index projections and predicates requiring other fields retain normal
|
|
381
393
|
document reads. No application cache or configuration flag is required.
|
|
382
394
|
|
|
395
|
+
Concurrent wire `insert`, `update`, `delete` and `findAndModify` commands can share
|
|
396
|
+
one durability flush. Each command keeps its own commit marker and retry outcome.
|
|
397
|
+
Only the private write group sees provisional roots; readers and replies see
|
|
398
|
+
results after the final flush. The queue holds at most 16 jobs, adds no deliberate
|
|
399
|
+
delay, and ends each group after 16 jobs or 64 MiB of appended data (one admitted
|
|
400
|
+
command can cross that byte threshold). Authority, session and input-resource
|
|
401
|
+
lifetimes remain held through durability. History publication also waits for the
|
|
402
|
+
flush. DDL, transactions, index builds, imports and maintenance retain their
|
|
403
|
+
existing independently durable publication paths.
|
|
404
|
+
|
|
405
|
+
**Storage compatibility:** version 10 adds a 40-byte certified document-ordinal
|
|
406
|
+
record alongside the legacy 8-byte ordinal. It reads existing stores directly;
|
|
407
|
+
startup and reads perform no format rewrite. After version 10 writes certified
|
|
408
|
+
records, use version 10 or later to reopen that store. Older binaries reject the
|
|
409
|
+
new record representation. Keep a pre-upgrade backup if a binary downgrade is
|
|
410
|
+
required. The K2 pages, commit markers and recovery protocol are unchanged.
|
|
411
|
+
|
|
383
412
|
Maintenance batches catalog work and parks completed reclamation and no-TTL
|
|
384
413
|
sweeps until the committed position changes. Session cleanup skips its metadata
|
|
385
414
|
scan until a session can expire. Compaction uses the persisted generation anchor
|
|
386
415
|
as its baseline, so reopening an already-compacted root does not rewrite it.
|
|
387
416
|
Compaction runs separately from TTL maintenance, observes shutdown cancellation,
|
|
388
417
|
and does not restart a large copy because a short maintenance deadline elapsed.
|
|
389
|
-
|
|
418
|
+
These maintenance optimizations preserve the existing generation and commit formats.
|
|
390
419
|
|
|
391
|
-
####
|
|
420
|
+
#### File startup admission
|
|
392
421
|
|
|
393
422
|
`INoSqlDbServerOptions.fileStorageStartup` and
|
|
394
|
-
`ILocalNoSqlDbOptions.fileStorageStartup` accept only
|
|
395
|
-
`'
|
|
423
|
+
`ILocalNoSqlDbOptions.fileStorageStartup` accept `'current-format-only'`
|
|
424
|
+
(the default) or `'existing-only'` for file storage.
|
|
396
425
|
The exported type is `TNoSqlDbFileStorageStartup`. Invalid values, including
|
|
397
426
|
`'migrate'`, reject at construction. Selecting the policy with memory storage
|
|
398
427
|
also rejects.
|
|
399
428
|
|
|
400
|
-
|
|
429
|
+
Default startup accepts a fresh root or a current native root. Use
|
|
430
|
+
`fileStorageStartup: 'existing-only'` when the database must already exist:
|
|
431
|
+
missing paths, empty directories and identity-only roots without committed
|
|
432
|
+
initialization fail instead of creating an empty database. The native owner
|
|
433
|
+
enforces this policy; no TypeScript existence check or fallback can create a
|
|
434
|
+
new root. Older binaries reject the new option rather than silently ignoring it.
|
|
435
|
+
Rehearsal startup retains its separate current-format-only configuration.
|
|
436
|
+
|
|
437
|
+
Foreign, old, mixed and
|
|
401
438
|
orphaned migration staging layouts are rejected without conversion. TypeScript
|
|
402
439
|
performs no storage writes before starting the engine. Native format admission
|
|
403
440
|
uses the owning detector; the exclusive native file-root lease is acquired before
|
|
@@ -900,6 +937,8 @@ underlying server and bridge are constructed by `LocalNoSqlDb.start()`.
|
|
|
900
937
|
| `getServer()` | `NoSqlDbServer` | Access the underlying server |
|
|
901
938
|
| `running` | `boolean` | Whether the server is running |
|
|
902
939
|
| `LocalNoSqlDb.relocateStoppedStorageRoot(input, options?)` | `Promise<ILocalNoSqlDbStoppedStorageRootRelocationReceipt>` | Atomically relocate one eligible stopped Linux or macOS file-storage root and retain a source receipt |
|
|
940
|
+
| `LocalNoSqlDb.alignStoppedStorageRoot(input, options?)` | `Promise<TLocalNoSqlDbStoppedStorageRootAlignmentResult>` | Adopt an eligible stopped copy as an independent provider |
|
|
941
|
+
| `LocalNoSqlDb.abortStoppedStorageRootAlignment(input, options?)` | `Promise<ILocalNoSqlDbStoppedStorageRootAlignmentAbortResult>` | Abort an exact incomplete alignment append |
|
|
903
942
|
| `LocalNoSqlDb.inspectOfflineStringValue(input, options?)` | `Promise<TLocalNoSqlDbOfflineStringValueInspectionResult>` | Read one exact top-level string value from stopped file storage without starting or mutating the engine |
|
|
904
943
|
| `LocalNoSqlDb.inspectOfflinePhysicalNamespaces(input, options?)` | `Promise<ILocalNoSqlDbOfflinePhysicalNamespaceInspectionResult>` | Validate stopped physical file storage and return only deterministic database and collection names |
|
|
905
944
|
|
|
@@ -948,10 +987,134 @@ Relocation supports stopped current native production roots with or without auth
|
|
|
948
987
|
|
|
949
988
|
The operation durably records one immutable native append plan and reserves the receipt before changing the path binding. It retains exclusive ownership through the append, atomic directory/receipt exchange and confirmed journal cleanup. If a call returns `RECOVERY_REQUIRED`, stop startup attempts and retry the exact normalized source path, destination path and `relocationId` with the same native-capable NoSQLDB version. Startup rejects any relocation-workspace occupancy and never mutates or recovers it. Do not delete, rename, edit or replace either path between attempts. Native relocation does not accept unfinished journals from the removed Bitcask engine.
|
|
950
989
|
|
|
951
|
-
An exact completed replay returns the same receipt only while the destination remains the current root. A later successful relocation leaves another receipt at that destination path and supersedes the earlier replay topology; retry the later operation instead. Manual copy or rename
|
|
990
|
+
An exact completed replay returns the same receipt only while the destination remains the current root. A later successful relocation leaves another receipt at that destination path and supersedes the earlier replay topology; retry the later operation instead. Manual copy or rename fails provider path/inode fencing. `alignStoppedStorageRoot` can adopt an eligible copy as an independent fork under the stricter policy below; it does not move production authority.
|
|
952
991
|
|
|
953
992
|
Failures are exposed as `LocalNoSqlDbStorageRootRelocationError` with a code-only union: `INVALID_REQUEST`, `UNSUPPORTED`, `BUSY`, `NOT_FOUND`, `DESTINATION_CONFLICT`, `IDENTITY_MISMATCH`, `STATE_CORRUPT`, `SOURCE_CHANGED`, `CAPACITY`, `CANCELLED`, `IO`, or `RECOVERY_REQUIRED`. Errors and receipts contain no credential or document material. Transport ambiguity after dispatch is `RECOVERY_REQUIRED`; exact retry is the recovery action. An explicit native cancellation or I/O error can also leave private recovery state, which the identical request can finish after the sidecar has confirmed exit.
|
|
954
993
|
|
|
994
|
+
#### Stopped storage-root alignment
|
|
995
|
+
|
|
996
|
+
**Never start a copied or restored root before alignment.** Ordinary serving
|
|
997
|
+
startup may recover a torn tail before rejecting its foreign binding. Stop the
|
|
998
|
+
source, inspect it for pins, copy it while it remains stopped, and align the copy
|
|
999
|
+
before its first start. Pins cannot prove that an unverified backup is complete;
|
|
1000
|
+
a file truncated exactly at a commit boundary can still be internally consistent.
|
|
1001
|
+
|
|
1002
|
+
Version 1 requires current production file storage, a clean committed tail, no
|
|
1003
|
+
generation newer than the manifest, no auth users, and no fencing, allocation,
|
|
1004
|
+
publication-hold, grant or import-stage authority. The complete catalog, auth,
|
|
1005
|
+
index, transaction-outcome and fencing audits must pass. Rehearsals, memory
|
|
1006
|
+
storage, unknown files (including `.DS_Store`/AppleDouble), symlinks, hard links
|
|
1007
|
+
and unsafe ownership or modes are refused. The operation never repairs them.
|
|
1008
|
+
The attestation covers **every copy of the lineage**, not just the local root.
|
|
1009
|
+
|
|
1010
|
+
```typescript
|
|
1011
|
+
import { LocalNoSqlDb } from '@lossless.org/nosqldb';
|
|
1012
|
+
|
|
1013
|
+
// Run against the source after stopping it; retain these pins through the copy.
|
|
1014
|
+
const source = await LocalNoSqlDb.inspectStoppedStorageRoot({ folderPath: '/srv/source/db' });
|
|
1015
|
+
if (source.status !== 'audited' || !source.alignmentEligible) throw new Error('Source is ineligible');
|
|
1016
|
+
const request = {
|
|
1017
|
+
folderPath: '/srv/destination/db',
|
|
1018
|
+
receiptPath: '/srv/destination/adoption.json',
|
|
1019
|
+
alignmentId: 'laptop-move-1',
|
|
1020
|
+
identityPolicy: 'fork' as const,
|
|
1021
|
+
attestLineageNeverFenced: true as const,
|
|
1022
|
+
expect: { groupId: source.groupId, timelineId: source.timelineId, lsn: source.lsn,
|
|
1023
|
+
recordsSha256: source.recordsSha256, providerRootId: source.providerRootId },
|
|
1024
|
+
};
|
|
1025
|
+
// /srv/destination is an existing mode-0700 directory owned by the service user.
|
|
1026
|
+
const preview = await LocalNoSqlDb.alignStoppedStorageRoot({ ...request, dryRun: true });
|
|
1027
|
+
const result = await LocalNoSqlDb.alignStoppedStorageRoot(request, { timeoutMs: 60_000 });
|
|
1028
|
+
```
|
|
1029
|
+
|
|
1030
|
+
All paths must be canonical absolute paths. `receiptPath` is required, outside
|
|
1031
|
+
the root on the same filesystem, with an existing private parent. An unrelated
|
|
1032
|
+
existing file is never overwritten. Use the relocation identifier rules for
|
|
1033
|
+
`alignmentId`. Supply either `expect` from the stopped source or explicit
|
|
1034
|
+
`acknowledgeUnverifiedCopy: true` when no source pins survive, never both.
|
|
1035
|
+
`binaryPath`, `timeoutMs` and `signal` select the engine and bound the operation.
|
|
1036
|
+
|
|
1037
|
+
The following archive recipe was qualified from macOS arm64 APFS to Linux
|
|
1038
|
+
x86_64 ext4 and XFS. Run as the service user, with the source stopped throughout,
|
|
1039
|
+
and retain its inspection pins separately. Start with a new private destination
|
|
1040
|
+
parent; preserve the private file/directory modes and do not include filesystem
|
|
1041
|
+
metadata sidecars. On macOS use the exact canonical case and Unicode spelling;
|
|
1042
|
+
alternate spellings are refused rather than treated as portable aliases.
|
|
1043
|
+
|
|
1044
|
+
```sh
|
|
1045
|
+
# macOS: /absolute/source-parent/db is stopped and inspected.
|
|
1046
|
+
COPYFILE_DISABLE=1 tar --no-xattrs -czf /absolute/db-copy.tar.gz -C /absolute/source-parent db
|
|
1047
|
+
# After transferring the archive to Linux, as the destination service user:
|
|
1048
|
+
mkdir -m 700 /absolute/destination-parent
|
|
1049
|
+
tar --no-same-owner -xzf /absolute/db-copy.tar.gz -C /absolute/destination-parent
|
|
1050
|
+
# Run alignStoppedStorageRoot with the retained source pins before any start.
|
|
1051
|
+
```
|
|
1052
|
+
|
|
1053
|
+
A dry run returns `eligible` with inspected evidence. An eligible root already
|
|
1054
|
+
bound to its location returns `already-bound` with `bindingChange: 'none'`.
|
|
1055
|
+
Neither creates a workspace or receipt. Alignment appends exactly one fresh
|
|
1056
|
+
schema-1 fencing profile: a new `providerRootId`, live physical binding and
|
|
1057
|
+
LSN+1. Every other record's bytes and version remain unchanged. `groupId` and
|
|
1058
|
+
`timelineId` remain lineage identifiers; they are **not** the new provider identity.
|
|
1059
|
+
The immutable receipt records both provider IDs, both LSNs, source/aligned full
|
|
1060
|
+
digests, preserved-record digest and request/receipt SHA-256 commitments. Retain it.
|
|
1061
|
+
A pre-reserved receipt proves completion only together with its matching target
|
|
1062
|
+
profile and lineage. Exact retries verify that evidence and return the same
|
|
1063
|
+
receipt, including after subsequent writes with the same target profile.
|
|
1064
|
+
|
|
1065
|
+
Alignment failures throw `NoSqlDbStoppedOperationError` with a code-only `code`.
|
|
1066
|
+
On `RECOVERY_REQUIRED`, keep the exact request and all files unchanged and retry
|
|
1067
|
+
alignment with the same capable engine. Its private workspace excludes ordinary
|
|
1068
|
+
startup and retains the exact append plan through crashes and partial writes.
|
|
1069
|
+
Do not delete or edit the workspace or receipt. `BUSY` means an owner still holds
|
|
1070
|
+
the root; `IDENTITY_MISMATCH` or `SOURCE_CHANGED` requires investigating changed
|
|
1071
|
+
pins or files. `UNSUPPORTED` indicates an ineligible root or older engine;
|
|
1072
|
+
stopped inspection provides bounded eligibility reasons. Other code-only errors
|
|
1073
|
+
include `INVALID_REQUEST`, `NOT_FOUND`, `DESTINATION_CONFLICT`, `STATE_CORRUPT`,
|
|
1074
|
+
`CAPACITY`, `CANCELLED` and `IO`.
|
|
1075
|
+
|
|
1076
|
+
`abortStoppedStorageRootAlignment(request, options?)` accepts the identical
|
|
1077
|
+
request and only rolls back an exact **incomplete** planned append. A complete
|
|
1078
|
+
append must finish alignment. If permissions changed after interruption, restore
|
|
1079
|
+
the required ownership and modes first. Abort permits changed timestamps while
|
|
1080
|
+
still checking original inodes, the full inventory, original bytes and append
|
|
1081
|
+
prefix. It durably records abort, truncates/fsyncs, removes its exact reserved
|
|
1082
|
+
receipt and cleans up. Retry abort after an interrupted abort; alignment cannot
|
|
1083
|
+
override that decision. An absent workspace returns `not-pending`.
|
|
1084
|
+
|
|
1085
|
+
Older 8.0.2 engines reject pending workspaces with “startup rejects existing
|
|
1086
|
+
file-provider bookkeeping”. Finish or abort with the newer engine; deleting the
|
|
1087
|
+
workspace is not a fix. A v8-produced fixture remains readable by v8 after this
|
|
1088
|
+
one-profile append. This does **not** allow downgrading v10-created catalogs.
|
|
1089
|
+
Qualification results and study corrections are recorded in the repository's
|
|
1090
|
+
[alignment design note](https://code.foss.global/lossless.org/nosqldb/src/branch/main/alignment.md).
|
|
1091
|
+
|
|
1092
|
+
#### Stopped Storage-Root Inspection
|
|
1093
|
+
|
|
1094
|
+
`LocalNoSqlDb.inspectStoppedStorageRoot({ folderPath }, { timeoutMs?, signal?, binaryPath? })`
|
|
1095
|
+
audits an existing stopped source or copy without initializing or repairing it.
|
|
1096
|
+
Use a canonical absolute path. The outer and native ownership locks remain held
|
|
1097
|
+
through the complete record-owner audit. A running engine returns `BUSY`.
|
|
1098
|
+
|
|
1099
|
+
An `audited` result includes the recorded provider identity, live binding state,
|
|
1100
|
+
lineage (`groupId`/`timelineId`), decimal-string LSN and counts, full-record and
|
|
1101
|
+
profile-excluded SHA-256 digests, generation inventory and alignment eligibility.
|
|
1102
|
+
It counts allocation replays as well as fences, receipts, holds and allocations.
|
|
1103
|
+
The audit accepts no active grants or import stages. Auth users or authority
|
|
1104
|
+
history make a fully audited root ineligible for independent-fork alignment.
|
|
1105
|
+
|
|
1106
|
+
An `unavailable` result contains bounded advisory reasons and no trusted logical
|
|
1107
|
+
identity, digests or partial counts. It indicates physical-admission or owner-audit
|
|
1108
|
+
failure; it is not evidence that a copy is safe. Reading may affect filesystem
|
|
1109
|
+
access times, but never changes data, modes, ownership or modification timestamps.
|
|
1110
|
+
|
|
1111
|
+
All stopped inspection and relocation methods accept `binaryPath` to select an
|
|
1112
|
+
exact executable. Unsupported management methods in older engines report
|
|
1113
|
+
`UNSUPPORTED`; interrupted dispatched mutations still require recovery. Health
|
|
1114
|
+
also exposes `providerRootId` and the current decimal-string `lsn`, and non-null
|
|
1115
|
+
resource fence summaries expose `providerRootId`. These fields are optional in
|
|
1116
|
+
the TypeScript interfaces for older engine binaries.
|
|
1117
|
+
|
|
955
1118
|
#### Offline String-Value Inspection
|
|
956
1119
|
|
|
957
1120
|
`LocalNoSqlDb.inspectOfflineStringValue(input, options?)` reads one string from a
|
package/ts/00_commitinfo_data.ts
CHANGED