From 4b5d9cb40f2ba344ec286e44f94e3ae1b5bc1e86 Mon Sep 17 00:00:00 2001 From: Trevor Clinkenbeard Date: Wed, 30 Sep 2026 16:07:41 -0700 Subject: [PATCH 01/11] Import foundationdb-rs workspace under bindings/rust Source: https://github.com/foundationdb-rs/foundationdb-rs, upstream main snapshot dated September 25, 2026. Preserve the upstream crates, tests, examples, history logs, and dual MIT/Apache-2.0 licenses. Omit repository-specific hosted automation and agent configuration. --- bindings/rust/.cargo/config.toml | 14 + bindings/rust/.gitignore | 11 + bindings/rust/CONTRIBUTING.md | 185 ++ bindings/rust/Cargo.lock | 1106 +++++++ bindings/rust/Cargo.toml | 17 + bindings/rust/LICENSE-APACHE | 202 ++ bindings/rust/LICENSE-MIT | 20 + bindings/rust/README.md | 48 + bindings/rust/assets/logo-400x400.png | Bin 0 -> 44113 bytes bindings/rust/flake.lock | 66 + bindings/rust/flake.nix | 67 + .../foundationdb-bindingtester/Cargo.toml | 32 + .../rust/foundationdb-bindingtester/README.md | 14 + .../foundationdb-bindingtester/src/main.rs | 2799 ++++++++++++++++ bindings/rust/foundationdb-gen/CHANGELOG.md | 162 + bindings/rust/foundationdb-gen/Cargo.toml | 46 + bindings/rust/foundationdb-gen/README.md | 19 + .../foundationdb-gen/include/510/fdb.options | 251 ++ .../foundationdb-gen/include/510/version.txt | 1 + .../foundationdb-gen/include/520/fdb.options | 267 ++ .../foundationdb-gen/include/520/version.txt | 1 + .../foundationdb-gen/include/600/fdb.options | 270 ++ .../foundationdb-gen/include/600/version.txt | 1 + .../foundationdb-gen/include/610/fdb.options | 295 ++ .../foundationdb-gen/include/610/version.txt | 1 + .../foundationdb-gen/include/620/fdb.options | 333 ++ .../foundationdb-gen/include/620/version.txt | 1 + .../foundationdb-gen/include/630/fdb.options | 354 ++ .../foundationdb-gen/include/630/version.txt | 1 + .../foundationdb-gen/include/700/fdb.options | 371 +++ .../foundationdb-gen/include/700/version.txt | 1 + .../foundationdb-gen/include/710/fdb.options | 382 +++ .../foundationdb-gen/include/710/version.txt | 1 + .../foundationdb-gen/include/730/fdb.options | 432 +++ .../foundationdb-gen/include/730/version.txt | 1 + .../foundationdb-gen/include/740/fdb.options | 439 +++ .../foundationdb-gen/include/740/version.txt | 1 + .../src/bin/foundationdb-options-gen.rs | 7 + bindings/rust/foundationdb-gen/src/lib.rs | 429 +++ .../rust/foundationdb-macros/CHANGELOG.md | 60 + bindings/rust/foundationdb-macros/Cargo.toml | 28 + bindings/rust/foundationdb-macros/README.md | 3 + bindings/rust/foundationdb-macros/src/lib.rs | 245 ++ .../rust/foundationdb-profiling/Cargo.toml | 33 + .../rust/foundationdb-profiling/README.md | 12 + .../examples/top_keys.rs | 120 + .../foundationdb-profiling/src/aggregate.rs | 606 ++++ .../rust/foundationdb-profiling/src/decode.rs | 943 ++++++ .../rust/foundationdb-profiling/src/event.rs | 258 ++ .../rust/foundationdb-profiling/src/lib.rs | 159 + .../rust/foundationdb-profiling/src/reader.rs | 1664 ++++++++++ .../tests/decode_all.rs | 542 ++++ .../tests/fixtures/commit_7_4.bin | Bin 0 -> 614 bytes .../tests/fixtures/commit_error_7_4.bin | Bin 0 -> 312 bytes .../foundationdb-profiling/tests/read_page.rs | 336 ++ .../Cargo.toml | 22 + .../foundationdb-recipes-simulation/README.md | 94 + .../src/leader_election/mod.rs | 13 + .../src/leader_election/types.rs | 86 + .../src/leader_election/workload.rs | 2835 +++++++++++++++++ .../src/lib.rs | 13 + .../test_poll_leader_election.toml | 42 + .../Cargo.toml | 39 + .../foundationdb-simulation-tracing/README.md | 104 + .../examples/tracing_demo/lib.rs | 136 + .../tracing_demo/test_tracing_demo.toml | 9 + .../src/lib.rs | 540 ++++ .../rust/foundationdb-simulation/CHANGELOG.md | 88 + .../rust/foundationdb-simulation/Cargo.toml | 57 + .../rust/foundationdb-simulation/README.md | 326 ++ .../rust/foundationdb-simulation/build.rs | 81 + .../foundationdb-simulation/docs/fdb_rt.md | 284 ++ .../examples/atomic/Dockerfile | 37 + .../examples/atomic/lib.rs | 309 ++ .../examples/atomic/test_file_73.toml | 36 + .../examples/atomic/test_file_74.toml | 37 + .../examples/noop/lib.rs | 124 + .../examples/noop/test_file.toml | 10 + .../examples/shared/lib.rs | 78 + .../examples/shared/test_file.toml | 9 + .../src/CppWorkload.cpp | 227 ++ .../foundationdb-simulation/src/bindings.rs | 510 +++ .../rust/foundationdb-simulation/src/env.rs | 172 + .../foundationdb-simulation/src/fdb_rt.rs | 85 + .../src/headers/CWorkload.h | 160 + .../src/headers/CppWorkload.h | 110 + .../rust/foundationdb-simulation/src/lib.rs | 314 ++ bindings/rust/foundationdb-sys/CHANGELOG.md | 198 ++ bindings/rust/foundationdb-sys/Cargo.toml | 50 + bindings/rust/foundationdb-sys/README.md | 19 + bindings/rust/foundationdb-sys/build.rs | 142 + .../rust/foundationdb-sys/include/510/fdb_c.h | 316 ++ .../include/510/fdb_c_options.g.h | 341 ++ .../foundationdb-sys/include/510/version.txt | 1 + .../rust/foundationdb-sys/include/520/fdb_c.h | 316 ++ .../include/520/fdb_c_options.g.h | 344 ++ .../foundationdb-sys/include/520/version.txt | 1 + .../rust/foundationdb-sys/include/600/fdb_c.h | 316 ++ .../include/600/fdb_c_options.g.h | 344 ++ .../foundationdb-sys/include/600/version.txt | 1 + .../rust/foundationdb-sys/include/610/fdb_c.h | 336 ++ .../include/610/fdb_c_options.g.h | 377 +++ .../foundationdb-sys/include/610/version.txt | 1 + .../rust/foundationdb-sys/include/620/fdb_c.h | 350 ++ .../include/620/fdb_c_options.g.h | 421 +++ .../foundationdb-sys/include/620/version.txt | 1 + .../rust/foundationdb-sys/include/630/fdb_c.h | 374 +++ .../include/630/fdb_c_options.g.h | 457 +++ .../foundationdb-sys/include/630/version.txt | 1 + .../rust/foundationdb-sys/include/700/fdb_c.h | 434 +++ .../include/700/fdb_c_options.g.h | 485 +++ .../foundationdb-sys/include/700/version.txt | 1 + .../rust/foundationdb-sys/include/710/fdb_c.h | 576 ++++ .../include/710/fdb_c_options.g.h | 533 ++++ .../include/710/fdb_c_types.h | 47 + .../foundationdb-sys/include/710/version.txt | 1 + .../rust/foundationdb-sys/include/730/fdb_c.h | 813 +++++ .../include/730/fdb_c_apiversion.g.h | 41 + .../include/730/fdb_c_options.g.h | 613 ++++ .../foundationdb-sys/include/730/fdb_c_shim.h | 47 + .../include/730/fdb_c_types.h | 47 + .../foundationdb-sys/include/730/version.txt | 1 + .../rust/foundationdb-sys/include/740/fdb_c.h | 805 +++++ .../include/740/fdb_c_apiversion.g.h | 41 + .../include/740/fdb_c_options.g.h | 625 ++++ .../include/740/fdb_c_types.h | 47 + .../foundationdb-sys/include/740/version.txt | 1 + bindings/rust/foundationdb-sys/src/lib.rs | 250 ++ bindings/rust/foundationdb-tuple/CHANGELOG.md | 44 + bindings/rust/foundationdb-tuple/Cargo.toml | 36 + bindings/rust/foundationdb-tuple/README.md | 3 + .../rust/foundationdb-tuple/src/element.rs | 230 ++ bindings/rust/foundationdb-tuple/src/lib.rs | 697 ++++ bindings/rust/foundationdb-tuple/src/pack.rs | 1106 +++++++ .../rust/foundationdb-tuple/src/subspace.rs | 320 ++ .../foundationdb-tuple/src/versionstamp.rs | 62 + bindings/rust/foundationdb/CHANGELOG.md | 625 ++++ bindings/rust/foundationdb/Cargo.toml | 80 + bindings/rust/foundationdb/README.md | 178 ++ bindings/rust/foundationdb/build.rs | 18 + bindings/rust/foundationdb/examples/README.md | 1 + .../examples/atomic-op-counter.rs | 88 + .../examples/blob-with-manifest.rs | 409 +++ bindings/rust/foundationdb/examples/blob.rs | 100 + .../foundationdb/examples/budgeted_scan.rs | 260 ++ .../foundationdb/examples/class-scheduling.rs | 408 +++ .../examples/conflict_reporting.rs | 200 ++ .../rust/foundationdb/examples/hello-world.rs | 49 + .../foundationdb/examples/instrumented.rs | 125 + .../foundationdb/examples/key_selectors.rs | 432 +++ .../rust/foundationdb/examples/micro-queue.rs | 190 ++ .../foundationdb/examples/multi_version.rs | 101 + .../foundationdb/examples/simple-index.rs | 220 ++ .../foundationdb/examples/versionstamp.rs | 148 + bindings/rust/foundationdb/src/api.rs | 507 +++ bindings/rust/foundationdb/src/budget.rs | 682 ++++ bindings/rust/foundationdb/src/cluster.rs | 105 + bindings/rust/foundationdb/src/database.rs | 654 ++++ .../src/directory/directory_layer.rs | 800 +++++ .../src/directory/directory_partition.rs | 247 ++ .../src/directory/directory_subspace.rs | 242 ++ .../rust/foundationdb/src/directory/error.rs | 103 + .../rust/foundationdb/src/directory/mod.rs | 389 +++ .../rust/foundationdb/src/directory/node.rs | 70 + bindings/rust/foundationdb/src/env.rs | 373 +++ bindings/rust/foundationdb/src/error.rs | 337 ++ bindings/rust/foundationdb/src/fdb_keys.rs | 181 ++ bindings/rust/foundationdb/src/future.rs | 518 +++ bindings/rust/foundationdb/src/keyselector.rs | 107 + bindings/rust/foundationdb/src/lib.rs | 151 + .../foundationdb/src/mapped_key_values.rs | 271 ++ bindings/rust/foundationdb/src/metrics.rs | 614 ++++ bindings/rust/foundationdb/src/options.rs | 1 + .../src/recipes/leader_election/algorithm.rs | 427 +++ .../src/recipes/leader_election/errors.rs | 150 + .../src/recipes/leader_election/keys.rs | 36 + .../src/recipes/leader_election/mod.rs | 326 ++ .../src/recipes/leader_election/types.rs | 549 ++++ bindings/rust/foundationdb/src/recipes/mod.rs | 38 + .../src/recipes/ranked_register/algorithm.rs | 305 ++ .../src/recipes/ranked_register/errors.rs | 88 + .../src/recipes/ranked_register/keys.rs | 53 + .../src/recipes/ranked_register/mod.rs | 283 ++ .../src/recipes/ranked_register/types.rs | 158 + bindings/rust/foundationdb/src/runner.rs | 856 +++++ bindings/rust/foundationdb/src/timekeeper.rs | 102 + bindings/rust/foundationdb/src/transaction.rs | 2045 ++++++++++++ .../rust/foundationdb/src/tuple_ext/hca.rs | 239 ++ .../rust/foundationdb/src/tuple_ext/mod.rs | 2 + .../foundationdb/src/tuple_ext/subspace.rs | 22 + bindings/rust/foundationdb/tests/api.rs | 46 + bindings/rust/foundationdb/tests/api_ub.rs | 22 + bindings/rust/foundationdb/tests/atomic.rs | 61 + bindings/rust/foundationdb/tests/budget.rs | 507 +++ .../rust/foundationdb/tests/common/mod.rs | 20 + .../foundationdb/tests/conflict_ranges.rs | 218 ++ bindings/rust/foundationdb/tests/database.rs | 36 + bindings/rust/foundationdb/tests/directory.rs | 81 + bindings/rust/foundationdb/tests/error.rs | 127 + bindings/rust/foundationdb/tests/future.rs | 58 + bindings/rust/foundationdb/tests/get.rs | 380 +++ bindings/rust/foundationdb/tests/hca.rs | 95 + .../tests/leader_election_ranked_register.rs | 1264 ++++++++ bindings/rust/foundationdb/tests/metrics.rs | 603 ++++ bindings/rust/foundationdb/tests/range.rs | 500 +++ .../foundationdb/tests/ranked_register.rs | 507 +++ bindings/rust/foundationdb/tests/run_retry.rs | 280 ++ .../rust/foundationdb/tests/runner_hooks.rs | 640 ++++ .../rust/foundationdb/tests/timekeeper.rs | 57 + bindings/rust/foundationdb/tests/tokio.rs | 206 ++ bindings/rust/foundationdb/tests/trace.rs | 91 + bindings/rust/foundationdb/tests/tuple.rs | 363 +++ bindings/rust/foundationdb/tests/watch.rs | 50 + bindings/rust/rust-toolchain.toml | 11 + bindings/rust/scripts/run_bindingtester.sh | 40 + .../scripts/run_leader_election_simulation.sh | 61 + bindings/rust/scripts/setup_bindingtester.sh | 35 + .../rust/scripts/simulation_entrypoint.sh | 23 + 218 files changed, 55302 insertions(+) create mode 100644 bindings/rust/.cargo/config.toml create mode 100644 bindings/rust/.gitignore create mode 100644 bindings/rust/CONTRIBUTING.md create mode 100644 bindings/rust/Cargo.lock create mode 100644 bindings/rust/Cargo.toml create mode 100644 bindings/rust/LICENSE-APACHE create mode 100644 bindings/rust/LICENSE-MIT create mode 100644 bindings/rust/README.md create mode 100644 bindings/rust/assets/logo-400x400.png create mode 100644 bindings/rust/flake.lock create mode 100644 bindings/rust/flake.nix create mode 100644 bindings/rust/foundationdb-bindingtester/Cargo.toml create mode 100644 bindings/rust/foundationdb-bindingtester/README.md create mode 100644 bindings/rust/foundationdb-bindingtester/src/main.rs create mode 100644 bindings/rust/foundationdb-gen/CHANGELOG.md create mode 100644 bindings/rust/foundationdb-gen/Cargo.toml create mode 100644 bindings/rust/foundationdb-gen/README.md create mode 100644 bindings/rust/foundationdb-gen/include/510/fdb.options create mode 100644 bindings/rust/foundationdb-gen/include/510/version.txt create mode 100644 bindings/rust/foundationdb-gen/include/520/fdb.options create mode 100644 bindings/rust/foundationdb-gen/include/520/version.txt create mode 100644 bindings/rust/foundationdb-gen/include/600/fdb.options create mode 100644 bindings/rust/foundationdb-gen/include/600/version.txt create mode 100644 bindings/rust/foundationdb-gen/include/610/fdb.options create mode 100644 bindings/rust/foundationdb-gen/include/610/version.txt create mode 100644 bindings/rust/foundationdb-gen/include/620/fdb.options create mode 100644 bindings/rust/foundationdb-gen/include/620/version.txt create mode 100644 bindings/rust/foundationdb-gen/include/630/fdb.options create mode 100644 bindings/rust/foundationdb-gen/include/630/version.txt create mode 100644 bindings/rust/foundationdb-gen/include/700/fdb.options create mode 100644 bindings/rust/foundationdb-gen/include/700/version.txt create mode 100644 bindings/rust/foundationdb-gen/include/710/fdb.options create mode 100644 bindings/rust/foundationdb-gen/include/710/version.txt create mode 100644 bindings/rust/foundationdb-gen/include/730/fdb.options create mode 100644 bindings/rust/foundationdb-gen/include/730/version.txt create mode 100644 bindings/rust/foundationdb-gen/include/740/fdb.options create mode 100644 bindings/rust/foundationdb-gen/include/740/version.txt create mode 100644 bindings/rust/foundationdb-gen/src/bin/foundationdb-options-gen.rs create mode 100644 bindings/rust/foundationdb-gen/src/lib.rs create mode 100644 bindings/rust/foundationdb-macros/CHANGELOG.md create mode 100644 bindings/rust/foundationdb-macros/Cargo.toml create mode 100644 bindings/rust/foundationdb-macros/README.md create mode 100644 bindings/rust/foundationdb-macros/src/lib.rs create mode 100644 bindings/rust/foundationdb-profiling/Cargo.toml create mode 100644 bindings/rust/foundationdb-profiling/README.md create mode 100644 bindings/rust/foundationdb-profiling/examples/top_keys.rs create mode 100644 bindings/rust/foundationdb-profiling/src/aggregate.rs create mode 100644 bindings/rust/foundationdb-profiling/src/decode.rs create mode 100644 bindings/rust/foundationdb-profiling/src/event.rs create mode 100644 bindings/rust/foundationdb-profiling/src/lib.rs create mode 100644 bindings/rust/foundationdb-profiling/src/reader.rs create mode 100644 bindings/rust/foundationdb-profiling/tests/decode_all.rs create mode 100644 bindings/rust/foundationdb-profiling/tests/fixtures/commit_7_4.bin create mode 100644 bindings/rust/foundationdb-profiling/tests/fixtures/commit_error_7_4.bin create mode 100644 bindings/rust/foundationdb-profiling/tests/read_page.rs create mode 100644 bindings/rust/foundationdb-recipes-simulation/Cargo.toml create mode 100644 bindings/rust/foundationdb-recipes-simulation/README.md create mode 100644 bindings/rust/foundationdb-recipes-simulation/src/leader_election/mod.rs create mode 100644 bindings/rust/foundationdb-recipes-simulation/src/leader_election/types.rs create mode 100644 bindings/rust/foundationdb-recipes-simulation/src/leader_election/workload.rs create mode 100644 bindings/rust/foundationdb-recipes-simulation/src/lib.rs create mode 100644 bindings/rust/foundationdb-recipes-simulation/test_poll_leader_election.toml create mode 100644 bindings/rust/foundationdb-simulation-tracing/Cargo.toml create mode 100644 bindings/rust/foundationdb-simulation-tracing/README.md create mode 100644 bindings/rust/foundationdb-simulation-tracing/examples/tracing_demo/lib.rs create mode 100644 bindings/rust/foundationdb-simulation-tracing/examples/tracing_demo/test_tracing_demo.toml create mode 100644 bindings/rust/foundationdb-simulation-tracing/src/lib.rs create mode 100644 bindings/rust/foundationdb-simulation/CHANGELOG.md create mode 100644 bindings/rust/foundationdb-simulation/Cargo.toml create mode 100644 bindings/rust/foundationdb-simulation/README.md create mode 100644 bindings/rust/foundationdb-simulation/build.rs create mode 100644 bindings/rust/foundationdb-simulation/docs/fdb_rt.md create mode 100644 bindings/rust/foundationdb-simulation/examples/atomic/Dockerfile create mode 100644 bindings/rust/foundationdb-simulation/examples/atomic/lib.rs create mode 100644 bindings/rust/foundationdb-simulation/examples/atomic/test_file_73.toml create mode 100644 bindings/rust/foundationdb-simulation/examples/atomic/test_file_74.toml create mode 100644 bindings/rust/foundationdb-simulation/examples/noop/lib.rs create mode 100644 bindings/rust/foundationdb-simulation/examples/noop/test_file.toml create mode 100644 bindings/rust/foundationdb-simulation/examples/shared/lib.rs create mode 100644 bindings/rust/foundationdb-simulation/examples/shared/test_file.toml create mode 100644 bindings/rust/foundationdb-simulation/src/CppWorkload.cpp create mode 100644 bindings/rust/foundationdb-simulation/src/bindings.rs create mode 100644 bindings/rust/foundationdb-simulation/src/env.rs create mode 100644 bindings/rust/foundationdb-simulation/src/fdb_rt.rs create mode 100644 bindings/rust/foundationdb-simulation/src/headers/CWorkload.h create mode 100644 bindings/rust/foundationdb-simulation/src/headers/CppWorkload.h create mode 100644 bindings/rust/foundationdb-simulation/src/lib.rs create mode 100644 bindings/rust/foundationdb-sys/CHANGELOG.md create mode 100644 bindings/rust/foundationdb-sys/Cargo.toml create mode 100644 bindings/rust/foundationdb-sys/README.md create mode 100644 bindings/rust/foundationdb-sys/build.rs create mode 100644 bindings/rust/foundationdb-sys/include/510/fdb_c.h create mode 100644 bindings/rust/foundationdb-sys/include/510/fdb_c_options.g.h create mode 100644 bindings/rust/foundationdb-sys/include/510/version.txt create mode 100644 bindings/rust/foundationdb-sys/include/520/fdb_c.h create mode 100644 bindings/rust/foundationdb-sys/include/520/fdb_c_options.g.h create mode 100644 bindings/rust/foundationdb-sys/include/520/version.txt create mode 100644 bindings/rust/foundationdb-sys/include/600/fdb_c.h create mode 100644 bindings/rust/foundationdb-sys/include/600/fdb_c_options.g.h create mode 100644 bindings/rust/foundationdb-sys/include/600/version.txt create mode 100644 bindings/rust/foundationdb-sys/include/610/fdb_c.h create mode 100644 bindings/rust/foundationdb-sys/include/610/fdb_c_options.g.h create mode 100644 bindings/rust/foundationdb-sys/include/610/version.txt create mode 100644 bindings/rust/foundationdb-sys/include/620/fdb_c.h create mode 100644 bindings/rust/foundationdb-sys/include/620/fdb_c_options.g.h create mode 100644 bindings/rust/foundationdb-sys/include/620/version.txt create mode 100644 bindings/rust/foundationdb-sys/include/630/fdb_c.h create mode 100644 bindings/rust/foundationdb-sys/include/630/fdb_c_options.g.h create mode 100644 bindings/rust/foundationdb-sys/include/630/version.txt create mode 100644 bindings/rust/foundationdb-sys/include/700/fdb_c.h create mode 100644 bindings/rust/foundationdb-sys/include/700/fdb_c_options.g.h create mode 100644 bindings/rust/foundationdb-sys/include/700/version.txt create mode 100644 bindings/rust/foundationdb-sys/include/710/fdb_c.h create mode 100644 bindings/rust/foundationdb-sys/include/710/fdb_c_options.g.h create mode 100644 bindings/rust/foundationdb-sys/include/710/fdb_c_types.h create mode 100644 bindings/rust/foundationdb-sys/include/710/version.txt create mode 100644 bindings/rust/foundationdb-sys/include/730/fdb_c.h create mode 100644 bindings/rust/foundationdb-sys/include/730/fdb_c_apiversion.g.h create mode 100644 bindings/rust/foundationdb-sys/include/730/fdb_c_options.g.h create mode 100644 bindings/rust/foundationdb-sys/include/730/fdb_c_shim.h create mode 100644 bindings/rust/foundationdb-sys/include/730/fdb_c_types.h create mode 100644 bindings/rust/foundationdb-sys/include/730/version.txt create mode 100644 bindings/rust/foundationdb-sys/include/740/fdb_c.h create mode 100644 bindings/rust/foundationdb-sys/include/740/fdb_c_apiversion.g.h create mode 100644 bindings/rust/foundationdb-sys/include/740/fdb_c_options.g.h create mode 100644 bindings/rust/foundationdb-sys/include/740/fdb_c_types.h create mode 100644 bindings/rust/foundationdb-sys/include/740/version.txt create mode 100644 bindings/rust/foundationdb-sys/src/lib.rs create mode 100644 bindings/rust/foundationdb-tuple/CHANGELOG.md create mode 100644 bindings/rust/foundationdb-tuple/Cargo.toml create mode 100644 bindings/rust/foundationdb-tuple/README.md create mode 100644 bindings/rust/foundationdb-tuple/src/element.rs create mode 100644 bindings/rust/foundationdb-tuple/src/lib.rs create mode 100644 bindings/rust/foundationdb-tuple/src/pack.rs create mode 100644 bindings/rust/foundationdb-tuple/src/subspace.rs create mode 100644 bindings/rust/foundationdb-tuple/src/versionstamp.rs create mode 100644 bindings/rust/foundationdb/CHANGELOG.md create mode 100644 bindings/rust/foundationdb/Cargo.toml create mode 100644 bindings/rust/foundationdb/README.md create mode 100644 bindings/rust/foundationdb/build.rs create mode 100644 bindings/rust/foundationdb/examples/README.md create mode 100644 bindings/rust/foundationdb/examples/atomic-op-counter.rs create mode 100644 bindings/rust/foundationdb/examples/blob-with-manifest.rs create mode 100644 bindings/rust/foundationdb/examples/blob.rs create mode 100644 bindings/rust/foundationdb/examples/budgeted_scan.rs create mode 100644 bindings/rust/foundationdb/examples/class-scheduling.rs create mode 100644 bindings/rust/foundationdb/examples/conflict_reporting.rs create mode 100644 bindings/rust/foundationdb/examples/hello-world.rs create mode 100644 bindings/rust/foundationdb/examples/instrumented.rs create mode 100644 bindings/rust/foundationdb/examples/key_selectors.rs create mode 100644 bindings/rust/foundationdb/examples/micro-queue.rs create mode 100644 bindings/rust/foundationdb/examples/multi_version.rs create mode 100644 bindings/rust/foundationdb/examples/simple-index.rs create mode 100644 bindings/rust/foundationdb/examples/versionstamp.rs create mode 100644 bindings/rust/foundationdb/src/api.rs create mode 100644 bindings/rust/foundationdb/src/budget.rs create mode 100644 bindings/rust/foundationdb/src/cluster.rs create mode 100644 bindings/rust/foundationdb/src/database.rs create mode 100644 bindings/rust/foundationdb/src/directory/directory_layer.rs create mode 100644 bindings/rust/foundationdb/src/directory/directory_partition.rs create mode 100644 bindings/rust/foundationdb/src/directory/directory_subspace.rs create mode 100644 bindings/rust/foundationdb/src/directory/error.rs create mode 100644 bindings/rust/foundationdb/src/directory/mod.rs create mode 100644 bindings/rust/foundationdb/src/directory/node.rs create mode 100644 bindings/rust/foundationdb/src/env.rs create mode 100644 bindings/rust/foundationdb/src/error.rs create mode 100644 bindings/rust/foundationdb/src/fdb_keys.rs create mode 100644 bindings/rust/foundationdb/src/future.rs create mode 100644 bindings/rust/foundationdb/src/keyselector.rs create mode 100644 bindings/rust/foundationdb/src/lib.rs create mode 100644 bindings/rust/foundationdb/src/mapped_key_values.rs create mode 100644 bindings/rust/foundationdb/src/metrics.rs create mode 100644 bindings/rust/foundationdb/src/options.rs create mode 100644 bindings/rust/foundationdb/src/recipes/leader_election/algorithm.rs create mode 100644 bindings/rust/foundationdb/src/recipes/leader_election/errors.rs create mode 100644 bindings/rust/foundationdb/src/recipes/leader_election/keys.rs create mode 100644 bindings/rust/foundationdb/src/recipes/leader_election/mod.rs create mode 100644 bindings/rust/foundationdb/src/recipes/leader_election/types.rs create mode 100644 bindings/rust/foundationdb/src/recipes/mod.rs create mode 100644 bindings/rust/foundationdb/src/recipes/ranked_register/algorithm.rs create mode 100644 bindings/rust/foundationdb/src/recipes/ranked_register/errors.rs create mode 100644 bindings/rust/foundationdb/src/recipes/ranked_register/keys.rs create mode 100644 bindings/rust/foundationdb/src/recipes/ranked_register/mod.rs create mode 100644 bindings/rust/foundationdb/src/recipes/ranked_register/types.rs create mode 100644 bindings/rust/foundationdb/src/runner.rs create mode 100644 bindings/rust/foundationdb/src/timekeeper.rs create mode 100644 bindings/rust/foundationdb/src/transaction.rs create mode 100644 bindings/rust/foundationdb/src/tuple_ext/hca.rs create mode 100644 bindings/rust/foundationdb/src/tuple_ext/mod.rs create mode 100644 bindings/rust/foundationdb/src/tuple_ext/subspace.rs create mode 100644 bindings/rust/foundationdb/tests/api.rs create mode 100644 bindings/rust/foundationdb/tests/api_ub.rs create mode 100644 bindings/rust/foundationdb/tests/atomic.rs create mode 100644 bindings/rust/foundationdb/tests/budget.rs create mode 100644 bindings/rust/foundationdb/tests/common/mod.rs create mode 100644 bindings/rust/foundationdb/tests/conflict_ranges.rs create mode 100644 bindings/rust/foundationdb/tests/database.rs create mode 100644 bindings/rust/foundationdb/tests/directory.rs create mode 100644 bindings/rust/foundationdb/tests/error.rs create mode 100644 bindings/rust/foundationdb/tests/future.rs create mode 100644 bindings/rust/foundationdb/tests/get.rs create mode 100644 bindings/rust/foundationdb/tests/hca.rs create mode 100644 bindings/rust/foundationdb/tests/leader_election_ranked_register.rs create mode 100644 bindings/rust/foundationdb/tests/metrics.rs create mode 100644 bindings/rust/foundationdb/tests/range.rs create mode 100644 bindings/rust/foundationdb/tests/ranked_register.rs create mode 100644 bindings/rust/foundationdb/tests/run_retry.rs create mode 100644 bindings/rust/foundationdb/tests/runner_hooks.rs create mode 100644 bindings/rust/foundationdb/tests/timekeeper.rs create mode 100644 bindings/rust/foundationdb/tests/tokio.rs create mode 100644 bindings/rust/foundationdb/tests/trace.rs create mode 100644 bindings/rust/foundationdb/tests/tuple.rs create mode 100644 bindings/rust/foundationdb/tests/watch.rs create mode 100644 bindings/rust/rust-toolchain.toml create mode 100755 bindings/rust/scripts/run_bindingtester.sh create mode 100755 bindings/rust/scripts/run_leader_election_simulation.sh create mode 100755 bindings/rust/scripts/setup_bindingtester.sh create mode 100755 bindings/rust/scripts/simulation_entrypoint.sh diff --git a/bindings/rust/.cargo/config.toml b/bindings/rust/.cargo/config.toml new file mode 100644 index 00000000000..17885922741 --- /dev/null +++ b/bindings/rust/.cargo/config.toml @@ -0,0 +1,14 @@ +[alias] +# Common development aliases for contributors + +# Build/test/check with latest FDB version (7.4) using embedded headers +# These work with Nix or when FDB headers are available +build-fdb-latest = "build -p foundationdb --features embedded-fdb-include,fdb-7_4" +test-fdb-latest = "test -p foundationdb --features embedded-fdb-include,fdb-7_4" +check-fdb-latest = "check -p foundationdb --features embedded-fdb-include,fdb-7_4" +clippy-fdb-latest = "clippy -p foundationdb --features embedded-fdb-include,fdb-7_4" +doc-fdb-latest = "doc -p foundationdb --features embedded-fdb-include,fdb-7_4" + +# Lint the whole workspace (all targets and features) and deny warnings. +# Used by CI; run it before pushing. +clippy-all = "clippy --all-targets --no-default-features --features num-bigint,embedded-fdb-include,fdb-7_4,trace -- -D warnings" diff --git a/bindings/rust/.gitignore b/bindings/rust/.gitignore new file mode 100644 index 00000000000..400d85a06dc --- /dev/null +++ b/bindings/rust/.gitignore @@ -0,0 +1,11 @@ +/target +**/*.rs.bk +*.swp + +.vscode +.direnv +.idea + +# Files generated by the simulation +simfdb +trace.*.json \ No newline at end of file diff --git a/bindings/rust/CONTRIBUTING.md b/bindings/rust/CONTRIBUTING.md new file mode 100644 index 00000000000..b81b8dd1a92 --- /dev/null +++ b/bindings/rust/CONTRIBUTING.md @@ -0,0 +1,185 @@ +# Contributing to FoundationDB Rust + +Thank you for your interest in contributing to the FoundationDB Rust client! This guide will help you get started. + +## Getting Started + +### Prerequisites + +You'll need: +- Rust 1.85.1 or later +- FoundationDB client libraries (for runtime, not required for compilation with our setup) + +### Quick Development Setup + +We provide cargo aliases that use embedded headers, so you can compile without having FoundationDB installed: + +```shell +# Build/test/check with latest FDB version (7.4) +cargo build-fdb-latest +cargo test-fdb-latest +cargo check-fdb-latest +cargo clippy-fdb-latest +``` + +These commands will build the `foundationdb` crate with embedded headers for FDB 7.4. + +### Running a Local FoundationDB Cluster + +The easiest way to run a local FDB cluster for testing: + +```shell +# Start a single-node cluster in Docker +docker run -p 4500:4500 --name fdb -it --rm -d foundationdb/foundationdb:7.4.3 +docker exec fdb fdbcli --exec "configure new single memory" +``` + +## Development with Nix + +If you use Nix, we provide a `flake.nix` for a complete development environment: + +```shell +# Enter the development shell +nix develop + +# The shell includes all necessary dependencies and tools +``` + +For NixOS users, add this to your `configuration.nix` for the FDB cluster file: + +```nix +{ + environment.etc."foundationdb/fdb.cluster" = { + mode = "0555"; + text = '' + docker:docker@127.0.0.1:4500 + ''; + }; +} +``` + +## Project Structure + +- `foundationdb/` - High-level Rust client API +- `foundationdb-sys/` - Low-level C API bindings +- `foundationdb-gen/` - Code generator for FDB options and types +- `foundationdb-tuple/` - Tuple layer implementation +- `foundationdb-macros/` - Procedural macros +- `foundationdb-bindingtester/` - Official binding tester implementation +- `foundationdb-simulation/` - Simulation testing framework + +## Testing + +### Unit Tests + +Run tests for the main crate: +```shell +cargo test-fdb-latest +``` + +### Binding Tester + +We use the official FoundationDB binding tester to ensure correctness: + +```shell +# Build the binding tester +cargo build -p bindingtester + +# Setup the binding tester environment (downloads FDB source and configures Python bindings) +./scripts/setup_bindingtester.sh target/debug/bindingtester + +# Run the binding tester suite (requires FDB cluster running) +./scripts/run_bindingtester.sh + +# Run with more iterations (e.g., 100 iterations) +./scripts/run_bindingtester.sh 100 +``` + +The binding tester runs automatically in CI when a PR has the `correctness` label. + +### Leader-election simulation campaigns + +The leader-election simulator runs a smoke campaign of 1 worker x 10 seeds on +ordinary pull requests and pushes to `main`. Changes to the leader-election or +RankedRegister recipes, simulation code, the simulation runner, or this +workflow automatically run an extended campaign of 4 workers x 50 seeds. + +The full campaign runs nightly at 02:00 UTC, when manually dispatched, and on +pull requests carrying the `leader-election-correctness` label. It uses 4 +workers x 200 seeds. Apply that label when a change needs the full +correctness campaign before the nightly run. + +## Code Style + +- Run `cargo fmt` before committing +- Run `cargo clippy-fdb-latest` to check for common issues +- Follow Rust naming conventions and idioms + +## Submitting Changes + +1. Fork the repository +2. Create a feature branch (`git checkout -b feature/amazing-feature`) +3. Make your changes +4. Ensure tests pass (`cargo test-fdb-latest`) +5. Run clippy (`cargo clippy-fdb-latest`) +6. Format your code (`cargo fmt`) +7. Commit your changes with a semantic commit message (see below) +8. Push to your fork +9. Open a Pull Request + +### Commit Message Convention + +We follow [Conventional Commits](https://www.conventionalcommits.org/) to generate clean changelogs: + +``` +(): + + + +