@feltdb/core 0.11.6 → 0.11.8
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/create/package-versions.js +1 -1
- package/dist/create/server-source/crates/feltdb-server/src/backup.rs +290 -7
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +302 -13
- package/dist/create/server-source/crates/feltdb-wasm/test_wasm.db.lock +0 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +23 -2
- package/dist/embedded-query.d.ts.map +1 -1
- package/dist/embedded-query.js +20 -6
- package/dist/file-db.d.ts +160 -14
- package/dist/file-db.d.ts.map +1 -1
- package/dist/file-db.js +723 -245
- package/dist/file-journal.d.ts +70 -0
- package/dist/file-journal.d.ts.map +1 -0
- package/dist/file-journal.js +184 -0
- package/dist/runtime-snapshot.d.ts +76 -2
- package/dist/runtime-snapshot.d.ts.map +1 -1
- package/dist/runtime-snapshot.js +68 -7
- package/dist/stable-hash.d.ts +17 -0
- package/dist/stable-hash.d.ts.map +1 -0
- package/dist/stable-hash.js +82 -0
- package/dist/studio-app/assets/index-Ccecp6rc.js +30 -0
- package/dist/studio-app/index.html +1 -1
- package/package.json +1 -1
- package/dist/studio-app/assets/index-gR6d3Tys.js +0 -30
|
@@ -75,7 +75,7 @@ use feltdb_server::{
|
|
|
75
75
|
authenticated_principal::AuthenticatedPrincipal,
|
|
76
76
|
authorization::{authorize, AuthorizationRequest, Subject},
|
|
77
77
|
backup::{
|
|
78
|
-
|
|
78
|
+
restore_bundle, select_bundle_at,
|
|
79
79
|
server_artifacts, verify_bundle,
|
|
80
80
|
},
|
|
81
81
|
causal::{
|
|
@@ -8529,6 +8529,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
8529
8529
|
if manage_backup()? {
|
|
8530
8530
|
return Ok(());
|
|
8531
8531
|
}
|
|
8532
|
+
if manage_doctor()? {
|
|
8533
|
+
return Ok(());
|
|
8534
|
+
}
|
|
8532
8535
|
if manage_application_runtime()? {
|
|
8533
8536
|
return Ok(());
|
|
8534
8537
|
}
|
|
@@ -9989,8 +9992,16 @@ async fn health_ready(State(state): State<AppState>) -> axum::response::Response
|
|
|
9989
9992
|
match outcome {
|
|
9990
9993
|
Ok(Ok(Ok(health))) => {
|
|
9991
9994
|
let ready = health.is_nominal();
|
|
9995
|
+
let recovering = matches!(
|
|
9996
|
+
state.cluster.proposal().map(|value| value.phase),
|
|
9997
|
+
Some(ProposalPhase::Preparing | ProposalPhase::Prepared)
|
|
9998
|
+
);
|
|
9992
9999
|
let body = Json(json!({
|
|
9993
10000
|
"ready": ready,
|
|
10001
|
+
// The explicit health model. A running server has already
|
|
10002
|
+
// refused a corrupt or incompatible log at open, so `corrupt`
|
|
10003
|
+
// is reported offline by `feltdb-server doctor`, never here.
|
|
10004
|
+
"state": if !ready { "degraded" } else if recovering { "recovering" } else { "healthy" },
|
|
9994
10005
|
"storage": health.storage.label(),
|
|
9995
10006
|
"durable_format": health.durable_format.to_string(),
|
|
9996
10007
|
"probe_ms": waited_ms,
|
|
@@ -10006,6 +10017,7 @@ async fn health_ready(State(state): State<AppState>) -> axum::response::Response
|
|
|
10006
10017
|
StatusCode::SERVICE_UNAVAILABLE,
|
|
10007
10018
|
Json(json!({
|
|
10008
10019
|
"ready": false,
|
|
10020
|
+
"state": "unavailable",
|
|
10009
10021
|
"error": error.to_string(),
|
|
10010
10022
|
"code": "STORAGE_UNAVAILABLE",
|
|
10011
10023
|
"probe_ms": waited_ms,
|
|
@@ -10016,6 +10028,7 @@ async fn health_ready(State(state): State<AppState>) -> axum::response::Response
|
|
|
10016
10028
|
StatusCode::SERVICE_UNAVAILABLE,
|
|
10017
10029
|
Json(json!({
|
|
10018
10030
|
"ready": false,
|
|
10031
|
+
"state": "unavailable",
|
|
10019
10032
|
"error": error.to_string(),
|
|
10020
10033
|
"code": "STORAGE_PROBE_FAILED",
|
|
10021
10034
|
"probe_ms": waited_ms,
|
|
@@ -10026,6 +10039,7 @@ async fn health_ready(State(state): State<AppState>) -> axum::response::Response
|
|
|
10026
10039
|
StatusCode::SERVICE_UNAVAILABLE,
|
|
10027
10040
|
Json(json!({
|
|
10028
10041
|
"ready": false,
|
|
10042
|
+
"state": "unavailable",
|
|
10029
10043
|
"error": "storage probe exceeded the server deadline",
|
|
10030
10044
|
"code": "STORAGE_STALLED",
|
|
10031
10045
|
"probe_ms": waited_ms,
|
|
@@ -10370,7 +10384,6 @@ fn manage_backup() -> Result<bool, Box<dyn std::error::Error>> {
|
|
|
10370
10384
|
if arguments.get(1).map(String::as_str) != Some("backup") {
|
|
10371
10385
|
return Ok(false);
|
|
10372
10386
|
}
|
|
10373
|
-
let command = arguments.get(2).map(String::as_str).unwrap_or("");
|
|
10374
10387
|
let option = |name: &str| {
|
|
10375
10388
|
arguments
|
|
10376
10389
|
.iter()
|
|
@@ -10378,27 +10391,105 @@ fn manage_backup() -> Result<bool, Box<dyn std::error::Error>> {
|
|
|
10378
10391
|
.and_then(|index| arguments.get(index + 1))
|
|
10379
10392
|
.cloned()
|
|
10380
10393
|
};
|
|
10394
|
+
let json_output = arguments.iter().any(|value| value == "--json");
|
|
10395
|
+
// `backup <path>` is `backup create --output <path>`; `backup verify <path>`
|
|
10396
|
+
// is `backup verify --archive <path>`. The flag forms remain supported.
|
|
10397
|
+
let positional = |from: usize| {
|
|
10398
|
+
let mut index = from;
|
|
10399
|
+
while let Some(value) = arguments.get(index) {
|
|
10400
|
+
if value == "--json" {
|
|
10401
|
+
index += 1;
|
|
10402
|
+
} else if value.starts_with("--") {
|
|
10403
|
+
index += 2;
|
|
10404
|
+
} else {
|
|
10405
|
+
return Some(value.clone());
|
|
10406
|
+
}
|
|
10407
|
+
}
|
|
10408
|
+
None
|
|
10409
|
+
};
|
|
10410
|
+
let (command, target) = match arguments.get(2).map(String::as_str) {
|
|
10411
|
+
Some(command @ ("create" | "verify" | "restore")) => (command, positional(3)),
|
|
10412
|
+
Some(value) if !value.starts_with("--") => ("create", Some(value.to_string())),
|
|
10413
|
+
_ if option("--output").is_some() && option("--archive").is_none() => ("create", None),
|
|
10414
|
+
_ => ("", None),
|
|
10415
|
+
};
|
|
10416
|
+
let usage = "usage: feltdb-server backup [create] <output> | backup verify <archive> | backup restore --archive <archive> --output <directory> [--at-ms timestamp] (options: --data path --keys path --audit path --json)";
|
|
10417
|
+
let started = Instant::now();
|
|
10418
|
+
let emit = |report: &feltdb_server::backup::BackupReport, human: String| {
|
|
10419
|
+
if json_output {
|
|
10420
|
+
println!("{}", serde_json::to_string_pretty(report).unwrap_or_default());
|
|
10421
|
+
} else if report.status == "ok" {
|
|
10422
|
+
println!("{human}");
|
|
10423
|
+
} else {
|
|
10424
|
+
eprintln!(
|
|
10425
|
+
"Backup {} failed: {} ({})",
|
|
10426
|
+
report.operation,
|
|
10427
|
+
report.path,
|
|
10428
|
+
report.error.as_deref().unwrap_or("unknown error")
|
|
10429
|
+
);
|
|
10430
|
+
}
|
|
10431
|
+
};
|
|
10381
10432
|
match command {
|
|
10382
10433
|
"create" => {
|
|
10383
10434
|
let data = PathBuf::from(option("--data").unwrap_or_else(|| "./data/feltdb.log".into()));
|
|
10384
10435
|
let keys = PathBuf::from(option("--keys").unwrap_or_else(|| "./data/api-keys.json".into()));
|
|
10385
10436
|
let audit = PathBuf::from(option("--audit").unwrap_or_else(|| data.with_extension("audit.log").to_string_lossy().into_owned()));
|
|
10386
|
-
let output =
|
|
10387
|
-
let
|
|
10388
|
-
|
|
10437
|
+
let output = option("--output").or(target).ok_or("backup create requires an output path")?;
|
|
10438
|
+
let output = feltdb_server::backup::normalize_path(std::path::Path::new(&output))?;
|
|
10439
|
+
let data = feltdb_server::backup::normalize_path(&data)?;
|
|
10440
|
+
if !data.exists() {
|
|
10441
|
+
return Err(format!("backup source does not exist: {}", data.display()).into());
|
|
10442
|
+
}
|
|
10443
|
+
let source = feltdb_server::backup::BackupSource {
|
|
10444
|
+
data: Some(data.display().to_string()),
|
|
10445
|
+
state_sha256: None,
|
|
10446
|
+
server_version: Some(env!("CARGO_PKG_VERSION").into()),
|
|
10447
|
+
durable_format: Some(feltdb::DURABLE_FORMAT_VERSION),
|
|
10448
|
+
};
|
|
10449
|
+
feltdb_server::backup::create_bundle_with_source(&output, &server_artifacts(&data, &keys, &audit), &[], source)?;
|
|
10450
|
+
// A backup is reported as successful only after it verifies
|
|
10451
|
+
// independently of the code path that wrote it.
|
|
10452
|
+
let mut report = feltdb_server::backup::verification_report(&output, started, "create");
|
|
10453
|
+
if report.status == "ok" {
|
|
10454
|
+
if let Err(error) = verify_restorable(&output) {
|
|
10455
|
+
report.status = "failed".into();
|
|
10456
|
+
report.verification = "failed".into();
|
|
10457
|
+
report.error = Some(error.to_string());
|
|
10458
|
+
}
|
|
10459
|
+
}
|
|
10460
|
+
let human = format!("Backup created: {} (id {}, format {}, {} files, {} bytes, verified, {} ms)", report.path, &report.backup_id[..report.backup_id.len().min(12)], report.format, report.files, report.bytes_written, report.duration_ms);
|
|
10461
|
+
emit(&report, human);
|
|
10462
|
+
if report.status != "ok" {
|
|
10463
|
+
std::process::exit(1);
|
|
10464
|
+
}
|
|
10389
10465
|
}
|
|
10390
10466
|
"verify" => {
|
|
10391
|
-
let archive =
|
|
10392
|
-
let
|
|
10393
|
-
|
|
10467
|
+
let archive = option("--archive").or(target).ok_or("backup verify requires an archive path")?;
|
|
10468
|
+
let mut report = feltdb_server::backup::verification_report(std::path::Path::new(&archive), started, "verify");
|
|
10469
|
+
let mut restorable = None;
|
|
10470
|
+
if report.status == "ok" {
|
|
10471
|
+
match verify_restorable(std::path::Path::new(&report.path)) {
|
|
10472
|
+
Ok(detail) => restorable = Some(detail),
|
|
10473
|
+
Err(error) => {
|
|
10474
|
+
report.status = "failed".into();
|
|
10475
|
+
report.verification = "failed".into();
|
|
10476
|
+
report.error = Some(error.to_string());
|
|
10477
|
+
}
|
|
10478
|
+
}
|
|
10479
|
+
}
|
|
10480
|
+
let human = format!("Backup verified: {} (id {}, format {}, {} files, {} bytes{})", report.path, &report.backup_id[..report.backup_id.len().min(12)], report.format, report.files, report.bytes_written, restorable.map(|detail| format!(", {detail}")).unwrap_or_default());
|
|
10481
|
+
emit(&report, human);
|
|
10482
|
+
if report.status != "ok" {
|
|
10483
|
+
std::process::exit(1);
|
|
10484
|
+
}
|
|
10394
10485
|
}
|
|
10395
10486
|
"restore" => {
|
|
10396
|
-
let archive = PathBuf::from(option("--archive").ok_or("backup restore requires --archive")?);
|
|
10487
|
+
let archive = PathBuf::from(option("--archive").or(target).ok_or("backup restore requires --archive")?);
|
|
10397
10488
|
let archive = match option("--at-ms") {
|
|
10398
10489
|
Some(value) => select_bundle_at(&archive, value.parse().map_err(|_| "backup restore --at-ms must be an unsigned millisecond timestamp")?)?,
|
|
10399
10490
|
None => archive,
|
|
10400
10491
|
};
|
|
10401
|
-
let output =
|
|
10492
|
+
let output = feltdb_server::backup::normalize_path(std::path::Path::new(&option("--output").ok_or("backup restore requires --output")?))?;
|
|
10402
10493
|
let manifest = restore_bundle(&archive, &output)?;
|
|
10403
10494
|
let snapshot_path = output.join("files/database.snapshot.json");
|
|
10404
10495
|
if snapshot_path.exists() {
|
|
@@ -10406,13 +10497,199 @@ fn manage_backup() -> Result<bool, Box<dyn std::error::Error>> {
|
|
|
10406
10497
|
let database = FeltDb::open(output.join("files/state.log"))?;
|
|
10407
10498
|
database.install_snapshot(snapshot)?;
|
|
10408
10499
|
}
|
|
10409
|
-
|
|
10500
|
+
let mut report = feltdb_server::backup::verification_report(&archive, started, "restore");
|
|
10501
|
+
report.path = output.display().to_string();
|
|
10502
|
+
emit(&report, format!("Backup restored: {} (format {}, {} files)", output.display(), manifest.format, manifest.entries.len()));
|
|
10503
|
+
if report.status != "ok" {
|
|
10504
|
+
std::process::exit(1);
|
|
10505
|
+
}
|
|
10410
10506
|
}
|
|
10411
|
-
_ => return Err(
|
|
10507
|
+
_ => return Err(usage.into()),
|
|
10412
10508
|
}
|
|
10413
10509
|
Ok(true)
|
|
10414
10510
|
}
|
|
10415
10511
|
|
|
10512
|
+
/// `feltdb-server doctor` — what an operator needs to know, offline.
|
|
10513
|
+
///
|
|
10514
|
+
/// Answers, for a data path: is the database healthy; is the durable log
|
|
10515
|
+
/// valid; what state/version is it in; is recovery pending; can a backup be
|
|
10516
|
+
/// created; can that backup be restored; which server and format versions are
|
|
10517
|
+
/// active. It never opens the live files: the state is bundled exactly as
|
|
10518
|
+
/// `backup create` would, and every probe — open, read, write — runs against a
|
|
10519
|
+
/// private restored copy. `--backup <archive>` additionally verifies an
|
|
10520
|
+
/// existing bundle.
|
|
10521
|
+
///
|
|
10522
|
+
/// The health state is one of `healthy`, `recovering`, `degraded`,
|
|
10523
|
+
/// `unavailable`, or `corrupt`, and `healthy` requires every probe to pass:
|
|
10524
|
+
/// a readable durable log in a supported format, a clean replay, a working
|
|
10525
|
+
/// read, a working write, and a restorable backup.
|
|
10526
|
+
fn manage_doctor() -> Result<bool, Box<dyn std::error::Error>> {
|
|
10527
|
+
let arguments: Vec<String> = std::env::args().collect();
|
|
10528
|
+
if arguments.get(1).map(String::as_str) != Some("doctor") {
|
|
10529
|
+
return Ok(false);
|
|
10530
|
+
}
|
|
10531
|
+
let option = |name: &str| {
|
|
10532
|
+
arguments
|
|
10533
|
+
.iter()
|
|
10534
|
+
.position(|value| value == name)
|
|
10535
|
+
.and_then(|index| arguments.get(index + 1))
|
|
10536
|
+
.cloned()
|
|
10537
|
+
};
|
|
10538
|
+
let json_output = arguments.iter().any(|value| value == "--json");
|
|
10539
|
+
let data = feltdb_server::backup::normalize_path(&PathBuf::from(
|
|
10540
|
+
option("--data").unwrap_or_else(|| "./data/feltdb.log".into()),
|
|
10541
|
+
))?;
|
|
10542
|
+
let keys = PathBuf::from(option("--keys").unwrap_or_else(|| "./data/api-keys.json".into()));
|
|
10543
|
+
let audit = PathBuf::from(option("--audit").unwrap_or_else(|| data.with_extension("audit.log").to_string_lossy().into_owned()));
|
|
10544
|
+
|
|
10545
|
+
let mut checks: Vec<Value> = Vec::new();
|
|
10546
|
+
let mut check = |name: &str, ok: bool, detail: String| {
|
|
10547
|
+
checks.push(json!({ "name": name, "status": if ok { "PASS" } else { "FAIL" }, "detail": detail }));
|
|
10548
|
+
ok
|
|
10549
|
+
};
|
|
10550
|
+
let scratch = std::env::temp_dir().join(format!(
|
|
10551
|
+
"feltdb-doctor-{}-{}",
|
|
10552
|
+
std::process::id(),
|
|
10553
|
+
rand::random::<u64>()
|
|
10554
|
+
));
|
|
10555
|
+
let bundle = scratch.join("bundle");
|
|
10556
|
+
let restored = scratch.join("restored");
|
|
10557
|
+
let mut state = "healthy";
|
|
10558
|
+
let mut facts = json!({
|
|
10559
|
+
"data": data.display().to_string(),
|
|
10560
|
+
"server_version": env!("CARGO_PKG_VERSION"),
|
|
10561
|
+
"supported_durable_format": feltdb::DURABLE_FORMAT_VERSION,
|
|
10562
|
+
"backup_format": feltdb_server::backup::BACKUP_FORMAT,
|
|
10563
|
+
});
|
|
10564
|
+
|
|
10565
|
+
if !check("data present", data.exists(), data.display().to_string()) {
|
|
10566
|
+
state = "unavailable";
|
|
10567
|
+
} else {
|
|
10568
|
+
std::fs::create_dir_all(&scratch)?;
|
|
10569
|
+
let source = feltdb_server::backup::BackupSource {
|
|
10570
|
+
data: Some(data.display().to_string()),
|
|
10571
|
+
state_sha256: None,
|
|
10572
|
+
server_version: Some(env!("CARGO_PKG_VERSION").into()),
|
|
10573
|
+
durable_format: Some(feltdb::DURABLE_FORMAT_VERSION),
|
|
10574
|
+
};
|
|
10575
|
+
let bundled = feltdb_server::backup::create_bundle_with_source(&bundle, &server_artifacts(&data, &keys, &audit), &[], source);
|
|
10576
|
+
if !check("backup can be created", bundled.is_ok(), bundled.as_ref().map(|manifest| format!("{} files", manifest.entries.len())).unwrap_or_else(|error| error.to_string())) {
|
|
10577
|
+
state = "unavailable";
|
|
10578
|
+
} else {
|
|
10579
|
+
let restorable = restore_bundle(&bundle, &restored);
|
|
10580
|
+
check("backup can be restored", restorable.is_ok(), restorable.as_ref().map(|_| "restored to a private copy".to_string()).unwrap_or_else(|error| error.to_string()));
|
|
10581
|
+
match FeltDb::open(restored.join("files/state.log")) {
|
|
10582
|
+
Err(error) => {
|
|
10583
|
+
let corrupt = matches!(error, feltdb::FlowError::CorruptLogLine(_) | feltdb::FlowError::IncompatibleFormat(_));
|
|
10584
|
+
check("durable log valid", false, error.to_string());
|
|
10585
|
+
state = if corrupt { "corrupt" } else { "unavailable" };
|
|
10586
|
+
}
|
|
10587
|
+
Ok(database) => {
|
|
10588
|
+
let health = database.health();
|
|
10589
|
+
facts["durable_format"] = json!(health.durable_format.to_string());
|
|
10590
|
+
facts["storage"] = json!(health.storage.label());
|
|
10591
|
+
facts["recovery"] = json!(health.recovery.to_string());
|
|
10592
|
+
facts["sequence"] = json!(database.sequence().unwrap_or(0));
|
|
10593
|
+
check("durable log valid", true, format!("durable format {}", health.durable_format));
|
|
10594
|
+
if !check("replay clean", health.storage.is_clean(), health.recovery.to_string()) {
|
|
10595
|
+
state = "degraded";
|
|
10596
|
+
}
|
|
10597
|
+
let read = database.list_collection_page("_flow_capabilities", None, 1);
|
|
10598
|
+
if !check("read path", read.is_ok(), read.as_ref().map(|_| "bounded read succeeded".to_string()).unwrap_or_else(|error| error.to_string())) {
|
|
10599
|
+
state = "unavailable";
|
|
10600
|
+
}
|
|
10601
|
+
let probe_key = "_feltdb_doctor:probe";
|
|
10602
|
+
let wrote = database
|
|
10603
|
+
.insert(probe_key, json!({ "probe": true }))
|
|
10604
|
+
.and_then(|_| database.get_value(probe_key))
|
|
10605
|
+
.map(|value| value.is_some());
|
|
10606
|
+
if !check("mutation path", matches!(wrote, Ok(true)), match &wrote { Ok(true) => "write and read-back on the private copy".into(), Ok(false) => "write was not readable".into(), Err(error) => error.to_string() }) {
|
|
10607
|
+
state = "unavailable";
|
|
10608
|
+
}
|
|
10609
|
+
}
|
|
10610
|
+
}
|
|
10611
|
+
}
|
|
10612
|
+
if let Ok(cluster) = ClusterStore::load(data.with_extension("cluster.json"), Vec::new()) {
|
|
10613
|
+
let pending = matches!(cluster.proposal().map(|value| value.phase), Some(ProposalPhase::Preparing | ProposalPhase::Prepared));
|
|
10614
|
+
facts["pending_recovery"] = json!(pending);
|
|
10615
|
+
check("no pending membership recovery", !pending, if pending { "a membership change is mid-flight".into() } else { "none".into() });
|
|
10616
|
+
if pending && state == "healthy" {
|
|
10617
|
+
state = "recovering";
|
|
10618
|
+
}
|
|
10619
|
+
}
|
|
10620
|
+
}
|
|
10621
|
+
if let Some(archive) = option("--backup") {
|
|
10622
|
+
let started = Instant::now();
|
|
10623
|
+
let report = feltdb_server::backup::verification_report(std::path::Path::new(&archive), started, "verify");
|
|
10624
|
+
let restorable = if report.status == "ok" { verify_restorable(std::path::Path::new(&report.path)).map_err(|error| error.to_string()) } else { Err(report.error.clone().unwrap_or_default()) };
|
|
10625
|
+
check("supplied backup restorable", restorable.is_ok(), restorable.unwrap_or_else(|error| error));
|
|
10626
|
+
facts["backup"] = json!(report);
|
|
10627
|
+
}
|
|
10628
|
+
let _ = std::fs::remove_dir_all(&scratch);
|
|
10629
|
+
let healthy_requires_all = checks.iter().all(|entry| entry["status"] == "PASS");
|
|
10630
|
+
if state == "healthy" && !healthy_requires_all {
|
|
10631
|
+
state = "degraded";
|
|
10632
|
+
}
|
|
10633
|
+
let report = json!({ "command": "doctor", "state": state, "facts": facts, "checks": checks });
|
|
10634
|
+
if json_output {
|
|
10635
|
+
println!("{}", serde_json::to_string_pretty(&report)?);
|
|
10636
|
+
} else {
|
|
10637
|
+
println!("FeltDB doctor: {state}");
|
|
10638
|
+
for entry in report["checks"].as_array().into_iter().flatten() {
|
|
10639
|
+
println!(" {} {}: {}", if entry["status"] == "PASS" { "✓" } else { "✗" }, entry["name"].as_str().unwrap_or(""), entry["detail"].as_str().unwrap_or(""));
|
|
10640
|
+
}
|
|
10641
|
+
}
|
|
10642
|
+
if state != "healthy" {
|
|
10643
|
+
std::process::exit(1);
|
|
10644
|
+
}
|
|
10645
|
+
Ok(true)
|
|
10646
|
+
}
|
|
10647
|
+
|
|
10648
|
+
/// Prove a bundle restores into a database this build can open.
|
|
10649
|
+
///
|
|
10650
|
+
/// Checksums prove the bytes are the ones recorded; they cannot prove the
|
|
10651
|
+
/// recorded bytes are a FeltDB database in a format this build understands.
|
|
10652
|
+
/// This restores into a private temporary directory, opens it, and reads it —
|
|
10653
|
+
/// the same path `backup restore` and a subsequent server start take — and
|
|
10654
|
+
/// never touches the bundle or any live database.
|
|
10655
|
+
fn verify_restorable(archive: &std::path::Path) -> Result<String, Box<dyn std::error::Error>> {
|
|
10656
|
+
let manifest = verify_bundle(archive)?;
|
|
10657
|
+
let has_log = manifest.entries.iter().any(|entry| entry.path == "files/state.log");
|
|
10658
|
+
let has_snapshot = manifest
|
|
10659
|
+
.entries
|
|
10660
|
+
.iter()
|
|
10661
|
+
.any(|entry| entry.path == "files/database.snapshot.json");
|
|
10662
|
+
if !has_log && !has_snapshot {
|
|
10663
|
+
return Err("backup holds no authoritative state (neither state.log nor database.snapshot.json)".into());
|
|
10664
|
+
}
|
|
10665
|
+
let scratch = std::env::temp_dir().join(format!(
|
|
10666
|
+
"feltdb-backup-verify-{}-{}",
|
|
10667
|
+
std::process::id(),
|
|
10668
|
+
rand::random::<u64>()
|
|
10669
|
+
));
|
|
10670
|
+
let restored = scratch.join("restored");
|
|
10671
|
+
let result = (|| -> Result<String, Box<dyn std::error::Error>> {
|
|
10672
|
+
std::fs::create_dir_all(&scratch)?;
|
|
10673
|
+
restore_bundle(archive, &restored)?;
|
|
10674
|
+
let database = FeltDb::open(restored.join("files/state.log"))?;
|
|
10675
|
+
if has_snapshot {
|
|
10676
|
+
let snapshot: DatabaseSnapshot = serde_json::from_slice(&std::fs::read(
|
|
10677
|
+
restored.join("files/database.snapshot.json"),
|
|
10678
|
+
)?)?;
|
|
10679
|
+
database.install_snapshot(snapshot)?;
|
|
10680
|
+
}
|
|
10681
|
+
let health = database.health();
|
|
10682
|
+
Ok(format!(
|
|
10683
|
+
"restorable: durable format {}, storage {}, sequence {}",
|
|
10684
|
+
health.durable_format,
|
|
10685
|
+
health.storage.label(),
|
|
10686
|
+
database.sequence()?
|
|
10687
|
+
))
|
|
10688
|
+
})();
|
|
10689
|
+
let _ = std::fs::remove_dir_all(&scratch);
|
|
10690
|
+
result
|
|
10691
|
+
}
|
|
10692
|
+
|
|
10416
10693
|
fn manage_application_runtime() -> Result<bool, Box<dyn std::error::Error>> {
|
|
10417
10694
|
let arguments: Vec<String> = std::env::args().collect();
|
|
10418
10695
|
if arguments.get(1).map(String::as_str) != Some("app") {
|
|
@@ -10515,12 +10792,24 @@ async fn create_online_backup(
|
|
|
10515
10792
|
.cloned()
|
|
10516
10793
|
.collect();
|
|
10517
10794
|
let output = PathBuf::from(request.output);
|
|
10795
|
+
let source = feltdb_server::backup::BackupSource {
|
|
10796
|
+
data: state
|
|
10797
|
+
.backup_artifacts
|
|
10798
|
+
.iter()
|
|
10799
|
+
.find(|(label, _)| label == "state.log")
|
|
10800
|
+
.and_then(|(_, path)| feltdb_server::backup::normalize_path(path).ok())
|
|
10801
|
+
.map(|path| path.display().to_string()),
|
|
10802
|
+
state_sha256: None,
|
|
10803
|
+
server_version: Some(env!("CARGO_PKG_VERSION").into()),
|
|
10804
|
+
durable_format: Some(feltdb::DURABLE_FORMAT_VERSION),
|
|
10805
|
+
};
|
|
10518
10806
|
let manifest = tokio::task::spawn_blocking(move || {
|
|
10519
10807
|
let _guard = guard;
|
|
10520
|
-
|
|
10808
|
+
feltdb_server::backup::create_bundle_with_source(
|
|
10521
10809
|
&output,
|
|
10522
10810
|
&artifacts,
|
|
10523
10811
|
&[("database.snapshot.json".to_string(), snapshot_bytes)],
|
|
10812
|
+
source,
|
|
10524
10813
|
)
|
|
10525
10814
|
})
|
|
10526
10815
|
.await
|
|
File without changes
|
package/dist/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/dist/db.js
CHANGED
|
@@ -386,7 +386,9 @@ export class StateFirstDB {
|
|
|
386
386
|
}
|
|
387
387
|
return existing;
|
|
388
388
|
}
|
|
389
|
-
const handle = createRuntimeSnapshot(input, this.snapshotSource()
|
|
389
|
+
const handle = createRuntimeSnapshot(input, this.snapshotSource(), {
|
|
390
|
+
authorityContext: this.authorityScope ? authorityScopeKey(this.authorityScope) : 'unscoped',
|
|
391
|
+
});
|
|
390
392
|
this.snapshots.set(input.name, handle);
|
|
391
393
|
return handle;
|
|
392
394
|
}
|
|
@@ -399,7 +401,7 @@ export class StateFirstDB {
|
|
|
399
401
|
* path.
|
|
400
402
|
*/
|
|
401
403
|
snapshotSource() {
|
|
402
|
-
|
|
404
|
+
const source = {
|
|
403
405
|
readRecords: async (collection) => {
|
|
404
406
|
const result = await this.jsDb.query(collection);
|
|
405
407
|
if (!result?.success) {
|
|
@@ -408,9 +410,28 @@ export class StateFirstDB {
|
|
|
408
410
|
const records = result.data ? JSON.parse(result.data) : [];
|
|
409
411
|
return Array.isArray(records) ? records : [];
|
|
410
412
|
},
|
|
413
|
+
// Bounded source selection: a filtered source is first read through the
|
|
414
|
+
// same scoped, bounded authority query every other read uses. When the
|
|
415
|
+
// selection fits in one page (the maximum, 1,000) that single bounded
|
|
416
|
+
// read is the whole materialization. When it does not, the selection is
|
|
417
|
+
// not small, and one full read beats paging a filter the runtime may have
|
|
418
|
+
// to re-evaluate per page — so the build falls back to it. Either way
|
|
419
|
+
// the build re-applies the filter; this chooses an access path only.
|
|
420
|
+
...(this.jsDb.authority_query ? {
|
|
421
|
+
readSelected: async (collection, where) => {
|
|
422
|
+
const page = await this.jsDb.authority_query({
|
|
423
|
+
collection,
|
|
424
|
+
where,
|
|
425
|
+
orderBy: [{ field: 'id', direction: 'asc' }],
|
|
426
|
+
limit: 1_000,
|
|
427
|
+
});
|
|
428
|
+
return page.exhausted ? page.records : source.readRecords(collection);
|
|
429
|
+
},
|
|
430
|
+
} : {}),
|
|
411
431
|
freshness: () => describeFreshness(this.jsDb),
|
|
412
432
|
revision: () => readRevision(this.jsDb),
|
|
413
433
|
};
|
|
434
|
+
return source;
|
|
414
435
|
}
|
|
415
436
|
/** Deterministically rebuild all derived embedded indexes. */
|
|
416
437
|
async rebuildIndexes() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded-query.d.ts","sourceRoot":"","sources":["../src/embedded-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG9E,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAInC,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,GAAG,cAAc,GAAG,WAAW,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAgDD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CASrH;AAkCD,kFAAkF;AAClF,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,OAAO,CAAmC;gBAErB,OAAO,EAAE,MAAM,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIvE,OAAO,IAAI,IAAI;IAMf,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAgCpD,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,IAAI;IAqBZ,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,wBAAwB;IAK/D,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,qBAAqB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"embedded-query.d.ts","sourceRoot":"","sources":["../src/embedded-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG9E,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAInC,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,GAAG,cAAc,GAAG,WAAW,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAgDD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CASrH;AAkCD,kFAAkF;AAClF,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,OAAO,CAAmC;gBAErB,OAAO,EAAE,MAAM,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIvE,OAAO,IAAI,IAAI;IAMf,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAgCpD,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,IAAI;IAqBZ,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,wBAAwB;IAK/D,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,qBAAqB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE;IAyErG,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,QAAQ;CAkBjB"}
|
package/dist/embedded-query.js
CHANGED
|
@@ -202,12 +202,28 @@ export class EmbeddedQueryEngine {
|
|
|
202
202
|
const order = query.orderBy ?? [];
|
|
203
203
|
const outputSpecs = order.map(value => ({ field: value.field, direction: value.direction }));
|
|
204
204
|
const cursor = query.cursor ? decode(query.cursor, binding(query)) : undefined;
|
|
205
|
+
let matching = [];
|
|
206
|
+
const lookupStarted = now();
|
|
207
|
+
if (!planned.index) {
|
|
208
|
+
// A full scan is one pass over the rows: filter by collection and
|
|
209
|
+
// conditions as they stream past, and allocate only for matches. Copying
|
|
210
|
+
// every row of every collection into an intermediate array first cost
|
|
211
|
+
// an order of magnitude more than the predicate work itself.
|
|
212
|
+
const prefix = `${query.collection}:`;
|
|
213
|
+
for (const [key, value] of this.allRows()) {
|
|
214
|
+
if (!key.startsWith(prefix))
|
|
215
|
+
continue;
|
|
216
|
+
stats.scanned += 1;
|
|
217
|
+
const record = value;
|
|
218
|
+
if (!record || typeof record !== 'object' || !conditions.every(condition => conditionMatches(record, condition)))
|
|
219
|
+
continue;
|
|
220
|
+
stats.matched += 1;
|
|
221
|
+
matching.push({ key, record });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
205
224
|
const range = planned.index
|
|
206
225
|
? this.indexRange(planned.index, conditions)
|
|
207
|
-
:
|
|
208
|
-
const entries = [...this.allRows()].filter(([key]) => key.startsWith(`${query.collection}:`)).map(([key, value]) => ({ key, record: value }));
|
|
209
|
-
return { entries, start: 0, end: entries.length };
|
|
210
|
-
})();
|
|
226
|
+
: { entries: [], start: 0, end: 0 };
|
|
211
227
|
const candidates = range.entries;
|
|
212
228
|
let candidateStart = range.start;
|
|
213
229
|
if (planned.index && cursor) {
|
|
@@ -222,8 +238,6 @@ export class EmbeddedQueryEngine {
|
|
|
222
238
|
}
|
|
223
239
|
candidateStart = low;
|
|
224
240
|
}
|
|
225
|
-
let matching = [];
|
|
226
|
-
const lookupStarted = now();
|
|
227
241
|
for (let candidateIndex = candidateStart; candidateIndex < range.end; candidateIndex += 1) {
|
|
228
242
|
const entry = candidates[candidateIndex];
|
|
229
243
|
stats.scanned += 1;
|