lora-python 0.8.4__tar.gz → 0.8.5__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.
- {lora_python-0.8.4 → lora_python-0.8.5}/Cargo.lock +16 -16
- {lora_python-0.8.4 → lora_python-0.8.5}/Cargo.toml +11 -11
- {lora_python-0.8.4 → lora_python-0.8.5}/PKG-INFO +1 -1
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/concurrency_guard_benchmarks.rs +10 -7
- lora_python-0.8.5/crates/lora-database/benches/perf_smoke_baseline.json +89 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/perf_smoke_benchmarks.rs +119 -2
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/wal_benchmarks.rs +160 -196
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/named.rs +1 -1
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/managed_snapshots.rs +3 -1
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/wal.rs +33 -12
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/executor/immutable.rs +16 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/mod.rs +3 -1
- lora_python-0.8.5/crates/lora-wal/src/config.rs +51 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/recorder/recorder.rs +4 -5
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/recorder/tests.rs +36 -7
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/replay.rs +10 -1
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/segment.rs +38 -8
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/wal/group_flusher.rs +31 -24
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/wal/mod.rs +2 -2
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/wal/tests.rs +84 -15
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/wal/wal.rs +29 -60
- {lora_python-0.8.4 → lora_python-0.8.5}/pyproject.toml +1 -1
- lora_python-0.8.4/crates/lora-database/benches/perf_smoke_baseline.json +0 -60
- lora_python-0.8.4/crates/lora-wal/src/config.rs +0 -65
- {lora_python-0.8.4 → lora_python-0.8.5}/LICENSE +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/README.md +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/.gitignore +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/Cargo.toml +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/LICENSE +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/README.md +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/build.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/examples/async_demo.py +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/examples/basic.py +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/src/errors.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/src/from_python.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/src/lib.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/src/to_python.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/tests/test_async.py +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/tests/test_explain_profile.py +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/bindings/lora-python/tests/test_sync.py +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/Cargo.toml +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/analyzer/clauses.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/analyzer/expressions.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/analyzer/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/analyzer/patterns.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/analyzer/state.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/analyzer/tests.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/errors.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/lib.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/resolved.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/scope.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/src/symbols.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-analyzer/tests/error_messages.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-ast/Cargo.toml +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-ast/src/ast.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-ast/src/lib.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-compiler/Cargo.toml +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-compiler/src/lib.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-compiler/src/logical.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-compiler/src/optimizer.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-compiler/src/pattern.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-compiler/src/physical.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-compiler/src/plan_tree.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-compiler/src/planner.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/Cargo.toml +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/advanced_benchmarks.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/concurrent_benchmarks.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/engine_benchmarks.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/fixtures.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/scale_benchmarks.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/temporal_spatial_benchmarks.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/builder.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/compile.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/execute.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/explain.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/graph_api.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/occ.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/profile.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/pull_mode.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/replay.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/stream.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/database/write_guard.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/durable_io.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/error.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/explain.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/lib.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/live_store.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/plan_cache.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/snapshot/json.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/snapshot/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/snapshot/store.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/stream.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/transaction.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/wal/admin.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/wal/archive/format.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/wal/archive/lock.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/wal/archive/platform.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/wal/archive/worker.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/wal/archive/workspace.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/wal/archive.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/wal/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/src/wal/write_scope.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/advanced_queries.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/aggregation.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/backend_stub.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/binary.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/create.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/error_messages.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/errors.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/explain_profile.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/expressions.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/functions_extended.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/invariants.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/match.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/merge.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/ordering.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/parameters.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/parser.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/paths.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/projection.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/scale.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/seeds.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/snapshot.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/spatial.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/temporal.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/test_helpers.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/transactions.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/types_advanced.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/union.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/update.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/vectors.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/where_clause.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/tests/with.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/Cargo.toml +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/errors.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/eval/binops.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/eval/errors.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/eval/expr.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/eval/functions.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/eval/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/eval/point.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/eval/vector.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/executor/helpers.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/executor/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/executor/mutable.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/lib.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/profile.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/aggregate.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/columns.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/context.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/expand.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/filter.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/hydration.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/mutable.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/optional.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/path.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/projection.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/scan.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/shape.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/sort.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/source.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/tests.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/traits.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/pull/union.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/src/value.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-executor/tests/error_messages.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/Cargo.toml +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/cypher.pest +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/errors.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/lib.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/parser/clauses.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/parser/expressions.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/parser/literals.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/parser/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/parser/patterns.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/parser/query.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/parser/tests.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/src/parser/util.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-parser/tests/error_messages.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/Cargo.toml +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/body.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/codec.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/columnar.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/envelope.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/errors.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/format.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/lib.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/options.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/tests.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/transform.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/src/view.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-snapshot/tests/error_messages.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/Cargo.toml +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/lib.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/lock_table.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/memory/graph.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/memory/impls.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/memory/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/memory/property_index.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/memory/snapshot.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/memory/tests.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/mutation.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/snapshot.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/traits.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/binary/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/binary/tests.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/binary/traits.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/binary/types.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/graph.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/property_value.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/spatial/distance.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/spatial/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/spatial/point.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/spatial/srid.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/spatial/tests.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/temporal/calendar.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/temporal/date.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/temporal/datetime.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/temporal/duration.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/temporal/format.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/temporal/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/temporal/parsing.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/temporal/time.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/vector/build.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/vector/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/vector/similarity.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/vector/tests.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/src/types/vector/types.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-store/tests/error_messages.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/Cargo.toml +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/codec/decode.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/codec/encode.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/codec/format.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/codec/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/codec/tests.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/dir.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/errors.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/io.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/lib.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/lock.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/lsn.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/record.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/recorder/errors.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/recorder/mirror.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/recorder/mod.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/src/testing.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-wal/tests/error_messages.rs +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/python/lora_python/__init__.py +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/python/lora_python/_async.py +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/python/lora_python/_native.pyi +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/python/lora_python/py.typed +0 -0
- {lora_python-0.8.4 → lora_python-0.8.5}/python/lora_python/types.py +0 -0
|
@@ -797,7 +797,7 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
|
|
797
797
|
|
|
798
798
|
[[package]]
|
|
799
799
|
name = "lora-analyzer"
|
|
800
|
-
version = "0.8.
|
|
800
|
+
version = "0.8.5"
|
|
801
801
|
dependencies = [
|
|
802
802
|
"lora-ast",
|
|
803
803
|
"lora-parser",
|
|
@@ -807,14 +807,14 @@ dependencies = [
|
|
|
807
807
|
|
|
808
808
|
[[package]]
|
|
809
809
|
name = "lora-ast"
|
|
810
|
-
version = "0.8.
|
|
810
|
+
version = "0.8.5"
|
|
811
811
|
dependencies = [
|
|
812
812
|
"smallvec 2.0.0-alpha.12",
|
|
813
813
|
]
|
|
814
814
|
|
|
815
815
|
[[package]]
|
|
816
816
|
name = "lora-binding-buffer"
|
|
817
|
-
version = "0.8.
|
|
817
|
+
version = "0.8.5"
|
|
818
818
|
dependencies = [
|
|
819
819
|
"lora-database",
|
|
820
820
|
"lora-store",
|
|
@@ -822,7 +822,7 @@ dependencies = [
|
|
|
822
822
|
|
|
823
823
|
[[package]]
|
|
824
824
|
name = "lora-compiler"
|
|
825
|
-
version = "0.8.
|
|
825
|
+
version = "0.8.5"
|
|
826
826
|
dependencies = [
|
|
827
827
|
"lora-analyzer",
|
|
828
828
|
"lora-ast",
|
|
@@ -830,7 +830,7 @@ dependencies = [
|
|
|
830
830
|
|
|
831
831
|
[[package]]
|
|
832
832
|
name = "lora-database"
|
|
833
|
-
version = "0.8.
|
|
833
|
+
version = "0.8.5"
|
|
834
834
|
dependencies = [
|
|
835
835
|
"anyhow",
|
|
836
836
|
"arc-swap",
|
|
@@ -852,7 +852,7 @@ dependencies = [
|
|
|
852
852
|
|
|
853
853
|
[[package]]
|
|
854
854
|
name = "lora-executor"
|
|
855
|
-
version = "0.8.
|
|
855
|
+
version = "0.8.5"
|
|
856
856
|
dependencies = [
|
|
857
857
|
"lora-analyzer",
|
|
858
858
|
"lora-ast",
|
|
@@ -867,7 +867,7 @@ dependencies = [
|
|
|
867
867
|
|
|
868
868
|
[[package]]
|
|
869
869
|
name = "lora-ffi"
|
|
870
|
-
version = "0.8.
|
|
870
|
+
version = "0.8.5"
|
|
871
871
|
dependencies = [
|
|
872
872
|
"anyhow",
|
|
873
873
|
"lora-binding-buffer",
|
|
@@ -879,7 +879,7 @@ dependencies = [
|
|
|
879
879
|
|
|
880
880
|
[[package]]
|
|
881
881
|
name = "lora-node"
|
|
882
|
-
version = "0.8.
|
|
882
|
+
version = "0.8.5"
|
|
883
883
|
dependencies = [
|
|
884
884
|
"anyhow",
|
|
885
885
|
"lora-binding-buffer",
|
|
@@ -894,7 +894,7 @@ dependencies = [
|
|
|
894
894
|
|
|
895
895
|
[[package]]
|
|
896
896
|
name = "lora-parser"
|
|
897
|
-
version = "0.8.
|
|
897
|
+
version = "0.8.5"
|
|
898
898
|
dependencies = [
|
|
899
899
|
"lora-ast",
|
|
900
900
|
"pest",
|
|
@@ -905,7 +905,7 @@ dependencies = [
|
|
|
905
905
|
|
|
906
906
|
[[package]]
|
|
907
907
|
name = "lora-python"
|
|
908
|
-
version = "0.8.
|
|
908
|
+
version = "0.8.5"
|
|
909
909
|
dependencies = [
|
|
910
910
|
"anyhow",
|
|
911
911
|
"lora-database",
|
|
@@ -917,7 +917,7 @@ dependencies = [
|
|
|
917
917
|
|
|
918
918
|
[[package]]
|
|
919
919
|
name = "lora-server"
|
|
920
|
-
version = "0.8.
|
|
920
|
+
version = "0.8.5"
|
|
921
921
|
dependencies = [
|
|
922
922
|
"anyhow",
|
|
923
923
|
"axum",
|
|
@@ -931,7 +931,7 @@ dependencies = [
|
|
|
931
931
|
|
|
932
932
|
[[package]]
|
|
933
933
|
name = "lora-snapshot"
|
|
934
|
-
version = "0.8.
|
|
934
|
+
version = "0.8.5"
|
|
935
935
|
dependencies = [
|
|
936
936
|
"argon2",
|
|
937
937
|
"bincode",
|
|
@@ -946,7 +946,7 @@ dependencies = [
|
|
|
946
946
|
|
|
947
947
|
[[package]]
|
|
948
948
|
name = "lora-store"
|
|
949
|
-
version = "0.8.
|
|
949
|
+
version = "0.8.5"
|
|
950
950
|
dependencies = [
|
|
951
951
|
"bincode",
|
|
952
952
|
"crc32fast",
|
|
@@ -958,7 +958,7 @@ dependencies = [
|
|
|
958
958
|
|
|
959
959
|
[[package]]
|
|
960
960
|
name = "lora-wal"
|
|
961
|
-
version = "0.8.
|
|
961
|
+
version = "0.8.5"
|
|
962
962
|
dependencies = [
|
|
963
963
|
"crc32fast",
|
|
964
964
|
"lora-store",
|
|
@@ -968,7 +968,7 @@ dependencies = [
|
|
|
968
968
|
|
|
969
969
|
[[package]]
|
|
970
970
|
name = "lora-wasm"
|
|
971
|
-
version = "0.8.
|
|
971
|
+
version = "0.8.5"
|
|
972
972
|
dependencies = [
|
|
973
973
|
"anyhow",
|
|
974
974
|
"console_error_panic_hook",
|
|
@@ -984,7 +984,7 @@ dependencies = [
|
|
|
984
984
|
|
|
985
985
|
[[package]]
|
|
986
986
|
name = "lora_ruby"
|
|
987
|
-
version = "0.8.
|
|
987
|
+
version = "0.8.5"
|
|
988
988
|
dependencies = [
|
|
989
989
|
"anyhow",
|
|
990
990
|
"lora-database",
|
|
@@ -4,7 +4,7 @@ resolver = "2"
|
|
|
4
4
|
|
|
5
5
|
[workspace.package]
|
|
6
6
|
edition = "2021"
|
|
7
|
-
version = "0.8.
|
|
7
|
+
version = "0.8.5"
|
|
8
8
|
license = "BUSL-1.1"
|
|
9
9
|
authors = ["LoraDB, Inc."]
|
|
10
10
|
repository = "https://github.com/lora-db/lora"
|
|
@@ -15,16 +15,16 @@ rust-version = "1.87"
|
|
|
15
15
|
# Internal crates — versions are kept in lockstep with [workspace.package].version
|
|
16
16
|
# by `scripts/sync-versions.mjs`. Both `path` and `version` are set so that
|
|
17
17
|
# `cargo publish` works (crates.io cannot resolve path-only deps).
|
|
18
|
-
lora-ast = { path = "crates/lora-ast", version = "=0.8.
|
|
19
|
-
lora-parser = { path = "crates/lora-parser", version = "=0.8.
|
|
20
|
-
lora-analyzer = { path = "crates/lora-analyzer", version = "=0.8.
|
|
21
|
-
lora-compiler = { path = "crates/lora-compiler", version = "=0.8.
|
|
22
|
-
lora-store = { path = "crates/lora-store", version = "=0.8.
|
|
23
|
-
lora-snapshot = { path = "crates/lora-snapshot", version = "=0.8.
|
|
24
|
-
lora-wal = { path = "crates/lora-wal", version = "=0.8.
|
|
25
|
-
lora-executor = { path = "crates/lora-executor", version = "=0.8.
|
|
26
|
-
lora-database = { path = "crates/lora-database", version = "=0.8.
|
|
27
|
-
lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.8.
|
|
18
|
+
lora-ast = { path = "crates/lora-ast", version = "=0.8.5" }
|
|
19
|
+
lora-parser = { path = "crates/lora-parser", version = "=0.8.5" }
|
|
20
|
+
lora-analyzer = { path = "crates/lora-analyzer", version = "=0.8.5" }
|
|
21
|
+
lora-compiler = { path = "crates/lora-compiler", version = "=0.8.5" }
|
|
22
|
+
lora-store = { path = "crates/lora-store", version = "=0.8.5" }
|
|
23
|
+
lora-snapshot = { path = "crates/lora-snapshot", version = "=0.8.5", default-features = false }
|
|
24
|
+
lora-wal = { path = "crates/lora-wal", version = "=0.8.5" }
|
|
25
|
+
lora-executor = { path = "crates/lora-executor", version = "=0.8.5" }
|
|
26
|
+
lora-database = { path = "crates/lora-database", version = "=0.8.5" }
|
|
27
|
+
lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.8.5" }
|
|
28
28
|
|
|
29
29
|
# External crates.
|
|
30
30
|
anyhow = "1"
|
{lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/concurrency_guard_benchmarks.rs
RENAMED
|
@@ -247,14 +247,17 @@ fn bench_concurrency_guard(c: &mut Criterion) {
|
|
|
247
247
|
}
|
|
248
248
|
|
|
249
249
|
// WAL write paths without the per-iteration directory setup measured.
|
|
250
|
-
//
|
|
251
|
-
//
|
|
250
|
+
// GroupSync isolates WAL encoding/flush-buffer overhead plus background
|
|
251
|
+
// fsync coordination.
|
|
252
252
|
{
|
|
253
|
-
let dir = ScratchDir::new("wal-
|
|
254
|
-
let db = Database::<InMemoryGraph>::open_with_wal(wal_config(
|
|
255
|
-
.
|
|
253
|
+
let dir = ScratchDir::new("wal-group-sync");
|
|
254
|
+
let db = Database::<InMemoryGraph>::open_with_wal(wal_config(
|
|
255
|
+
&dir.path,
|
|
256
|
+
SyncMode::GroupSync { interval_ms: 50 },
|
|
257
|
+
))
|
|
258
|
+
.unwrap();
|
|
256
259
|
let mut next = 0i64;
|
|
257
|
-
group.bench_function("
|
|
260
|
+
group.bench_function("wal_group_sync_create_delete_one", |b| {
|
|
258
261
|
b.iter(|| {
|
|
259
262
|
next += 1;
|
|
260
263
|
black_box(
|
|
@@ -273,7 +276,7 @@ fn bench_concurrency_guard(c: &mut Criterion) {
|
|
|
273
276
|
let dir = ScratchDir::new("wal-group");
|
|
274
277
|
let db = Database::<InMemoryGraph>::open_with_wal(wal_config(
|
|
275
278
|
&dir.path,
|
|
276
|
-
SyncMode::
|
|
279
|
+
SyncMode::GroupSync { interval_ms: 50 },
|
|
277
280
|
))
|
|
278
281
|
.unwrap();
|
|
279
282
|
let mut next = 0i64;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"purpose": "Baseline ns/iter for the perf_smoke_benchmarks suite. Used by scripts/check-perf-smoke.mjs to detect performance regressions. NOT an authoritative performance record. See docs/performance/perf-smoke.md.",
|
|
4
|
+
"refresh": "node scripts/check-perf-smoke.mjs --update <bencher-output>",
|
|
5
|
+
"default_threshold": 3,
|
|
6
|
+
"threshold_policy": "Each bench carries an explicit `threshold` (regression multiplier). 3 is the canonical 'obvious-regression' gate for low-variance in-memory paths; 5 is used for sub-µs benches and WAL-backed benches where filesystem and runner noise inflate variance. Widen rather than remove if a bench becomes chronically flaky — a 5× gate still catches a catastrophic regression.",
|
|
7
|
+
"seeded_on": "2026-04-24",
|
|
8
|
+
"seeded_from": "Rough scaling of docs/performance/benchmarks.md numbers to allow for ubuntu-latest CI being slower and noisier than the reference Apple Silicon run. Replace with real CI-measured values on first green run.",
|
|
9
|
+
"last_updated": "2026-05-06"
|
|
10
|
+
},
|
|
11
|
+
"benchmarks": {
|
|
12
|
+
"perf_smoke/scan_1k": {
|
|
13
|
+
"ns": 172801,
|
|
14
|
+
"threshold": 2
|
|
15
|
+
},
|
|
16
|
+
"perf_smoke/filter_1k": {
|
|
17
|
+
"ns": 166596,
|
|
18
|
+
"threshold": 2
|
|
19
|
+
},
|
|
20
|
+
"perf_smoke/traversal_chain_500": {
|
|
21
|
+
"ns": 167629,
|
|
22
|
+
"threshold": 2
|
|
23
|
+
},
|
|
24
|
+
"perf_smoke/write_batch_100": {
|
|
25
|
+
"ns": 109584,
|
|
26
|
+
"threshold": 2
|
|
27
|
+
},
|
|
28
|
+
"perf_smoke/stream_scan_1k": {
|
|
29
|
+
"ns": 201749,
|
|
30
|
+
"threshold": 2
|
|
31
|
+
},
|
|
32
|
+
"perf_smoke/stream_pull_one": {
|
|
33
|
+
"ns": 717,
|
|
34
|
+
"threshold": 2
|
|
35
|
+
},
|
|
36
|
+
"perf_smoke/stream_write_100": {
|
|
37
|
+
"ns": 80604,
|
|
38
|
+
"threshold": 2
|
|
39
|
+
},
|
|
40
|
+
"perf_smoke/stream_write_sort_100": {
|
|
41
|
+
"ns": 205564,
|
|
42
|
+
"threshold": 2
|
|
43
|
+
},
|
|
44
|
+
"perf_smoke/tx_roundtrip_empty": {
|
|
45
|
+
"ns": 147,
|
|
46
|
+
"threshold": 2
|
|
47
|
+
},
|
|
48
|
+
"perf_smoke/tx_read_1k": {
|
|
49
|
+
"ns": 267327,
|
|
50
|
+
"threshold": 2
|
|
51
|
+
},
|
|
52
|
+
"perf_smoke/tx_write_100": {
|
|
53
|
+
"ns": 99217,
|
|
54
|
+
"threshold": 2
|
|
55
|
+
},
|
|
56
|
+
"perf_smoke/write_one_wal_group": {
|
|
57
|
+
"ns": 4417,
|
|
58
|
+
"threshold": 2
|
|
59
|
+
},
|
|
60
|
+
"perf_smoke/write_batch_100_wal_group": {
|
|
61
|
+
"ns": 189573,
|
|
62
|
+
"threshold": 2
|
|
63
|
+
},
|
|
64
|
+
"perf_smoke/tx_write_100_wal_group": {
|
|
65
|
+
"ns": 2446265,
|
|
66
|
+
"threshold": 2
|
|
67
|
+
},
|
|
68
|
+
"perf_smoke/write_one_wal_persistent": {
|
|
69
|
+
"ns": 4268990,
|
|
70
|
+
"threshold": 2
|
|
71
|
+
},
|
|
72
|
+
"perf_smoke/scan_1k_wal_group": {
|
|
73
|
+
"ns": 177912,
|
|
74
|
+
"threshold": 2
|
|
75
|
+
},
|
|
76
|
+
"perf_smoke/delete_100_wal_group": {
|
|
77
|
+
"ns": 4509379,
|
|
78
|
+
"threshold": 2
|
|
79
|
+
},
|
|
80
|
+
"perf_smoke/update_100_wal_group": {
|
|
81
|
+
"ns": 81676,
|
|
82
|
+
"threshold": 2
|
|
83
|
+
},
|
|
84
|
+
"perf_smoke/wal_replay_100": {
|
|
85
|
+
"ns": 533982,
|
|
86
|
+
"threshold": 2
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
{lora_python-0.8.4 → lora_python-0.8.5}/crates/lora-database/benches/perf_smoke_benchmarks.rs
RENAMED
|
@@ -64,7 +64,7 @@ impl Drop for WalScratch {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
/// Open a WAL-backed database with `SyncMode::
|
|
67
|
+
/// Open a WAL-backed database with `SyncMode::GroupSync`. Group sync matches
|
|
68
68
|
/// the durability profile most embedded callers reach for — write-only
|
|
69
69
|
/// on commit, background flusher fsyncs on a 50 ms interval — and keeps
|
|
70
70
|
/// the bench dominated by engine + WAL append cost rather than fsync
|
|
@@ -73,7 +73,7 @@ fn open_wal_group(tag: &str) -> (WalScratch, Database<InMemoryGraph>) {
|
|
|
73
73
|
let dir = WalScratch::new(tag);
|
|
74
74
|
let cfg = WalConfig::Enabled {
|
|
75
75
|
dir: dir.path.clone(),
|
|
76
|
-
sync_mode: SyncMode::
|
|
76
|
+
sync_mode: SyncMode::GroupSync { interval_ms: 50 },
|
|
77
77
|
segment_target_bytes: 8 * 1024 * 1024,
|
|
78
78
|
};
|
|
79
79
|
let db = Database::open_with_wal(cfg).unwrap();
|
|
@@ -372,6 +372,123 @@ fn bench_perf_smoke(c: &mut Criterion) {
|
|
|
372
372
|
});
|
|
373
373
|
}
|
|
374
374
|
|
|
375
|
+
// --- 14. persistent single CREATE: WAL + force_fsync per commit ------
|
|
376
|
+
//
|
|
377
|
+
// Same shape as `write_one_wal_group` but adds an explicit
|
|
378
|
+
// `Database::sync()` on each iteration, forcing the WAL through to
|
|
379
|
+
// durable storage before the next commit lands. This captures the
|
|
380
|
+
// fully-durable per-commit profile (formerly `SyncMode::PerCommit`)
|
|
381
|
+
// — the gap to `write_one_wal_group` is one `fsync` per iteration.
|
|
382
|
+
// A regression here without one in `write_one_wal_group` points at
|
|
383
|
+
// the durability boundary path (`force_fsync` / `sync_dir`).
|
|
384
|
+
{
|
|
385
|
+
let (_dir, db) = open_wal_group("write-one-persistent");
|
|
386
|
+
group.bench_function("write_one_wal_persistent", |b| {
|
|
387
|
+
b.iter(|| {
|
|
388
|
+
black_box(db.execute("CREATE (:B {n: 1})", opts()).unwrap());
|
|
389
|
+
db.sync().unwrap();
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// --- 15. persistent read: WAL group sync -----------------------------
|
|
395
|
+
//
|
|
396
|
+
// Read-heavy workload against a WAL-backed DB. Reads should not touch
|
|
397
|
+
// the recorder, so this should track `scan_1k` (#1) ± noise. A
|
|
398
|
+
// regression here without one in `scan_1k` points at the WAL recorder
|
|
399
|
+
// leaking into the read path (e.g. an extra guard or fence taken on
|
|
400
|
+
// every MATCH).
|
|
401
|
+
{
|
|
402
|
+
let (_dir, db) = open_wal_group("scan-wal");
|
|
403
|
+
db.execute(
|
|
404
|
+
"UNWIND range(1, 1000) AS i CREATE (:Node {id: i, value: i % 100})",
|
|
405
|
+
opts(),
|
|
406
|
+
)
|
|
407
|
+
.unwrap();
|
|
408
|
+
group.bench_function("scan_1k_wal_group", |b| {
|
|
409
|
+
b.iter(|| {
|
|
410
|
+
black_box(db.execute("MATCH (n:Node) RETURN n.id", opts()).unwrap());
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// --- 16. persistent batched delete: WAL group sync -------------------
|
|
416
|
+
//
|
|
417
|
+
// MATCH + DELETE on 100 nodes against a freshly seeded DB. Exercises
|
|
418
|
+
// the WAL node-tombstone record path, which is distinct from the
|
|
419
|
+
// node-create path that #11/#12 cover. Fresh DB per iteration since
|
|
420
|
+
// each batch consumes the seed.
|
|
421
|
+
group.bench_function("delete_100_wal_group", |b| {
|
|
422
|
+
b.iter_batched(
|
|
423
|
+
|| {
|
|
424
|
+
let (dir, db) = open_wal_group("delete-100");
|
|
425
|
+
db.execute("UNWIND range(1, 100) AS i CREATE (:D {id: i})", opts())
|
|
426
|
+
.unwrap();
|
|
427
|
+
(dir, db)
|
|
428
|
+
},
|
|
429
|
+
|(_dir, db)| {
|
|
430
|
+
black_box(db.execute("MATCH (n:D) DELETE n", opts()).unwrap());
|
|
431
|
+
},
|
|
432
|
+
BatchSize::SmallInput,
|
|
433
|
+
);
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
// --- 17. persistent property update: WAL group sync ------------------
|
|
437
|
+
//
|
|
438
|
+
// MATCH + SET on 100 nodes — exercises the property-mutation WAL
|
|
439
|
+
// record path (distinct from create/delete). DB is shared across
|
|
440
|
+
// iterations: each SET re-stamps the same property and appends one
|
|
441
|
+
// batched commit record, giving a steady-state cost per iteration.
|
|
442
|
+
{
|
|
443
|
+
let (_dir, db) = open_wal_group("update-100");
|
|
444
|
+
db.execute("UNWIND range(1, 100) AS i CREATE (:U {id: i})", opts())
|
|
445
|
+
.unwrap();
|
|
446
|
+
group.bench_function("update_100_wal_group", |b| {
|
|
447
|
+
b.iter(|| {
|
|
448
|
+
black_box(
|
|
449
|
+
db.execute("MATCH (n:U) SET n.touched = true", opts())
|
|
450
|
+
.unwrap(),
|
|
451
|
+
);
|
|
452
|
+
});
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
// --- 18. WAL replay on open ------------------------------------------
|
|
457
|
+
//
|
|
458
|
+
// Open a WAL directory that already has 100 committed records and
|
|
459
|
+
// measure how long the replay-on-open path takes. Bounds startup time
|
|
460
|
+
// on a crash-recovery boot. The WAL is built once outside the iter and
|
|
461
|
+
// its scratch directory is `mem::forget`-ed so the files stay alive
|
|
462
|
+
// across every Criterion iteration (the OS reclaims at process exit).
|
|
463
|
+
{
|
|
464
|
+
let dir = WalScratch::new("replay-100");
|
|
465
|
+
{
|
|
466
|
+
let cfg = WalConfig::Enabled {
|
|
467
|
+
dir: dir.path.clone(),
|
|
468
|
+
sync_mode: SyncMode::GroupSync { interval_ms: 50 },
|
|
469
|
+
segment_target_bytes: 8 * 1024 * 1024,
|
|
470
|
+
};
|
|
471
|
+
let db = Database::open_with_wal(cfg).unwrap();
|
|
472
|
+
for _ in 0..100 {
|
|
473
|
+
db.execute("CREATE (:R {n: 1})", opts()).unwrap();
|
|
474
|
+
}
|
|
475
|
+
drop(db);
|
|
476
|
+
}
|
|
477
|
+
let path = dir.path.clone();
|
|
478
|
+
std::mem::forget(dir);
|
|
479
|
+
group.bench_function("wal_replay_100", |b| {
|
|
480
|
+
b.iter(|| {
|
|
481
|
+
let cfg = WalConfig::Enabled {
|
|
482
|
+
dir: path.clone(),
|
|
483
|
+
sync_mode: SyncMode::GroupSync { interval_ms: 50 },
|
|
484
|
+
segment_target_bytes: 8 * 1024 * 1024,
|
|
485
|
+
};
|
|
486
|
+
let db = Database::open_with_wal(cfg).unwrap();
|
|
487
|
+
black_box(db.node_count());
|
|
488
|
+
});
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
|
|
375
492
|
group.finish();
|
|
376
493
|
}
|
|
377
494
|
|