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
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
module TigerBeetle
|
|
2
|
+
# TigerBeetle client.
|
|
3
|
+
#
|
|
4
|
+
# A client can be shared by concurrent threads and fibers for request methods.
|
|
5
|
+
# Public request methods are synchronous and return after the request
|
|
6
|
+
# completes. When a fiber scheduler is active, waiting for a response yields
|
|
7
|
+
# to the scheduler.
|
|
8
|
+
#
|
|
9
|
+
# Prefer {.open} for lifecycle management so the client is closed once after
|
|
10
|
+
# concurrent work completes. Instantiate multiple clients when connecting to
|
|
11
|
+
# more than one TigerBeetle cluster.
|
|
12
|
+
class Client
|
|
13
|
+
Client::COMPLETION_DISPATCHER = CompletionDispatcher.new
|
|
14
|
+
private_constant :COMPLETION_DISPATCHER
|
|
15
|
+
|
|
16
|
+
# Opens a client for the duration of the block and closes it before
|
|
17
|
+
# returning.
|
|
18
|
+
#
|
|
19
|
+
# Yields the open client and returns the block return value.
|
|
20
|
+
def self.open(cluster_id:, replica_addresses:)
|
|
21
|
+
client = new(cluster_id: cluster_id, replica_addresses: replica_addresses)
|
|
22
|
+
yield client
|
|
23
|
+
ensure
|
|
24
|
+
client&.close
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Initializes a TigerBeetle client.
|
|
28
|
+
#
|
|
29
|
+
# @raise [TigerBeetle::InitError] if the native client cannot be
|
|
30
|
+
# initialized.
|
|
31
|
+
def initialize(cluster_id:, replica_addresses:)
|
|
32
|
+
@native = NativeClient.new(cluster_id, replica_addresses, COMPLETION_DISPATCHER.write_fileno)
|
|
33
|
+
@closed = false
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Closes the client. This method waits for all in-flight requests to finish.
|
|
37
|
+
#
|
|
38
|
+
# @raise [TigerBeetle::ClientClosedError] if the client is already closed.
|
|
39
|
+
def close
|
|
40
|
+
raise ClientClosedError, "client is already closed" if closed?
|
|
41
|
+
|
|
42
|
+
@closed = true
|
|
43
|
+
@native.close
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Returns whether the client has been closed.
|
|
47
|
+
def closed?
|
|
48
|
+
@closed
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Submits a batch of new accounts to be created.
|
|
52
|
+
#
|
|
53
|
+
# The returned array contains one {TigerBeetle::CreateAccountResult} for
|
|
54
|
+
# each submitted account.
|
|
55
|
+
#
|
|
56
|
+
# @raise [TigerBeetle::PacketError] if the entire request fails.
|
|
57
|
+
# @raise [TigerBeetle::ClientClosedError] if the client is closed.
|
|
58
|
+
def create_accounts(accounts) = native_submit(Operation::CREATE_ACCOUNTS, accounts)
|
|
59
|
+
|
|
60
|
+
# Submits a batch of new transfers to be created.
|
|
61
|
+
#
|
|
62
|
+
# The returned array contains one {TigerBeetle::CreateTransferResult} for
|
|
63
|
+
# each submitted transfer.
|
|
64
|
+
#
|
|
65
|
+
# @raise [TigerBeetle::PacketError] if the entire request fails.
|
|
66
|
+
# @raise [TigerBeetle::ClientClosedError] if the client is closed.
|
|
67
|
+
def create_transfers(transfers) = native_submit(Operation::CREATE_TRANSFERS, transfers)
|
|
68
|
+
|
|
69
|
+
# Looks up a batch of accounts.
|
|
70
|
+
#
|
|
71
|
+
# The returned array contains all accounts found. Accounts not found are
|
|
72
|
+
# omitted.
|
|
73
|
+
#
|
|
74
|
+
# @raise [TigerBeetle::PacketError] if the entire request fails.
|
|
75
|
+
# @raise [TigerBeetle::ClientClosedError] if the client is closed.
|
|
76
|
+
def lookup_accounts(ids) = native_submit(Operation::LOOKUP_ACCOUNTS, ids)
|
|
77
|
+
|
|
78
|
+
# Looks up a batch of transfers.
|
|
79
|
+
#
|
|
80
|
+
# The returned array contains all transfers found. Transfers not found are
|
|
81
|
+
# omitted.
|
|
82
|
+
#
|
|
83
|
+
# @raise [TigerBeetle::PacketError] if the entire request fails.
|
|
84
|
+
# @raise [TigerBeetle::ClientClosedError] if the client is closed.
|
|
85
|
+
def lookup_transfers(ids) = native_submit(Operation::LOOKUP_TRANSFERS, ids)
|
|
86
|
+
|
|
87
|
+
# Fetches transfers from a given account.
|
|
88
|
+
#
|
|
89
|
+
# Returns transfers that match the query parameters.
|
|
90
|
+
# @raise [TigerBeetle::PacketError] if the entire request fails.
|
|
91
|
+
# @raise [TigerBeetle::ClientClosedError] if the client is closed.
|
|
92
|
+
def get_account_transfers(filter) = native_submit(Operation::GET_ACCOUNT_TRANSFERS, [filter])
|
|
93
|
+
|
|
94
|
+
# Fetches balance history from a given account.
|
|
95
|
+
#
|
|
96
|
+
# Returns balances that match the query parameters.
|
|
97
|
+
# @raise [TigerBeetle::PacketError] if the entire request fails.
|
|
98
|
+
# @raise [TigerBeetle::ClientClosedError] if the client is closed.
|
|
99
|
+
def get_account_balances(filter) = native_submit(Operation::GET_ACCOUNT_BALANCES, [filter])
|
|
100
|
+
|
|
101
|
+
# Queries accounts.
|
|
102
|
+
#
|
|
103
|
+
# Returns accounts that match the query parameters.
|
|
104
|
+
# @raise [TigerBeetle::PacketError] if the entire request fails.
|
|
105
|
+
# @raise [TigerBeetle::ClientClosedError] if the client is closed.
|
|
106
|
+
def query_accounts(filter) = native_submit(Operation::QUERY_ACCOUNTS, [filter])
|
|
107
|
+
|
|
108
|
+
# Queries transfers.
|
|
109
|
+
#
|
|
110
|
+
# Returns transfers that match the query parameters.
|
|
111
|
+
# @raise [TigerBeetle::PacketError] if the entire request fails.
|
|
112
|
+
# @raise [TigerBeetle::ClientClosedError] if the client is closed.
|
|
113
|
+
def query_transfers(filter) = native_submit(Operation::QUERY_TRANSFERS, [filter])
|
|
114
|
+
|
|
115
|
+
private
|
|
116
|
+
|
|
117
|
+
def native_submit(operation, payload)
|
|
118
|
+
raise ClientClosedError if closed?
|
|
119
|
+
|
|
120
|
+
req = COMPLETION_DISPATCHER.submit_and_wait_for(@native, operation, payload)
|
|
121
|
+
|
|
122
|
+
status, result = req.result
|
|
123
|
+
raise ClientClosedError if status == PACKET_CLIENT_SHUTDOWN
|
|
124
|
+
raise PacketError, status unless status == PACKET_OK
|
|
125
|
+
|
|
126
|
+
result
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
module TigerBeetle
|
|
2
|
+
class CompletionDispatcher
|
|
3
|
+
COMPLETION_ID_BYTES = 8
|
|
4
|
+
|
|
5
|
+
class Completion
|
|
6
|
+
def initialize
|
|
7
|
+
@mutex = Mutex.new
|
|
8
|
+
@condition = ConditionVariable.new
|
|
9
|
+
@done = false
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def done?
|
|
13
|
+
@done
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def wait
|
|
17
|
+
@mutex.synchronize { @condition.wait(@mutex) until done? }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def complete
|
|
21
|
+
@mutex.synchronize do
|
|
22
|
+
@done = true
|
|
23
|
+
@condition.broadcast
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def initialize
|
|
29
|
+
@read_io, @write_io = IO.pipe
|
|
30
|
+
@pending = {}
|
|
31
|
+
@completed_ids = {}
|
|
32
|
+
@cancelled_ids = {}
|
|
33
|
+
@mutex = Mutex.new
|
|
34
|
+
@thread = Thread.new { dispatch_completions }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def write_fileno
|
|
38
|
+
@write_io.fileno
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def completion_for(request_id)
|
|
42
|
+
completion = Completion.new
|
|
43
|
+
completion.complete if register(request_id, completion)
|
|
44
|
+
completion
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def submit_and_wait_for(native, operation, payload)
|
|
48
|
+
request = native.submit(operation, payload)
|
|
49
|
+
completion = completion_for(request.id)
|
|
50
|
+
completion.wait
|
|
51
|
+
request
|
|
52
|
+
ensure
|
|
53
|
+
unregister(request.id, completion) if request
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def unregister(request_id, completion)
|
|
57
|
+
@mutex.synchronize do
|
|
58
|
+
@pending.delete(request_id)
|
|
59
|
+
@completed_ids.delete(request_id)
|
|
60
|
+
@cancelled_ids[request_id] = true unless completion&.done?
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
def register(request_id, completion)
|
|
67
|
+
@mutex.synchronize do
|
|
68
|
+
if @completed_ids.delete(request_id)
|
|
69
|
+
true
|
|
70
|
+
else
|
|
71
|
+
@pending[request_id] = completion
|
|
72
|
+
false
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def dispatch_completions
|
|
78
|
+
loop do
|
|
79
|
+
request_id = read_completion_id
|
|
80
|
+
completion = @mutex.synchronize do
|
|
81
|
+
completion = @pending[request_id]
|
|
82
|
+
if completion
|
|
83
|
+
completion
|
|
84
|
+
elsif @cancelled_ids.delete(request_id)
|
|
85
|
+
nil
|
|
86
|
+
else
|
|
87
|
+
@completed_ids[request_id] = true
|
|
88
|
+
nil
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
completion&.complete
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
rescue IOError, ClientClosedError
|
|
96
|
+
nil
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def read_completion_id
|
|
100
|
+
bytes = @read_io.read(COMPLETION_ID_BYTES)
|
|
101
|
+
raise ClientClosedError unless bytes
|
|
102
|
+
|
|
103
|
+
bytes.unpack1("Q")
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
private_constant :CompletionDispatcher
|
|
108
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require "securerandom"
|
|
2
|
+
|
|
3
|
+
module TigerBeetle
|
|
4
|
+
class ID
|
|
5
|
+
RANDOM_MAX = 2 ** 80
|
|
6
|
+
TIMESTAMP_MAX = 2 ** 48
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
@last_ms = Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond)
|
|
10
|
+
@random = next_random
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def generate
|
|
14
|
+
ms = Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond)
|
|
15
|
+
if ms <= @last_ms
|
|
16
|
+
ms = @last_ms
|
|
17
|
+
else
|
|
18
|
+
@last_ms = ms
|
|
19
|
+
@random = next_random
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
@random += 1
|
|
23
|
+
if @random >= RANDOM_MAX
|
|
24
|
+
@last_ms += 1
|
|
25
|
+
raise "Timestamp bits overflow on monotonic increment" if @last_ms >= TIMESTAMP_MAX
|
|
26
|
+
@random = 0
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
(@last_ms << 80) | @random
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def next_random
|
|
35
|
+
# See: https://docs.ruby-lang.org/en/4.0/language/packed_data_rdoc.html#label-For+Integers
|
|
36
|
+
lo, hi = SecureRandom.bytes(10).unpack("Q<S<")
|
|
37
|
+
lo | (hi << 64)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
data/src/tigerbeetle.rb
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require_relative "tigerbeetle/version"
|
|
2
|
+
require_relative "tigerbeetle/bindings"
|
|
3
|
+
require_relative "tigerbeetle/id"
|
|
4
|
+
require_relative "tigerbeetle/completion_dispatcher"
|
|
5
|
+
require_relative "tigerbeetle/client"
|
|
6
|
+
|
|
7
|
+
native_extension = "tigerbeetle/tigerbeetle"
|
|
8
|
+
|
|
9
|
+
# Since we ship a fat binary gem, enable the bundled DLL path before loading the extension.
|
|
10
|
+
if Gem.win_platform?
|
|
11
|
+
dll_path = File.expand_path("ext/tigerbeetle/lib/x86_64-windows", __dir__)
|
|
12
|
+
|
|
13
|
+
begin
|
|
14
|
+
require "ruby_installer/runtime"
|
|
15
|
+
RubyInstaller::Runtime.add_dll_directory(dll_path) do
|
|
16
|
+
require native_extension
|
|
17
|
+
end
|
|
18
|
+
rescue LoadError
|
|
19
|
+
old_path = ENV["PATH"]
|
|
20
|
+
ENV["PATH"] = "#{dll_path};#{old_path}"
|
|
21
|
+
require native_extension
|
|
22
|
+
ensure
|
|
23
|
+
ENV["PATH"] = old_path if defined?(old_path)
|
|
24
|
+
end
|
|
25
|
+
else
|
|
26
|
+
require native_extension
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
module TigerBeetle
|
|
30
|
+
private_constant :NativeClient
|
|
31
|
+
private_constant :Request
|
|
32
|
+
|
|
33
|
+
@id_generator = ID.new
|
|
34
|
+
|
|
35
|
+
# Generates a 128-bit, time-based, monotonically increasing ID.
|
|
36
|
+
def self.id
|
|
37
|
+
@id_generator.generate
|
|
38
|
+
end
|
|
39
|
+
end
|