[package]
edition = "2024"
name = "armdb"
version = "0.11.2"
authors = ["Rail Khusnutdinov <rail@33.run>"]
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "sharded bitcask key-value storage optimized for NVMe"
homepage = "https://github.com/libfunc/armour/"
documentation = "https://docs.rs/armdb/"
readme = "README.md"
keywords = [
"key-value",
"database",
]
categories = []
license = "MIT OR Apache-2.0"
repository = "https://github.com/libfunc/armour/"
[features]
armour = [
"dep:serde",
"dep:serde_json",
"dep:rend",
"dep:arrayvec",
"typed-tree",
]
bench-internals = []
bitcode-codec = [
"typed-tree",
"dep:bitcode",
]
bytemuck-codec = [
"typed-tree",
"dep:bytemuck",
]
ctx-gates = []
default = [
"parking_lot",
"typed-tree",
"rapira-codec",
"bytemuck-codec",
"armour",
"rpc",
"replication",
"var-collections",
"schema",
]
encryption = ["dep:ring"]
fjall = [
"armour",
"dep:fjall",
]
hot-path-tracing = []
id-cipher = ["armour-core/cipher"]
io-uring = ["dep:rustix-uring"]
loom = ["dep:loom"]
parking_lot = ["dep:parking_lot"]
postcard-codec = [
"typed-tree",
"dep:postcard",
"dep:serde",
]
proptest = ["dep:proptest"]
queue-test-support = []
rapira-codec = [
"typed-tree",
"dep:rapira",
]
recommended = [
"parking_lot",
"typed-tree",
"rapira-codec",
"armour",
"var-collections",
"schema",
"encryption",
]
replication = ["dep:rtrb"]
rpc = [
"armour",
"dep:armour-rpc",
"armour-rpc/schema",
"dep:compio",
"dep:futures-util",
"dep:async-broadcast",
"dep:ctrlc",
]
schema = ["armour"]
server-defaults = [
"recommended",
"id-cipher",
]
solana = [
"armour",
"armour-core/solana",
"dep:solana-pubkey",
"dep:solana-signature",
"dep:bytemuck",
]
test-faults = ["dep:libc"]
typed-tree = []
uuid = [
"dep:uuid",
"dep:bytemuck",
]
var-collections = ["dep:quick_cache"]
[lib]
name = "armdb"
path = "src/lib.rs"
[[example]]
name = "ab_harness"
path = "examples/ab_harness.rs"
[[example]]
name = "insert_scaling"
path = "examples/insert_scaling.rs"
required-features = ["bench-internals"]
[[example]]
name = "sqpoll_matrix"
path = "examples/sqpoll_matrix.rs"
required-features = [
"bench-internals",
"io-uring",
]
[[test]]
name = "atomic_hooks_schema"
path = "tests/atomic_hooks_schema.rs"
[[test]]
name = "basic_ops"
path = "tests/basic_ops.rs"
[[test]]
name = "bulk_tx"
path = "tests/bulk_tx.rs"
[[test]]
name = "clean_shutdown"
path = "tests/clean_shutdown.rs"
[[test]]
name = "compaction_concurrent_tests"
path = "tests/compaction_concurrent_tests.rs"
[[test]]
name = "compaction_const_tests"
path = "tests/compaction_const_tests.rs"
[[test]]
name = "compaction_tests"
path = "tests/compaction_tests.rs"
[[test]]
name = "compaction_tmp_sweep_test"
path = "tests/compaction_tmp_sweep_test.rs"
[[test]]
name = "concurrent_tests"
path = "tests/concurrent_tests.rs"
[[test]]
name = "crypto_alloc_gate"
path = "tests/crypto_alloc_gate.rs"
required-features = ["encryption"]
[[test]]
name = "ctx_gates"
path = "tests/ctx_gates.rs"
required-features = [
"parking_lot",
"typed-tree",
"rapira-codec",
"var-collections",
"ctx-gates",
]
[[test]]
name = "db_close_flush_tests"
path = "tests/db_close_flush_tests.rs"
[[test]]
name = "db_meta_tests"
path = "tests/db_meta_tests.rs"
[[test]]
name = "directory_lock"
path = "tests/directory_lock.rs"
[[test]]
name = "encryption_tests"
path = "tests/encryption_tests.rs"
[[test]]
name = "fixed_concurrent_tests"
path = "tests/fixed_concurrent_tests.rs"
[[test]]
name = "fixed_map_tests"
path = "tests/fixed_map_tests.rs"
[[test]]
name = "fixed_replication"
path = "tests/fixed_replication.rs"
[[test]]
name = "fixed_tree_tests"
path = "tests/fixed_tree_tests.rs"
[[test]]
name = "format_migration"
path = "tests/format_migration.rs"
[[test]]
name = "format_migration_alloc"
path = "tests/format_migration_alloc.rs"
required-features = [
"ctx-gates",
"armour",
"typed-tree",
"rapira-codec",
]
[[test]]
name = "format_migration_crash"
path = "tests/format_migration_crash.rs"
required-features = [
"test-faults",
"armour",
"typed-tree",
"rapira-codec",
]
[[test]]
name = "format_migration_encrypted"
path = "tests/format_migration_encrypted.rs"
required-features = [
"encryption",
"test-faults",
"armour",
"typed-tree",
"rapira-codec",
]
[[test]]
name = "format_migration_fixed"
path = "tests/format_migration_fixed.rs"
[[test]]
name = "format_migration_tx"
path = "tests/format_migration_tx.rs"
required-features = [
"test-faults",
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
]
[[test]]
name = "format_migration_unique"
path = "tests/format_migration_unique.rs"
[[test]]
name = "hooks_migration_tests"
path = "tests/hooks_migration_tests.rs"
[[test]]
name = "inspection"
path = "tests/inspection.rs"
[[test]]
name = "integration_armour"
path = "tests/integration_armour.rs"
[[test]]
name = "integration_armour_migration"
path = "tests/integration_armour_migration.rs"
[[test]]
name = "io_backend_roundtrip"
path = "tests/io_backend_roundtrip.rs"
[[test]]
name = "iterator_tests"
path = "tests/iterator_tests.rs"
[[test]]
name = "lock_cross_process"
path = "tests/lock_cross_process.rs"
[[test]]
name = "loom_multi_tx"
path = "tests/loom_multi_tx.rs"
[[test]]
name = "loom_skiplist"
path = "tests/loom_skiplist.rs"
[[test]]
name = "lsm_db"
path = "tests/lsm_db.rs"
[[test]]
name = "migrate_large_tests"
path = "tests/migrate_large_tests.rs"
[[test]]
name = "migration_init_once"
path = "tests/migration_init_once.rs"
[[test]]
name = "miri_skiplist"
path = "tests/miri_skiplist.rs"
[[test]]
name = "periodic_flush"
path = "tests/periodic_flush.rs"
[[test]]
name = "projection_atomic_ttl"
path = "tests/projection_atomic_ttl.rs"
[[test]]
name = "projection_carrier"
path = "tests/projection_carrier.rs"
[[test]]
name = "projection_channel"
path = "tests/projection_channel.rs"
required-features = [
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
"test-faults",
]
[[test]]
name = "projection_facade"
path = "tests/projection_facade.rs"
[[test]]
name = "projection_migration"
path = "tests/projection_migration.rs"
required-features = [
"armour",
"typed-tree",
"rapira-codec",
]
[[test]]
name = "projection_tx"
path = "tests/projection_tx.rs"
required-features = [
"test-faults",
"armour",
"typed-tree",
"rapira-codec",
]
[[test]]
name = "projection_validate_repair"
path = "tests/projection_validate_repair.rs"
[[test]]
name = "proptest_model"
path = "tests/proptest_model.rs"
[[test]]
name = "queue_crash"
path = "tests/queue_crash.rs"
required-features = [
"test-faults",
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
"queue-test-support",
]
[[test]]
name = "queue_encrypted"
path = "tests/queue_encrypted.rs"
required-features = [
"encryption",
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
"queue-test-support",
]
[[test]]
name = "queue_fixed"
path = "tests/queue_fixed.rs"
required-features = [
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
"queue-test-support",
]
[[test]]
name = "queue_model"
path = "tests/queue_model.rs"
required-features = [
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
]
[[test]]
name = "queue_retention"
path = "tests/queue_retention.rs"
required-features = [
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
"queue-test-support",
]
[[test]]
name = "queue_rpc"
path = "tests/queue_rpc.rs"
required-features = [
"rpc",
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
]
[[test]]
name = "queue_stream"
path = "tests/queue_stream.rs"
required-features = [
"armour",
"schema",
"typed-tree",
"rapira-codec",
"var-collections",
"queue-test-support",
]
[[test]]
name = "queue_tx"
path = "tests/queue_tx.rs"
required-features = [
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
]
[[test]]
name = "queue_var"
path = "tests/queue_var.rs"
required-features = [
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
"queue-test-support",
]
[[test]]
name = "queue_wait"
path = "tests/queue_wait.rs"
required-features = [
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
"queue-test-support",
]
[[test]]
name = "recovery_hint_durability_tests"
path = "tests/recovery_hint_durability_tests.rs"
[[test]]
name = "recovery_hints_fixes_tests"
path = "tests/recovery_hints_fixes_tests.rs"
[[test]]
name = "recovery_tests"
path = "tests/recovery_tests.rs"
[[test]]
name = "recovery_truncated_tests"
path = "tests/recovery_truncated_tests.rs"
[[test]]
name = "rpc_adapter_matrix"
path = "tests/rpc_adapter_matrix.rs"
[[test]]
name = "rpc_map_range"
path = "tests/rpc_map_range.rs"
[[test]]
name = "rpc_schema"
path = "tests/rpc_schema.rs"
[[test]]
name = "scope_core"
path = "tests/scope_core.rs"
[[test]]
name = "shard_prefix_tests"
path = "tests/shard_prefix_tests.rs"
[[test]]
name = "stress_tests"
path = "tests/stress_tests.rs"
[[test]]
name = "ttl_bootstrap"
path = "tests/ttl_bootstrap.rs"
[[test]]
name = "ttl_carrier"
path = "tests/ttl_carrier.rs"
[[test]]
name = "ttl_index_maint"
path = "tests/ttl_index_maint.rs"
[[test]]
name = "ttl_replication"
path = "tests/ttl_replication.rs"
[[test]]
name = "ttl_sweep"
path = "tests/ttl_sweep.rs"
[[test]]
name = "ttl_t5_commit"
path = "tests/ttl_t5_commit.rs"
[[test]]
name = "ttl_var"
path = "tests/ttl_var.rs"
[[test]]
name = "ttl_worker"
path = "tests/ttl_worker.rs"
[[test]]
name = "tx_crash"
path = "tests/tx_crash.rs"
required-features = ["test-faults"]
[[test]]
name = "tx_encrypted"
path = "tests/tx_encrypted.rs"
required-features = [
"encryption",
"test-faults",
]
[[test]]
name = "tx_encrypted_config"
path = "tests/tx_encrypted_config.rs"
required-features = ["encryption"]
[[test]]
name = "tx_failure_contract"
path = "tests/tx_failure_contract.rs"
required-features = [
"test-faults",
"armour",
"typed-tree",
"rapira-codec",
]
[[test]]
name = "tx_fixed"
path = "tests/tx_fixed.rs"
[[test]]
name = "tx_fixed_crash"
path = "tests/tx_fixed_crash.rs"
required-features = ["test-faults"]
[[test]]
name = "tx_insert"
path = "tests/tx_insert.rs"
required-features = [
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
]
[[test]]
name = "typed_collections_fixes_tests"
path = "tests/typed_collections_fixes_tests.rs"
[[test]]
name = "typed_map_tests"
path = "tests/typed_map_tests.rs"
[[test]]
name = "typed_tree_bytemuck_tests"
path = "tests/typed_tree_bytemuck_tests.rs"
[[test]]
name = "typed_tree_iter_guard"
path = "tests/typed_tree_iter_guard.rs"
[[test]]
name = "typed_tree_rapira_tests"
path = "tests/typed_tree_rapira_tests.rs"
[[test]]
name = "typed_tree_tests"
path = "tests/typed_tree_tests.rs"
[[test]]
name = "unique_crash"
path = "tests/unique_crash.rs"
required-features = [
"test-faults",
"armour",
"typed-tree",
"rapira-codec",
]
[[test]]
name = "unique_namespace"
path = "tests/unique_namespace.rs"
[[test]]
name = "unique_nontx"
path = "tests/unique_nontx.rs"
[[test]]
name = "unique_reservation"
path = "tests/unique_reservation.rs"
[[test]]
name = "unique_tx"
path = "tests/unique_tx.rs"
[[test]]
name = "unique_validate_repair"
path = "tests/unique_validate_repair.rs"
required-features = [
"test-faults",
"armour",
"schema",
"typed-tree",
"rapira-codec",
]
[[test]]
name = "upsert_agreement"
path = "tests/upsert_agreement.rs"
[[test]]
name = "upsert_compile_gate"
path = "tests/upsert_compile_gate.rs"
[[test]]
name = "upsert_semantics"
path = "tests/upsert_semantics.rs"
[[test]]
name = "user_meta_tests"
path = "tests/user_meta_tests.rs"
[[test]]
name = "var_correctness_tests"
path = "tests/var_correctness_tests.rs"
[[test]]
name = "var_migrate_strict"
path = "tests/var_migrate_strict.rs"
[[test]]
name = "var_typed_map_tests"
path = "tests/var_typed_map_tests.rs"
[[test]]
name = "var_typed_replay_init"
path = "tests/var_typed_replay_init.rs"
[[test]]
name = "var_typed_tree_tests"
path = "tests/var_typed_tree_tests.rs"
[[test]]
name = "variable_replication"
path = "tests/variable_replication.rs"
[[test]]
name = "warmup_cache"
path = "tests/warmup_cache.rs"
[[test]]
name = "write_hook_tests"
path = "tests/write_hook_tests.rs"
[[test]]
name = "zero_tree_tests"
path = "tests/zero_tree_tests.rs"
[[bench]]
name = "clean_decode"
path = "benches/clean_decode.rs"
harness = false
required-features = ["rapira-codec"]
[[bench]]
name = "codec_decode"
path = "benches/codec_decode.rs"
harness = false
required-features = ["rapira-codec"]
[[bench]]
name = "contended_shard"
path = "benches/contended_shard.rs"
harness = false
required-features = [
"typed-tree",
"rapira-codec",
"var-collections",
]
[[bench]]
name = "decoded_ceiling"
path = "benches/decoded_ceiling.rs"
harness = false
required-features = [
"typed-tree",
"rapira-codec",
"var-collections",
]
[[bench]]
name = "kv_ops"
path = "benches/kv_ops.rs"
harness = false
required-features = [
"typed-tree",
"rapira-codec",
"var-collections",
]
[[bench]]
name = "kv_ops_full"
path = "benches/kv_ops_full.rs"
harness = false
required-features = [
"typed-tree",
"rapira-codec",
"var-collections",
]
[[bench]]
name = "merge_pagination"
path = "benches/merge_pagination.rs"
harness = false
required-features = [
"typed-tree",
"rapira-codec",
]
[[bench]]
name = "queue"
path = "benches/queue.rs"
harness = false
required-features = [
"armour",
"typed-tree",
"rapira-codec",
"var-collections",
]
[[bench]]
name = "reverse_scan"
path = "benches/reverse_scan.rs"
harness = false
required-features = ["bench-internals"]
[dependencies.armour-core]
version = "0.6"
[dependencies.armour-rpc]
version = "0.6"
optional = true
[dependencies.arrayvec]
version = "0.7"
optional = true
[dependencies.async-broadcast]
version = "0.7"
optional = true
[dependencies.bitcode]
version = "0.6"
optional = true
[dependencies.bon]
version = "3"
[dependencies.bytemuck]
version = "1"
features = [
"derive",
"extern_crate_alloc",
]
optional = true
[dependencies.compio]
version = "0.19"
features = [
"runtime",
"net",
"io",
"macros",
"signal",
"time",
]
optional = true
[dependencies.crc32fast]
version = "1.4"
[dependencies.ctrlc]
version = "3.4"
optional = true
[dependencies.derive_more]
version = "2"
features = [
"debug",
"from",
"deref",
"deref_mut",
"as_ref",
]
[dependencies.fjall]
version = "3.1"
optional = true
[dependencies.futures-util]
version = "0.3"
features = ["io"]
optional = true
[dependencies.libc]
version = "0.2"
optional = true
[dependencies.loom]
version = "0.7"
optional = true
[dependencies.metrics]
version = "0.24"
[dependencies.parking_lot]
version = "0.12"
optional = true
[dependencies.postcard]
version = "1"
features = ["alloc"]
optional = true
[dependencies.proptest]
version = "1"
optional = true
[dependencies.quick_cache]
version = "0.7"
features = ["stats"]
optional = true
[dependencies.rapira]
version = "0.15"
optional = true
[dependencies.rend]
version = "0.5"
optional = true
[dependencies.ring]
version = "0.17"
optional = true
[dependencies.rtrb]
version = "0.3"
optional = true
[dependencies.seize]
version = "0.5"
[dependencies.serde]
version = "1.0"
features = ["derive"]
optional = true
[dependencies.serde_json]
version = "1.0"
optional = true
[dependencies.solana-pubkey]
version = "4.0"
features = ["bytemuck"]
optional = true
[dependencies.solana-signature]
version = "3.1"
features = ["bytemuck"]
optional = true
[dependencies.thiserror]
version = "2.0"
[dependencies.tracing]
version = "0.1"
[dependencies.uuid]
version = "1"
features = ["bytemuck"]
optional = true
default-features = false
[dependencies.xxhash-rust]
version = "0.8"
features = ["xxh3"]
[dependencies.zerocopy]
version = "0.8.56"
features = ["derive"]
[dev-dependencies.armour-core]
version = "0.6"
features = ["dyn-value"]
[dev-dependencies.arrayvec]
version = "0.7"
[dev-dependencies.criterion]
version = "0.8"
[dev-dependencies.libc]
version = "0.2"
[dev-dependencies.loom]
version = "0.7"
[dev-dependencies.proptest]
version = "1"
[dev-dependencies.rand]
version = "0.10"
[dev-dependencies.rapira]
version = "0.15"
[dev-dependencies.seize]
version = "0.5"
[dev-dependencies.tempfile]
version = "3"
[target.'cfg(target_os = "linux")'.dependencies.rustix]
version = "1.1"
features = [
"linux_latest",
"fs",
]
[target.'cfg(target_os = "linux")'.dependencies.rustix-uring]
version = "0.6"
optional = true
[lints.rust.unexpected_cfgs]
level = "warn"
priority = 0
check-cfg = [
"cfg(armdb_ab_skip_upsert)",
"cfg(armdb_ab_skip_decoded)",
"cfg(armdb_ab_skip_ttl)",
"cfg(armdb_ab_skip_tx)",
]