tigerbeetle-node 0.9.0 → 0.10.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 +3 -2
- package/dist/index.d.ts +66 -61
- package/dist/index.js +66 -61
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +5 -0
- package/src/node.zig +17 -18
- package/src/tigerbeetle/scripts/benchmark.bat +4 -3
- package/src/tigerbeetle/scripts/benchmark.sh +25 -10
- package/src/tigerbeetle/scripts/install.sh +2 -1
- package/src/tigerbeetle/scripts/install_zig.sh +14 -18
- package/src/tigerbeetle/scripts/upgrade_ubuntu_kernel.sh +12 -3
- package/src/tigerbeetle/scripts/vopr.sh +5 -5
- package/src/tigerbeetle/src/benchmark.zig +17 -9
- package/src/tigerbeetle/src/benchmark_array_search.zig +317 -0
- package/src/tigerbeetle/src/benchmarks/perf.zig +299 -0
- package/src/tigerbeetle/src/c/tb_client/context.zig +103 -0
- package/src/tigerbeetle/src/c/tb_client/packet.zig +80 -0
- package/src/tigerbeetle/src/c/tb_client/signal.zig +288 -0
- package/src/tigerbeetle/src/c/tb_client/thread.zig +329 -0
- package/src/tigerbeetle/src/c/tb_client.h +201 -0
- package/src/tigerbeetle/src/c/tb_client.zig +101 -0
- package/src/tigerbeetle/src/c/test.zig +1 -0
- package/src/tigerbeetle/src/cli.zig +142 -83
- package/src/tigerbeetle/src/config.zig +119 -10
- package/src/tigerbeetle/src/demo.zig +12 -8
- package/src/tigerbeetle/src/demo_05_post_pending_transfers.zig +2 -2
- package/src/tigerbeetle/src/ewah.zig +318 -0
- package/src/tigerbeetle/src/ewah_benchmark.zig +121 -0
- package/src/tigerbeetle/src/eytzinger_benchmark.zig +317 -0
- package/src/tigerbeetle/src/fifo.zig +17 -1
- package/src/tigerbeetle/src/io/darwin.zig +12 -10
- package/src/tigerbeetle/src/io/linux.zig +25 -9
- package/src/tigerbeetle/src/io/windows.zig +13 -9
- package/src/tigerbeetle/src/iops.zig +101 -0
- package/src/tigerbeetle/src/lsm/binary_search.zig +214 -0
- package/src/tigerbeetle/src/lsm/bloom_filter.zig +82 -0
- package/src/tigerbeetle/src/lsm/compaction.zig +603 -0
- package/src/tigerbeetle/src/lsm/composite_key.zig +75 -0
- package/src/tigerbeetle/src/lsm/direction.zig +11 -0
- package/src/tigerbeetle/src/lsm/eytzinger.zig +587 -0
- package/src/tigerbeetle/src/lsm/forest.zig +630 -0
- package/src/tigerbeetle/src/lsm/grid.zig +473 -0
- package/src/tigerbeetle/src/lsm/groove.zig +939 -0
- package/src/tigerbeetle/src/lsm/k_way_merge.zig +452 -0
- package/src/tigerbeetle/src/lsm/level_iterator.zig +296 -0
- package/src/tigerbeetle/src/lsm/manifest.zig +680 -0
- package/src/tigerbeetle/src/lsm/manifest_level.zig +1169 -0
- package/src/tigerbeetle/src/lsm/manifest_log.zig +904 -0
- package/src/tigerbeetle/src/lsm/node_pool.zig +231 -0
- package/src/tigerbeetle/src/lsm/posted_groove.zig +399 -0
- package/src/tigerbeetle/src/lsm/segmented_array.zig +998 -0
- package/src/tigerbeetle/src/lsm/set_associative_cache.zig +844 -0
- package/src/tigerbeetle/src/lsm/table.zig +932 -0
- package/src/tigerbeetle/src/lsm/table_immutable.zig +196 -0
- package/src/tigerbeetle/src/lsm/table_iterator.zig +295 -0
- package/src/tigerbeetle/src/lsm/table_mutable.zig +123 -0
- package/src/tigerbeetle/src/lsm/test.zig +429 -0
- package/src/tigerbeetle/src/lsm/tree.zig +1085 -0
- package/src/tigerbeetle/src/main.zig +119 -109
- package/src/tigerbeetle/src/message_bus.zig +49 -48
- package/src/tigerbeetle/src/message_pool.zig +15 -2
- package/src/tigerbeetle/src/ring_buffer.zig +126 -30
- package/src/tigerbeetle/src/simulator.zig +76 -44
- package/src/tigerbeetle/src/state_machine.zig +1022 -585
- package/src/tigerbeetle/src/storage.zig +46 -16
- package/src/tigerbeetle/src/test/cluster.zig +109 -63
- package/src/tigerbeetle/src/test/message_bus.zig +15 -24
- package/src/tigerbeetle/src/test/network.zig +26 -17
- package/src/tigerbeetle/src/test/state_checker.zig +7 -5
- package/src/tigerbeetle/src/test/state_machine.zig +159 -69
- package/src/tigerbeetle/src/test/storage.zig +57 -28
- package/src/tigerbeetle/src/tigerbeetle.zig +5 -0
- package/src/tigerbeetle/src/unit_tests.zig +8 -0
- package/src/tigerbeetle/src/util.zig +51 -0
- package/src/tigerbeetle/src/vsr/client.zig +21 -7
- package/src/tigerbeetle/src/vsr/journal.zig +154 -167
- package/src/tigerbeetle/src/vsr/replica.zig +744 -226
- package/src/tigerbeetle/src/vsr/superblock.zig +1743 -0
- package/src/tigerbeetle/src/vsr/superblock_client_table.zig +258 -0
- package/src/tigerbeetle/src/vsr/superblock_free_set.zig +644 -0
- package/src/tigerbeetle/src/vsr/superblock_manifest.zig +546 -0
- package/src/tigerbeetle/src/vsr.zig +43 -115
package/README.md
CHANGED
|
@@ -243,7 +243,8 @@ npm run benchmark
|
|
|
243
243
|
#### Test
|
|
244
244
|
|
|
245
245
|
```shell
|
|
246
|
-
./tigerbeetle
|
|
247
|
-
./tigerbeetle start --
|
|
246
|
+
./tigerbeetle format --cluster=0 --replica=0 ./cluster_0_replica_0_test.tigerbeetle
|
|
247
|
+
./tigerbeetle start --addresses=3001 ./cluster_0_replica_0_test.tigerbeetle > tigerbeetle_test.log 2>&1
|
|
248
248
|
npm run test
|
|
249
249
|
```
|
|
250
|
+
For more information, type; `./tigerbeetle -h`
|
package/dist/index.d.ts
CHANGED
|
@@ -27,22 +27,23 @@ export declare enum CreateAccountError {
|
|
|
27
27
|
reserved_flag = 2,
|
|
28
28
|
reserved_field = 3,
|
|
29
29
|
id_must_not_be_zero = 4,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
30
|
+
id_must_not_be_int_max = 5,
|
|
31
|
+
ledger_must_not_be_zero = 6,
|
|
32
|
+
code_must_not_be_zero = 7,
|
|
33
|
+
mutually_exclusive_flags = 8,
|
|
34
|
+
overflows_debits = 9,
|
|
35
|
+
overflows_credits = 10,
|
|
36
|
+
exceeds_credits = 11,
|
|
37
|
+
exceeds_debits = 12,
|
|
38
|
+
exists_with_different_flags = 13,
|
|
39
|
+
exists_with_different_user_data = 14,
|
|
40
|
+
exists_with_different_ledger = 15,
|
|
41
|
+
exists_with_different_code = 16,
|
|
42
|
+
exists_with_different_debits_pending = 17,
|
|
43
|
+
exists_with_different_debits_posted = 18,
|
|
44
|
+
exists_with_different_credits_pending = 19,
|
|
45
|
+
exists_with_different_credits_posted = 20,
|
|
46
|
+
exists = 21
|
|
46
47
|
}
|
|
47
48
|
export declare type CreateAccountsError = {
|
|
48
49
|
index: number;
|
|
@@ -73,51 +74,55 @@ export declare enum CreateTransferError {
|
|
|
73
74
|
reserved_flag = 2,
|
|
74
75
|
reserved_field = 3,
|
|
75
76
|
id_must_not_be_zero = 4,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
77
|
+
id_must_not_be_int_max = 5,
|
|
78
|
+
debit_account_id_must_not_be_zero = 6,
|
|
79
|
+
debit_account_id_must_not_be_int_max = 7,
|
|
80
|
+
credit_account_id_must_not_be_zero = 8,
|
|
81
|
+
credit_account_id_must_not_be_int_max = 9,
|
|
82
|
+
accounts_must_be_different = 10,
|
|
83
|
+
pending_id_must_be_zero = 11,
|
|
84
|
+
pending_transfer_must_timeout = 12,
|
|
85
|
+
ledger_must_not_be_zero = 13,
|
|
86
|
+
code_must_not_be_zero = 14,
|
|
87
|
+
amount_must_not_be_zero = 15,
|
|
88
|
+
debit_account_not_found = 16,
|
|
89
|
+
credit_account_not_found = 17,
|
|
90
|
+
accounts_must_have_the_same_ledger = 18,
|
|
91
|
+
transfer_must_have_the_same_ledger_as_accounts = 19,
|
|
92
|
+
exists_with_different_flags = 20,
|
|
93
|
+
exists_with_different_debit_account_id = 21,
|
|
94
|
+
exists_with_different_credit_account_id = 22,
|
|
95
|
+
exists_with_different_user_data = 23,
|
|
96
|
+
exists_with_different_pending_id = 24,
|
|
97
|
+
exists_with_different_timeout = 25,
|
|
98
|
+
exists_with_different_code = 26,
|
|
99
|
+
exists_with_different_amount = 27,
|
|
100
|
+
exists = 28,
|
|
101
|
+
overflows_debits_pending = 29,
|
|
102
|
+
overflows_credits_pending = 30,
|
|
103
|
+
overflows_debits_posted = 31,
|
|
104
|
+
overflows_credits_posted = 32,
|
|
105
|
+
overflows_debits = 33,
|
|
106
|
+
overflows_credits = 34,
|
|
107
|
+
exceeds_credits = 35,
|
|
108
|
+
exceeds_debits = 36,
|
|
109
|
+
cannot_post_and_void_pending_transfer = 37,
|
|
110
|
+
pending_transfer_cannot_post_or_void_another = 38,
|
|
111
|
+
timeout_reserved_for_pending_transfer = 39,
|
|
112
|
+
pending_id_must_not_be_zero = 40,
|
|
113
|
+
pending_id_must_not_be_int_max = 41,
|
|
114
|
+
pending_id_must_be_different = 42,
|
|
115
|
+
pending_transfer_not_found = 43,
|
|
116
|
+
pending_transfer_not_pending = 44,
|
|
117
|
+
pending_transfer_has_different_debit_account_id = 45,
|
|
118
|
+
pending_transfer_has_different_credit_account_id = 46,
|
|
119
|
+
pending_transfer_has_different_ledger = 47,
|
|
120
|
+
pending_transfer_has_different_code = 48,
|
|
121
|
+
exceeds_pending_transfer_amount = 49,
|
|
122
|
+
pending_transfer_has_different_amount = 50,
|
|
123
|
+
pending_transfer_already_posted = 51,
|
|
124
|
+
pending_transfer_already_voided = 52,
|
|
125
|
+
pending_transfer_expired = 53
|
|
121
126
|
}
|
|
122
127
|
export declare type CreateTransfersError = {
|
|
123
128
|
index: number;
|
package/dist/index.js
CHANGED
|
@@ -14,22 +14,23 @@ var CreateAccountError;
|
|
|
14
14
|
CreateAccountError[CreateAccountError["reserved_flag"] = 2] = "reserved_flag";
|
|
15
15
|
CreateAccountError[CreateAccountError["reserved_field"] = 3] = "reserved_field";
|
|
16
16
|
CreateAccountError[CreateAccountError["id_must_not_be_zero"] = 4] = "id_must_not_be_zero";
|
|
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["
|
|
32
|
-
CreateAccountError[CreateAccountError["
|
|
17
|
+
CreateAccountError[CreateAccountError["id_must_not_be_int_max"] = 5] = "id_must_not_be_int_max";
|
|
18
|
+
CreateAccountError[CreateAccountError["ledger_must_not_be_zero"] = 6] = "ledger_must_not_be_zero";
|
|
19
|
+
CreateAccountError[CreateAccountError["code_must_not_be_zero"] = 7] = "code_must_not_be_zero";
|
|
20
|
+
CreateAccountError[CreateAccountError["mutually_exclusive_flags"] = 8] = "mutually_exclusive_flags";
|
|
21
|
+
CreateAccountError[CreateAccountError["overflows_debits"] = 9] = "overflows_debits";
|
|
22
|
+
CreateAccountError[CreateAccountError["overflows_credits"] = 10] = "overflows_credits";
|
|
23
|
+
CreateAccountError[CreateAccountError["exceeds_credits"] = 11] = "exceeds_credits";
|
|
24
|
+
CreateAccountError[CreateAccountError["exceeds_debits"] = 12] = "exceeds_debits";
|
|
25
|
+
CreateAccountError[CreateAccountError["exists_with_different_flags"] = 13] = "exists_with_different_flags";
|
|
26
|
+
CreateAccountError[CreateAccountError["exists_with_different_user_data"] = 14] = "exists_with_different_user_data";
|
|
27
|
+
CreateAccountError[CreateAccountError["exists_with_different_ledger"] = 15] = "exists_with_different_ledger";
|
|
28
|
+
CreateAccountError[CreateAccountError["exists_with_different_code"] = 16] = "exists_with_different_code";
|
|
29
|
+
CreateAccountError[CreateAccountError["exists_with_different_debits_pending"] = 17] = "exists_with_different_debits_pending";
|
|
30
|
+
CreateAccountError[CreateAccountError["exists_with_different_debits_posted"] = 18] = "exists_with_different_debits_posted";
|
|
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";
|
|
33
34
|
})(CreateAccountError = exports.CreateAccountError || (exports.CreateAccountError = {}));
|
|
34
35
|
var TransferFlags;
|
|
35
36
|
(function (TransferFlags) {
|
|
@@ -44,51 +45,55 @@ var CreateTransferError;
|
|
|
44
45
|
CreateTransferError[CreateTransferError["reserved_flag"] = 2] = "reserved_flag";
|
|
45
46
|
CreateTransferError[CreateTransferError["reserved_field"] = 3] = "reserved_field";
|
|
46
47
|
CreateTransferError[CreateTransferError["id_must_not_be_zero"] = 4] = "id_must_not_be_zero";
|
|
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["
|
|
48
|
+
CreateTransferError[CreateTransferError["id_must_not_be_int_max"] = 5] = "id_must_not_be_int_max";
|
|
49
|
+
CreateTransferError[CreateTransferError["debit_account_id_must_not_be_zero"] = 6] = "debit_account_id_must_not_be_zero";
|
|
50
|
+
CreateTransferError[CreateTransferError["debit_account_id_must_not_be_int_max"] = 7] = "debit_account_id_must_not_be_int_max";
|
|
51
|
+
CreateTransferError[CreateTransferError["credit_account_id_must_not_be_zero"] = 8] = "credit_account_id_must_not_be_zero";
|
|
52
|
+
CreateTransferError[CreateTransferError["credit_account_id_must_not_be_int_max"] = 9] = "credit_account_id_must_not_be_int_max";
|
|
53
|
+
CreateTransferError[CreateTransferError["accounts_must_be_different"] = 10] = "accounts_must_be_different";
|
|
54
|
+
CreateTransferError[CreateTransferError["pending_id_must_be_zero"] = 11] = "pending_id_must_be_zero";
|
|
55
|
+
CreateTransferError[CreateTransferError["pending_transfer_must_timeout"] = 12] = "pending_transfer_must_timeout";
|
|
56
|
+
CreateTransferError[CreateTransferError["ledger_must_not_be_zero"] = 13] = "ledger_must_not_be_zero";
|
|
57
|
+
CreateTransferError[CreateTransferError["code_must_not_be_zero"] = 14] = "code_must_not_be_zero";
|
|
58
|
+
CreateTransferError[CreateTransferError["amount_must_not_be_zero"] = 15] = "amount_must_not_be_zero";
|
|
59
|
+
CreateTransferError[CreateTransferError["debit_account_not_found"] = 16] = "debit_account_not_found";
|
|
60
|
+
CreateTransferError[CreateTransferError["credit_account_not_found"] = 17] = "credit_account_not_found";
|
|
61
|
+
CreateTransferError[CreateTransferError["accounts_must_have_the_same_ledger"] = 18] = "accounts_must_have_the_same_ledger";
|
|
62
|
+
CreateTransferError[CreateTransferError["transfer_must_have_the_same_ledger_as_accounts"] = 19] = "transfer_must_have_the_same_ledger_as_accounts";
|
|
63
|
+
CreateTransferError[CreateTransferError["exists_with_different_flags"] = 20] = "exists_with_different_flags";
|
|
64
|
+
CreateTransferError[CreateTransferError["exists_with_different_debit_account_id"] = 21] = "exists_with_different_debit_account_id";
|
|
65
|
+
CreateTransferError[CreateTransferError["exists_with_different_credit_account_id"] = 22] = "exists_with_different_credit_account_id";
|
|
66
|
+
CreateTransferError[CreateTransferError["exists_with_different_user_data"] = 23] = "exists_with_different_user_data";
|
|
67
|
+
CreateTransferError[CreateTransferError["exists_with_different_pending_id"] = 24] = "exists_with_different_pending_id";
|
|
68
|
+
CreateTransferError[CreateTransferError["exists_with_different_timeout"] = 25] = "exists_with_different_timeout";
|
|
69
|
+
CreateTransferError[CreateTransferError["exists_with_different_code"] = 26] = "exists_with_different_code";
|
|
70
|
+
CreateTransferError[CreateTransferError["exists_with_different_amount"] = 27] = "exists_with_different_amount";
|
|
71
|
+
CreateTransferError[CreateTransferError["exists"] = 28] = "exists";
|
|
72
|
+
CreateTransferError[CreateTransferError["overflows_debits_pending"] = 29] = "overflows_debits_pending";
|
|
73
|
+
CreateTransferError[CreateTransferError["overflows_credits_pending"] = 30] = "overflows_credits_pending";
|
|
74
|
+
CreateTransferError[CreateTransferError["overflows_debits_posted"] = 31] = "overflows_debits_posted";
|
|
75
|
+
CreateTransferError[CreateTransferError["overflows_credits_posted"] = 32] = "overflows_credits_posted";
|
|
76
|
+
CreateTransferError[CreateTransferError["overflows_debits"] = 33] = "overflows_debits";
|
|
77
|
+
CreateTransferError[CreateTransferError["overflows_credits"] = 34] = "overflows_credits";
|
|
78
|
+
CreateTransferError[CreateTransferError["exceeds_credits"] = 35] = "exceeds_credits";
|
|
79
|
+
CreateTransferError[CreateTransferError["exceeds_debits"] = 36] = "exceeds_debits";
|
|
80
|
+
CreateTransferError[CreateTransferError["cannot_post_and_void_pending_transfer"] = 37] = "cannot_post_and_void_pending_transfer";
|
|
81
|
+
CreateTransferError[CreateTransferError["pending_transfer_cannot_post_or_void_another"] = 38] = "pending_transfer_cannot_post_or_void_another";
|
|
82
|
+
CreateTransferError[CreateTransferError["timeout_reserved_for_pending_transfer"] = 39] = "timeout_reserved_for_pending_transfer";
|
|
83
|
+
CreateTransferError[CreateTransferError["pending_id_must_not_be_zero"] = 40] = "pending_id_must_not_be_zero";
|
|
84
|
+
CreateTransferError[CreateTransferError["pending_id_must_not_be_int_max"] = 41] = "pending_id_must_not_be_int_max";
|
|
85
|
+
CreateTransferError[CreateTransferError["pending_id_must_be_different"] = 42] = "pending_id_must_be_different";
|
|
86
|
+
CreateTransferError[CreateTransferError["pending_transfer_not_found"] = 43] = "pending_transfer_not_found";
|
|
87
|
+
CreateTransferError[CreateTransferError["pending_transfer_not_pending"] = 44] = "pending_transfer_not_pending";
|
|
88
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_debit_account_id"] = 45] = "pending_transfer_has_different_debit_account_id";
|
|
89
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_credit_account_id"] = 46] = "pending_transfer_has_different_credit_account_id";
|
|
90
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_ledger"] = 47] = "pending_transfer_has_different_ledger";
|
|
91
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_code"] = 48] = "pending_transfer_has_different_code";
|
|
92
|
+
CreateTransferError[CreateTransferError["exceeds_pending_transfer_amount"] = 49] = "exceeds_pending_transfer_amount";
|
|
93
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_amount"] = 50] = "pending_transfer_has_different_amount";
|
|
94
|
+
CreateTransferError[CreateTransferError["pending_transfer_already_posted"] = 51] = "pending_transfer_already_posted";
|
|
95
|
+
CreateTransferError[CreateTransferError["pending_transfer_already_voided"] = 52] = "pending_transfer_already_voided";
|
|
96
|
+
CreateTransferError[CreateTransferError["pending_transfer_expired"] = 53] = "pending_transfer_expired";
|
|
92
97
|
})(CreateTransferError = exports.CreateTransferError || (exports.CreateTransferError = {}));
|
|
93
98
|
var Operation;
|
|
94
99
|
(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 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 debit_account_id_must_not_be_zero,\n credit_account_id_must_not_be_zero,\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_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\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"]}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -48,6 +48,7 @@ export enum CreateAccountError {
|
|
|
48
48
|
reserved_field,
|
|
49
49
|
|
|
50
50
|
id_must_not_be_zero,
|
|
51
|
+
id_must_not_be_int_max,
|
|
51
52
|
ledger_must_not_be_zero,
|
|
52
53
|
code_must_not_be_zero,
|
|
53
54
|
|
|
@@ -105,8 +106,11 @@ export enum CreateTransferError {
|
|
|
105
106
|
reserved_field,
|
|
106
107
|
|
|
107
108
|
id_must_not_be_zero,
|
|
109
|
+
id_must_not_be_int_max,
|
|
108
110
|
debit_account_id_must_not_be_zero,
|
|
111
|
+
debit_account_id_must_not_be_int_max,
|
|
109
112
|
credit_account_id_must_not_be_zero,
|
|
113
|
+
credit_account_id_must_not_be_int_max,
|
|
110
114
|
accounts_must_be_different,
|
|
111
115
|
|
|
112
116
|
pending_id_must_be_zero,
|
|
@@ -147,6 +151,7 @@ export enum CreateTransferError {
|
|
|
147
151
|
timeout_reserved_for_pending_transfer,
|
|
148
152
|
|
|
149
153
|
pending_id_must_not_be_zero,
|
|
154
|
+
pending_id_must_not_be_int_max,
|
|
150
155
|
pending_id_must_be_different,
|
|
151
156
|
|
|
152
157
|
pending_transfer_not_found,
|
package/src/node.zig
CHANGED
|
@@ -12,9 +12,11 @@ const TransferFlags = tb.TransferFlags;
|
|
|
12
12
|
const CreateAccountsResult = tb.CreateAccountsResult;
|
|
13
13
|
const CreateTransfersResult = tb.CreateTransfersResult;
|
|
14
14
|
|
|
15
|
-
const
|
|
15
|
+
const Storage = @import("tigerbeetle/src/storage.zig").Storage;
|
|
16
|
+
const StateMachine = @import("tigerbeetle/src/state_machine.zig").StateMachineType(Storage);
|
|
16
17
|
const Operation = StateMachine.Operation;
|
|
17
18
|
const MessageBus = @import("tigerbeetle/src/message_bus.zig").MessageBusClient;
|
|
19
|
+
const MessagePool = @import("tigerbeetle/src/message_pool.zig").MessagePool;
|
|
18
20
|
const IO = @import("tigerbeetle/src/io.zig").IO;
|
|
19
21
|
const config = @import("tigerbeetle/src/config.zig");
|
|
20
22
|
|
|
@@ -118,8 +120,8 @@ fn globalsCast(globals_raw: *anyopaque) *Globals {
|
|
|
118
120
|
const Context = struct {
|
|
119
121
|
io: *IO,
|
|
120
122
|
addresses: []std.net.Address,
|
|
121
|
-
message_bus: MessageBus,
|
|
122
123
|
client: Client,
|
|
124
|
+
message_pool: MessagePool,
|
|
123
125
|
|
|
124
126
|
fn create(
|
|
125
127
|
env: c.napi_env,
|
|
@@ -132,32 +134,26 @@ const Context = struct {
|
|
|
132
134
|
errdefer allocator.destroy(context);
|
|
133
135
|
|
|
134
136
|
context.io = io;
|
|
137
|
+
context.message_pool = try MessagePool.init(allocator, .client);
|
|
138
|
+
errdefer context.message_pool.deinit(allocator);
|
|
135
139
|
|
|
136
140
|
context.addresses = try vsr.parse_addresses(allocator, addresses_raw);
|
|
137
141
|
errdefer allocator.free(context.addresses);
|
|
138
142
|
assert(context.addresses.len > 0);
|
|
139
143
|
|
|
140
144
|
const client_id = std.crypto.random.int(u128);
|
|
141
|
-
|
|
142
|
-
context.message_bus = try MessageBus.init(
|
|
143
|
-
allocator,
|
|
144
|
-
cluster,
|
|
145
|
-
context.addresses,
|
|
146
|
-
client_id,
|
|
147
|
-
context.io,
|
|
148
|
-
);
|
|
149
|
-
errdefer context.message_bus.deinit();
|
|
150
|
-
|
|
151
145
|
context.client = try Client.init(
|
|
152
146
|
allocator,
|
|
153
147
|
client_id,
|
|
154
148
|
cluster,
|
|
155
149
|
@intCast(u8, context.addresses.len),
|
|
156
|
-
&context.
|
|
150
|
+
&context.message_pool,
|
|
151
|
+
.{
|
|
152
|
+
.configuration = context.addresses,
|
|
153
|
+
.io = context.io,
|
|
154
|
+
},
|
|
157
155
|
);
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
context.message_bus.set_on_message(*Client, &context.client, Client.on_message);
|
|
156
|
+
defer context.client.deinit(allocator);
|
|
161
157
|
|
|
162
158
|
return try translate.create_external(env, context);
|
|
163
159
|
}
|
|
@@ -769,8 +765,11 @@ fn deinit(env: c.napi_env, info: c.napi_callback_info) callconv(.C) c.napi_value
|
|
|
769
765
|
"Failed to get Client Context pointer.",
|
|
770
766
|
) catch return null;
|
|
771
767
|
const context = contextCast(context_raw.?) catch return null;
|
|
772
|
-
|
|
773
|
-
|
|
768
|
+
|
|
769
|
+
const allocator = std.heap.c_allocator;
|
|
770
|
+
context.client.deinit(allocator);
|
|
771
|
+
context.message_pool.deinit(allocator);
|
|
772
|
+
allocator.free(context.addresses);
|
|
774
773
|
|
|
775
774
|
return null;
|
|
776
775
|
}
|
|
@@ -27,14 +27,15 @@ move zig-out\bin\tigerbeetle.exe . >nul
|
|
|
27
27
|
|
|
28
28
|
for /l %%i in (0, 1, 0) do (
|
|
29
29
|
echo Initializing replica %%i
|
|
30
|
-
set ZIG_FILE=.\
|
|
30
|
+
set ZIG_FILE=.\0_%%i.tigerbeetle.benchmark
|
|
31
31
|
if exist "!ZIG_FILE!" DEL /F "!ZIG_FILE!"
|
|
32
|
-
.\tigerbeetle.exe
|
|
32
|
+
.\tigerbeetle.exe format --cluster=0 --replica=%%i !ZIG_FILE! > benchmark.log 2>&1
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
for /l %%i in (0, 1, 0) do (
|
|
36
36
|
echo Starting replica %%i
|
|
37
|
-
|
|
37
|
+
set ZIG_FILE=.\0_%%i.tigerbeetle.benchmark
|
|
38
|
+
start /B "tigerbeetle_%%i" .\tigerbeetle.exe start --addresses=3001 !ZIG_FILE! > benchmark.log 2>&1
|
|
38
39
|
)
|
|
39
40
|
|
|
40
41
|
rem Wait for replicas to start, listen and connect:
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
set -
|
|
2
|
+
set -eEuo pipefail
|
|
3
|
+
|
|
4
|
+
# Number of replicas to benchmark
|
|
5
|
+
REPLICAS=${REPLICAS:-0}
|
|
3
6
|
|
|
4
7
|
# Install Zig if it does not already exist:
|
|
5
8
|
if [ ! -d "zig" ]; then
|
|
@@ -22,7 +25,7 @@ function onerror {
|
|
|
22
25
|
cat benchmark.log
|
|
23
26
|
fi
|
|
24
27
|
|
|
25
|
-
for I in
|
|
28
|
+
for I in $REPLICAS
|
|
26
29
|
do
|
|
27
30
|
echo "Stopping replica $I..."
|
|
28
31
|
done
|
|
@@ -30,20 +33,24 @@ function onerror {
|
|
|
30
33
|
}
|
|
31
34
|
trap onerror EXIT
|
|
32
35
|
|
|
33
|
-
for I in
|
|
36
|
+
for I in $REPLICAS
|
|
34
37
|
do
|
|
35
|
-
echo "
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
echo "Formatting replica $I..."
|
|
39
|
+
|
|
40
|
+
# Be careful to use a benchmark-specific filename so that we don't erase a real data file:
|
|
41
|
+
FILE="./0_${I}.tigerbeetle.benchmark"
|
|
42
|
+
if [ -f "$FILE" ]; then
|
|
43
|
+
rm "$FILE"
|
|
39
44
|
fi
|
|
40
|
-
|
|
45
|
+
|
|
46
|
+
./tigerbeetle format --cluster=0 --replica="$I" "$FILE" > benchmark.log 2>&1
|
|
41
47
|
done
|
|
42
48
|
|
|
43
|
-
for I in
|
|
49
|
+
for I in $REPLICAS
|
|
44
50
|
do
|
|
45
51
|
echo "Starting replica $I..."
|
|
46
|
-
./tigerbeetle
|
|
52
|
+
FILE="./0_${I}.tigerbeetle.benchmark"
|
|
53
|
+
./tigerbeetle start --addresses=3001 "$FILE" > benchmark.log 2>&1 &
|
|
47
54
|
done
|
|
48
55
|
|
|
49
56
|
# Wait for replicas to start, listen and connect:
|
|
@@ -53,3 +60,11 @@ echo ""
|
|
|
53
60
|
echo "Benchmarking..."
|
|
54
61
|
zig/zig run -OReleaseSafe src/benchmark.zig
|
|
55
62
|
echo ""
|
|
63
|
+
|
|
64
|
+
for I in 0
|
|
65
|
+
do
|
|
66
|
+
FILE="./0_${I}.tigerbeetle.benchmark"
|
|
67
|
+
if [ -f $FILE ]; then
|
|
68
|
+
rm $FILE
|
|
69
|
+
fi
|
|
70
|
+
done
|