tigerbeetle-node 0.10.0 → 0.11.0
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.
- package/README.md +302 -101
- package/dist/index.d.ts +70 -72
- package/dist/index.js +70 -72
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/scripts/download_node_headers.sh +14 -7
- package/src/index.ts +6 -10
- package/src/node.zig +6 -3
- package/src/tigerbeetle/scripts/benchmark.sh +4 -4
- package/src/tigerbeetle/scripts/confirm_image.sh +44 -0
- package/src/tigerbeetle/scripts/fuzz_loop.sh +15 -0
- package/src/tigerbeetle/scripts/fuzz_unique_errors.sh +7 -0
- package/src/tigerbeetle/scripts/install.sh +19 -4
- package/src/tigerbeetle/scripts/install_zig.bat +5 -1
- package/src/tigerbeetle/scripts/install_zig.sh +24 -14
- package/src/tigerbeetle/scripts/pre-commit.sh +9 -0
- package/src/tigerbeetle/scripts/shellcheck.sh +5 -0
- package/src/tigerbeetle/scripts/tests_on_alpine.sh +10 -0
- package/src/tigerbeetle/scripts/tests_on_ubuntu.sh +14 -0
- package/src/tigerbeetle/src/benchmark.zig +4 -2
- package/src/tigerbeetle/src/benchmark_array_search.zig +3 -3
- package/src/tigerbeetle/src/c/tb_client/thread.zig +8 -9
- package/src/tigerbeetle/src/c/tb_client.h +100 -80
- package/src/tigerbeetle/src/c/tb_client.zig +4 -1
- package/src/tigerbeetle/src/cli.zig +1 -1
- package/src/tigerbeetle/src/config.zig +48 -16
- package/src/tigerbeetle/src/demo.zig +3 -1
- package/src/tigerbeetle/src/eytzinger_benchmark.zig +3 -3
- package/src/tigerbeetle/src/io/linux.zig +1 -1
- package/src/tigerbeetle/src/lsm/README.md +214 -0
- package/src/tigerbeetle/src/lsm/binary_search.zig +137 -10
- package/src/tigerbeetle/src/lsm/bloom_filter.zig +43 -0
- package/src/tigerbeetle/src/lsm/compaction.zig +352 -398
- package/src/tigerbeetle/src/lsm/composite_key.zig +2 -0
- package/src/tigerbeetle/src/lsm/eytzinger.zig +1 -1
- package/src/tigerbeetle/src/lsm/forest.zig +21 -447
- package/src/tigerbeetle/src/lsm/forest_fuzz.zig +412 -0
- package/src/tigerbeetle/src/lsm/grid.zig +145 -69
- package/src/tigerbeetle/src/lsm/groove.zig +196 -133
- package/src/tigerbeetle/src/lsm/k_way_merge.zig +40 -18
- package/src/tigerbeetle/src/lsm/level_iterator.zig +28 -9
- package/src/tigerbeetle/src/lsm/manifest.zig +81 -181
- package/src/tigerbeetle/src/lsm/manifest_level.zig +210 -454
- package/src/tigerbeetle/src/lsm/manifest_log.zig +77 -28
- package/src/tigerbeetle/src/lsm/posted_groove.zig +64 -76
- package/src/tigerbeetle/src/lsm/segmented_array.zig +561 -241
- package/src/tigerbeetle/src/lsm/segmented_array_benchmark.zig +148 -0
- package/src/tigerbeetle/src/lsm/segmented_array_fuzz.zig +9 -0
- package/src/tigerbeetle/src/lsm/set_associative_cache.zig +62 -12
- package/src/tigerbeetle/src/lsm/table.zig +83 -48
- package/src/tigerbeetle/src/lsm/table_immutable.zig +30 -23
- package/src/tigerbeetle/src/lsm/table_iterator.zig +25 -14
- package/src/tigerbeetle/src/lsm/table_mutable.zig +63 -12
- package/src/tigerbeetle/src/lsm/test.zig +49 -55
- package/src/tigerbeetle/src/lsm/tree.zig +407 -402
- package/src/tigerbeetle/src/lsm/tree_fuzz.zig +457 -0
- package/src/tigerbeetle/src/main.zig +28 -6
- package/src/tigerbeetle/src/message_bus.zig +2 -2
- package/src/tigerbeetle/src/message_pool.zig +14 -17
- package/src/tigerbeetle/src/simulator.zig +145 -112
- package/src/tigerbeetle/src/state_machine.zig +338 -228
- package/src/tigerbeetle/src/static_allocator.zig +65 -0
- package/src/tigerbeetle/src/storage.zig +3 -7
- package/src/tigerbeetle/src/test/accounting/auditor.zig +577 -0
- package/src/tigerbeetle/src/test/accounting/workload.zig +819 -0
- package/src/tigerbeetle/src/test/cluster.zig +18 -48
- package/src/tigerbeetle/src/test/conductor.zig +365 -0
- package/src/tigerbeetle/src/test/fuzz.zig +121 -0
- package/src/tigerbeetle/src/test/id.zig +89 -0
- package/src/tigerbeetle/src/test/priority_queue.zig +645 -0
- package/src/tigerbeetle/src/test/state_checker.zig +93 -69
- package/src/tigerbeetle/src/test/state_machine.zig +11 -35
- package/src/tigerbeetle/src/test/storage.zig +29 -8
- package/src/tigerbeetle/src/tigerbeetle.zig +14 -16
- package/src/tigerbeetle/src/unit_tests.zig +7 -0
- package/src/tigerbeetle/src/vopr.zig +494 -0
- package/src/tigerbeetle/src/vopr_hub/README.md +58 -0
- package/src/tigerbeetle/src/vopr_hub/SETUP.md +199 -0
- package/src/tigerbeetle/src/vopr_hub/go.mod +3 -0
- package/src/tigerbeetle/src/vopr_hub/main.go +1022 -0
- package/src/tigerbeetle/src/vopr_hub/scheduler/go.mod +3 -0
- package/src/tigerbeetle/src/vopr_hub/scheduler/main.go +403 -0
- package/src/tigerbeetle/src/vsr/client.zig +13 -0
- package/src/tigerbeetle/src/vsr/journal.zig +16 -13
- package/src/tigerbeetle/src/vsr/replica.zig +924 -491
- package/src/tigerbeetle/src/vsr/superblock.zig +55 -37
- package/src/tigerbeetle/src/vsr/superblock_client_table.zig +7 -10
- package/src/tigerbeetle/src/vsr/superblock_free_set.zig +2 -2
- package/src/tigerbeetle/src/vsr/superblock_manifest.zig +18 -3
- package/src/tigerbeetle/src/vsr.zig +75 -55
- package/src/tigerbeetle/scripts/vopr.bat +0 -48
- package/src/tigerbeetle/scripts/vopr.sh +0 -33
package/dist/index.js
CHANGED
|
@@ -11,26 +11,23 @@ var AccountFlags;
|
|
|
11
11
|
var CreateAccountError;
|
|
12
12
|
(function (CreateAccountError) {
|
|
13
13
|
CreateAccountError[CreateAccountError["linked_event_failed"] = 1] = "linked_event_failed";
|
|
14
|
-
CreateAccountError[CreateAccountError["
|
|
15
|
-
CreateAccountError[CreateAccountError["
|
|
16
|
-
CreateAccountError[CreateAccountError["
|
|
17
|
-
CreateAccountError[CreateAccountError["
|
|
18
|
-
CreateAccountError[CreateAccountError["
|
|
19
|
-
CreateAccountError[CreateAccountError["
|
|
20
|
-
CreateAccountError[CreateAccountError["
|
|
21
|
-
CreateAccountError[CreateAccountError["
|
|
22
|
-
CreateAccountError[CreateAccountError["
|
|
23
|
-
CreateAccountError[CreateAccountError["
|
|
24
|
-
CreateAccountError[CreateAccountError["
|
|
25
|
-
CreateAccountError[CreateAccountError["
|
|
26
|
-
CreateAccountError[CreateAccountError["
|
|
27
|
-
CreateAccountError[CreateAccountError["
|
|
28
|
-
CreateAccountError[CreateAccountError["
|
|
29
|
-
CreateAccountError[CreateAccountError["
|
|
30
|
-
CreateAccountError[CreateAccountError["
|
|
31
|
-
CreateAccountError[CreateAccountError["exists_with_different_credits_pending"] = 19] = "exists_with_different_credits_pending";
|
|
32
|
-
CreateAccountError[CreateAccountError["exists_with_different_credits_posted"] = 20] = "exists_with_different_credits_posted";
|
|
33
|
-
CreateAccountError[CreateAccountError["exists"] = 21] = "exists";
|
|
14
|
+
CreateAccountError[CreateAccountError["linked_event_chain_open"] = 2] = "linked_event_chain_open";
|
|
15
|
+
CreateAccountError[CreateAccountError["reserved_flag"] = 3] = "reserved_flag";
|
|
16
|
+
CreateAccountError[CreateAccountError["reserved_field"] = 4] = "reserved_field";
|
|
17
|
+
CreateAccountError[CreateAccountError["id_must_not_be_zero"] = 5] = "id_must_not_be_zero";
|
|
18
|
+
CreateAccountError[CreateAccountError["id_must_not_be_int_max"] = 6] = "id_must_not_be_int_max";
|
|
19
|
+
CreateAccountError[CreateAccountError["ledger_must_not_be_zero"] = 7] = "ledger_must_not_be_zero";
|
|
20
|
+
CreateAccountError[CreateAccountError["code_must_not_be_zero"] = 8] = "code_must_not_be_zero";
|
|
21
|
+
CreateAccountError[CreateAccountError["debits_pending_must_be_zero"] = 9] = "debits_pending_must_be_zero";
|
|
22
|
+
CreateAccountError[CreateAccountError["debits_posted_must_be_zero"] = 10] = "debits_posted_must_be_zero";
|
|
23
|
+
CreateAccountError[CreateAccountError["credits_pending_must_be_zero"] = 11] = "credits_pending_must_be_zero";
|
|
24
|
+
CreateAccountError[CreateAccountError["credits_posted_must_be_zero"] = 12] = "credits_posted_must_be_zero";
|
|
25
|
+
CreateAccountError[CreateAccountError["mutually_exclusive_flags"] = 13] = "mutually_exclusive_flags";
|
|
26
|
+
CreateAccountError[CreateAccountError["exists_with_different_flags"] = 14] = "exists_with_different_flags";
|
|
27
|
+
CreateAccountError[CreateAccountError["exists_with_different_user_data"] = 15] = "exists_with_different_user_data";
|
|
28
|
+
CreateAccountError[CreateAccountError["exists_with_different_ledger"] = 16] = "exists_with_different_ledger";
|
|
29
|
+
CreateAccountError[CreateAccountError["exists_with_different_code"] = 17] = "exists_with_different_code";
|
|
30
|
+
CreateAccountError[CreateAccountError["exists"] = 18] = "exists";
|
|
34
31
|
})(CreateAccountError = exports.CreateAccountError || (exports.CreateAccountError = {}));
|
|
35
32
|
var TransferFlags;
|
|
36
33
|
(function (TransferFlags) {
|
|
@@ -42,58 +39,59 @@ var TransferFlags;
|
|
|
42
39
|
var CreateTransferError;
|
|
43
40
|
(function (CreateTransferError) {
|
|
44
41
|
CreateTransferError[CreateTransferError["linked_event_failed"] = 1] = "linked_event_failed";
|
|
45
|
-
CreateTransferError[CreateTransferError["
|
|
46
|
-
CreateTransferError[CreateTransferError["
|
|
47
|
-
CreateTransferError[CreateTransferError["
|
|
48
|
-
CreateTransferError[CreateTransferError["
|
|
49
|
-
CreateTransferError[CreateTransferError["
|
|
50
|
-
CreateTransferError[CreateTransferError["
|
|
51
|
-
CreateTransferError[CreateTransferError["
|
|
52
|
-
CreateTransferError[CreateTransferError["
|
|
53
|
-
CreateTransferError[CreateTransferError["
|
|
54
|
-
CreateTransferError[CreateTransferError["
|
|
55
|
-
CreateTransferError[CreateTransferError["
|
|
56
|
-
CreateTransferError[CreateTransferError["
|
|
57
|
-
CreateTransferError[CreateTransferError["
|
|
58
|
-
CreateTransferError[CreateTransferError["
|
|
59
|
-
CreateTransferError[CreateTransferError["
|
|
60
|
-
CreateTransferError[CreateTransferError["
|
|
61
|
-
CreateTransferError[CreateTransferError["
|
|
62
|
-
CreateTransferError[CreateTransferError["
|
|
63
|
-
CreateTransferError[CreateTransferError["
|
|
64
|
-
CreateTransferError[CreateTransferError["
|
|
65
|
-
CreateTransferError[CreateTransferError["
|
|
66
|
-
CreateTransferError[CreateTransferError["
|
|
67
|
-
CreateTransferError[CreateTransferError["
|
|
68
|
-
CreateTransferError[CreateTransferError["
|
|
69
|
-
CreateTransferError[CreateTransferError["
|
|
70
|
-
CreateTransferError[CreateTransferError["
|
|
71
|
-
CreateTransferError[CreateTransferError["
|
|
72
|
-
CreateTransferError[CreateTransferError["
|
|
73
|
-
CreateTransferError[CreateTransferError["
|
|
74
|
-
CreateTransferError[CreateTransferError["
|
|
75
|
-
CreateTransferError[CreateTransferError["
|
|
76
|
-
CreateTransferError[CreateTransferError["
|
|
77
|
-
CreateTransferError[CreateTransferError["
|
|
78
|
-
CreateTransferError[CreateTransferError["
|
|
79
|
-
CreateTransferError[CreateTransferError["
|
|
80
|
-
CreateTransferError[CreateTransferError["
|
|
81
|
-
CreateTransferError[CreateTransferError["
|
|
82
|
-
CreateTransferError[CreateTransferError["
|
|
83
|
-
CreateTransferError[CreateTransferError["
|
|
84
|
-
CreateTransferError[CreateTransferError["
|
|
85
|
-
CreateTransferError[CreateTransferError["
|
|
86
|
-
CreateTransferError[CreateTransferError["
|
|
87
|
-
CreateTransferError[CreateTransferError["
|
|
88
|
-
CreateTransferError[CreateTransferError["
|
|
89
|
-
CreateTransferError[CreateTransferError["
|
|
90
|
-
CreateTransferError[CreateTransferError["
|
|
91
|
-
CreateTransferError[CreateTransferError["
|
|
92
|
-
CreateTransferError[CreateTransferError["
|
|
93
|
-
CreateTransferError[CreateTransferError["
|
|
94
|
-
CreateTransferError[CreateTransferError["
|
|
95
|
-
CreateTransferError[CreateTransferError["
|
|
96
|
-
CreateTransferError[CreateTransferError["
|
|
42
|
+
CreateTransferError[CreateTransferError["linked_event_chain_open"] = 2] = "linked_event_chain_open";
|
|
43
|
+
CreateTransferError[CreateTransferError["reserved_flag"] = 3] = "reserved_flag";
|
|
44
|
+
CreateTransferError[CreateTransferError["reserved_field"] = 4] = "reserved_field";
|
|
45
|
+
CreateTransferError[CreateTransferError["id_must_not_be_zero"] = 5] = "id_must_not_be_zero";
|
|
46
|
+
CreateTransferError[CreateTransferError["id_must_not_be_int_max"] = 6] = "id_must_not_be_int_max";
|
|
47
|
+
CreateTransferError[CreateTransferError["debit_account_id_must_not_be_zero"] = 7] = "debit_account_id_must_not_be_zero";
|
|
48
|
+
CreateTransferError[CreateTransferError["debit_account_id_must_not_be_int_max"] = 8] = "debit_account_id_must_not_be_int_max";
|
|
49
|
+
CreateTransferError[CreateTransferError["credit_account_id_must_not_be_zero"] = 9] = "credit_account_id_must_not_be_zero";
|
|
50
|
+
CreateTransferError[CreateTransferError["credit_account_id_must_not_be_int_max"] = 10] = "credit_account_id_must_not_be_int_max";
|
|
51
|
+
CreateTransferError[CreateTransferError["accounts_must_be_different"] = 11] = "accounts_must_be_different";
|
|
52
|
+
CreateTransferError[CreateTransferError["pending_id_must_be_zero"] = 12] = "pending_id_must_be_zero";
|
|
53
|
+
CreateTransferError[CreateTransferError["pending_transfer_must_timeout"] = 13] = "pending_transfer_must_timeout";
|
|
54
|
+
CreateTransferError[CreateTransferError["ledger_must_not_be_zero"] = 14] = "ledger_must_not_be_zero";
|
|
55
|
+
CreateTransferError[CreateTransferError["code_must_not_be_zero"] = 15] = "code_must_not_be_zero";
|
|
56
|
+
CreateTransferError[CreateTransferError["amount_must_not_be_zero"] = 16] = "amount_must_not_be_zero";
|
|
57
|
+
CreateTransferError[CreateTransferError["debit_account_not_found"] = 17] = "debit_account_not_found";
|
|
58
|
+
CreateTransferError[CreateTransferError["credit_account_not_found"] = 18] = "credit_account_not_found";
|
|
59
|
+
CreateTransferError[CreateTransferError["accounts_must_have_the_same_ledger"] = 19] = "accounts_must_have_the_same_ledger";
|
|
60
|
+
CreateTransferError[CreateTransferError["transfer_must_have_the_same_ledger_as_accounts"] = 20] = "transfer_must_have_the_same_ledger_as_accounts";
|
|
61
|
+
CreateTransferError[CreateTransferError["exists_with_different_flags"] = 21] = "exists_with_different_flags";
|
|
62
|
+
CreateTransferError[CreateTransferError["exists_with_different_debit_account_id"] = 22] = "exists_with_different_debit_account_id";
|
|
63
|
+
CreateTransferError[CreateTransferError["exists_with_different_credit_account_id"] = 23] = "exists_with_different_credit_account_id";
|
|
64
|
+
CreateTransferError[CreateTransferError["exists_with_different_user_data"] = 24] = "exists_with_different_user_data";
|
|
65
|
+
CreateTransferError[CreateTransferError["exists_with_different_pending_id"] = 25] = "exists_with_different_pending_id";
|
|
66
|
+
CreateTransferError[CreateTransferError["exists_with_different_timeout"] = 26] = "exists_with_different_timeout";
|
|
67
|
+
CreateTransferError[CreateTransferError["exists_with_different_code"] = 27] = "exists_with_different_code";
|
|
68
|
+
CreateTransferError[CreateTransferError["exists_with_different_amount"] = 28] = "exists_with_different_amount";
|
|
69
|
+
CreateTransferError[CreateTransferError["exists"] = 29] = "exists";
|
|
70
|
+
CreateTransferError[CreateTransferError["overflows_debits_pending"] = 30] = "overflows_debits_pending";
|
|
71
|
+
CreateTransferError[CreateTransferError["overflows_credits_pending"] = 31] = "overflows_credits_pending";
|
|
72
|
+
CreateTransferError[CreateTransferError["overflows_debits_posted"] = 32] = "overflows_debits_posted";
|
|
73
|
+
CreateTransferError[CreateTransferError["overflows_credits_posted"] = 33] = "overflows_credits_posted";
|
|
74
|
+
CreateTransferError[CreateTransferError["overflows_debits"] = 34] = "overflows_debits";
|
|
75
|
+
CreateTransferError[CreateTransferError["overflows_credits"] = 35] = "overflows_credits";
|
|
76
|
+
CreateTransferError[CreateTransferError["exceeds_credits"] = 36] = "exceeds_credits";
|
|
77
|
+
CreateTransferError[CreateTransferError["exceeds_debits"] = 37] = "exceeds_debits";
|
|
78
|
+
CreateTransferError[CreateTransferError["cannot_post_and_void_pending_transfer"] = 38] = "cannot_post_and_void_pending_transfer";
|
|
79
|
+
CreateTransferError[CreateTransferError["pending_transfer_cannot_post_or_void_another"] = 39] = "pending_transfer_cannot_post_or_void_another";
|
|
80
|
+
CreateTransferError[CreateTransferError["timeout_reserved_for_pending_transfer"] = 40] = "timeout_reserved_for_pending_transfer";
|
|
81
|
+
CreateTransferError[CreateTransferError["pending_id_must_not_be_zero"] = 41] = "pending_id_must_not_be_zero";
|
|
82
|
+
CreateTransferError[CreateTransferError["pending_id_must_not_be_int_max"] = 42] = "pending_id_must_not_be_int_max";
|
|
83
|
+
CreateTransferError[CreateTransferError["pending_id_must_be_different"] = 43] = "pending_id_must_be_different";
|
|
84
|
+
CreateTransferError[CreateTransferError["pending_transfer_not_found"] = 44] = "pending_transfer_not_found";
|
|
85
|
+
CreateTransferError[CreateTransferError["pending_transfer_not_pending"] = 45] = "pending_transfer_not_pending";
|
|
86
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_debit_account_id"] = 46] = "pending_transfer_has_different_debit_account_id";
|
|
87
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_credit_account_id"] = 47] = "pending_transfer_has_different_credit_account_id";
|
|
88
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_ledger"] = 48] = "pending_transfer_has_different_ledger";
|
|
89
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_code"] = 49] = "pending_transfer_has_different_code";
|
|
90
|
+
CreateTransferError[CreateTransferError["exceeds_pending_transfer_amount"] = 50] = "exceeds_pending_transfer_amount";
|
|
91
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_amount"] = 51] = "pending_transfer_has_different_amount";
|
|
92
|
+
CreateTransferError[CreateTransferError["pending_transfer_already_posted"] = 52] = "pending_transfer_already_posted";
|
|
93
|
+
CreateTransferError[CreateTransferError["pending_transfer_already_voided"] = 53] = "pending_transfer_already_voided";
|
|
94
|
+
CreateTransferError[CreateTransferError["pending_transfer_expired"] = 54] = "pending_transfer_expired";
|
|
97
95
|
})(CreateTransferError = exports.CreateTransferError || (exports.CreateTransferError = {}));
|
|
98
96
|
var Operation;
|
|
99
97
|
(function (Operation) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const binding: Binding = require('./client.node')\ninterface Binding {\n init: (args: BindingInitArgs) => Context\n request: (context: Context, operation: Operation, batch: Event[], result: ResultCallback) => void\n raw_request: (context: Context, operation: Operation, raw_batch: Buffer, result: ResultCallback) => void\n tick: (context: Context) => void,\n deinit: (context: Context) => void,\n tick_ms: number\n}\n\ninterface BindingInitArgs {\n cluster_id: number, // u32\n replica_addresses: Buffer,\n}\n\nexport interface InitArgs {\n cluster_id: number, // u32\n replica_addresses: Array<string | number>,\n}\n\nexport type Context = object\n\nexport type Account = {\n id: bigint // u128\n user_data: bigint // u128\n reserved: Buffer // [48]u8\n ledger: number // u32, ledger of value\n code: number // u16, A chart of accounts code describing the type of account (e.g. clearing, settlement)\n flags: number // u16\n debits_pending: bigint // u64\n debits_posted: bigint // u64\n credits_pending: bigint // u64\n credits_posted: bigint // u64\n timestamp: bigint // u64, Set this to 0n - the actual value will be set by TigerBeetle server\n}\n\nexport enum AccountFlags {\n linked = (1 << 0),\n debits_must_not_exceed_credits = (1 << 1),\n credits_must_not_exceed_debits = (1 << 2)\n}\n\nexport enum CreateAccountError {\n // ok = 0 (No Error)\n linked_event_failed = 1,\n\n reserved_flag,\n reserved_field,\n\n id_must_not_be_zero,\n id_must_not_be_int_max,\n ledger_must_not_be_zero,\n code_must_not_be_zero,\n\n mutually_exclusive_flags,\n\n overflows_debits,\n overflows_credits,\n\n exceeds_credits,\n exceeds_debits,\n\n exists_with_different_flags,\n exists_with_different_user_data,\n exists_with_different_ledger,\n exists_with_different_code,\n exists_with_different_debits_pending,\n exists_with_different_debits_posted,\n exists_with_different_credits_pending,\n exists_with_different_credits_posted,\n exists,\n}\n\nexport type CreateAccountsError = {\n index: number,\n code: CreateAccountError,\n}\n\nexport type Transfer = {\n id: bigint, // u128\n debit_account_id: bigint, // u128\n credit_account_id: bigint, // u128\n user_data: bigint, // u128\n reserved: bigint, // u128\n pending_id: bigint, // u128\n timeout: bigint, // u64, In nanoseconds.\n ledger: number // u32, The ledger of value.\n code: number, // u16, A user-defined accounting code to describe the type of transfer (e.g. settlement).\n flags: number, // u16\n amount: bigint, // u64,\n timestamp: bigint, // u64, Set this to 0n - the timestamp will be set by TigerBeetle.\n}\n\nexport enum TransferFlags {\n linked = (1 << 0),\n pending = (1 << 1),\n post_pending_transfer = (1 << 2),\n void_pending_transfer = (1 << 3)\n}\n\nexport enum CreateTransferError {\n // ok = 0 (No Error)\n linked_event_failed = 1,\n\n reserved_flag,\n reserved_field,\n\n id_must_not_be_zero,\n id_must_not_be_int_max,\n debit_account_id_must_not_be_zero,\n debit_account_id_must_not_be_int_max,\n credit_account_id_must_not_be_zero,\n credit_account_id_must_not_be_int_max,\n accounts_must_be_different,\n\n pending_id_must_be_zero,\n pending_transfer_must_timeout,\n\n ledger_must_not_be_zero,\n code_must_not_be_zero,\n amount_must_not_be_zero,\n\n debit_account_not_found,\n credit_account_not_found,\n\n accounts_must_have_the_same_ledger,\n transfer_must_have_the_same_ledger_as_accounts,\n\n exists_with_different_flags,\n exists_with_different_debit_account_id,\n exists_with_different_credit_account_id,\n exists_with_different_user_data,\n exists_with_different_pending_id,\n exists_with_different_timeout,\n exists_with_different_code,\n exists_with_different_amount,\n exists,\n\n overflows_debits_pending,\n overflows_credits_pending,\n overflows_debits_posted,\n overflows_credits_posted,\n overflows_debits,\n overflows_credits,\n\n exceeds_credits,\n exceeds_debits,\n\n cannot_post_and_void_pending_transfer,\n pending_transfer_cannot_post_or_void_another,\n timeout_reserved_for_pending_transfer,\n\n pending_id_must_not_be_zero,\n pending_id_must_not_be_int_max,\n pending_id_must_be_different,\n\n pending_transfer_not_found,\n pending_transfer_not_pending,\n\n pending_transfer_has_different_debit_account_id,\n pending_transfer_has_different_credit_account_id,\n pending_transfer_has_different_ledger,\n pending_transfer_has_different_code,\n\n exceeds_pending_transfer_amount,\n pending_transfer_has_different_amount,\n\n pending_transfer_already_posted,\n pending_transfer_already_voided,\n\n pending_transfer_expired,\n}\n\nexport type CreateTransfersError = {\n index: number,\n code: CreateTransferError,\n}\n\nexport type AccountID = bigint // u128\nexport type TransferID = bigint // u128\n\nexport type Event = Account | Transfer | AccountID | TransferID\nexport type Result = CreateAccountsError | CreateTransfersError | Account | Transfer\nexport type ResultCallback = (error: undefined | Error, results: Result[]) => void\n\nexport enum Operation {\n CREATE_ACCOUNT = 3,\n CREATE_TRANSFER,\n ACCOUNT_LOOKUP,\n TRANSFER_LOOKUP\n}\n\nexport interface Client {\n createAccounts: (batch: Account[]) => Promise<CreateAccountsError[]>\n createTransfers: (batch: Transfer[]) => Promise<CreateTransfersError[]>\n lookupAccounts: (batch: AccountID[]) => Promise<Account[]>\n lookupTransfers: (batch: TransferID[]) => Promise<Transfer[]>\n request: (operation: Operation, batch: Event[], callback: ResultCallback) => void\n rawRequest: (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => void\n destroy: () => void\n}\n\nlet _args: InitArgs | undefined = undefined\nconst isSameArgs = (args: InitArgs): boolean => {\n if (typeof _args === 'undefined') {\n return false\n }\n\n if (_args.replica_addresses.length !== args.replica_addresses.length) {\n return false\n }\n\n let isSameReplicas = true\n args.replica_addresses.forEach((entry, index) => {\n if (_args?.replica_addresses[index] !== entry) {\n isSameReplicas = false\n }\n })\n\n return args.cluster_id === _args.cluster_id && isSameReplicas\n}\n\nlet _client: Client | undefined = undefined\nlet _interval: NodeJS.Timeout | undefined = undefined\n// Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\nlet _pinged = false\n// TODO: allow creation of clients if the arguments are different. Will require changes in node.zig as well.\nexport function createClient (args: InitArgs): Client {\n const duplicateArgs = isSameArgs(args)\n if (!duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with different arguments.')\n }\n\n if (duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with the same arguments.')\n }\n\n _args = Object.assign({}, { ...args })\n const context = binding.init({\n ...args,\n replica_addresses: Buffer.from(args.replica_addresses.join(','))\n })\n\n const request = (operation: Operation, batch: Event[], callback: ResultCallback) => {\n binding.request(context, operation, batch, callback)\n }\n\n const rawRequest = (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => {\n binding.raw_request(context, operation, rawBatch, callback)\n }\n\n const createAccounts = async (batch: Account[]): Promise<CreateAccountsError[]> => {\n // Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateAccountsError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_ACCOUNT, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const createTransfers = async (batch: Transfer[]): Promise<CreateTransfersError[]> => {\n // Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateTransfersError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_TRANSFER, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupAccounts = async (batch: AccountID[]): Promise<Account[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Account[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.ACCOUNT_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupTransfers = async (batch: TransferID[]): Promise<Transfer[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Transfer[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.TRANSFER_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const destroy = (): void => {\n binding.deinit(context)\n if (_interval){\n clearInterval(_interval)\n }\n _client = undefined\n }\n\n _client = {\n createAccounts,\n createTransfers,\n lookupAccounts,\n lookupTransfers,\n request,\n rawRequest,\n destroy\n }\n\n _interval = setInterval(() => {\n binding.tick(context)\n }, binding.tick_ms)\n\n return _client\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const binding: Binding = require('./client.node')\ninterface Binding {\n init: (args: BindingInitArgs) => Context\n request: (context: Context, operation: Operation, batch: Event[], result: ResultCallback) => void\n raw_request: (context: Context, operation: Operation, raw_batch: Buffer, result: ResultCallback) => void\n tick: (context: Context) => void,\n deinit: (context: Context) => void,\n tick_ms: number\n}\n\ninterface BindingInitArgs {\n cluster_id: number, // u32\n replica_addresses: Buffer,\n}\n\nexport interface InitArgs {\n cluster_id: number, // u32\n replica_addresses: Array<string | number>,\n}\n\nexport type Context = object\n\nexport type Account = {\n id: bigint // u128\n user_data: bigint // u128\n reserved: Buffer // [48]u8\n ledger: number // u32, ledger of value\n code: number // u16, A chart of accounts code describing the type of account (e.g. clearing, settlement)\n flags: number // u16\n debits_pending: bigint // u64\n debits_posted: bigint // u64\n credits_pending: bigint // u64\n credits_posted: bigint // u64\n timestamp: bigint // u64, Set this to 0n - the actual value will be set by TigerBeetle server\n}\n\nexport enum AccountFlags {\n linked = (1 << 0),\n debits_must_not_exceed_credits = (1 << 1),\n credits_must_not_exceed_debits = (1 << 2)\n}\n\nexport enum CreateAccountError {\n // ok = 0 (No Error)\n linked_event_failed = 1,\n linked_event_chain_open,\n\n reserved_flag,\n reserved_field,\n\n id_must_not_be_zero,\n id_must_not_be_int_max,\n ledger_must_not_be_zero,\n code_must_not_be_zero,\n debits_pending_must_be_zero,\n debits_posted_must_be_zero,\n credits_pending_must_be_zero,\n credits_posted_must_be_zero,\n\n mutually_exclusive_flags,\n\n exists_with_different_flags,\n exists_with_different_user_data,\n exists_with_different_ledger,\n exists_with_different_code,\n exists,\n}\n\nexport type CreateAccountsError = {\n index: number,\n code: CreateAccountError,\n}\n\nexport type Transfer = {\n id: bigint, // u128\n debit_account_id: bigint, // u128\n credit_account_id: bigint, // u128\n user_data: bigint, // u128\n reserved: bigint, // u128\n pending_id: bigint, // u128\n timeout: bigint, // u64, In nanoseconds.\n ledger: number // u32, The ledger of value.\n code: number, // u16, A user-defined accounting code to describe the type of transfer (e.g. settlement).\n flags: number, // u16\n amount: bigint, // u64,\n timestamp: bigint, // u64, Set this to 0n - the timestamp will be set by TigerBeetle.\n}\n\nexport enum TransferFlags {\n linked = (1 << 0),\n pending = (1 << 1),\n post_pending_transfer = (1 << 2),\n void_pending_transfer = (1 << 3)\n}\n\nexport enum CreateTransferError {\n // ok = 0 (No Error)\n linked_event_failed = 1,\n linked_event_chain_open,\n\n reserved_flag,\n reserved_field,\n\n id_must_not_be_zero,\n id_must_not_be_int_max,\n debit_account_id_must_not_be_zero,\n debit_account_id_must_not_be_int_max,\n credit_account_id_must_not_be_zero,\n credit_account_id_must_not_be_int_max,\n accounts_must_be_different,\n\n pending_id_must_be_zero,\n pending_transfer_must_timeout,\n\n ledger_must_not_be_zero,\n code_must_not_be_zero,\n amount_must_not_be_zero,\n\n debit_account_not_found,\n credit_account_not_found,\n\n accounts_must_have_the_same_ledger,\n transfer_must_have_the_same_ledger_as_accounts,\n\n exists_with_different_flags,\n exists_with_different_debit_account_id,\n exists_with_different_credit_account_id,\n exists_with_different_user_data,\n exists_with_different_pending_id,\n exists_with_different_timeout,\n exists_with_different_code,\n exists_with_different_amount,\n exists,\n\n overflows_debits_pending,\n overflows_credits_pending,\n overflows_debits_posted,\n overflows_credits_posted,\n overflows_debits,\n overflows_credits,\n\n exceeds_credits,\n exceeds_debits,\n\n cannot_post_and_void_pending_transfer,\n pending_transfer_cannot_post_or_void_another,\n timeout_reserved_for_pending_transfer,\n\n pending_id_must_not_be_zero,\n pending_id_must_not_be_int_max,\n pending_id_must_be_different,\n\n pending_transfer_not_found,\n pending_transfer_not_pending,\n\n pending_transfer_has_different_debit_account_id,\n pending_transfer_has_different_credit_account_id,\n pending_transfer_has_different_ledger,\n pending_transfer_has_different_code,\n\n exceeds_pending_transfer_amount,\n pending_transfer_has_different_amount,\n\n pending_transfer_already_posted,\n pending_transfer_already_voided,\n\n pending_transfer_expired,\n}\n\nexport type CreateTransfersError = {\n index: number,\n code: CreateTransferError,\n}\n\nexport type AccountID = bigint // u128\nexport type TransferID = bigint // u128\n\nexport type Event = Account | Transfer | AccountID | TransferID\nexport type Result = CreateAccountsError | CreateTransfersError | Account | Transfer\nexport type ResultCallback = (error: undefined | Error, results: Result[]) => void\n\nexport enum Operation {\n CREATE_ACCOUNT = 3,\n CREATE_TRANSFER,\n ACCOUNT_LOOKUP,\n TRANSFER_LOOKUP\n}\n\nexport interface Client {\n createAccounts: (batch: Account[]) => Promise<CreateAccountsError[]>\n createTransfers: (batch: Transfer[]) => Promise<CreateTransfersError[]>\n lookupAccounts: (batch: AccountID[]) => Promise<Account[]>\n lookupTransfers: (batch: TransferID[]) => Promise<Transfer[]>\n request: (operation: Operation, batch: Event[], callback: ResultCallback) => void\n rawRequest: (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => void\n destroy: () => void\n}\n\nlet _args: InitArgs | undefined = undefined\nconst isSameArgs = (args: InitArgs): boolean => {\n if (typeof _args === 'undefined') {\n return false\n }\n\n if (_args.replica_addresses.length !== args.replica_addresses.length) {\n return false\n }\n\n let isSameReplicas = true\n args.replica_addresses.forEach((entry, index) => {\n if (_args?.replica_addresses[index] !== entry) {\n isSameReplicas = false\n }\n })\n\n return args.cluster_id === _args.cluster_id && isSameReplicas\n}\n\nlet _client: Client | undefined = undefined\nlet _interval: NodeJS.Timeout | undefined = undefined\n// Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\nlet _pinged = false\n// TODO: allow creation of clients if the arguments are different. Will require changes in node.zig as well.\nexport function createClient (args: InitArgs): Client {\n const duplicateArgs = isSameArgs(args)\n if (!duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with different arguments.')\n }\n\n if (duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with the same arguments.')\n }\n\n _args = Object.assign({}, { ...args })\n const context = binding.init({\n ...args,\n replica_addresses: Buffer.from(args.replica_addresses.join(','))\n })\n\n const request = (operation: Operation, batch: Event[], callback: ResultCallback) => {\n binding.request(context, operation, batch, callback)\n }\n\n const rawRequest = (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => {\n binding.raw_request(context, operation, rawBatch, callback)\n }\n\n const createAccounts = async (batch: Account[]): Promise<CreateAccountsError[]> => {\n // Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateAccountsError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_ACCOUNT, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const createTransfers = async (batch: Transfer[]): Promise<CreateTransfersError[]> => {\n // Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateTransfersError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_TRANSFER, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupAccounts = async (batch: AccountID[]): Promise<Account[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Account[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.ACCOUNT_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupTransfers = async (batch: TransferID[]): Promise<Transfer[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Transfer[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.TRANSFER_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const destroy = (): void => {\n binding.deinit(context)\n if (_interval){\n clearInterval(_interval)\n }\n _client = undefined\n }\n\n _client = {\n createAccounts,\n createTransfers,\n lookupAccounts,\n lookupTransfers,\n request,\n rawRequest,\n destroy\n }\n\n _interval = setInterval(() => {\n binding.tick(context)\n }, binding.tick_ms)\n\n return _client\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tigerbeetle-node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "TigerBeetle Node.js client",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/
|
|
9
|
+
"url": "git+https://github.com/tigerbeetledb/tigerbeetle-node.git"
|
|
10
10
|
},
|
|
11
11
|
"preferUnplugged": true,
|
|
12
12
|
"files": [
|
|
@@ -34,21 +34,21 @@
|
|
|
34
34
|
"benchmark": "./scripts/benchmark.sh",
|
|
35
35
|
"test": "node dist/test",
|
|
36
36
|
"postinstall": "npm run install_zig && npm run download_node_headers && npm run build_lib",
|
|
37
|
-
"install_zig": "./src/tigerbeetle/scripts/install_zig.sh",
|
|
38
|
-
"download_node_headers": "./scripts/download_node_headers.sh",
|
|
37
|
+
"install_zig": "sh ./src/tigerbeetle/scripts/install_zig.sh",
|
|
38
|
+
"download_node_headers": "sh ./scripts/download_node_headers.sh",
|
|
39
39
|
"build": "npm run build_tsc && npm run build_lib",
|
|
40
40
|
"build_tsc": "./node_modules/typescript/bin/tsc",
|
|
41
41
|
"build_lib": "mkdir -p dist && zig/zig build-lib -mcpu=baseline -OReleaseSafe -dynamic -lc -isystem build/node-$(node --version)/include/node src/node.zig -fallow-shlib-undefined -femit-bin=dist/client.node",
|
|
42
42
|
"prepack": "git submodule deinit --all && git submodule update --init && npm run build_tsc",
|
|
43
43
|
"clean": "rm -rf build dist node_modules src/zig-cache zig"
|
|
44
44
|
},
|
|
45
|
-
"author": "
|
|
45
|
+
"author": "TigerBeetle, Inc",
|
|
46
46
|
"license": "Apache-2.0",
|
|
47
47
|
"contributors": [
|
|
48
48
|
"Donovan Changfoot <don@coil.com>",
|
|
49
49
|
"Isaac Freund <isaac.freund@coil.com>",
|
|
50
50
|
"Jason Bruwer <jason.bruwer@coil.com>",
|
|
51
|
-
"Joran Dirk Greef <joran@
|
|
51
|
+
"Joran Dirk Greef <joran@tigerbeetle.com>"
|
|
52
52
|
],
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/node": "^14.14.41",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#!/bin/
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
|
|
2
3
|
set -e
|
|
3
4
|
|
|
4
5
|
# Ask node for headers
|
|
@@ -7,19 +8,25 @@ HEADERS_URL=$(node -p 'process.release.headersUrl')
|
|
|
7
8
|
# Work out the filename from the URL, as well as the directory without the ".tar.gz" file extension:
|
|
8
9
|
rm -rf ./build
|
|
9
10
|
mkdir build
|
|
10
|
-
HEADERS_TARBALL=./build
|
|
11
|
+
HEADERS_TARBALL=./build/$(basename "$HEADERS_URL")
|
|
11
12
|
|
|
12
13
|
# Download, making sure we download to the same output document, without wget adding "-1" etc. if the file was previously partially downloaded:
|
|
13
14
|
echo "Downloading $HEADERS_URL..."
|
|
14
|
-
if command -v wget
|
|
15
|
+
if command -v wget; then
|
|
15
16
|
# -4 forces `wget` to connect to ipv4 addresses, as ipv6 fails to resolve on certain distros.
|
|
16
17
|
# Only A records (for ipv4) are used in DNS:
|
|
17
|
-
|
|
18
|
+
ipv4="-4"
|
|
19
|
+
# But Alpine doesn't support this argument
|
|
20
|
+
if [ -f /etc/alpine-release ]; then
|
|
21
|
+
ipv4=""
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
wget $ipv4 --output-document="$HEADERS_TARBALL" "$HEADERS_URL"
|
|
18
25
|
else
|
|
19
|
-
curl --
|
|
26
|
+
curl --output "$HEADERS_TARBALL" "$HEADERS_URL"
|
|
20
27
|
fi
|
|
21
28
|
|
|
22
29
|
# Extract and then remove the downloaded tarball:
|
|
23
30
|
echo "Extracting $HEADERS_TARBALL..."
|
|
24
|
-
tar -xf $HEADERS_TARBALL -C ./build
|
|
25
|
-
rm $HEADERS_TARBALL
|
|
31
|
+
tar -xf "$HEADERS_TARBALL" -C ./build
|
|
32
|
+
rm "$HEADERS_TARBALL"
|
package/src/index.ts
CHANGED
|
@@ -43,6 +43,7 @@ export enum AccountFlags {
|
|
|
43
43
|
export enum CreateAccountError {
|
|
44
44
|
// ok = 0 (No Error)
|
|
45
45
|
linked_event_failed = 1,
|
|
46
|
+
linked_event_chain_open,
|
|
46
47
|
|
|
47
48
|
reserved_flag,
|
|
48
49
|
reserved_field,
|
|
@@ -51,23 +52,17 @@ export enum CreateAccountError {
|
|
|
51
52
|
id_must_not_be_int_max,
|
|
52
53
|
ledger_must_not_be_zero,
|
|
53
54
|
code_must_not_be_zero,
|
|
55
|
+
debits_pending_must_be_zero,
|
|
56
|
+
debits_posted_must_be_zero,
|
|
57
|
+
credits_pending_must_be_zero,
|
|
58
|
+
credits_posted_must_be_zero,
|
|
54
59
|
|
|
55
60
|
mutually_exclusive_flags,
|
|
56
61
|
|
|
57
|
-
overflows_debits,
|
|
58
|
-
overflows_credits,
|
|
59
|
-
|
|
60
|
-
exceeds_credits,
|
|
61
|
-
exceeds_debits,
|
|
62
|
-
|
|
63
62
|
exists_with_different_flags,
|
|
64
63
|
exists_with_different_user_data,
|
|
65
64
|
exists_with_different_ledger,
|
|
66
65
|
exists_with_different_code,
|
|
67
|
-
exists_with_different_debits_pending,
|
|
68
|
-
exists_with_different_debits_posted,
|
|
69
|
-
exists_with_different_credits_pending,
|
|
70
|
-
exists_with_different_credits_posted,
|
|
71
66
|
exists,
|
|
72
67
|
}
|
|
73
68
|
|
|
@@ -101,6 +96,7 @@ export enum TransferFlags {
|
|
|
101
96
|
export enum CreateTransferError {
|
|
102
97
|
// ok = 0 (No Error)
|
|
103
98
|
linked_event_failed = 1,
|
|
99
|
+
linked_event_chain_open,
|
|
104
100
|
|
|
105
101
|
reserved_flag,
|
|
106
102
|
reserved_field,
|
package/src/node.zig
CHANGED
|
@@ -13,7 +13,9 @@ const CreateAccountsResult = tb.CreateAccountsResult;
|
|
|
13
13
|
const CreateTransfersResult = tb.CreateTransfersResult;
|
|
14
14
|
|
|
15
15
|
const Storage = @import("tigerbeetle/src/storage.zig").Storage;
|
|
16
|
-
const StateMachine = @import("tigerbeetle/src/state_machine.zig").StateMachineType(Storage
|
|
16
|
+
const StateMachine = @import("tigerbeetle/src/state_machine.zig").StateMachineType(Storage, .{
|
|
17
|
+
.message_body_size_max = config.message_body_size_max,
|
|
18
|
+
});
|
|
17
19
|
const Operation = StateMachine.Operation;
|
|
18
20
|
const MessageBus = @import("tigerbeetle/src/message_bus.zig").MessageBusClient;
|
|
19
21
|
const MessagePool = @import("tigerbeetle/src/message_pool.zig").MessagePool;
|
|
@@ -24,7 +26,8 @@ const vsr = @import("tigerbeetle/src/vsr.zig");
|
|
|
24
26
|
const Header = vsr.Header;
|
|
25
27
|
const Client = vsr.Client(StateMachine, MessageBus);
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
// Since this is running in application space, log only critical messages to reduce noise.
|
|
30
|
+
pub const log_level: std.log.Level = .err;
|
|
28
31
|
|
|
29
32
|
/// N-API will call this constructor automatically to register the module.
|
|
30
33
|
export fn napi_register_module_v1(env: c.napi_env, exports: c.napi_value) c.napi_value {
|
|
@@ -137,7 +140,7 @@ const Context = struct {
|
|
|
137
140
|
context.message_pool = try MessagePool.init(allocator, .client);
|
|
138
141
|
errdefer context.message_pool.deinit(allocator);
|
|
139
142
|
|
|
140
|
-
context.addresses = try vsr.parse_addresses(allocator, addresses_raw);
|
|
143
|
+
context.addresses = try vsr.parse_addresses(allocator, addresses_raw, config.replicas_max);
|
|
141
144
|
errdefer allocator.free(context.addresses);
|
|
142
145
|
assert(context.addresses.len > 0);
|
|
143
146
|
|
|
@@ -50,7 +50,7 @@ for I in $REPLICAS
|
|
|
50
50
|
do
|
|
51
51
|
echo "Starting replica $I..."
|
|
52
52
|
FILE="./0_${I}.tigerbeetle.benchmark"
|
|
53
|
-
./tigerbeetle start --addresses=3001 "$FILE"
|
|
53
|
+
./tigerbeetle start --addresses=3001 "$FILE" >> benchmark.log 2>&1 &
|
|
54
54
|
done
|
|
55
55
|
|
|
56
56
|
# Wait for replicas to start, listen and connect:
|
|
@@ -61,10 +61,10 @@ echo "Benchmarking..."
|
|
|
61
61
|
zig/zig run -OReleaseSafe src/benchmark.zig
|
|
62
62
|
echo ""
|
|
63
63
|
|
|
64
|
-
for I in
|
|
64
|
+
for I in $REPLICAS
|
|
65
65
|
do
|
|
66
66
|
FILE="./0_${I}.tigerbeetle.benchmark"
|
|
67
|
-
if [ -f $FILE ]; then
|
|
68
|
-
rm $FILE
|
|
67
|
+
if [ -f "$FILE" ]; then
|
|
68
|
+
rm "$FILE"
|
|
69
69
|
fi
|
|
70
70
|
done
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
if [[ -z "$1" ]]; then
|
|
6
|
+
echo "Expected a first argument with a Docker image name or id"
|
|
7
|
+
exit 2
|
|
8
|
+
fi
|
|
9
|
+
|
|
10
|
+
if [[ "$2" != "--want-production" ]] && [[ "$2" != "--want-debug" ]]; then
|
|
11
|
+
echo "Expected a second argument: --want-production or --want-debug".
|
|
12
|
+
exit 2
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
check="
|
|
16
|
+
set -eu
|
|
17
|
+
|
|
18
|
+
apt-get update -y
|
|
19
|
+
apt-get install -y binutils
|
|
20
|
+
|
|
21
|
+
is_production=false
|
|
22
|
+
# This getSymbolFromDwarf symbol only appears to be in the debug
|
|
23
|
+
# build, not the release build. So that's the test!
|
|
24
|
+
if ! [[ \$(nm -an /opt/beta-beetle/tigerbeetle | grep getSymbolFromDwarf) ]]; then
|
|
25
|
+
is_production=true
|
|
26
|
+
fi
|
|
27
|
+
"
|
|
28
|
+
|
|
29
|
+
if [[ "$2" == '--want-production' ]]; then
|
|
30
|
+
cmd+="
|
|
31
|
+
if [[ \$is_production == false ]]; then
|
|
32
|
+
echo 'Does not seem to be a production build'
|
|
33
|
+
exit 1
|
|
34
|
+
fi"
|
|
35
|
+
else
|
|
36
|
+
cmd+="
|
|
37
|
+
if [[ \$is_production == true ]]; then
|
|
38
|
+
echo 'Does not seem to be a debug build'
|
|
39
|
+
exit 1
|
|
40
|
+
fi"
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
# We accept a passed-in arg
|
|
44
|
+
docker run --entrypoint bash "$1" -c "$check"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
set -eu
|
|
3
|
+
|
|
4
|
+
# Repeatedly runs some zig build command with different seeds and stores the output in the current directory.
|
|
5
|
+
# Eg `fuzz_repeatedly.sh lsm_forest_fuzz` will run `zig build lsm_forest_fuzz -- seed $SEED > fuzz_lsm_forest_fuzz_${SEED}`
|
|
6
|
+
# Use ./fuzz_unique_errors.sh to analyze the results.
|
|
7
|
+
|
|
8
|
+
FUZZ_COMMAND=$1
|
|
9
|
+
|
|
10
|
+
while true; do
|
|
11
|
+
SEED=$(od -A n -t u8 -N 8 /dev/urandom | xargs)
|
|
12
|
+
(zig build "$FUZZ_COMMAND" -Drelease-safe=true -- --seed "$SEED") || \
|
|
13
|
+
(zig build "$FUZZ_COMMAND" -- --seed "$SEED" 2> "fuzz_${FUZZ_COMMAND}_${SEED}") || \
|
|
14
|
+
true
|
|
15
|
+
done
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
set -eu
|
|
3
|
+
|
|
4
|
+
# After running ./fuzz_loop.sh use this script to produce a list of unique crashes.
|
|
5
|
+
# As a heuristic, we look for the first line of the stacktrace that occurs inside tigerbeetle code.
|
|
6
|
+
|
|
7
|
+
grep -m 1 'tigerbeetle/src' fuzz_* | sort -u -t':' -k2,2
|
|
@@ -1,7 +1,22 @@
|
|
|
1
|
-
#!/bin/
|
|
2
|
-
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
|
|
3
|
+
if [ -z "$DEBUG" ]; then
|
|
4
|
+
debug="$DEBUG"
|
|
5
|
+
fi
|
|
6
|
+
|
|
7
|
+
debug="$DEBUG"
|
|
8
|
+
if [ "$1" = "--debug" ]; then
|
|
9
|
+
debug="true"
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
set -eu
|
|
3
13
|
|
|
4
14
|
scripts/install_zig.sh
|
|
5
|
-
|
|
6
|
-
|
|
15
|
+
if [ "$debug" = "true" ]; then
|
|
16
|
+
echo "Building Tigerbeetle debug..."
|
|
17
|
+
zig/zig build -Dcpu=baseline
|
|
18
|
+
else
|
|
19
|
+
echo "Building TigerBeetle..."
|
|
20
|
+
zig/zig build -Dcpu=baseline -Drelease-safe
|
|
21
|
+
fi
|
|
7
22
|
mv zig-out/bin/tigerbeetle .
|
|
@@ -86,7 +86,11 @@ if exist %ZIG_DIRECTORY%\ (
|
|
|
86
86
|
|
|
87
87
|
:: Extract and then remove the downloaded tarball:
|
|
88
88
|
echo Extracting %ZIG_TARBALL%...
|
|
89
|
-
|
|
89
|
+
|
|
90
|
+
:: Hiding Powershell's progress bar during the extraction
|
|
91
|
+
SET PS_DISABLE_PROGRESS="$ProgressPreference=[System.Management.Automation.ActionPreference]::SilentlyContinue"
|
|
92
|
+
powershell -Command "%PS_DISABLE_PROGRESS%;Expand-Archive %ZIG_TARBALL% -DestinationPath ."
|
|
93
|
+
|
|
90
94
|
if not exist %ZIG_TARBALL% (
|
|
91
95
|
echo Failed to extract zip file.
|
|
92
96
|
exit 1
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
#!/bin/
|
|
2
|
-
set -
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
set -eu
|
|
3
3
|
|
|
4
4
|
ZIG_RELEASE_DEFAULT="0.9.1"
|
|
5
5
|
# Default to the release build, or allow the latest dev build, or an explicit release version:
|
|
6
6
|
ZIG_RELEASE=${1:-$ZIG_RELEASE_DEFAULT}
|
|
7
|
-
if [ "$ZIG_RELEASE"
|
|
7
|
+
if [ "$ZIG_RELEASE" = "latest" ]; then
|
|
8
8
|
ZIG_RELEASE="builds"
|
|
9
9
|
fi
|
|
10
10
|
|
|
11
11
|
# Validate the release version explicitly:
|
|
12
|
-
if
|
|
12
|
+
if echo "$ZIG_RELEASE" | grep -q '^builds$'; then
|
|
13
13
|
echo "Installing Zig latest build..."
|
|
14
|
-
elif
|
|
14
|
+
elif echo "$ZIG_RELEASE" | grep -q '^[0-9]\+.[0-9]\+.[0-9]\+$'; then
|
|
15
15
|
echo "Installing Zig $ZIG_RELEASE release build..."
|
|
16
16
|
else
|
|
17
17
|
echo "Release version invalid"
|
|
@@ -19,26 +19,31 @@ else
|
|
|
19
19
|
fi
|
|
20
20
|
|
|
21
21
|
# Determine the architecture:
|
|
22
|
-
if [
|
|
22
|
+
if [ "$(uname -m)" = 'arm64' ] || [ "$(uname -m)" = 'aarch64' ]; then
|
|
23
23
|
ZIG_ARCH="aarch64"
|
|
24
24
|
else
|
|
25
25
|
ZIG_ARCH="x86_64"
|
|
26
26
|
fi
|
|
27
27
|
|
|
28
28
|
# Determine the operating system:
|
|
29
|
-
if [
|
|
30
|
-
ZIG_OS="macos"
|
|
31
|
-
else
|
|
29
|
+
if [ "$(uname)" = "Linux" ]; then
|
|
32
30
|
ZIG_OS="linux"
|
|
31
|
+
else
|
|
32
|
+
ZIG_OS="macos"
|
|
33
33
|
fi
|
|
34
34
|
|
|
35
35
|
ZIG_TARGET="zig-$ZIG_OS-$ZIG_ARCH"
|
|
36
36
|
|
|
37
37
|
# Determine the build, split the JSON line on whitespace and extract the 2nd field, then remove quotes and commas:
|
|
38
|
-
if command -v wget
|
|
38
|
+
if command -v wget; then
|
|
39
39
|
# -4 forces `wget` to connect to ipv4 addresses, as ipv6 fails to resolve on certain distros.
|
|
40
40
|
# Only A records (for ipv4) are used in DNS:
|
|
41
|
-
|
|
41
|
+
ipv4="-4"
|
|
42
|
+
# But Alpine doesn't support this argument
|
|
43
|
+
if [ -f /etc/alpine-release ]; then
|
|
44
|
+
ipv4=""
|
|
45
|
+
fi
|
|
46
|
+
ZIG_URL=$(wget $ipv4 --quiet -O - https://ziglang.org/download/index.json | grep -F "$ZIG_TARGET" | grep -F "$ZIG_RELEASE" | awk '{print $2}' | sed 's/[",]//g')
|
|
42
47
|
else
|
|
43
48
|
ZIG_URL=$(curl --silent https://ziglang.org/download/index.json | grep -F "$ZIG_TARGET" | grep -F "$ZIG_RELEASE" | awk '{print $2}' | sed 's/[",]//g')
|
|
44
49
|
fi
|
|
@@ -55,12 +60,17 @@ ZIG_DIRECTORY=$(basename "$ZIG_TARBALL" .tar.xz)
|
|
|
55
60
|
|
|
56
61
|
# Download, making sure we download to the same output document, without wget adding "-1" etc. if the file was previously partially downloaded:
|
|
57
62
|
echo "Downloading $ZIG_URL..."
|
|
58
|
-
if command -v wget
|
|
63
|
+
if command -v wget; then
|
|
59
64
|
# -4 forces `wget` to connect to ipv4 addresses, as ipv6 fails to resolve on certain distros.
|
|
60
65
|
# Only A records (for ipv4) are used in DNS:
|
|
61
|
-
|
|
66
|
+
ipv4="-4"
|
|
67
|
+
# But Alpine doesn't support this argument
|
|
68
|
+
if [ -f /etc/alpine-release ]; then
|
|
69
|
+
ipv4=""
|
|
70
|
+
fi
|
|
71
|
+
wget $ipv4 --quiet --output-document="$ZIG_TARBALL" "$ZIG_URL"
|
|
62
72
|
else
|
|
63
|
-
curl --silent --
|
|
73
|
+
curl --silent --output "$ZIG_TARBALL" "$ZIG_URL"
|
|
64
74
|
fi
|
|
65
75
|
|
|
66
76
|
# Extract and then remove the downloaded tarball:
|