tigerbeetle 0.0.40 → 0.17.9
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 +672 -80
- data/docs/migration.md +201 -0
- data/sig/tigerbeetle.rbs +372 -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 +677 -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 +355 -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
|
@@ -69,8 +69,8 @@ typedef struct tb_transfer_t {
|
|
|
69
69
|
uint64_t timestamp;
|
|
70
70
|
} tb_transfer_t;
|
|
71
71
|
|
|
72
|
-
typedef enum
|
|
73
|
-
|
|
72
|
+
typedef enum TB_CREATE_ACCOUNT_STATUS {
|
|
73
|
+
TB_CREATE_ACCOUNT_CREATED = 0xFFFFFFFF,
|
|
74
74
|
TB_CREATE_ACCOUNT_LINKED_EVENT_FAILED = 1,
|
|
75
75
|
TB_CREATE_ACCOUNT_LINKED_EVENT_CHAIN_OPEN = 2,
|
|
76
76
|
TB_CREATE_ACCOUNT_IMPORTED_EVENT_EXPECTED = 22,
|
|
@@ -97,10 +97,10 @@ typedef enum TB_CREATE_ACCOUNT_RESULT {
|
|
|
97
97
|
TB_CREATE_ACCOUNT_LEDGER_MUST_NOT_BE_ZERO = 13,
|
|
98
98
|
TB_CREATE_ACCOUNT_CODE_MUST_NOT_BE_ZERO = 14,
|
|
99
99
|
TB_CREATE_ACCOUNT_IMPORTED_EVENT_TIMESTAMP_MUST_NOT_REGRESS = 26,
|
|
100
|
-
}
|
|
100
|
+
} TB_CREATE_ACCOUNT_STATUS;
|
|
101
101
|
|
|
102
|
-
typedef enum
|
|
103
|
-
|
|
102
|
+
typedef enum TB_CREATE_TRANSFER_STATUS {
|
|
103
|
+
TB_CREATE_TRANSFER_CREATED = 0xFFFFFFFF,
|
|
104
104
|
TB_CREATE_TRANSFER_LINKED_EVENT_FAILED = 1,
|
|
105
105
|
TB_CREATE_TRANSFER_LINKED_EVENT_CHAIN_OPEN = 2,
|
|
106
106
|
TB_CREATE_TRANSFER_IMPORTED_EVENT_EXPECTED = 56,
|
|
@@ -168,17 +168,19 @@ typedef enum TB_CREATE_TRANSFER_RESULT {
|
|
|
168
168
|
TB_CREATE_TRANSFER_OVERFLOWS_TIMEOUT = 53,
|
|
169
169
|
TB_CREATE_TRANSFER_EXCEEDS_CREDITS = 54,
|
|
170
170
|
TB_CREATE_TRANSFER_EXCEEDS_DEBITS = 55,
|
|
171
|
-
}
|
|
171
|
+
} TB_CREATE_TRANSFER_STATUS;
|
|
172
172
|
|
|
173
|
-
typedef struct
|
|
174
|
-
|
|
175
|
-
uint32_t
|
|
176
|
-
|
|
173
|
+
typedef struct tb_create_account_result_t {
|
|
174
|
+
uint64_t timestamp;
|
|
175
|
+
uint32_t status;
|
|
176
|
+
uint32_t reserved;
|
|
177
|
+
} tb_create_account_result_t;
|
|
177
178
|
|
|
178
|
-
typedef struct
|
|
179
|
-
|
|
180
|
-
uint32_t
|
|
181
|
-
|
|
179
|
+
typedef struct tb_create_transfer_result_t {
|
|
180
|
+
uint64_t timestamp;
|
|
181
|
+
uint32_t status;
|
|
182
|
+
uint32_t reserved;
|
|
183
|
+
} tb_create_transfer_result_t;
|
|
182
184
|
|
|
183
185
|
typedef struct tb_account_filter_t {
|
|
184
186
|
tb_uint128_t account_id;
|
|
@@ -248,14 +250,14 @@ typedef struct tb_packet_t {
|
|
|
248
250
|
typedef enum TB_OPERATION {
|
|
249
251
|
TB_OPERATION_PULSE = 128,
|
|
250
252
|
TB_OPERATION_GET_CHANGE_EVENTS = 137,
|
|
251
|
-
TB_OPERATION_CREATE_ACCOUNTS = 138,
|
|
252
|
-
TB_OPERATION_CREATE_TRANSFERS = 139,
|
|
253
253
|
TB_OPERATION_LOOKUP_ACCOUNTS = 140,
|
|
254
254
|
TB_OPERATION_LOOKUP_TRANSFERS = 141,
|
|
255
255
|
TB_OPERATION_GET_ACCOUNT_TRANSFERS = 142,
|
|
256
256
|
TB_OPERATION_GET_ACCOUNT_BALANCES = 143,
|
|
257
257
|
TB_OPERATION_QUERY_ACCOUNTS = 144,
|
|
258
258
|
TB_OPERATION_QUERY_TRANSFERS = 145,
|
|
259
|
+
TB_OPERATION_CREATE_ACCOUNTS = 146,
|
|
260
|
+
TB_OPERATION_CREATE_TRANSFERS = 147,
|
|
259
261
|
} TB_OPERATION;
|
|
260
262
|
|
|
261
263
|
typedef enum TB_PACKET_STATUS {
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
// Ruby doesn't guarantee ABI stability, so we must use ruby.h present on the user's machine.
|
|
2
|
+
// We don't want to run a Zig compiler there though, so we have to implement this thin wrapper in C.
|
|
3
|
+
#include "rb_tb_gen.h"
|
|
4
|
+
#include "ruby.h"
|
|
5
|
+
#include "ruby/thread.h"
|
|
6
|
+
#include "tb_client.h"
|
|
7
|
+
#include <stdatomic.h>
|
|
8
|
+
#include <stdbool.h>
|
|
9
|
+
#include <stdint.h>
|
|
10
|
+
#include <stdio.h>
|
|
11
|
+
#include <stdlib.h>
|
|
12
|
+
#include <string.h>
|
|
13
|
+
#include <unistd.h>
|
|
14
|
+
|
|
15
|
+
typedef enum {
|
|
16
|
+
REQ_PENDING = 0,
|
|
17
|
+
REQ_DONE = 1,
|
|
18
|
+
REQ_ABANDONED = 2,
|
|
19
|
+
} rb_tb_request_state_t;
|
|
20
|
+
|
|
21
|
+
typedef struct rb_tb_request {
|
|
22
|
+
// Set at init, read by callback.
|
|
23
|
+
TB_OPERATION operation;
|
|
24
|
+
uint8_t *send_buf;
|
|
25
|
+
tb_packet_t packet;
|
|
26
|
+
// Shared between Ruby thread and callback.
|
|
27
|
+
_Atomic rb_tb_request_state_t state;
|
|
28
|
+
// Written by callback, read by Ruby thread.
|
|
29
|
+
uint8_t status;
|
|
30
|
+
uint8_t *result;
|
|
31
|
+
uint32_t result_size;
|
|
32
|
+
} rb_tb_request_t;
|
|
33
|
+
|
|
34
|
+
static VALUE rb_mTigerBeetle;
|
|
35
|
+
static VALUE rb_cRequest;
|
|
36
|
+
static VALUE rb_eInitError;
|
|
37
|
+
static VALUE rb_eClientClosedError;
|
|
38
|
+
|
|
39
|
+
static void rb_tb_init_native_client(VALUE mTigerBeetle);
|
|
40
|
+
|
|
41
|
+
void Init_tigerbeetle(void) {
|
|
42
|
+
rb_mTigerBeetle = rb_define_module("TigerBeetle");
|
|
43
|
+
|
|
44
|
+
rb_eInitError = rb_define_class_under(rb_mTigerBeetle, "InitError", rb_eStandardError);
|
|
45
|
+
rb_eClientClosedError =
|
|
46
|
+
rb_define_class_under(rb_mTigerBeetle, "ClientClosedError", rb_eStandardError);
|
|
47
|
+
rb_define_class_under(rb_mTigerBeetle, "PacketError", rb_eStandardError);
|
|
48
|
+
|
|
49
|
+
rb_tb_init_native_client(rb_mTigerBeetle);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static void rb_tb_request_free(void *ptr) {
|
|
53
|
+
rb_tb_request_t *req = (rb_tb_request_t *)ptr;
|
|
54
|
+
rb_tb_request_state_t expected = REQ_PENDING;
|
|
55
|
+
if (atomic_compare_exchange_strong(&req->state, &expected, REQ_ABANDONED)) {
|
|
56
|
+
// Callback hasn't fired yet. It will free req once it does.
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Callback already fired (state == REQ_DONE), we own cleanup.
|
|
60
|
+
tb_assert(expected == REQ_DONE);
|
|
61
|
+
free(req->result);
|
|
62
|
+
free(req);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
static size_t rb_tb_request_size(const void *ptr) {
|
|
66
|
+
(void)ptr;
|
|
67
|
+
return sizeof(rb_tb_request_t);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
static const rb_data_type_t rb_tb_request_type = {
|
|
71
|
+
.wrap_struct_name = "TigerBeetle::Request",
|
|
72
|
+
.function =
|
|
73
|
+
{
|
|
74
|
+
.dmark = NULL,
|
|
75
|
+
.dfree = rb_tb_request_free,
|
|
76
|
+
.dsize = rb_tb_request_size,
|
|
77
|
+
},
|
|
78
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// Request is only ever created from C via TypedData_Wrap_Struct.
|
|
82
|
+
static VALUE rb_tb_request_alloc(VALUE klass) {
|
|
83
|
+
(void)klass;
|
|
84
|
+
rb_raise(rb_eTypeError, "TigerBeetle::Request cannot be instantiated directly");
|
|
85
|
+
return Qnil; // unreachable
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
static VALUE rb_tb_request_result(VALUE self) {
|
|
89
|
+
rb_tb_request_t *req;
|
|
90
|
+
TypedData_Get_Struct(self, rb_tb_request_t, &rb_tb_request_type, req);
|
|
91
|
+
|
|
92
|
+
VALUE result = Qnil;
|
|
93
|
+
if (req->status == TB_PACKET_OK) {
|
|
94
|
+
if (req->result_size == 0) {
|
|
95
|
+
result = rb_ary_new();
|
|
96
|
+
} else {
|
|
97
|
+
if (!req->result) {
|
|
98
|
+
rb_raise(rb_eNoMemError, "failed to allocate result buffer");
|
|
99
|
+
}
|
|
100
|
+
result = rb_tb_deserialize(req->operation, req->result, req->result_size);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return rb_ary_new_from_args(2, RB_UINT2NUM(req->status), result);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
static void rb_tb_write_completion(int fd, rb_tb_request_t *req) {
|
|
108
|
+
uint64_t request_id = (uint64_t)(uintptr_t)req;
|
|
109
|
+
ssize_t written = write(fd, &request_id, sizeof(request_id));
|
|
110
|
+
tb_assert(written == sizeof(request_id));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static void rb_tb_on_completion(
|
|
114
|
+
uintptr_t completion_ctx,
|
|
115
|
+
tb_packet_t *packet,
|
|
116
|
+
uint64_t timestamp,
|
|
117
|
+
const uint8_t *result,
|
|
118
|
+
uint32_t result_size
|
|
119
|
+
) {
|
|
120
|
+
(void)timestamp;
|
|
121
|
+
rb_tb_request_t *req = (rb_tb_request_t *)packet->user_data;
|
|
122
|
+
|
|
123
|
+
free(req->send_buf);
|
|
124
|
+
req->send_buf = NULL;
|
|
125
|
+
req->status = packet->status;
|
|
126
|
+
|
|
127
|
+
if (packet->status == TB_PACKET_OK) {
|
|
128
|
+
req->result_size = result_size;
|
|
129
|
+
tb_assert(result != NULL);
|
|
130
|
+
|
|
131
|
+
if (result_size > 0) {
|
|
132
|
+
req->result = malloc(result_size);
|
|
133
|
+
if (req->result) {
|
|
134
|
+
memcpy(req->result, result, result_size);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
rb_tb_request_state_t expected = REQ_PENDING;
|
|
140
|
+
if (!atomic_compare_exchange_strong(&req->state, &expected, REQ_DONE)) {
|
|
141
|
+
// dfree already ran (state == REQ_ABANDONED). We own cleanup.
|
|
142
|
+
tb_assert(expected == REQ_ABANDONED);
|
|
143
|
+
free(req->result);
|
|
144
|
+
free(req);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
rb_tb_write_completion((int)completion_ctx, req);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
static void rb_tb_client_free(void *ptr) {
|
|
152
|
+
tb_client_deinit((tb_client_t *)ptr);
|
|
153
|
+
ruby_xfree(ptr);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
static size_t rb_tb_client_size(const void *ptr) {
|
|
157
|
+
(void)ptr;
|
|
158
|
+
return sizeof(tb_client_t);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
static const rb_data_type_t rb_tb_client_type = {
|
|
162
|
+
.wrap_struct_name = "TigerBeetle::NativeClient",
|
|
163
|
+
.function =
|
|
164
|
+
{
|
|
165
|
+
.dmark = NULL,
|
|
166
|
+
.dfree = rb_tb_client_free,
|
|
167
|
+
.dsize = rb_tb_client_size,
|
|
168
|
+
},
|
|
169
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
static VALUE rb_tb_client_alloc(VALUE klass) {
|
|
173
|
+
tb_client_t *data = ruby_xmalloc(sizeof(tb_client_t));
|
|
174
|
+
memset(data, 0, sizeof(tb_client_t));
|
|
175
|
+
return TypedData_Wrap_Struct(klass, &rb_tb_client_type, data);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
static VALUE rb_tb_client_initialize(
|
|
179
|
+
VALUE self, VALUE cluster_id_rb, VALUE addresses_rb, VALUE completion_fd_rb
|
|
180
|
+
) {
|
|
181
|
+
tb_client_t *client;
|
|
182
|
+
TypedData_Get_Struct(self, tb_client_t, &rb_tb_client_type, client);
|
|
183
|
+
|
|
184
|
+
uint8_t cluster_id_bytes[16] = {0};
|
|
185
|
+
rb_tb_pack_u128(cluster_id_rb, cluster_id_bytes);
|
|
186
|
+
|
|
187
|
+
const char *addr = StringValueCStr(addresses_rb);
|
|
188
|
+
uint32_t addr_len = (uint32_t)RSTRING_LEN(addresses_rb);
|
|
189
|
+
|
|
190
|
+
int completion_fd = RB_NUM2INT(completion_fd_rb);
|
|
191
|
+
|
|
192
|
+
TB_INIT_STATUS status = tb_client_init(
|
|
193
|
+
client, cluster_id_bytes, addr, addr_len, (uintptr_t)completion_fd, rb_tb_on_completion
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
if (status != TB_INIT_SUCCESS) {
|
|
197
|
+
rb_raise(rb_eInitError, "Init error: %s", rb_tb_init_error_message(status));
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return self;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
static void *rb_tb_deinit_without_gvl(void *arg) {
|
|
204
|
+
tb_client_deinit((tb_client_t *)arg);
|
|
205
|
+
return NULL;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
static VALUE rb_tb_client_close(VALUE self) {
|
|
209
|
+
tb_client_t *client;
|
|
210
|
+
TypedData_Get_Struct(self, tb_client_t, &rb_tb_client_type, client);
|
|
211
|
+
|
|
212
|
+
// deinit blocks until all in-flight callbacks complete. The GVL is released
|
|
213
|
+
// while waiting so other Ruby threads can run.
|
|
214
|
+
rb_thread_call_without_gvl(rb_tb_deinit_without_gvl, client, NULL, NULL);
|
|
215
|
+
return Qnil;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
typedef struct rb_tb_serialize_context {
|
|
219
|
+
TB_OPERATION operation;
|
|
220
|
+
VALUE items_rb;
|
|
221
|
+
uint8_t *buf;
|
|
222
|
+
long count;
|
|
223
|
+
} rb_tb_serialize_context_t;
|
|
224
|
+
|
|
225
|
+
static VALUE rb_tb_serialize_protected(VALUE context_value) {
|
|
226
|
+
rb_tb_serialize_context_t *context = (rb_tb_serialize_context_t *)context_value;
|
|
227
|
+
rb_tb_serialize(context->operation, context->items_rb, context->buf, context->count);
|
|
228
|
+
return Qnil;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
static VALUE rb_tb_client_submit(VALUE self, VALUE operation_rb, VALUE items_rb) {
|
|
232
|
+
tb_client_t *client;
|
|
233
|
+
TypedData_Get_Struct(self, tb_client_t, &rb_tb_client_type, client);
|
|
234
|
+
|
|
235
|
+
TB_OPERATION operation = (TB_OPERATION)RB_NUM2INT(operation_rb);
|
|
236
|
+
long count = RARRAY_LEN(items_rb);
|
|
237
|
+
|
|
238
|
+
rb_tb_request_t *req = malloc(sizeof(rb_tb_request_t));
|
|
239
|
+
if (!req) {
|
|
240
|
+
rb_raise(rb_eNoMemError, "failed to allocate request");
|
|
241
|
+
}
|
|
242
|
+
memset(req, 0, sizeof(rb_tb_request_t));
|
|
243
|
+
req->operation = operation;
|
|
244
|
+
|
|
245
|
+
if (count > 0) {
|
|
246
|
+
size_t event_size = rb_tb_event_size(operation);
|
|
247
|
+
long max_count = (long)(UINT32_MAX / event_size);
|
|
248
|
+
if (count > max_count) {
|
|
249
|
+
free(req);
|
|
250
|
+
rb_raise(rb_eArgError, "batch size exceeds maximum request size");
|
|
251
|
+
}
|
|
252
|
+
size_t send_size = event_size * (size_t)count;
|
|
253
|
+
req->send_buf = malloc(send_size);
|
|
254
|
+
if (!req->send_buf) {
|
|
255
|
+
free(req);
|
|
256
|
+
rb_raise(rb_eNoMemError, "failed to allocate send buffer");
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
rb_tb_serialize_context_t serialize_context = {
|
|
260
|
+
.operation = operation,
|
|
261
|
+
.items_rb = items_rb,
|
|
262
|
+
.buf = req->send_buf,
|
|
263
|
+
.count = count,
|
|
264
|
+
};
|
|
265
|
+
int serialize_state = 0;
|
|
266
|
+
rb_protect(rb_tb_serialize_protected, (VALUE)&serialize_context, &serialize_state);
|
|
267
|
+
if (serialize_state) {
|
|
268
|
+
free(req->send_buf);
|
|
269
|
+
free(req);
|
|
270
|
+
rb_jump_tag(serialize_state);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
req->packet.data_size = (uint32_t)send_size;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
req->packet.data = req->send_buf;
|
|
277
|
+
req->packet.operation = (uint8_t)operation;
|
|
278
|
+
req->packet.user_data = req;
|
|
279
|
+
|
|
280
|
+
TB_CLIENT_STATUS cs = tb_client_submit(client, &req->packet);
|
|
281
|
+
if (cs == TB_CLIENT_INVALID) {
|
|
282
|
+
free(req->send_buf);
|
|
283
|
+
free(req);
|
|
284
|
+
rb_raise(rb_eClientClosedError, "client is closed");
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
return TypedData_Wrap_Struct(rb_cRequest, &rb_tb_request_type, req);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
static VALUE rb_tb_request_id(VALUE self) {
|
|
291
|
+
rb_tb_request_t *req;
|
|
292
|
+
TypedData_Get_Struct(self, rb_tb_request_t, &rb_tb_request_type, req);
|
|
293
|
+
return RB_ULL2NUM((unsigned long long)(uintptr_t)req);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
static void rb_tb_init_native_client(VALUE mTigerBeetle) {
|
|
297
|
+
rb_define_const(mTigerBeetle, "PACKET_OK", RB_INT2NUM(TB_PACKET_OK));
|
|
298
|
+
rb_define_const(mTigerBeetle, "PACKET_CLIENT_SHUTDOWN", RB_INT2NUM(TB_PACKET_CLIENT_SHUTDOWN));
|
|
299
|
+
|
|
300
|
+
VALUE cNativeClient = rb_define_class_under(mTigerBeetle, "NativeClient", rb_cObject);
|
|
301
|
+
rb_define_alloc_func(cNativeClient, rb_tb_client_alloc);
|
|
302
|
+
rb_define_method(cNativeClient, "initialize", rb_tb_client_initialize, 3);
|
|
303
|
+
rb_define_method(cNativeClient, "submit", rb_tb_client_submit, 2);
|
|
304
|
+
rb_define_method(cNativeClient, "close", rb_tb_client_close, 0);
|
|
305
|
+
|
|
306
|
+
rb_cRequest = rb_define_class_under(mTigerBeetle, "Request", rb_cObject);
|
|
307
|
+
rb_define_alloc_func(rb_cRequest, rb_tb_request_alloc);
|
|
308
|
+
rb_define_method(rb_cRequest, "id", rb_tb_request_id, 0);
|
|
309
|
+
rb_define_method(rb_cRequest, "result", rb_tb_request_result, 0);
|
|
310
|
+
}
|