tigerbeetle 0.0.40 → 0.17.8
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.
- checksums.yaml +4 -4
- data/LICENSE +0 -25
- data/README.md +670 -80
- data/docs/migration.md +201 -0
- data/sig/tigerbeetle.rbs +271 -0
- data/src/ext/tigerbeetle/extconf.rb +47 -0
- data/src/ext/tigerbeetle/lib/aarch64-linux-gnu.2.27/libtb_client.so +0 -0
- data/src/ext/tigerbeetle/lib/aarch64-linux-musl/libtb_client.so +0 -0
- data/src/ext/tigerbeetle/lib/aarch64-macos/libtb_client.dylib +0 -0
- data/src/ext/tigerbeetle/lib/x86_64-linux-gnu.2.27/libtb_client.so +0 -0
- data/src/ext/tigerbeetle/lib/x86_64-linux-musl/libtb_client.so +0 -0
- data/src/ext/tigerbeetle/lib/x86_64-macos/libtb_client.dylib +0 -0
- data/src/ext/tigerbeetle/lib/x86_64-windows/tb_client.dll +0 -0
- data/src/ext/tigerbeetle/rb_tb_gen.h +458 -0
- data/{ext/tb_client/tigerbeetle/src/clients/rust/assets → src/ext/tigerbeetle}/tb_client.h +18 -16
- data/src/ext/tigerbeetle/tigerbeetle.c +310 -0
- data/src/tigerbeetle/bindings.rb +347 -0
- data/src/tigerbeetle/client.rb +129 -0
- data/src/tigerbeetle/completion_dispatcher.rb +108 -0
- data/src/tigerbeetle/id.rb +40 -0
- data/src/tigerbeetle/tb.rb +3 -0
- data/src/tigerbeetle/version.rb +3 -0
- data/src/tigerbeetle.rb +39 -0
- metadata +33 -350
- data/CHANGELOG.md +0 -162
- data/ext/tb_client/extconf.rb +0 -41
- data/ext/tb_client/tigerbeetle/LICENSE +0 -177
- data/ext/tb_client/tigerbeetle/build.zig +0 -2296
- data/ext/tb_client/tigerbeetle/src/aof.zig +0 -1000
- data/ext/tb_client/tigerbeetle/src/build/fetch.zig +0 -112
- data/ext/tb_client/tigerbeetle/src/build_multiversion.zig +0 -808
- data/ext/tb_client/tigerbeetle/src/cdc/amqp/protocol.zig +0 -1283
- data/ext/tb_client/tigerbeetle/src/cdc/amqp/spec.zig +0 -1704
- data/ext/tb_client/tigerbeetle/src/cdc/amqp/types.zig +0 -341
- data/ext/tb_client/tigerbeetle/src/cdc/amqp.zig +0 -1450
- data/ext/tb_client/tigerbeetle/src/cdc/runner.zig +0 -1659
- data/ext/tb_client/tigerbeetle/src/clients/c/samples/main.c +0 -406
- data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/context.zig +0 -1092
- data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/echo_client.zig +0 -286
- data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/packet.zig +0 -158
- data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/signal.zig +0 -229
- data/ext/tb_client/tigerbeetle/src/clients/c/tb_client/signal_fuzz.zig +0 -110
- data/ext/tb_client/tigerbeetle/src/clients/c/tb_client.h +0 -386
- data/ext/tb_client/tigerbeetle/src/clients/c/tb_client.zig +0 -34
- data/ext/tb_client/tigerbeetle/src/clients/c/tb_client_exports.zig +0 -281
- data/ext/tb_client/tigerbeetle/src/clients/c/tb_client_header.zig +0 -312
- data/ext/tb_client/tigerbeetle/src/clients/c/tb_client_header_test.zig +0 -138
- data/ext/tb_client/tigerbeetle/src/clients/c/test.zig +0 -466
- data/ext/tb_client/tigerbeetle/src/clients/docs_samples.zig +0 -157
- data/ext/tb_client/tigerbeetle/src/clients/docs_types.zig +0 -90
- data/ext/tb_client/tigerbeetle/src/clients/dotnet/ci.zig +0 -203
- data/ext/tb_client/tigerbeetle/src/clients/dotnet/docs.zig +0 -79
- data/ext/tb_client/tigerbeetle/src/clients/dotnet/dotnet_bindings.zig +0 -542
- data/ext/tb_client/tigerbeetle/src/clients/go/ci.zig +0 -109
- data/ext/tb_client/tigerbeetle/src/clients/go/docs.zig +0 -86
- data/ext/tb_client/tigerbeetle/src/clients/go/go_bindings.zig +0 -370
- data/ext/tb_client/tigerbeetle/src/clients/go/pkg/native/tb_client.h +0 -386
- data/ext/tb_client/tigerbeetle/src/clients/java/ci.zig +0 -167
- data/ext/tb_client/tigerbeetle/src/clients/java/docs.zig +0 -126
- data/ext/tb_client/tigerbeetle/src/clients/java/java_bindings.zig +0 -996
- data/ext/tb_client/tigerbeetle/src/clients/java/src/client.zig +0 -748
- data/ext/tb_client/tigerbeetle/src/clients/java/src/jni.zig +0 -3238
- data/ext/tb_client/tigerbeetle/src/clients/java/src/jni_tests.zig +0 -1718
- data/ext/tb_client/tigerbeetle/src/clients/java/src/jni_thread_cleaner.zig +0 -190
- data/ext/tb_client/tigerbeetle/src/clients/node/ci.zig +0 -104
- data/ext/tb_client/tigerbeetle/src/clients/node/docs.zig +0 -75
- data/ext/tb_client/tigerbeetle/src/clients/node/node.zig +0 -522
- data/ext/tb_client/tigerbeetle/src/clients/node/node_bindings.zig +0 -267
- data/ext/tb_client/tigerbeetle/src/clients/node/src/c.zig +0 -3
- data/ext/tb_client/tigerbeetle/src/clients/node/src/translate.zig +0 -379
- data/ext/tb_client/tigerbeetle/src/clients/python/ci.zig +0 -131
- data/ext/tb_client/tigerbeetle/src/clients/python/docs.zig +0 -63
- data/ext/tb_client/tigerbeetle/src/clients/python/python_bindings.zig +0 -588
- data/ext/tb_client/tigerbeetle/src/clients/rust/ci.zig +0 -73
- data/ext/tb_client/tigerbeetle/src/clients/rust/docs.zig +0 -106
- data/ext/tb_client/tigerbeetle/src/clients/rust/rust_bindings.zig +0 -305
- data/ext/tb_client/tigerbeetle/src/config.zig +0 -296
- data/ext/tb_client/tigerbeetle/src/constants.zig +0 -790
- data/ext/tb_client/tigerbeetle/src/copyhound.zig +0 -202
- data/ext/tb_client/tigerbeetle/src/counting_allocator.zig +0 -72
- data/ext/tb_client/tigerbeetle/src/direction.zig +0 -120
- data/ext/tb_client/tigerbeetle/src/docs_website/build.zig +0 -158
- data/ext/tb_client/tigerbeetle/src/docs_website/src/content.zig +0 -156
- data/ext/tb_client/tigerbeetle/src/docs_website/src/docs.zig +0 -252
- data/ext/tb_client/tigerbeetle/src/docs_website/src/file_checker.zig +0 -313
- data/ext/tb_client/tigerbeetle/src/docs_website/src/html.zig +0 -87
- data/ext/tb_client/tigerbeetle/src/docs_website/src/page_writer.zig +0 -63
- data/ext/tb_client/tigerbeetle/src/docs_website/src/redirects.zig +0 -47
- data/ext/tb_client/tigerbeetle/src/docs_website/src/search_index_writer.zig +0 -28
- data/ext/tb_client/tigerbeetle/src/docs_website/src/service_worker_writer.zig +0 -61
- data/ext/tb_client/tigerbeetle/src/docs_website/src/single_page_writer.zig +0 -169
- data/ext/tb_client/tigerbeetle/src/docs_website/src/website.zig +0 -46
- data/ext/tb_client/tigerbeetle/src/ewah.zig +0 -445
- data/ext/tb_client/tigerbeetle/src/ewah_benchmark.zig +0 -128
- data/ext/tb_client/tigerbeetle/src/ewah_fuzz.zig +0 -171
- data/ext/tb_client/tigerbeetle/src/fuzz_tests.zig +0 -179
- data/ext/tb_client/tigerbeetle/src/integration_tests.zig +0 -662
- data/ext/tb_client/tigerbeetle/src/io/common.zig +0 -155
- data/ext/tb_client/tigerbeetle/src/io/darwin.zig +0 -1093
- data/ext/tb_client/tigerbeetle/src/io/linux.zig +0 -1880
- data/ext/tb_client/tigerbeetle/src/io/test.zig +0 -1005
- data/ext/tb_client/tigerbeetle/src/io/windows.zig +0 -1598
- data/ext/tb_client/tigerbeetle/src/io.zig +0 -34
- data/ext/tb_client/tigerbeetle/src/iops.zig +0 -134
- data/ext/tb_client/tigerbeetle/src/list.zig +0 -236
- data/ext/tb_client/tigerbeetle/src/lsm/binary_search.zig +0 -848
- data/ext/tb_client/tigerbeetle/src/lsm/binary_search_benchmark.zig +0 -179
- data/ext/tb_client/tigerbeetle/src/lsm/cache_map.zig +0 -424
- data/ext/tb_client/tigerbeetle/src/lsm/cache_map_fuzz.zig +0 -420
- data/ext/tb_client/tigerbeetle/src/lsm/compaction.zig +0 -2114
- data/ext/tb_client/tigerbeetle/src/lsm/composite_key.zig +0 -185
- data/ext/tb_client/tigerbeetle/src/lsm/forest.zig +0 -1146
- data/ext/tb_client/tigerbeetle/src/lsm/forest_fuzz.zig +0 -1102
- data/ext/tb_client/tigerbeetle/src/lsm/forest_table_iterator.zig +0 -200
- data/ext/tb_client/tigerbeetle/src/lsm/groove.zig +0 -1495
- data/ext/tb_client/tigerbeetle/src/lsm/k_way_merge.zig +0 -739
- data/ext/tb_client/tigerbeetle/src/lsm/k_way_merge_benchmark.zig +0 -166
- data/ext/tb_client/tigerbeetle/src/lsm/manifest.zig +0 -754
- data/ext/tb_client/tigerbeetle/src/lsm/manifest_level.zig +0 -1294
- data/ext/tb_client/tigerbeetle/src/lsm/manifest_level_fuzz.zig +0 -510
- data/ext/tb_client/tigerbeetle/src/lsm/manifest_log.zig +0 -1241
- data/ext/tb_client/tigerbeetle/src/lsm/manifest_log_fuzz.zig +0 -628
- data/ext/tb_client/tigerbeetle/src/lsm/node_pool.zig +0 -247
- data/ext/tb_client/tigerbeetle/src/lsm/scan_buffer.zig +0 -116
- data/ext/tb_client/tigerbeetle/src/lsm/scan_builder.zig +0 -543
- data/ext/tb_client/tigerbeetle/src/lsm/scan_fuzz.zig +0 -938
- data/ext/tb_client/tigerbeetle/src/lsm/scan_lookup.zig +0 -293
- data/ext/tb_client/tigerbeetle/src/lsm/scan_merge.zig +0 -359
- data/ext/tb_client/tigerbeetle/src/lsm/scan_range.zig +0 -99
- data/ext/tb_client/tigerbeetle/src/lsm/scan_state.zig +0 -17
- data/ext/tb_client/tigerbeetle/src/lsm/scan_tree.zig +0 -962
- data/ext/tb_client/tigerbeetle/src/lsm/schema.zig +0 -617
- data/ext/tb_client/tigerbeetle/src/lsm/scratch_memory.zig +0 -84
- data/ext/tb_client/tigerbeetle/src/lsm/segmented_array.zig +0 -1500
- data/ext/tb_client/tigerbeetle/src/lsm/segmented_array_benchmark.zig +0 -149
- data/ext/tb_client/tigerbeetle/src/lsm/segmented_array_fuzz.zig +0 -7
- data/ext/tb_client/tigerbeetle/src/lsm/set_associative_cache.zig +0 -865
- data/ext/tb_client/tigerbeetle/src/lsm/table.zig +0 -607
- data/ext/tb_client/tigerbeetle/src/lsm/table_memory.zig +0 -843
- data/ext/tb_client/tigerbeetle/src/lsm/table_value_iterator.zig +0 -90
- data/ext/tb_client/tigerbeetle/src/lsm/timestamp_range.zig +0 -40
- data/ext/tb_client/tigerbeetle/src/lsm/tree.zig +0 -629
- data/ext/tb_client/tigerbeetle/src/lsm/tree_fuzz.zig +0 -933
- data/ext/tb_client/tigerbeetle/src/lsm/zig_zag_merge.zig +0 -534
- data/ext/tb_client/tigerbeetle/src/message_buffer.zig +0 -469
- data/ext/tb_client/tigerbeetle/src/message_bus.zig +0 -1219
- data/ext/tb_client/tigerbeetle/src/message_bus_fuzz.zig +0 -936
- data/ext/tb_client/tigerbeetle/src/message_pool.zig +0 -343
- data/ext/tb_client/tigerbeetle/src/multiversion.zig +0 -2195
- data/ext/tb_client/tigerbeetle/src/queue.zig +0 -390
- data/ext/tb_client/tigerbeetle/src/repl/completion.zig +0 -201
- data/ext/tb_client/tigerbeetle/src/repl/parser.zig +0 -1356
- data/ext/tb_client/tigerbeetle/src/repl/terminal.zig +0 -496
- data/ext/tb_client/tigerbeetle/src/repl.zig +0 -1034
- data/ext/tb_client/tigerbeetle/src/scripts/amqp.zig +0 -973
- data/ext/tb_client/tigerbeetle/src/scripts/cfo.zig +0 -1866
- data/ext/tb_client/tigerbeetle/src/scripts/changelog.zig +0 -304
- data/ext/tb_client/tigerbeetle/src/scripts/ci.zig +0 -227
- data/ext/tb_client/tigerbeetle/src/scripts/client_readmes.zig +0 -658
- data/ext/tb_client/tigerbeetle/src/scripts/devhub.zig +0 -466
- data/ext/tb_client/tigerbeetle/src/scripts/release.zig +0 -1058
- data/ext/tb_client/tigerbeetle/src/scripts.zig +0 -105
- data/ext/tb_client/tigerbeetle/src/shell.zig +0 -1195
- data/ext/tb_client/tigerbeetle/src/stack.zig +0 -260
- data/ext/tb_client/tigerbeetle/src/state_machine/auditor.zig +0 -911
- data/ext/tb_client/tigerbeetle/src/state_machine/workload.zig +0 -2079
- data/ext/tb_client/tigerbeetle/src/state_machine.zig +0 -4872
- data/ext/tb_client/tigerbeetle/src/state_machine_fuzz.zig +0 -288
- data/ext/tb_client/tigerbeetle/src/state_machine_tests.zig +0 -3128
- data/ext/tb_client/tigerbeetle/src/static_allocator.zig +0 -82
- data/ext/tb_client/tigerbeetle/src/stdx/bit_set.zig +0 -157
- data/ext/tb_client/tigerbeetle/src/stdx/bounded_array.zig +0 -292
- data/ext/tb_client/tigerbeetle/src/stdx/debug.zig +0 -65
- data/ext/tb_client/tigerbeetle/src/stdx/flags.zig +0 -1414
- data/ext/tb_client/tigerbeetle/src/stdx/huge_page_allocator.zig +0 -115
- data/ext/tb_client/tigerbeetle/src/stdx/mlock.zig +0 -92
- data/ext/tb_client/tigerbeetle/src/stdx/prng.zig +0 -677
- data/ext/tb_client/tigerbeetle/src/stdx/radix.zig +0 -336
- data/ext/tb_client/tigerbeetle/src/stdx/ring_buffer.zig +0 -511
- data/ext/tb_client/tigerbeetle/src/stdx/sort_test.zig +0 -112
- data/ext/tb_client/tigerbeetle/src/stdx/stdx.zig +0 -1163
- data/ext/tb_client/tigerbeetle/src/stdx/testing/low_level_hash_vectors.zig +0 -142
- data/ext/tb_client/tigerbeetle/src/stdx/testing/snaptest.zig +0 -361
- data/ext/tb_client/tigerbeetle/src/stdx/time_units.zig +0 -275
- data/ext/tb_client/tigerbeetle/src/stdx/unshare.zig +0 -295
- data/ext/tb_client/tigerbeetle/src/stdx/vendored/aegis.zig +0 -436
- data/ext/tb_client/tigerbeetle/src/stdx/windows.zig +0 -48
- data/ext/tb_client/tigerbeetle/src/stdx/zipfian.zig +0 -402
- data/ext/tb_client/tigerbeetle/src/storage.zig +0 -489
- data/ext/tb_client/tigerbeetle/src/storage_fuzz.zig +0 -180
- data/ext/tb_client/tigerbeetle/src/testing/bench.zig +0 -146
- data/ext/tb_client/tigerbeetle/src/testing/cluster/grid_checker.zig +0 -53
- data/ext/tb_client/tigerbeetle/src/testing/cluster/journal_checker.zig +0 -61
- data/ext/tb_client/tigerbeetle/src/testing/cluster/manifest_checker.zig +0 -76
- data/ext/tb_client/tigerbeetle/src/testing/cluster/message_bus.zig +0 -110
- data/ext/tb_client/tigerbeetle/src/testing/cluster/network.zig +0 -412
- data/ext/tb_client/tigerbeetle/src/testing/cluster/state_checker.zig +0 -331
- data/ext/tb_client/tigerbeetle/src/testing/cluster/storage_checker.zig +0 -458
- data/ext/tb_client/tigerbeetle/src/testing/cluster.zig +0 -1198
- data/ext/tb_client/tigerbeetle/src/testing/exhaustigen.zig +0 -128
- data/ext/tb_client/tigerbeetle/src/testing/fixtures.zig +0 -181
- data/ext/tb_client/tigerbeetle/src/testing/fuzz.zig +0 -144
- data/ext/tb_client/tigerbeetle/src/testing/id.zig +0 -97
- data/ext/tb_client/tigerbeetle/src/testing/io.zig +0 -317
- data/ext/tb_client/tigerbeetle/src/testing/marks.zig +0 -126
- data/ext/tb_client/tigerbeetle/src/testing/packet_simulator.zig +0 -533
- data/ext/tb_client/tigerbeetle/src/testing/reply_sequence.zig +0 -154
- data/ext/tb_client/tigerbeetle/src/testing/state_machine.zig +0 -389
- data/ext/tb_client/tigerbeetle/src/testing/storage.zig +0 -1247
- data/ext/tb_client/tigerbeetle/src/testing/table.zig +0 -249
- data/ext/tb_client/tigerbeetle/src/testing/time.zig +0 -98
- data/ext/tb_client/tigerbeetle/src/testing/tmp_tigerbeetle.zig +0 -212
- data/ext/tb_client/tigerbeetle/src/testing/vortex/constants.zig +0 -26
- data/ext/tb_client/tigerbeetle/src/testing/vortex/faulty_network.zig +0 -579
- data/ext/tb_client/tigerbeetle/src/testing/vortex/java_driver/ci.zig +0 -39
- data/ext/tb_client/tigerbeetle/src/testing/vortex/logged_process.zig +0 -214
- data/ext/tb_client/tigerbeetle/src/testing/vortex/rust_driver/ci.zig +0 -34
- data/ext/tb_client/tigerbeetle/src/testing/vortex/supervisor.zig +0 -785
- data/ext/tb_client/tigerbeetle/src/testing/vortex/workload.zig +0 -543
- data/ext/tb_client/tigerbeetle/src/testing/vortex/zig_driver.zig +0 -181
- data/ext/tb_client/tigerbeetle/src/tidy.zig +0 -1449
- data/ext/tb_client/tigerbeetle/src/tigerbeetle/benchmark_driver.zig +0 -227
- data/ext/tb_client/tigerbeetle/src/tigerbeetle/benchmark_load.zig +0 -1069
- data/ext/tb_client/tigerbeetle/src/tigerbeetle/cli.zig +0 -1422
- data/ext/tb_client/tigerbeetle/src/tigerbeetle/inspect.zig +0 -1658
- data/ext/tb_client/tigerbeetle/src/tigerbeetle/inspect_integrity.zig +0 -518
- data/ext/tb_client/tigerbeetle/src/tigerbeetle/libtb_client.zig +0 -36
- data/ext/tb_client/tigerbeetle/src/tigerbeetle/main.zig +0 -646
- data/ext/tb_client/tigerbeetle/src/tigerbeetle.zig +0 -958
- data/ext/tb_client/tigerbeetle/src/time.zig +0 -236
- data/ext/tb_client/tigerbeetle/src/trace/event.zig +0 -745
- data/ext/tb_client/tigerbeetle/src/trace/statsd.zig +0 -462
- data/ext/tb_client/tigerbeetle/src/trace.zig +0 -556
- data/ext/tb_client/tigerbeetle/src/unit_tests.zig +0 -321
- data/ext/tb_client/tigerbeetle/src/vopr.zig +0 -1785
- data/ext/tb_client/tigerbeetle/src/vortex.zig +0 -101
- data/ext/tb_client/tigerbeetle/src/vsr/checkpoint_trailer.zig +0 -473
- data/ext/tb_client/tigerbeetle/src/vsr/checksum.zig +0 -208
- data/ext/tb_client/tigerbeetle/src/vsr/checksum_benchmark.zig +0 -43
- data/ext/tb_client/tigerbeetle/src/vsr/client.zig +0 -768
- data/ext/tb_client/tigerbeetle/src/vsr/client_replies.zig +0 -532
- data/ext/tb_client/tigerbeetle/src/vsr/client_sessions.zig +0 -338
- data/ext/tb_client/tigerbeetle/src/vsr/clock.zig +0 -1019
- data/ext/tb_client/tigerbeetle/src/vsr/fault_detector.zig +0 -279
- data/ext/tb_client/tigerbeetle/src/vsr/free_set.zig +0 -1381
- data/ext/tb_client/tigerbeetle/src/vsr/free_set_fuzz.zig +0 -315
- data/ext/tb_client/tigerbeetle/src/vsr/grid.zig +0 -1460
- data/ext/tb_client/tigerbeetle/src/vsr/grid_blocks_missing.zig +0 -757
- data/ext/tb_client/tigerbeetle/src/vsr/grid_scrubber.zig +0 -797
- data/ext/tb_client/tigerbeetle/src/vsr/journal.zig +0 -2586
- data/ext/tb_client/tigerbeetle/src/vsr/marzullo.zig +0 -308
- data/ext/tb_client/tigerbeetle/src/vsr/message_header.zig +0 -1777
- data/ext/tb_client/tigerbeetle/src/vsr/multi_batch.zig +0 -715
- data/ext/tb_client/tigerbeetle/src/vsr/multi_batch_fuzz.zig +0 -185
- data/ext/tb_client/tigerbeetle/src/vsr/repair_budget.zig +0 -333
- data/ext/tb_client/tigerbeetle/src/vsr/replica.zig +0 -12356
- data/ext/tb_client/tigerbeetle/src/vsr/replica_format.zig +0 -416
- data/ext/tb_client/tigerbeetle/src/vsr/replica_reformat.zig +0 -165
- data/ext/tb_client/tigerbeetle/src/vsr/replica_test.zig +0 -2928
- data/ext/tb_client/tigerbeetle/src/vsr/routing.zig +0 -1075
- data/ext/tb_client/tigerbeetle/src/vsr/superblock.zig +0 -1603
- data/ext/tb_client/tigerbeetle/src/vsr/superblock_fuzz.zig +0 -484
- data/ext/tb_client/tigerbeetle/src/vsr/superblock_quorums.zig +0 -405
- data/ext/tb_client/tigerbeetle/src/vsr/superblock_quorums_fuzz.zig +0 -355
- data/ext/tb_client/tigerbeetle/src/vsr/sync.zig +0 -29
- data/ext/tb_client/tigerbeetle/src/vsr.zig +0 -1727
- data/lib/tb_client/shared_lib.rb +0 -66
- data/lib/tb_client.rb +0 -282
- data/lib/tigerbeetle/account.rb +0 -38
- data/lib/tigerbeetle/account_balance.rb +0 -23
- data/lib/tigerbeetle/account_filter.rb +0 -31
- data/lib/tigerbeetle/atomic_counter.rb +0 -14
- data/lib/tigerbeetle/client.rb +0 -214
- data/lib/tigerbeetle/converters/account.rb +0 -63
- data/lib/tigerbeetle/converters/account_balance.rb +0 -31
- data/lib/tigerbeetle/converters/account_filter.rb +0 -32
- data/lib/tigerbeetle/converters/base.rb +0 -35
- data/lib/tigerbeetle/converters/create_accounts_result.rb +0 -21
- data/lib/tigerbeetle/converters/create_transfers_result.rb +0 -21
- data/lib/tigerbeetle/converters/query_filter.rb +0 -33
- data/lib/tigerbeetle/converters/time.rb +0 -23
- data/lib/tigerbeetle/converters/transfer.rb +0 -64
- data/lib/tigerbeetle/converters/uint_128.rb +0 -24
- data/lib/tigerbeetle/converters.rb +0 -12
- data/lib/tigerbeetle/error.rb +0 -4
- data/lib/tigerbeetle/id.rb +0 -30
- data/lib/tigerbeetle/platforms.rb +0 -9
- data/lib/tigerbeetle/query_filter.rb +0 -31
- data/lib/tigerbeetle/request.rb +0 -7
- data/lib/tigerbeetle/transfer.rb +0 -40
- data/lib/tigerbeetle/version.rb +0 -4
- data/lib/tigerbeetle.rb +0 -13
- data/tigerbeetle.gemspec +0 -60
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
const std = @import("std");
|
|
2
|
-
const builtin = @import("builtin");
|
|
3
|
-
const stdx = @import("stdx.zig");
|
|
4
|
-
const Allocator = std.mem.Allocator;
|
|
5
|
-
|
|
6
|
-
const log = std.log.scoped(.allocator);
|
|
7
|
-
|
|
8
|
-
const page_allocator_vtable = std.heap.page_allocator.vtable;
|
|
9
|
-
|
|
10
|
-
/// Like `std.heap.page_allocator`, but on Linux applies `MADV_HUGEPAGE` to
|
|
11
|
-
/// allocated regions so that the kernel may back them with 2 MiB transparent
|
|
12
|
-
/// huge pages, reducing TLB pressure for large allocations.
|
|
13
|
-
///
|
|
14
|
-
/// Only `alloc` is intercepted. `resize` and `remap` inherit the VMA flags
|
|
15
|
-
/// (including `VM_HUGEPAGE`) set on the original mapping, so they need no
|
|
16
|
-
/// additional `madvise` call.
|
|
17
|
-
///
|
|
18
|
-
/// On non-Linux targets this is identical to `std.heap.page_allocator`.
|
|
19
|
-
pub const huge_page_allocator: Allocator = .{
|
|
20
|
-
.ptr = std.heap.page_allocator.ptr,
|
|
21
|
-
.vtable = if (builtin.target.os.tag == .linux) &vtable else page_allocator_vtable,
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const vtable: Allocator.VTable = .{
|
|
25
|
-
.alloc = alloc,
|
|
26
|
-
.resize = page_allocator_vtable.resize,
|
|
27
|
-
.remap = page_allocator_vtable.remap,
|
|
28
|
-
.free = page_allocator_vtable.free,
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
fn alloc(context: *anyopaque, n: usize, alignment: std.mem.Alignment, ra: usize) ?[*]u8 {
|
|
32
|
-
const ptr = page_allocator_vtable.alloc(context, n, alignment, ra) orelse return null;
|
|
33
|
-
// This is just a hint, so if it fails we can safely ignore it.
|
|
34
|
-
std.posix.madvise(@alignCast(ptr), n, std.posix.MADV.HUGEPAGE) catch {
|
|
35
|
-
log.warn("Transparent Huge Pages (THP) are disabled.", .{});
|
|
36
|
-
};
|
|
37
|
-
return ptr;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const testing = std.testing;
|
|
41
|
-
const assert = std.debug.assert;
|
|
42
|
-
|
|
43
|
-
/// Checks /proc/self/smaps for the "hg" VmFlag on the mapping containing `ptr`.
|
|
44
|
-
fn verify_address_is_huge_page(ptr: [*]const u8) !bool {
|
|
45
|
-
assert(builtin.target.os.tag == .linux);
|
|
46
|
-
const addr = @intFromPtr(ptr);
|
|
47
|
-
|
|
48
|
-
var file = try std.fs.openFileAbsolute("/proc/self/smaps", .{});
|
|
49
|
-
defer file.close();
|
|
50
|
-
|
|
51
|
-
const content = try file.readToEndAlloc(testing.allocator, 10 * 1024 * 1024);
|
|
52
|
-
defer testing.allocator.free(content);
|
|
53
|
-
|
|
54
|
-
var lines = std.mem.splitScalar(u8, content, '\n');
|
|
55
|
-
|
|
56
|
-
// Find the mapping header that contains our address.
|
|
57
|
-
while (lines.next()) |line| {
|
|
58
|
-
if (parse_mapping_range(line)) |range| {
|
|
59
|
-
if (addr >= range.min and addr < range.max) {
|
|
60
|
-
// Scan subsequent lines for VmFlags within this mapping.
|
|
61
|
-
while (lines.next()) |detail| {
|
|
62
|
-
if (stdx.cut_prefix(detail, "VmFlags:")) |rest| {
|
|
63
|
-
return stdx.cut(rest, "hg") != null;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
fn parse_mapping_range(line: []const u8) ?struct { min: u64, max: u64 } {
|
|
73
|
-
const addr_range, _ = stdx.cut(line, " ") orelse return null;
|
|
74
|
-
const addr_hex_min, const addr_hex_max = stdx.cut(addr_range, "-") orelse return null;
|
|
75
|
-
const addr_min = std.fmt.parseUnsigned(u64, addr_hex_min, 16) catch return null;
|
|
76
|
-
const addr_max = std.fmt.parseUnsigned(u64, addr_hex_max, 16) catch return null;
|
|
77
|
-
return .{ .min = addr_min, .max = addr_max };
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
test "huge_page_allocator: basic alloc and free" {
|
|
81
|
-
const slice = try huge_page_allocator.alloc(u8, 4096);
|
|
82
|
-
defer huge_page_allocator.free(slice);
|
|
83
|
-
|
|
84
|
-
@memset(slice, 0xab);
|
|
85
|
-
try testing.expectEqual(@as(u8, 0xab), slice[0]);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
test "huge_page_allocator: large THP-eligible allocation" {
|
|
89
|
-
// 4 MiB — large enough for THP promotion on Linux.
|
|
90
|
-
const size = 4 * 1024 * 1024;
|
|
91
|
-
const slice = try huge_page_allocator.alloc(u8, size);
|
|
92
|
-
defer huge_page_allocator.free(slice);
|
|
93
|
-
|
|
94
|
-
@memset(slice, 0xcd);
|
|
95
|
-
try testing.expectEqual(@as(u8, 0xcd), slice[size - 1]);
|
|
96
|
-
|
|
97
|
-
if (builtin.target.os.tag == .linux) {
|
|
98
|
-
// Verify that MADV_HUGEPAGE was applied by checking VmFlags in /proc/self/smaps.
|
|
99
|
-
// The "hg" flag means the process requested hugepages via madvise — this is
|
|
100
|
-
// deterministic regardless of whether the kernel actually promoted the pages.
|
|
101
|
-
try testing.expect(try verify_address_is_huge_page(slice.ptr));
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
test "huge_page_allocator: as ArenaAllocator backing" {
|
|
106
|
-
var arena = std.heap.ArenaAllocator.init(huge_page_allocator);
|
|
107
|
-
defer arena.deinit();
|
|
108
|
-
|
|
109
|
-
const alloc1 = try arena.allocator().alloc(u8, 1024);
|
|
110
|
-
const alloc2 = try arena.allocator().alloc(u8, 2048);
|
|
111
|
-
@memset(alloc1, 1);
|
|
112
|
-
@memset(alloc2, 2);
|
|
113
|
-
try testing.expectEqual(@as(u8, 1), alloc1[0]);
|
|
114
|
-
try testing.expectEqual(@as(u8, 2), alloc2[0]);
|
|
115
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
const builtin = @import("builtin");
|
|
2
|
-
const std = @import("std");
|
|
3
|
-
const os = std.os;
|
|
4
|
-
|
|
5
|
-
const stdx = @import("stdx.zig");
|
|
6
|
-
|
|
7
|
-
const MiB = stdx.MiB;
|
|
8
|
-
|
|
9
|
-
const log = std.log.scoped(.mlock);
|
|
10
|
-
|
|
11
|
-
const MemoryLockError = error{memory_not_locked} || std.posix.UnexpectedError;
|
|
12
|
-
|
|
13
|
-
const mlockall_error = "Unable to lock pages in memory ({s})" ++
|
|
14
|
-
" - kernel swap would otherwise bypass TigerBeetle's storage fault tolerance. ";
|
|
15
|
-
|
|
16
|
-
/// Pin virtual memory pages allocated so far to physical pages in RAM, preventing the pages from
|
|
17
|
-
/// being swapped out and introducing storage error into memory, bypassing ECC RAM.
|
|
18
|
-
pub fn memory_lock_allocated(options: struct { allocated_size: usize }) MemoryLockError!void {
|
|
19
|
-
switch (builtin.os.tag) {
|
|
20
|
-
.linux => try memory_lock_allocated_linux(),
|
|
21
|
-
.macos => {
|
|
22
|
-
// macOS has mlock() but not mlockall(). mlock() requires an address range which
|
|
23
|
-
// would be difficult to gather for non-heap memory that is also faulted in,
|
|
24
|
-
// such as the stack, globals, etc.
|
|
25
|
-
},
|
|
26
|
-
.windows => try memory_lock_allocated_windows(options.allocated_size),
|
|
27
|
-
else => @compileError("unsupported platform"),
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
fn memory_lock_allocated_linux() MemoryLockError!void {
|
|
32
|
-
// https://github.com/torvalds/linux/blob/v6.12/include/uapi/asm-generic/mman.h#L18-L20
|
|
33
|
-
const MCL_CURRENT = 1; // Lock all currently mapped pages.
|
|
34
|
-
const MCL_ONFAULT = 4; // Lock all pages faulted in (i.e. stack space).
|
|
35
|
-
const result = os.linux.syscall1(.mlockall, MCL_CURRENT | MCL_ONFAULT);
|
|
36
|
-
switch (os.linux.E.init(result)) {
|
|
37
|
-
.SUCCESS => return,
|
|
38
|
-
.AGAIN => log.warn(mlockall_error, .{"some addresses could not be locked"}),
|
|
39
|
-
.NOMEM => log.warn(mlockall_error, .{"memory would exceed RLIMIT_MEMLOCK"}),
|
|
40
|
-
.PERM => log.warn(mlockall_error, .{
|
|
41
|
-
"insufficient privileges to lock memory",
|
|
42
|
-
}),
|
|
43
|
-
.INVAL => unreachable, // MCL_ONFAULT specified without MCL_CURRENT.
|
|
44
|
-
else => |err| return stdx.unexpected_errno("mlockall", err),
|
|
45
|
-
}
|
|
46
|
-
return error.memory_not_locked;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
fn memory_lock_allocated_windows(allocated_size: usize) MemoryLockError!void {
|
|
50
|
-
// Windows has VirtualLock which works similar to mlock with an address range.
|
|
51
|
-
// It would be difficult to gather the addresses of non-heap memory that is also
|
|
52
|
-
// faulted in, such as the stack, globals, etc. SetProcessWorkingSetSize can be
|
|
53
|
-
// used instead to lock all existing pages into memory to avoid swapping.
|
|
54
|
-
const process_handle = os.windows.kernel32.GetCurrentProcess();
|
|
55
|
-
var working_set_min: os.windows.SIZE_T = 0;
|
|
56
|
-
var working_set_max: os.windows.SIZE_T = 0;
|
|
57
|
-
|
|
58
|
-
if (stdx.windows.GetProcessWorkingSetSize(
|
|
59
|
-
process_handle,
|
|
60
|
-
&working_set_min,
|
|
61
|
-
&working_set_max,
|
|
62
|
-
) == os.windows.FALSE) {
|
|
63
|
-
working_set_min = allocated_size; // Count bytes allocated so far.
|
|
64
|
-
working_set_min += 64 * MiB; // 64mb buffer room for stack/globals.
|
|
65
|
-
working_set_max = working_set_min * 2; // Buffer room for new page faults.
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (stdx.windows.SetProcessWorkingSetSize(
|
|
69
|
-
process_handle,
|
|
70
|
-
working_set_min,
|
|
71
|
-
working_set_max,
|
|
72
|
-
) == os.windows.FALSE) {
|
|
73
|
-
// From std.os.windows.unexpectedError():
|
|
74
|
-
const format_flags = os.windows.FORMAT_MESSAGE_FROM_SYSTEM |
|
|
75
|
-
os.windows.FORMAT_MESSAGE_IGNORE_INSERTS;
|
|
76
|
-
|
|
77
|
-
// 614 is the length of the longest windows error description.
|
|
78
|
-
var buffer: [614:0]os.windows.WCHAR = undefined;
|
|
79
|
-
const buffer_size = os.windows.kernel32.FormatMessageW(
|
|
80
|
-
format_flags,
|
|
81
|
-
null,
|
|
82
|
-
os.windows.kernel32.GetLastError(),
|
|
83
|
-
os.windows.LANG.NEUTRAL | (os.windows.SUBLANG.DEFAULT << 10),
|
|
84
|
-
&buffer,
|
|
85
|
-
buffer.len,
|
|
86
|
-
null,
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
log.warn(mlockall_error, .{std.unicode.fmtUtf16Le(buffer[0..buffer_size])});
|
|
90
|
-
return error.memory_not_locked;
|
|
91
|
-
}
|
|
92
|
-
}
|