niceeval 0.16.3-canary.99 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/bootstrap.cjs +7 -1
- package/dist/cli/bootstrap.cjs.map +1 -1
- package/dist/cli/project-configuration.cjs +8 -11
- package/dist/cli/project-configuration.cjs.map +1 -1
- package/dist/expect/index.cjs.map +1 -1
- package/dist/expect/index.d.cts +1 -0
- package/dist/expect/index.d.mts +1 -0
- package/dist/expect/index.d.ts +1 -0
- package/dist/experiment/host/cli/contribution.cjs +6 -11
- package/dist/experiment/host/cli/contribution.cjs.map +1 -1
- package/dist/experiment/host/cli/contribution.d.cts +0 -16
- package/dist/experiment/host/cli/contribution.d.mts +0 -16
- package/dist/experiment/host/cli/contribution.d.ts +0 -16
- package/dist/experiment/host/operations.cjs +3 -3
- package/dist/experiment/host/operations.cjs.map +1 -1
- package/dist/experiment/host/types.cjs.map +1 -1
- package/dist/experiment/host/types.d.cts +0 -4
- package/dist/experiment/host/types.d.mts +0 -4
- package/dist/experiment/host/types.d.ts +0 -4
- package/dist/fresh-import.cjs +2 -2
- package/dist/fresh-import.cjs.map +1 -1
- package/dist/fresh-import.d.cts +3 -3
- package/dist/fresh-import.d.mts +3 -3
- package/dist/fresh-import.d.ts +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/inspection/codec.cjs.map +1 -1
- package/dist/inspection/codec.d.cts +1 -1
- package/dist/inspection/codec.d.mts +1 -1
- package/dist/inspection/codec.d.ts +1 -1
- package/dist/inspection/facts.cjs +66 -9
- package/dist/inspection/facts.cjs.map +1 -1
- package/dist/inspection/facts.d.cts +4 -0
- package/dist/inspection/facts.d.mts +4 -0
- package/dist/inspection/facts.d.ts +4 -0
- package/dist/inspection/facts.js +4 -2
- package/dist/inspection/index.cjs +1 -3
- package/dist/inspection/index.cjs.map +1 -1
- package/dist/inspection/index.d.cts +1 -1
- package/dist/inspection/index.d.mts +1 -1
- package/dist/inspection/index.d.ts +1 -1
- package/dist/inspection/index.js +44 -48
- package/dist/inspection/limits.cjs +3 -1
- package/dist/inspection/limits.cjs.map +1 -1
- package/dist/inspection/limits.d.cts +2 -0
- package/dist/inspection/limits.d.mts +2 -0
- package/dist/inspection/limits.d.ts +2 -0
- package/dist/inspection/limits.js +6 -4
- package/dist/inspection/project-source.cjs +4 -1
- package/dist/inspection/project-source.cjs.map +1 -1
- package/dist/inspection/protocol.cjs +10 -18
- package/dist/inspection/protocol.cjs.map +1 -1
- package/dist/inspection/protocol.d.cts +111 -173
- package/dist/inspection/protocol.d.mts +111 -173
- package/dist/inspection/protocol.d.ts +111 -173
- package/dist/inspection/public.mjs +73 -109
- package/dist/inspection/results.cjs +12 -48
- package/dist/inspection/results.cjs.map +1 -1
- package/dist/inspection/results.d.cts +124 -122
- package/dist/inspection/results.d.mts +124 -122
- package/dist/inspection/results.d.ts +124 -122
- package/dist/inspection/results.js +16 -20
- package/dist/inspection/select.cjs +80 -117
- package/dist/inspection/select.cjs.map +1 -1
- package/dist/inspection/source.cjs +14 -15
- package/dist/inspection/source.cjs.map +1 -1
- package/dist/inspection/source.d.cts +6 -3
- package/dist/inspection/source.d.mts +6 -3
- package/dist/inspection/source.d.ts +6 -3
- package/dist/inspection/trace.cjs +1 -1
- package/dist/inspection/trace.cjs.map +1 -1
- package/dist/load-config.cjs +17 -11
- package/dist/load-config.cjs.map +1 -1
- package/dist/load-config.d.cts +3 -2
- package/dist/load-config.d.mts +3 -2
- package/dist/load-config.d.ts +3 -2
- package/dist/o11y/adapter-usage-projection.cjs +5 -1
- package/dist/o11y/adapter-usage-projection.cjs.map +1 -1
- package/dist/o11y/adapter-usage-projection.d.cts +109 -1
- package/dist/o11y/adapter-usage-projection.d.mts +109 -1
- package/dist/o11y/adapter-usage-projection.d.ts +109 -1
- package/dist/o11y/cache-read.cjs +113 -0
- package/dist/o11y/cache-read.cjs.map +1 -0
- package/dist/o11y/cache-read.d.cts +80 -0
- package/dist/o11y/cache-read.d.mts +80 -0
- package/dist/o11y/cache-read.d.ts +80 -0
- package/dist/o11y/cache-read.js +8 -0
- package/dist/o11y/cache-read.js.map +1 -0
- package/dist/o11y/eval-usage.cjs +4 -1
- package/dist/o11y/eval-usage.cjs.map +1 -1
- package/dist/o11y/eval-usage.d.cts +4 -1
- package/dist/o11y/eval-usage.d.mts +4 -1
- package/dist/o11y/eval-usage.d.ts +4 -1
- package/dist/record/host/sqlite-host.cjs +188 -53
- package/dist/record/host/sqlite-host.cjs.map +1 -1
- package/dist/record/host/sqlite-host.d.cts +37 -1
- package/dist/record/host/sqlite-host.d.mts +37 -1
- package/dist/record/host/sqlite-host.d.ts +37 -1
- package/dist/record/host/sqlite-host.js +16 -8
- package/dist/record/maintenance/runtime.cjs +3 -3
- package/dist/record/maintenance/runtime.cjs.map +1 -1
- package/dist/record/sqlite/admission-repository.cjs +18 -18
- package/dist/record/sqlite/admission-repository.cjs.map +1 -1
- package/dist/record/sqlite/case-repository.cjs +6 -6
- package/dist/record/sqlite/case-repository.cjs.map +1 -1
- package/dist/record/sqlite/coordination-repository.cjs +25 -25
- package/dist/record/sqlite/coordination-repository.cjs.map +1 -1
- package/dist/record/sqlite/current-schema.cjs +115 -111
- package/dist/record/sqlite/current-schema.cjs.map +1 -1
- package/dist/record/sqlite/current-schema.d.cts +3 -3
- package/dist/record/sqlite/current-schema.d.mts +3 -3
- package/dist/record/sqlite/current-schema.d.ts +3 -3
- package/dist/record/sqlite/database.cjs +56 -53
- package/dist/record/sqlite/database.cjs.map +1 -1
- package/dist/record/sqlite/index.cjs +3 -1
- package/dist/record/sqlite/index.cjs.map +1 -1
- package/dist/record/sqlite/index.d.cts +5 -2
- package/dist/record/sqlite/index.d.mts +5 -2
- package/dist/record/sqlite/index.d.ts +5 -2
- package/dist/record/sqlite/legacy-schema-018.cjs +443 -0
- package/dist/record/sqlite/legacy-schema-018.cjs.map +1 -0
- package/dist/record/sqlite/legacy-schema-018.d.cts +6 -0
- package/dist/record/sqlite/legacy-schema-018.d.mts +6 -0
- package/dist/record/sqlite/legacy-schema-018.d.ts +6 -0
- package/dist/record/sqlite/legacy-schema-018.js +6 -0
- package/dist/record/sqlite/legacy-schema-018.js.map +1 -0
- package/dist/record/sqlite/migration.cjs +105 -46
- package/dist/record/sqlite/migration.cjs.map +1 -1
- package/dist/record/sqlite/migration.d.cts +2 -1
- package/dist/record/sqlite/migration.d.mts +2 -1
- package/dist/record/sqlite/migration.d.ts +2 -1
- package/dist/record/sqlite/portable-capture.cjs +13 -13
- package/dist/record/sqlite/portable-capture.cjs.map +1 -1
- package/dist/record/sqlite/registry-repository.cjs +22 -22
- package/dist/record/sqlite/registry-repository.cjs.map +1 -1
- package/dist/record/sqlite/schema.cjs +10 -2
- package/dist/record/sqlite/schema.cjs.map +1 -1
- package/dist/record/sqlite/schema.d.cts +4 -1
- package/dist/record/sqlite/schema.d.mts +4 -1
- package/dist/record/sqlite/schema.d.ts +4 -1
- package/dist/record/sqlite/schema.js +20 -14
- package/dist/record/sqlite/storage-worker.cjs +1 -1
- package/dist/record/sqlite/storage-worker.cjs.map +1 -1
- package/dist/record/sqlite/storage.cjs +316 -232
- package/dist/record/sqlite/storage.cjs.map +1 -1
- package/dist/record/sqlite/storage.d.cts +10 -2
- package/dist/record/sqlite/storage.d.mts +10 -2
- package/dist/record/sqlite/storage.d.ts +10 -2
- package/dist/record/sqlite/storage.js +54 -50
- package/dist/record/sqlite/types.cjs +1 -1
- package/dist/record/sqlite/types.cjs.map +1 -1
- package/dist/record/sqlite/types.d.cts +13 -1
- package/dist/record/sqlite/types.d.mts +13 -1
- package/dist/record/sqlite/types.d.ts +13 -1
- package/dist/run/cli/contribution.cjs +17 -12
- package/dist/run/cli/contribution.cjs.map +1 -1
- package/dist/run/host/lifecycle-adapter.cjs +1 -1
- package/dist/run/host/lifecycle-adapter.cjs.map +1 -1
- package/dist/run/storage/owner-identity.cjs +78 -16
- package/dist/run/storage/owner-identity.cjs.map +1 -1
- package/dist/run/storage/owner-identity.d.cts +2 -1
- package/dist/run/storage/owner-identity.d.mts +2 -1
- package/dist/run/storage/owner-identity.d.ts +2 -1
- package/dist/run/storage/sqlite.cjs +55 -55
- package/dist/run/storage/sqlite.cjs.map +1 -1
- package/dist/runner/accept.cjs +12 -42
- package/dist/runner/accept.cjs.map +1 -1
- package/dist/runner/accept.d.cts +2 -3
- package/dist/runner/accept.d.mts +2 -3
- package/dist/runner/accept.d.ts +2 -3
- package/dist/runner/adapter-usage.cjs +2 -2
- package/dist/runner/adapter-usage.cjs.map +1 -1
- package/dist/runner/adoption.cjs +14 -26
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/adoption.d.cts +5 -13
- package/dist/runner/adoption.d.mts +5 -13
- package/dist/runner/adoption.d.ts +5 -13
- package/dist/runner/adoption.js +2 -4
- package/dist/runner/record.cjs +24 -18
- package/dist/runner/record.cjs.map +1 -1
- package/dist/runner/rename-experiment.cjs +5 -7
- package/dist/runner/rename-experiment.cjs.map +1 -1
- package/dist/runner/reuse-plan.cjs +37 -18
- package/dist/runner/reuse-plan.cjs.map +1 -1
- package/dist/runner/reuse-plan.d.cts +4 -1
- package/dist/runner/reuse-plan.d.mts +4 -1
- package/dist/runner/reuse-plan.d.ts +4 -1
- package/dist/runner/setup-prefix-plan.cjs +17 -12
- package/dist/runner/setup-prefix-plan.cjs.map +1 -1
- package/dist/runner/setup-prefix-plan.d.cts +0 -2
- package/dist/runner/setup-prefix-plan.d.mts +0 -2
- package/dist/runner/setup-prefix-plan.d.ts +0 -2
- package/dist/runner/setup-prefix-plan.js +8 -12
- package/dist/sandbox/backend.cjs +10 -1
- package/dist/sandbox/backend.cjs.map +1 -1
- package/dist/sandbox/backend.d.cts +16 -8
- package/dist/sandbox/backend.d.mts +16 -8
- package/dist/sandbox/backend.d.ts +16 -8
- package/dist/sandbox/backend.js +28 -26
- package/dist/sandbox/docker.cjs +7 -1
- package/dist/sandbox/docker.cjs.map +1 -1
- package/dist/sandbox/e2b-cache-repository.cjs +13 -3
- package/dist/sandbox/e2b-cache-repository.cjs.map +1 -1
- package/dist/sandbox/e2b-cache-repository.d.cts +3 -0
- package/dist/sandbox/e2b-cache-repository.d.mts +3 -0
- package/dist/sandbox/e2b-cache-repository.d.ts +3 -0
- package/dist/sandbox/e2b-cache-repository.js +16 -12
- package/dist/sandbox/e2b.cjs +2 -2
- package/dist/sandbox/e2b.cjs.map +1 -1
- package/dist/sandbox/incus/materialize.cjs +1 -1
- package/dist/sandbox/incus/materialize.cjs.map +1 -1
- package/dist/show/contribution.cjs +3 -3
- package/dist/show/contribution.cjs.map +1 -1
- package/dist/show/model.cjs +14 -13
- package/dist/show/model.cjs.map +1 -1
- package/dist/show/model.d.cts +7 -7
- package/dist/show/model.d.mts +7 -7
- package/dist/show/model.d.ts +7 -7
- package/dist/show/render.cjs +14 -0
- package/dist/show/render.cjs.map +1 -1
- package/dist/user-database/storage-worker.cjs +13 -3
- package/dist/user-database/storage-worker.cjs.map +1 -1
- package/dist/view/app-dist/.vite/manifest.json +2 -2
- package/dist/view/app-dist/assets/{index-CmVoXbwG.js → index-B3ijZRph.js} +17 -17
- package/dist/view/app-dist/assets/{quality-cost-scatter-BuLISaH4.js → quality-cost-scatter-B--DfJ9s.js} +1 -1
- package/dist/view/app-dist/index.html +1 -1
- package/dist/view/application-runtime.cjs +8 -0
- package/dist/view/application-runtime.cjs.map +1 -0
- package/dist/view/application-runtime.d.cts +9 -0
- package/dist/view/application-runtime.d.mts +9 -0
- package/dist/view/application-runtime.d.ts +9 -0
- package/dist/view/application-runtime.js +6 -0
- package/dist/view/application-runtime.js.map +1 -0
- package/dist/view/cli/contribution.cjs +5 -2
- package/dist/view/cli/contribution.cjs.map +1 -1
- package/dist/view/cli/contribution.d.cts +2 -1
- package/dist/view/cli/contribution.d.mts +2 -1
- package/dist/view/cli/contribution.d.ts +2 -1
- package/dist/view/function-runtime.mjs +1019 -456
- package/dist/view/http-protocol.d.cts +1 -9
- package/dist/view/http-protocol.d.mts +1 -9
- package/dist/view/http-protocol.d.ts +1 -9
- package/dist/view/inspection-host.cjs +39 -30
- package/dist/view/inspection-host.cjs.map +1 -1
- package/dist/view/inspection-host.d.cts +7545 -2
- package/dist/view/inspection-host.d.mts +7545 -2
- package/dist/view/inspection-host.d.ts +7545 -2
- package/dist/view/server.cjs +8 -5
- package/dist/view/server.cjs.map +1 -1
- package/dist/view/server.d.cts +4 -2
- package/dist/view/server.d.mts +4 -2
- package/dist/view/server.d.ts +4 -2
- package/docs-site/zh/reference/cli.mdx +1 -2
- package/docs-site/zh/tutorials/control-run-cost.mdx +22 -0
- package/docs-site/zh/tutorials/niceeval-taste-application.mdx +21 -0
- package/package.json +1 -1
|
@@ -167,18 +167,21 @@ function inspectProjectRecordDatabase(path) {
|
|
|
167
167
|
try {
|
|
168
168
|
connection = openRecordMaintenance(path);
|
|
169
169
|
const currentTable = connection.db.prepare(`SELECT count(*) AS count FROM sqlite_schema
|
|
170
|
+
WHERE type='table' AND name='ne19_record_metadata'`).get();
|
|
171
|
+
const legacy018Table = connection.db.prepare(`SELECT count(*) AS count FROM sqlite_schema
|
|
170
172
|
WHERE type='table' AND name='ne18_record_metadata'`).get();
|
|
171
173
|
const legacy017Table = connection.db.prepare(`SELECT count(*) AS count FROM sqlite_schema
|
|
172
174
|
WHERE type='table' AND name='ne_record_metadata'`).get();
|
|
173
175
|
const legacyTable = connection.db.prepare(`SELECT count(*) AS count FROM sqlite_schema
|
|
174
176
|
WHERE type='table' AND name='record_metadata'`).get();
|
|
175
177
|
const hasCurrent = decodeInteger(currentTable.count, "sqlite_schema.record_metadata") === 1;
|
|
178
|
+
const hasLegacy018 = decodeInteger(legacy018Table.count, "sqlite_schema.record_metadata") === 1;
|
|
176
179
|
const hasLegacy017 = decodeInteger(legacy017Table.count, "sqlite_schema.record_metadata") === 1;
|
|
177
180
|
const hasLegacy = decodeInteger(legacyTable.count, "sqlite_schema.record_metadata") === 1;
|
|
178
|
-
if (Number(hasCurrent) + Number(hasLegacy017) + Number(hasLegacy) !== 1) {
|
|
181
|
+
if (Number(hasCurrent) + Number(hasLegacy018) + Number(hasLegacy017) + Number(hasLegacy) !== 1) {
|
|
179
182
|
return Object.freeze({ state: "foreign" });
|
|
180
183
|
}
|
|
181
|
-
const metadataTable = hasCurrent ? "ne18_record_metadata" : hasLegacy017 ? "ne_record_metadata" : "record_metadata";
|
|
184
|
+
const metadataTable = hasCurrent ? "ne19_record_metadata" : hasLegacy018 ? "ne18_record_metadata" : hasLegacy017 ? "ne_record_metadata" : "record_metadata";
|
|
182
185
|
let row;
|
|
183
186
|
try {
|
|
184
187
|
row = connection.db.prepare(`SELECT format,storage_revision
|
|
@@ -303,7 +306,7 @@ function validateSchemaObjects(connection, sql) {
|
|
|
303
306
|
}
|
|
304
307
|
}
|
|
305
308
|
function storageRevision(connection) {
|
|
306
|
-
const row = currentStatement(connection.db, "SELECT storage_revision FROM
|
|
309
|
+
const row = currentStatement(connection.db, "SELECT storage_revision FROM ne19_record_metadata WHERE singleton=1").get();
|
|
307
310
|
if (row === undefined)
|
|
308
311
|
throw (0, errors_ts_1.sqliteError)("record-schema-unsupported", "validate-schema", "ProjectDatabase identity is missing");
|
|
309
312
|
return decodeInteger(row.storage_revision, "record_metadata.storage_revision");
|
|
@@ -333,7 +336,7 @@ function validateCurrentRecordDomain(connection) {
|
|
|
333
336
|
let metadata;
|
|
334
337
|
try {
|
|
335
338
|
metadata = currentStatement(connection.db, `SELECT format,storage_revision,storage_generation,schema_fingerprint,barrier_state
|
|
336
|
-
FROM
|
|
339
|
+
FROM ne19_record_metadata WHERE singleton=1`).get();
|
|
337
340
|
}
|
|
338
341
|
catch (cause) {
|
|
339
342
|
throw (0, errors_ts_1.sqliteError)("record-schema-unsupported", "validate-schema", "database does not expose the ProjectDatabase identity", cause);
|
|
@@ -357,7 +360,7 @@ function validateCurrentRecordDomain(connection) {
|
|
|
357
360
|
}
|
|
358
361
|
validateSchemaObjects(connection);
|
|
359
362
|
const coordination = currentStatement(connection.db, `SELECT revision,operational_generation,next_writer_sequence,
|
|
360
|
-
writer_ticket_id,barrier_id FROM
|
|
363
|
+
writer_ticket_id,barrier_id FROM ne19_coordination_state WHERE singleton=1`).get();
|
|
361
364
|
if (coordination === undefined) {
|
|
362
365
|
throw (0, errors_ts_1.sqliteError)("record-database-invalid", "validate-schema", "host coordination generation is missing");
|
|
363
366
|
}
|
|
@@ -366,7 +369,7 @@ function validateCurrentRecordDomain(connection) {
|
|
|
366
369
|
if (operationalGeneration !== storageGeneration) {
|
|
367
370
|
throw (0, errors_ts_1.sqliteError)("record-database-invalid", "validate-schema", "operational coordination generation does not match ProjectDatabase");
|
|
368
371
|
}
|
|
369
|
-
const migration = currentStatement(connection.db, "SELECT state FROM
|
|
372
|
+
const migration = currentStatement(connection.db, "SELECT state FROM ne19_migration_state WHERE singleton=1").get();
|
|
370
373
|
if (migration === undefined) {
|
|
371
374
|
throw (0, errors_ts_1.sqliteError)("record-database-invalid", "validate-schema", "ProjectDatabase migration state is missing");
|
|
372
375
|
}
|
|
@@ -376,7 +379,7 @@ function validateCurrentRecordDomain(connection) {
|
|
|
376
379
|
}
|
|
377
380
|
}
|
|
378
381
|
function requireMigrationReady(connection) {
|
|
379
|
-
const row = currentStatement(connection.db, "SELECT state FROM
|
|
382
|
+
const row = currentStatement(connection.db, "SELECT state FROM ne19_migration_state WHERE singleton=1").get();
|
|
380
383
|
if (row === undefined || decodeText(row.state, "migration_state.state") !== "ready") {
|
|
381
384
|
throw (0, errors_ts_1.sqliteError)("record-schema-migration-required", "open", "ProjectDatabase migration committed but requires Host verification");
|
|
382
385
|
}
|
|
@@ -431,12 +434,12 @@ function openRecordWriter(path, busyTimeoutMs = 5000) {
|
|
|
431
434
|
db.exec("BEGIN IMMEDIATE");
|
|
432
435
|
try {
|
|
433
436
|
db.exec(schema_ts_1.RECORD_SQLITE_BASELINE_SQL);
|
|
434
|
-
currentStatement(db, `INSERT INTO
|
|
437
|
+
currentStatement(db, `INSERT INTO ne19_record_metadata(singleton,format,storage_revision,storage_generation,schema_fingerprint,
|
|
435
438
|
created_at,barrier_state,portable_generation,portable_revision,portable_gate_id,record_payload,record_digest)
|
|
436
439
|
VALUES (1,?,?,?,?,?,'open',NULL,NULL,NULL,NULL,NULL)`).run(types_ts_1.RECORD_SQLITE_FORMAT, types_ts_1.RECORD_SQLITE_STORAGE_REVISION, generation, schema_ts_1.RECORD_SQLITE_BASELINE_FINGERPRINT, appliedAt);
|
|
437
|
-
currentStatement(db, `INSERT INTO
|
|
440
|
+
currentStatement(db, `INSERT INTO ne19_coordination_state(singleton,revision,operational_generation,next_writer_sequence)
|
|
438
441
|
VALUES (1,0,?,1)`).run(generation);
|
|
439
|
-
currentStatement(db, `INSERT INTO
|
|
442
|
+
currentStatement(db, `INSERT INTO ne19_migration_state(singleton,state,source_format,source_digest)
|
|
440
443
|
VALUES (1,'ready',NULL,NULL)`).run();
|
|
441
444
|
db.exec("COMMIT");
|
|
442
445
|
created = true;
|
|
@@ -571,16 +574,16 @@ function reopenProjectDatabase(path) {
|
|
|
571
574
|
const connection = openRecordWriter(path);
|
|
572
575
|
try {
|
|
573
576
|
connection.db.exec("BEGIN IMMEDIATE");
|
|
574
|
-
const row = currentStatement(connection.db, "SELECT barrier_state FROM
|
|
577
|
+
const row = currentStatement(connection.db, "SELECT barrier_state FROM ne19_record_metadata WHERE singleton=1")
|
|
575
578
|
.get();
|
|
576
579
|
if (row === undefined || decodeText(row.barrier_state, "barrier_state") === "draining") {
|
|
577
580
|
throw (0, errors_ts_1.sqliteError)("record-command-conflict", "reopen", "ProjectDatabase portable gate is draining");
|
|
578
581
|
}
|
|
579
582
|
if (decodeText(row.barrier_state, "barrier_state") === "portable") {
|
|
580
583
|
const generation = (0, node_crypto_1.randomUUID)();
|
|
581
|
-
currentStatement(connection.db, `UPDATE
|
|
584
|
+
currentStatement(connection.db, `UPDATE ne19_record_metadata SET barrier_state='open',storage_generation=?,portable_generation=NULL,
|
|
582
585
|
portable_revision=NULL,portable_gate_id=NULL WHERE singleton=1 AND barrier_state='portable'`).run(generation);
|
|
583
|
-
currentStatement(connection.db, "UPDATE
|
|
586
|
+
currentStatement(connection.db, "UPDATE ne19_coordination_state SET operational_generation=?,revision=revision+1 WHERE singleton=1")
|
|
584
587
|
.run(generation);
|
|
585
588
|
}
|
|
586
589
|
connection.db.exec("COMMIT");
|
|
@@ -608,7 +611,7 @@ function makeProjectDatabasePortable(path) {
|
|
|
608
611
|
let connection = openRecordWriter(path);
|
|
609
612
|
try {
|
|
610
613
|
connection.db.exec("BEGIN IMMEDIATE");
|
|
611
|
-
const metadata = currentStatement(connection.db, "SELECT barrier_state,portable_gate_id FROM
|
|
614
|
+
const metadata = currentStatement(connection.db, "SELECT barrier_state,portable_gate_id FROM ne19_record_metadata WHERE singleton=1")
|
|
612
615
|
.get();
|
|
613
616
|
if (metadata === undefined) {
|
|
614
617
|
throw (0, errors_ts_1.sqliteError)("record-database-invalid", "portable-gate", "ProjectDatabase barrier is missing");
|
|
@@ -620,7 +623,7 @@ function makeProjectDatabasePortable(path) {
|
|
|
620
623
|
}
|
|
621
624
|
if (barrierState === "draining") {
|
|
622
625
|
const previous = currentStatement(connection.db, `SELECT barrier_id,barrier_nonce,barrier_host,barrier_pid,
|
|
623
|
-
barrier_boot_id,barrier_process_start FROM
|
|
626
|
+
barrier_boot_id,barrier_process_start FROM ne19_coordination_state WHERE singleton=1`).get();
|
|
624
627
|
if (previous === undefined || previous.barrier_id === null || previous.barrier_nonce === null) {
|
|
625
628
|
throw (0, errors_ts_1.sqliteError)("record-database-invalid", "portable-gate", "draining portable gate has no fenced owner");
|
|
626
629
|
}
|
|
@@ -636,20 +639,20 @@ function makeProjectDatabasePortable(path) {
|
|
|
636
639
|
if (!sameProcess && (0, node_process_identity_ts_1.exactProcessState)(previousOwner) !== "dead") {
|
|
637
640
|
throw (0, errors_ts_1.sqliteError)("record-command-conflict", "portable-gate", "draining portable gate owner is not proven dead");
|
|
638
641
|
}
|
|
639
|
-
const fenced = currentStatement(connection.db, `UPDATE
|
|
642
|
+
const fenced = currentStatement(connection.db, `UPDATE ne19_coordination_state SET barrier_id=?,barrier_nonce=?,barrier_host=?,
|
|
640
643
|
barrier_pid=?,barrier_boot_id=?,barrier_process_start=?,barrier_deadline=?,barrier_requested_at=?,
|
|
641
644
|
barrier_lease_expires_at=?,barrier_status='active',barrier_active_at=?,revision=revision+1
|
|
642
645
|
WHERE singleton=1 AND barrier_id=? AND barrier_nonce=?`).run(gateId, gateNonce, gateOwner.host, gateOwner.pid, gateOwner.bootId, gateOwner.processStart, admissionDrainDeadline, Date.now(), admissionDrainDeadline, Date.now(), previous.barrier_id, previous.barrier_nonce);
|
|
643
|
-
const metadataFenced = currentStatement(connection.db, `UPDATE
|
|
646
|
+
const metadataFenced = currentStatement(connection.db, `UPDATE ne19_record_metadata SET portable_gate_id=?
|
|
644
647
|
WHERE singleton=1 AND barrier_state='draining' AND portable_gate_id=?`).run(gateId, metadata.portable_gate_id);
|
|
645
648
|
if (Number(fenced.changes) !== 1 || Number(metadataFenced.changes) !== 1) {
|
|
646
649
|
throw (0, errors_ts_1.sqliteError)("record-command-conflict", "portable-gate", "draining portable gate changed during recovery");
|
|
647
650
|
}
|
|
648
651
|
}
|
|
649
652
|
else if (barrierState === "open") {
|
|
650
|
-
const entered = recordStatement(connection, `UPDATE
|
|
653
|
+
const entered = recordStatement(connection, `UPDATE ne19_record_metadata SET barrier_state='draining',portable_gate_id=?
|
|
651
654
|
WHERE singleton=1 AND barrier_state='open' AND portable_gate_id IS NULL`).run(gateId);
|
|
652
|
-
const established = currentStatement(connection.db, `UPDATE
|
|
655
|
+
const established = currentStatement(connection.db, `UPDATE ne19_coordination_state SET barrier_id=?,barrier_nonce=?,barrier_host=?,
|
|
653
656
|
barrier_pid=?,barrier_boot_id=?,barrier_process_start=?,barrier_deadline=?,barrier_requested_at=?,
|
|
654
657
|
barrier_lease_expires_at=?,barrier_status='active',barrier_active_at=?,revision=revision+1
|
|
655
658
|
WHERE singleton=1 AND barrier_id IS NULL`).run(gateId, gateNonce, gateOwner.host, gateOwner.pid, gateOwner.bootId, gateOwner.processStart, admissionDrainDeadline, Date.now(), admissionDrainDeadline, Date.now());
|
|
@@ -661,17 +664,17 @@ function makeProjectDatabasePortable(path) {
|
|
|
661
664
|
throw (0, errors_ts_1.sqliteError)("record-database-invalid", "portable-gate", "ProjectDatabase barrier state is invalid");
|
|
662
665
|
}
|
|
663
666
|
const admittedActive = currentStatement(connection.db, `SELECT
|
|
664
|
-
(SELECT count(*) FROM
|
|
665
|
-
(SELECT count(*) FROM
|
|
666
|
-
(SELECT count(*) FROM
|
|
667
|
-
(SELECT count(*) FROM
|
|
668
|
-
(SELECT count(*) FROM
|
|
669
|
-
(SELECT count(*) FROM
|
|
667
|
+
(SELECT count(*) FROM ne19_run_resources WHERE terminal_state IS NULL)+
|
|
668
|
+
(SELECT count(*) FROM ne19_invocation_sessions WHERE state IN ('active','recovering'))+
|
|
669
|
+
(SELECT count(*) FROM ne19_case_locks)+
|
|
670
|
+
(SELECT count(*) FROM ne19_teardown_obligations)+
|
|
671
|
+
(SELECT count(*) FROM ne19_shared_state_generations s WHERE state_kind!='free' AND generation=(SELECT max(generation) FROM ne19_shared_state_generations WHERE state_key=s.state_key))+
|
|
672
|
+
(SELECT count(*) FROM ne19_kept_sandbox_operation_leases) AS count`)
|
|
670
673
|
.get();
|
|
671
674
|
if (decodeInteger(admittedActive.count, "active_runs") !== 0) {
|
|
672
|
-
currentStatement(connection.db, `UPDATE
|
|
675
|
+
currentStatement(connection.db, `UPDATE ne19_record_metadata SET barrier_state='open',portable_gate_id=NULL
|
|
673
676
|
WHERE singleton=1 AND barrier_state='draining' AND portable_gate_id=?`).run(gateId);
|
|
674
|
-
currentStatement(connection.db, `UPDATE
|
|
677
|
+
currentStatement(connection.db, `UPDATE ne19_coordination_state SET barrier_id=NULL,barrier_nonce=NULL,barrier_host=NULL,
|
|
675
678
|
barrier_pid=NULL,barrier_boot_id=NULL,barrier_process_start=NULL,barrier_deadline=NULL,
|
|
676
679
|
barrier_requested_at=NULL,barrier_lease_expires_at=NULL,barrier_status=NULL,barrier_active_at=NULL,
|
|
677
680
|
revision=revision+1 WHERE singleton=1 AND barrier_id=? AND barrier_nonce=?`).run(gateId, gateNonce);
|
|
@@ -681,12 +684,12 @@ function makeProjectDatabasePortable(path) {
|
|
|
681
684
|
// The draining barrier rejects new tickets. Queued-but-not-admitted work
|
|
682
685
|
// has no writer authority and is canceled; an already admitted writer or
|
|
683
686
|
// barrier must release its exact identity before the gate continues.
|
|
684
|
-
currentStatement(connection.db, "DELETE FROM
|
|
687
|
+
currentStatement(connection.db, "DELETE FROM ne19_coordination_tickets").run();
|
|
685
688
|
connection.db.exec("COMMIT");
|
|
686
689
|
while (true) {
|
|
687
690
|
const coordination = currentStatement(connection.db, `SELECT
|
|
688
691
|
(writer_ticket_id IS NOT NULL OR (barrier_id IS NOT NULL AND barrier_id!=?)) AS active
|
|
689
|
-
FROM
|
|
692
|
+
FROM ne19_coordination_state WHERE singleton=1`).get(gateId);
|
|
690
693
|
if (coordination === undefined) {
|
|
691
694
|
throw (0, errors_ts_1.sqliteError)("record-database-invalid", "portable-gate", "coordination singleton is missing");
|
|
692
695
|
}
|
|
@@ -698,21 +701,21 @@ function makeProjectDatabasePortable(path) {
|
|
|
698
701
|
Atomics.wait(waitCell, 0, 0, 15);
|
|
699
702
|
}
|
|
700
703
|
connection.db.exec("BEGIN IMMEDIATE");
|
|
701
|
-
const active = currentStatement(connection.db, "SELECT count(*) AS count FROM
|
|
704
|
+
const active = currentStatement(connection.db, "SELECT count(*) AS count FROM ne19_run_resources WHERE terminal_state IS NULL")
|
|
702
705
|
.get();
|
|
703
706
|
if (decodeInteger(active.count, "active_runs") !== 0) {
|
|
704
707
|
throw (0, errors_ts_1.sqliteError)("record-command-conflict", "portable-gate", "active Run owners prevent portable close");
|
|
705
708
|
}
|
|
706
709
|
const invocationWork = currentStatement(connection.db, `SELECT
|
|
707
|
-
(SELECT count(*) FROM
|
|
708
|
-
(SELECT count(*) FROM
|
|
709
|
-
(SELECT count(*) FROM
|
|
710
|
+
(SELECT count(*) FROM ne19_invocation_sessions WHERE state IN ('active','recovering'))+
|
|
711
|
+
(SELECT count(*) FROM ne19_invocation_session_queued_attempts)+
|
|
712
|
+
(SELECT count(*) FROM ne19_case_locks) AS count`).get();
|
|
710
713
|
if (decodeInteger(invocationWork.count, "invocation_work") !== 0) {
|
|
711
714
|
throw (0, errors_ts_1.sqliteError)("record-command-conflict", "portable-gate", "invocation coordination work prevents portable close");
|
|
712
715
|
}
|
|
713
|
-
currentExec(connection.db, `DELETE FROM
|
|
714
|
-
(SELECT 1 FROM
|
|
715
|
-
currentStatement(connection.db, `UPDATE
|
|
716
|
+
currentExec(connection.db, `DELETE FROM ne19_runs WHERE status!='sealed' AND NOT EXISTS
|
|
717
|
+
(SELECT 1 FROM ne19_attempt_publications WHERE origin_run_id=ne19_runs.run_id); DELETE FROM ne19_coordination_tickets;`);
|
|
718
|
+
currentStatement(connection.db, `UPDATE ne19_coordination_state SET revision=revision+1,next_writer_sequence=1,
|
|
716
719
|
writer_ticket_id=NULL,writer_sequence=NULL,writer_host=NULL,writer_pid=NULL,writer_deadline=NULL,
|
|
717
720
|
writer_boot_id=NULL,writer_process_start=NULL,
|
|
718
721
|
writer_enqueued_at=NULL,writer_nonce=NULL,writer_admitted_at=NULL,writer_lease_expires_at=NULL,
|
|
@@ -720,11 +723,11 @@ function makeProjectDatabasePortable(path) {
|
|
|
720
723
|
barrier_boot_id=NULL,barrier_process_start=NULL,
|
|
721
724
|
barrier_requested_at=NULL,barrier_lease_expires_at=NULL,barrier_status=NULL,barrier_active_at=NULL
|
|
722
725
|
WHERE singleton=1`).run();
|
|
723
|
-
const clock = currentStatement(connection.db, "SELECT revision FROM
|
|
726
|
+
const clock = currentStatement(connection.db, "SELECT revision FROM ne19_run_publication_clock WHERE singleton=1")
|
|
724
727
|
.get();
|
|
725
|
-
const generation = currentStatement(connection.db, "SELECT storage_generation FROM
|
|
728
|
+
const generation = currentStatement(connection.db, "SELECT storage_generation FROM ne19_record_metadata WHERE singleton=1")
|
|
726
729
|
.get();
|
|
727
|
-
currentStatement(connection.db, `UPDATE
|
|
730
|
+
currentStatement(connection.db, `UPDATE ne19_record_metadata SET barrier_state='portable',portable_generation=?,portable_revision=?
|
|
728
731
|
WHERE singleton=1 AND barrier_state='draining' AND portable_gate_id=?`).run(decodeText(generation.storage_generation, "storage_generation"), decodeInteger(clock.revision, "publication_revision"), gateId);
|
|
729
732
|
connection.db.exec("COMMIT");
|
|
730
733
|
checkpointRecordDatabase(connection);
|
|
@@ -740,24 +743,24 @@ function makeProjectDatabasePortable(path) {
|
|
|
740
743
|
connection = openRecordReader(path);
|
|
741
744
|
try {
|
|
742
745
|
const state = currentStatement(connection.db, `SELECT barrier_state,portable_generation,portable_revision,storage_generation
|
|
743
|
-
FROM
|
|
746
|
+
FROM ne19_record_metadata WHERE singleton=1`).get();
|
|
744
747
|
const active = currentStatement(connection.db, `SELECT
|
|
745
|
-
(SELECT count(*) FROM
|
|
746
|
-
(SELECT count(*) FROM
|
|
747
|
-
(EXISTS (SELECT 1 FROM
|
|
748
|
-
EXISTS (SELECT 1 FROM
|
|
749
|
-
(SELECT count(*) FROM
|
|
748
|
+
(SELECT count(*) FROM ne19_run_resources WHERE terminal_state IS NULL)+
|
|
749
|
+
(SELECT count(*) FROM ne19_runs r WHERE status!='sealed' AND
|
|
750
|
+
(EXISTS (SELECT 1 FROM ne19_attempts a WHERE a.origin_run_id=r.run_id AND a.publication_state!='published') OR
|
|
751
|
+
EXISTS (SELECT 1 FROM ne19_run_resources rr WHERE rr.run_id=r.run_id AND rr.terminal_state IS NULL)))+
|
|
752
|
+
(SELECT count(*) FROM ne19_coordination_tickets) AS count`).get();
|
|
750
753
|
const invocationWork = currentStatement(connection.db, `SELECT
|
|
751
|
-
(SELECT count(*) FROM
|
|
752
|
-
(SELECT count(*) FROM
|
|
753
|
-
(SELECT count(*) FROM
|
|
754
|
+
(SELECT count(*) FROM ne19_invocation_sessions WHERE state IN ('active','recovering'))+
|
|
755
|
+
(SELECT count(*) FROM ne19_invocation_session_queued_attempts)+
|
|
756
|
+
(SELECT count(*) FROM ne19_case_locks) AS count`).get();
|
|
754
757
|
const registryWork = currentStatement(connection.db, `SELECT
|
|
755
|
-
(SELECT count(*) FROM
|
|
756
|
-
(SELECT count(*) FROM
|
|
757
|
-
(SELECT count(*) FROM
|
|
758
|
-
const coordination = currentStatement(connection.db, `SELECT writer_ticket_id,barrier_id FROM
|
|
758
|
+
(SELECT count(*) FROM ne19_teardown_obligations)+
|
|
759
|
+
(SELECT count(*) FROM ne19_shared_state_generations s WHERE state_kind!='free' AND generation=(SELECT max(generation) FROM ne19_shared_state_generations WHERE state_key=s.state_key))+
|
|
760
|
+
(SELECT count(*) FROM ne19_kept_sandbox_operation_leases) AS count`).get();
|
|
761
|
+
const coordination = currentStatement(connection.db, `SELECT writer_ticket_id,barrier_id FROM ne19_coordination_state WHERE singleton=1`)
|
|
759
762
|
.get();
|
|
760
|
-
const clock = currentStatement(connection.db, "SELECT revision FROM
|
|
763
|
+
const clock = currentStatement(connection.db, "SELECT revision FROM ne19_run_publication_clock WHERE singleton=1")
|
|
761
764
|
.get();
|
|
762
765
|
if (state === undefined || decodeText(state.barrier_state, "barrier_state") !== "portable" ||
|
|
763
766
|
decodeText(state.portable_generation, "portable_generation") !== decodeText(state.storage_generation, "storage_generation") ||
|