tensorfs 0.3.75__tar.gz → 0.3.76__tar.gz
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.
- {tensorfs-0.3.75 → tensorfs-0.3.76}/Cargo.lock +2 -2
- {tensorfs-0.3.75 → tensorfs-0.3.76}/Cargo.toml +1 -1
- {tensorfs-0.3.75 → tensorfs-0.3.76}/PKG-INFO +1 -1
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/checkpoint_root.rs +1 -10
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/source_artifact.rs +1 -8
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/store.rs +27 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/pyproject.toml +1 -1
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/Cargo.toml +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/build.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/examples/h3-swiglu-layout.md +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/examples/optional-cache-backfill.md +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/examples/resident-conversion.md +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/examples/resident_conversion_profile.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/asset_update.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/b64.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/bin/tfs/ckpt.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/bin/tfs/conform.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/bin/tfs/fetch.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/bin/tfs/ingest.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/bin/tfs/main.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/bin/tfs/rd.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/bin/tfs/repo.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/bin/tfs/snap.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/bin/tfs/watch.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/cache_roots.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/canon.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/capability.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/catalog/lock.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/catalog.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/cbor.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/checkpoint.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/corpus.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/adoption.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/companion_tests.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/estimate.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/graft_tests.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/group_commit_tests.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/history_cost_tests.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/part_rows_tests.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/progress.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/resume_tests.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/retention.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived/roots.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/derived.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/descriptors.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/disk.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/dtype.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/durability.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/err.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/fetch.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/fill.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/fit.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/gc.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/header.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/home.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ids.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/carrier.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/convert.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/custody.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/fingerprint.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/gguf.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/h3_lora.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/journal.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/mod.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/narrow.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/preflight.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/routes/sdxl.routes.json +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/routes/sdxl.spec.json +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/routes.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/source.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/stamp.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/ingest/transaction.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/jcs.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/lib.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/limits.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/machine.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/manifest.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/meta.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/project.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/providers.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/read.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/receipt.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/reclaim.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/registry.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/relation.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/repo_cache/identity.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/repo_cache.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/repository.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/sha256.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/spec.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/staging.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/stats.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/storage.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/api.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/http.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/http_reuse_tests.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/hub.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/ledger.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/memory.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/mod.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/pace.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/policy.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/prefix.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/pull.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/push.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/ranged.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/speculate.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/transport/tests.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/unsynced.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/src/vectors.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/additive_fields.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/anima_hf_profile.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/as_is.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/checkpoint_roots.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/civitai_sdxl_profile.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fd_budget.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fd_headroom.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fetch_url_progress.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fit.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/blobs.jsonl +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/expected_list.jsonl +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/expected_repository.json +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/expected_rows.jsonl +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/header.cbor +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/manifest.json +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/mutation.json +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/foreign_json.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/h3_lora.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/h3_swiglu.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/home.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/hub_tls.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/import_tree.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/instrument_profiles.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/liveness.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/qwen_image21_profile.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/read_plan.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/reclaim.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/reclaim_run.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/repo_cache.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/repo_store.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/resident_admission.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/routed_single_file.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/sha256_backends.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/sharded_cas.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/source_artifacts.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/source_download.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/source_plan.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/source_prefixes.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/source_preflight.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/staging.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/store_boundaries.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/tensor_schema.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/transfer_memory.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/trust_index.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/version.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/write_through.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-py/Cargo.toml +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-py/src/docs.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-py/src/errors.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-py/src/ingest.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-py/src/lib.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-py/src/store.rs +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/python/tensorfs/__init__.py +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/python/tensorfs/_derived_channel.py +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/python/tensorfs/_ext.pyi +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/python/tensorfs/_source_channel.py +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/python/tensorfs/_tensors.py +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/python/tensorfs/derived.py +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/python/tensorfs/errors.py +0 -0
- {tensorfs-0.3.75 → tensorfs-0.3.76}/python/tensorfs/py.typed +0 -0
|
@@ -439,7 +439,7 @@ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
|
|
|
439
439
|
|
|
440
440
|
[[package]]
|
|
441
441
|
name = "tensorfs-core"
|
|
442
|
-
version = "0.3.
|
|
442
|
+
version = "0.3.76"
|
|
443
443
|
dependencies = [
|
|
444
444
|
"fs2",
|
|
445
445
|
"libc",
|
|
@@ -454,7 +454,7 @@ dependencies = [
|
|
|
454
454
|
|
|
455
455
|
[[package]]
|
|
456
456
|
name = "tensorfs-py"
|
|
457
|
-
version = "0.3.
|
|
457
|
+
version = "0.3.76"
|
|
458
458
|
dependencies = [
|
|
459
459
|
"pyo3",
|
|
460
460
|
"tensorfs-core",
|
|
@@ -155,16 +155,7 @@ fn write(store: &Store, root: &CheckpointRoot) -> Result<()> {
|
|
|
155
155
|
.and_then(|()| file.sync_all())
|
|
156
156
|
.map_err(io)?;
|
|
157
157
|
fs::rename(&temporary, path).map_err(io)?;
|
|
158
|
-
|
|
159
|
-
directory(store),
|
|
160
|
-
store.root().join("roots"),
|
|
161
|
-
store.root().to_path_buf(),
|
|
162
|
-
] {
|
|
163
|
-
File::open(directory)
|
|
164
|
-
.and_then(|file| file.sync_all())
|
|
165
|
-
.map_err(io)?;
|
|
166
|
-
}
|
|
167
|
-
Ok(())
|
|
158
|
+
crate::store::fsync_entry_dir(store.root(), &directory(store))
|
|
168
159
|
})();
|
|
169
160
|
let _ = fs::remove_file(temporary);
|
|
170
161
|
result
|
|
@@ -155,14 +155,7 @@ fn write(store: &Store, root: &TreeRoot) -> Result<()> {
|
|
|
155
155
|
.and_then(|()| file.sync_all())
|
|
156
156
|
.map_err(io)?;
|
|
157
157
|
fs::rename(tmp, path).map_err(io)?;
|
|
158
|
-
|
|
159
|
-
directory(store),
|
|
160
|
-
store.root().join("roots"),
|
|
161
|
-
store.root().to_path_buf(),
|
|
162
|
-
] {
|
|
163
|
-
File::open(dir).and_then(|f| f.sync_all()).map_err(io)?;
|
|
164
|
-
}
|
|
165
|
-
Ok(())
|
|
158
|
+
crate::store::fsync_entry_dir(store.root(), &directory(store))
|
|
166
159
|
}
|
|
167
160
|
fn verify(store: &Store, manifest: &ObjectRef) -> Result<Manifest> {
|
|
168
161
|
let tree = store.read_manifest(manifest)?;
|
|
@@ -2340,6 +2340,33 @@ pub(crate) fn fsync_dir(dir: &Path) -> Result<()> {
|
|
|
2340
2340
|
.map_err(|e| io(format!("fsync dir {}", dir.display()), e))
|
|
2341
2341
|
}
|
|
2342
2342
|
|
|
2343
|
+
/// Make an entry just renamed into `dir` durable. The ancestors up to the store `root` hold
|
|
2344
|
+
/// only directory entries, which change when a directory is created, so each process syncs
|
|
2345
|
+
/// them once per `dir` (by inode: a recreated directory syncs again) rather than on every
|
|
2346
|
+
/// write. A child call's input hold wrote one root and paid four fsyncs; it now pays two.
|
|
2347
|
+
pub(crate) fn fsync_entry_dir(root: &Path, dir: &Path) -> Result<()> {
|
|
2348
|
+
use std::collections::HashSet;
|
|
2349
|
+
use std::sync::{Mutex, OnceLock};
|
|
2350
|
+
static SYNCED: OnceLock<Mutex<HashSet<(u64, u64)>>> = OnceLock::new();
|
|
2351
|
+
fsync_dir(dir)?;
|
|
2352
|
+
let meta = fs::metadata(dir).map_err(|e| io(format!("stat {}", dir.display()), e))?;
|
|
2353
|
+
let identity = (meta.dev(), meta.ino());
|
|
2354
|
+
let synced = SYNCED.get_or_init(Default::default);
|
|
2355
|
+
if synced.lock().is_ok_and(|set| set.contains(&identity)) {
|
|
2356
|
+
return Ok(());
|
|
2357
|
+
}
|
|
2358
|
+
for ancestor in dir.ancestors().skip(1) {
|
|
2359
|
+
fsync_dir(ancestor)?;
|
|
2360
|
+
if ancestor == root {
|
|
2361
|
+
break;
|
|
2362
|
+
}
|
|
2363
|
+
}
|
|
2364
|
+
if let Ok(mut set) = synced.lock() {
|
|
2365
|
+
set.insert(identity);
|
|
2366
|
+
}
|
|
2367
|
+
Ok(())
|
|
2368
|
+
}
|
|
2369
|
+
|
|
2343
2370
|
pub(crate) fn now_nanos_unique() -> u128 {
|
|
2344
2371
|
use std::sync::atomic::{AtomicU64, Ordering};
|
|
2345
2372
|
static N: AtomicU64 = AtomicU64::new(0);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/examples/optional-cache-backfill.md
RENAMED
|
File without changes
|
|
File without changes
|
{tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/examples/resident_conversion_profile.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/blobs.jsonl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/header.cbor
RENAMED
|
File without changes
|
{tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/manifest.json
RENAMED
|
File without changes
|
{tensorfs-0.3.75 → tensorfs-0.3.76}/crates/tensorfs-core/tests/fixtures/repo_apply/mutation.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|