feat(drive): add durable Workspace document storage and lifecycle

Use object_store 0.13.2 immutable local blobs and FeatureStorage SQLite trees, revision CAS, same-transaction receipts, bounded reads/search, staged/orphan GC and retryable deletion. Attach Server authority to serialize cached Drive operations with deletion reservation. Document fsync compensation, Linux guarantees and offline DB-plus-blob restore.

Validation: root cargo check; workspace-drive 29 unit + 12 integration tests; feature-storage 13 tests; workspace-server 649 library + 11 binary tests with test-threads=4; cargo fmt --all -- --check; git diff --check HEAD. Default-parallel Server run hit the existing ticket_checker_burst timeout assertion (648 passed); the isolated filter and bounded-parallel full suite passed. Fault tests are not physical power-cut evidence.
This commit is contained in:
2026-10-08 21:39:51 +09:00
parent 1a095315ee
commit 633522278b
14 changed files with 3558 additions and 10 deletions
Generated
+51
View File
@@ -1966,6 +1966,12 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "humantime"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15cdd26707701c53297e2fa6afb323d55fbc1d0810c3aec078ae3ef0424c3c15"
[[package]]
name = "hybrid-array"
version = "0.4.10"
@@ -3024,6 +3030,32 @@ dependencies = [
"url",
]
[[package]]
name = "object_store"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "622acbc9100d3c10e2ee15804b0caa40e55c933d5aa53814cd520805b7958a49"
dependencies = [
"async-trait",
"bytes",
"chrono",
"futures-channel",
"futures-core",
"futures-util",
"http",
"humantime",
"itertools",
"parking_lot",
"percent-encoding",
"thiserror 2.0.18",
"tokio",
"tracing",
"url",
"walkdir",
"wasm-bindgen-futures",
"web-time",
]
[[package]]
name = "oid-registry"
version = "0.7.1"
@@ -6559,6 +6591,24 @@ dependencies = [
"zeroize",
]
[[package]]
name = "workspace-drive"
version = "0.1.0"
dependencies = [
"bytes",
"feature-storage",
"futures",
"object_store",
"rusqlite",
"serde",
"serde_json",
"sha2 0.11.0",
"tempfile",
"thiserror 2.0.18",
"tokio",
"uuid",
]
[[package]]
name = "writeable"
version = "0.6.3"
@@ -6708,6 +6758,7 @@ dependencies = [
"workdir",
"worker",
"worker-runtime",
"workspace-drive",
"yoi",
"zeroize",
]