tigerbeetle-node 0.11.4 → 0.11.6

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.
Files changed (79) hide show
  1. package/dist/.client.node.sha256 +1 -1
  2. package/dist/index.d.ts +41 -42
  3. package/dist/index.js +41 -42
  4. package/dist/index.js.map +1 -1
  5. package/package.json +2 -2
  6. package/src/index.ts +0 -1
  7. package/src/node.zig +5 -5
  8. package/src/tigerbeetle/scripts/benchmark.bat +6 -1
  9. package/src/tigerbeetle/scripts/benchmark.sh +1 -1
  10. package/src/tigerbeetle/src/benchmark.zig +4 -4
  11. package/src/tigerbeetle/src/c/tb_client/context.zig +6 -6
  12. package/src/tigerbeetle/src/c/tb_client/echo_client.zig +2 -2
  13. package/src/tigerbeetle/src/c/tb_client/thread.zig +0 -1
  14. package/src/tigerbeetle/src/c/tb_client.h +42 -43
  15. package/src/tigerbeetle/src/c/tb_client.zig +2 -2
  16. package/src/tigerbeetle/src/c/test.zig +8 -8
  17. package/src/tigerbeetle/src/cli.zig +41 -17
  18. package/src/tigerbeetle/src/config.zig +24 -3
  19. package/src/tigerbeetle/src/constants.zig +8 -5
  20. package/src/tigerbeetle/src/demo.zig +4 -4
  21. package/src/tigerbeetle/src/io/darwin.zig +4 -4
  22. package/src/tigerbeetle/src/io/linux.zig +6 -6
  23. package/src/tigerbeetle/src/io/windows.zig +4 -4
  24. package/src/tigerbeetle/src/lsm/compaction.zig +17 -51
  25. package/src/tigerbeetle/src/lsm/forest.zig +2 -2
  26. package/src/tigerbeetle/src/lsm/forest_fuzz.zig +11 -16
  27. package/src/tigerbeetle/src/lsm/grid.zig +5 -5
  28. package/src/tigerbeetle/src/lsm/groove.zig +7 -4
  29. package/src/tigerbeetle/src/lsm/level_iterator.zig +2 -2
  30. package/src/tigerbeetle/src/lsm/manifest.zig +19 -18
  31. package/src/tigerbeetle/src/lsm/manifest_level.zig +3 -2
  32. package/src/tigerbeetle/src/lsm/manifest_log.zig +8 -8
  33. package/src/tigerbeetle/src/lsm/manifest_log_fuzz.zig +31 -15
  34. package/src/tigerbeetle/src/lsm/merge_iterator.zig +106 -0
  35. package/src/tigerbeetle/src/lsm/posted_groove.zig +4 -3
  36. package/src/tigerbeetle/src/lsm/segmented_array.zig +1 -0
  37. package/src/tigerbeetle/src/lsm/segmented_array_benchmark.zig +13 -13
  38. package/src/tigerbeetle/src/lsm/set_associative_cache.zig +2 -2
  39. package/src/tigerbeetle/src/lsm/table.zig +33 -19
  40. package/src/tigerbeetle/src/lsm/table_immutable.zig +4 -4
  41. package/src/tigerbeetle/src/lsm/table_iterator.zig +19 -11
  42. package/src/tigerbeetle/src/lsm/table_mutable.zig +52 -18
  43. package/src/tigerbeetle/src/lsm/test.zig +14 -10
  44. package/src/tigerbeetle/src/lsm/tree.zig +48 -45
  45. package/src/tigerbeetle/src/lsm/tree_fuzz.zig +310 -271
  46. package/src/tigerbeetle/src/main.zig +40 -36
  47. package/src/tigerbeetle/src/message_bus.zig +25 -25
  48. package/src/tigerbeetle/src/message_pool.zig +18 -17
  49. package/src/tigerbeetle/src/simulator.zig +28 -83
  50. package/src/tigerbeetle/src/{test/accounting → state_machine}/auditor.zig +9 -9
  51. package/src/tigerbeetle/src/{test/accounting → state_machine}/workload.zig +112 -52
  52. package/src/tigerbeetle/src/state_machine.zig +20 -14
  53. package/src/tigerbeetle/src/storage.zig +12 -12
  54. package/src/tigerbeetle/src/test/cluster.zig +17 -17
  55. package/src/tigerbeetle/src/test/conductor.zig +8 -8
  56. package/src/tigerbeetle/src/test/id.zig +10 -0
  57. package/src/tigerbeetle/src/test/message_bus.zig +0 -2
  58. package/src/tigerbeetle/src/test/network.zig +5 -5
  59. package/src/tigerbeetle/src/test/state_checker.zig +2 -2
  60. package/src/tigerbeetle/src/test/state_machine.zig +151 -46
  61. package/src/tigerbeetle/src/test/storage.zig +54 -51
  62. package/src/tigerbeetle/src/test/storage_checker.zig +3 -3
  63. package/src/tigerbeetle/src/tigerbeetle.zig +0 -1
  64. package/src/tigerbeetle/src/time.zig +0 -1
  65. package/src/tigerbeetle/src/tracer.zig +4 -4
  66. package/src/tigerbeetle/src/unit_tests.zig +2 -2
  67. package/src/tigerbeetle/src/vsr/client.zig +10 -10
  68. package/src/tigerbeetle/src/vsr/clock.zig +11 -10
  69. package/src/tigerbeetle/src/vsr/journal.zig +581 -531
  70. package/src/tigerbeetle/src/vsr/journal_format_fuzz.zig +11 -11
  71. package/src/tigerbeetle/src/vsr/replica.zig +377 -367
  72. package/src/tigerbeetle/src/vsr/replica_format.zig +14 -11
  73. package/src/tigerbeetle/src/vsr/superblock.zig +125 -80
  74. package/src/tigerbeetle/src/vsr/superblock_client_table.zig +9 -9
  75. package/src/tigerbeetle/src/vsr/superblock_free_set.zig +4 -4
  76. package/src/tigerbeetle/src/vsr/superblock_fuzz.zig +11 -6
  77. package/src/tigerbeetle/src/vsr/superblock_manifest.zig +5 -5
  78. package/src/tigerbeetle/src/vsr/superblock_quorums_fuzz.zig +3 -3
  79. package/src/tigerbeetle/src/vsr.zig +25 -25
@@ -1 +1 @@
1
- 17ba799be39b3aa1c55b37b39f013d58b0c9d8a5e3356aa750951d4c3cc7e248 dist/client.node
1
+ b80cf792efc775e33454af2ca68f6d93c2e369d29eb95509a4fae3c215019bbc dist/client.node
package/dist/index.d.ts CHANGED
@@ -79,48 +79,47 @@ export declare enum CreateTransferError {
79
79
  credit_account_id_must_not_be_int_max = 10,
80
80
  accounts_must_be_different = 11,
81
81
  pending_id_must_be_zero = 12,
82
- pending_transfer_must_timeout = 13,
83
- ledger_must_not_be_zero = 14,
84
- code_must_not_be_zero = 15,
85
- amount_must_not_be_zero = 16,
86
- debit_account_not_found = 17,
87
- credit_account_not_found = 18,
88
- accounts_must_have_the_same_ledger = 19,
89
- transfer_must_have_the_same_ledger_as_accounts = 20,
90
- exists_with_different_flags = 21,
91
- exists_with_different_debit_account_id = 22,
92
- exists_with_different_credit_account_id = 23,
93
- exists_with_different_user_data = 24,
94
- exists_with_different_pending_id = 25,
95
- exists_with_different_timeout = 26,
96
- exists_with_different_code = 27,
97
- exists_with_different_amount = 28,
98
- exists = 29,
99
- overflows_debits_pending = 30,
100
- overflows_credits_pending = 31,
101
- overflows_debits_posted = 32,
102
- overflows_credits_posted = 33,
103
- overflows_debits = 34,
104
- overflows_credits = 35,
105
- exceeds_credits = 36,
106
- exceeds_debits = 37,
107
- cannot_post_and_void_pending_transfer = 38,
108
- pending_transfer_cannot_post_or_void_another = 39,
109
- timeout_reserved_for_pending_transfer = 40,
110
- pending_id_must_not_be_zero = 41,
111
- pending_id_must_not_be_int_max = 42,
112
- pending_id_must_be_different = 43,
113
- pending_transfer_not_found = 44,
114
- pending_transfer_not_pending = 45,
115
- pending_transfer_has_different_debit_account_id = 46,
116
- pending_transfer_has_different_credit_account_id = 47,
117
- pending_transfer_has_different_ledger = 48,
118
- pending_transfer_has_different_code = 49,
119
- exceeds_pending_transfer_amount = 50,
120
- pending_transfer_has_different_amount = 51,
121
- pending_transfer_already_posted = 52,
122
- pending_transfer_already_voided = 53,
123
- pending_transfer_expired = 54
82
+ ledger_must_not_be_zero = 13,
83
+ code_must_not_be_zero = 14,
84
+ amount_must_not_be_zero = 15,
85
+ debit_account_not_found = 16,
86
+ credit_account_not_found = 17,
87
+ accounts_must_have_the_same_ledger = 18,
88
+ transfer_must_have_the_same_ledger_as_accounts = 19,
89
+ exists_with_different_flags = 20,
90
+ exists_with_different_debit_account_id = 21,
91
+ exists_with_different_credit_account_id = 22,
92
+ exists_with_different_user_data = 23,
93
+ exists_with_different_pending_id = 24,
94
+ exists_with_different_timeout = 25,
95
+ exists_with_different_code = 26,
96
+ exists_with_different_amount = 27,
97
+ exists = 28,
98
+ overflows_debits_pending = 29,
99
+ overflows_credits_pending = 30,
100
+ overflows_debits_posted = 31,
101
+ overflows_credits_posted = 32,
102
+ overflows_debits = 33,
103
+ overflows_credits = 34,
104
+ exceeds_credits = 35,
105
+ exceeds_debits = 36,
106
+ cannot_post_and_void_pending_transfer = 37,
107
+ pending_transfer_cannot_post_or_void_another = 38,
108
+ timeout_reserved_for_pending_transfer = 39,
109
+ pending_id_must_not_be_zero = 40,
110
+ pending_id_must_not_be_int_max = 41,
111
+ pending_id_must_be_different = 42,
112
+ pending_transfer_not_found = 43,
113
+ pending_transfer_not_pending = 44,
114
+ pending_transfer_has_different_debit_account_id = 45,
115
+ pending_transfer_has_different_credit_account_id = 46,
116
+ pending_transfer_has_different_ledger = 47,
117
+ pending_transfer_has_different_code = 48,
118
+ exceeds_pending_transfer_amount = 49,
119
+ pending_transfer_has_different_amount = 50,
120
+ pending_transfer_already_posted = 51,
121
+ pending_transfer_already_voided = 52,
122
+ pending_transfer_expired = 53
124
123
  }
125
124
  export declare type CreateTransfersError = {
126
125
  index: number;
package/dist/index.js CHANGED
@@ -50,48 +50,47 @@ var CreateTransferError;
50
50
  CreateTransferError[CreateTransferError["credit_account_id_must_not_be_int_max"] = 10] = "credit_account_id_must_not_be_int_max";
51
51
  CreateTransferError[CreateTransferError["accounts_must_be_different"] = 11] = "accounts_must_be_different";
52
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";
53
+ CreateTransferError[CreateTransferError["ledger_must_not_be_zero"] = 13] = "ledger_must_not_be_zero";
54
+ CreateTransferError[CreateTransferError["code_must_not_be_zero"] = 14] = "code_must_not_be_zero";
55
+ CreateTransferError[CreateTransferError["amount_must_not_be_zero"] = 15] = "amount_must_not_be_zero";
56
+ CreateTransferError[CreateTransferError["debit_account_not_found"] = 16] = "debit_account_not_found";
57
+ CreateTransferError[CreateTransferError["credit_account_not_found"] = 17] = "credit_account_not_found";
58
+ CreateTransferError[CreateTransferError["accounts_must_have_the_same_ledger"] = 18] = "accounts_must_have_the_same_ledger";
59
+ CreateTransferError[CreateTransferError["transfer_must_have_the_same_ledger_as_accounts"] = 19] = "transfer_must_have_the_same_ledger_as_accounts";
60
+ CreateTransferError[CreateTransferError["exists_with_different_flags"] = 20] = "exists_with_different_flags";
61
+ CreateTransferError[CreateTransferError["exists_with_different_debit_account_id"] = 21] = "exists_with_different_debit_account_id";
62
+ CreateTransferError[CreateTransferError["exists_with_different_credit_account_id"] = 22] = "exists_with_different_credit_account_id";
63
+ CreateTransferError[CreateTransferError["exists_with_different_user_data"] = 23] = "exists_with_different_user_data";
64
+ CreateTransferError[CreateTransferError["exists_with_different_pending_id"] = 24] = "exists_with_different_pending_id";
65
+ CreateTransferError[CreateTransferError["exists_with_different_timeout"] = 25] = "exists_with_different_timeout";
66
+ CreateTransferError[CreateTransferError["exists_with_different_code"] = 26] = "exists_with_different_code";
67
+ CreateTransferError[CreateTransferError["exists_with_different_amount"] = 27] = "exists_with_different_amount";
68
+ CreateTransferError[CreateTransferError["exists"] = 28] = "exists";
69
+ CreateTransferError[CreateTransferError["overflows_debits_pending"] = 29] = "overflows_debits_pending";
70
+ CreateTransferError[CreateTransferError["overflows_credits_pending"] = 30] = "overflows_credits_pending";
71
+ CreateTransferError[CreateTransferError["overflows_debits_posted"] = 31] = "overflows_debits_posted";
72
+ CreateTransferError[CreateTransferError["overflows_credits_posted"] = 32] = "overflows_credits_posted";
73
+ CreateTransferError[CreateTransferError["overflows_debits"] = 33] = "overflows_debits";
74
+ CreateTransferError[CreateTransferError["overflows_credits"] = 34] = "overflows_credits";
75
+ CreateTransferError[CreateTransferError["exceeds_credits"] = 35] = "exceeds_credits";
76
+ CreateTransferError[CreateTransferError["exceeds_debits"] = 36] = "exceeds_debits";
77
+ CreateTransferError[CreateTransferError["cannot_post_and_void_pending_transfer"] = 37] = "cannot_post_and_void_pending_transfer";
78
+ CreateTransferError[CreateTransferError["pending_transfer_cannot_post_or_void_another"] = 38] = "pending_transfer_cannot_post_or_void_another";
79
+ CreateTransferError[CreateTransferError["timeout_reserved_for_pending_transfer"] = 39] = "timeout_reserved_for_pending_transfer";
80
+ CreateTransferError[CreateTransferError["pending_id_must_not_be_zero"] = 40] = "pending_id_must_not_be_zero";
81
+ CreateTransferError[CreateTransferError["pending_id_must_not_be_int_max"] = 41] = "pending_id_must_not_be_int_max";
82
+ CreateTransferError[CreateTransferError["pending_id_must_be_different"] = 42] = "pending_id_must_be_different";
83
+ CreateTransferError[CreateTransferError["pending_transfer_not_found"] = 43] = "pending_transfer_not_found";
84
+ CreateTransferError[CreateTransferError["pending_transfer_not_pending"] = 44] = "pending_transfer_not_pending";
85
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_debit_account_id"] = 45] = "pending_transfer_has_different_debit_account_id";
86
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_credit_account_id"] = 46] = "pending_transfer_has_different_credit_account_id";
87
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_ledger"] = 47] = "pending_transfer_has_different_ledger";
88
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_code"] = 48] = "pending_transfer_has_different_code";
89
+ CreateTransferError[CreateTransferError["exceeds_pending_transfer_amount"] = 49] = "exceeds_pending_transfer_amount";
90
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_amount"] = 50] = "pending_transfer_has_different_amount";
91
+ CreateTransferError[CreateTransferError["pending_transfer_already_posted"] = 51] = "pending_transfer_already_posted";
92
+ CreateTransferError[CreateTransferError["pending_transfer_already_voided"] = 52] = "pending_transfer_already_voided";
93
+ CreateTransferError[CreateTransferError["pending_transfer_expired"] = 53] = "pending_transfer_expired";
95
94
  })(CreateTransferError = exports.CreateTransferError || (exports.CreateTransferError = {}));
96
95
  var Operation;
97
96
  (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 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"]}
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\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,6 +1,6 @@
1
1
  {
2
2
  "name": "tigerbeetle-node",
3
- "version": "0.11.4",
3
+ "version": "0.11.6",
4
4
  "description": "TigerBeetle Node.js client",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  "src/node.zig",
25
25
  "src/test.ts",
26
26
  "src/tigerbeetle/src/*.zig",
27
- "src/tigerbeetle/src/{c,io,lsm,test,vsr}",
27
+ "src/tigerbeetle/src/{c,io,lsm,test,vsr,state_machine}",
28
28
  "src/tigerbeetle/scripts",
29
29
  "src/translate.zig",
30
30
  "tsconfig.json"
package/src/index.ts CHANGED
@@ -110,7 +110,6 @@ export enum CreateTransferError {
110
110
  accounts_must_be_different,
111
111
 
112
112
  pending_id_must_be_zero,
113
- pending_transfer_must_timeout,
114
113
 
115
114
  ledger_must_not_be_zero,
116
115
  code_must_not_be_zero,
package/src/node.zig CHANGED
@@ -14,13 +14,13 @@ const CreateTransfersResult = tb.CreateTransfersResult;
14
14
 
15
15
  const Storage = @import("tigerbeetle/src/storage.zig").Storage;
16
16
  const StateMachine = @import("tigerbeetle/src/state_machine.zig").StateMachineType(Storage, .{
17
- .message_body_size_max = config.message_body_size_max,
17
+ .message_body_size_max = constants.message_body_size_max,
18
18
  });
19
19
  const Operation = StateMachine.Operation;
20
20
  const MessageBus = @import("tigerbeetle/src/message_bus.zig").MessageBusClient;
21
21
  const MessagePool = @import("tigerbeetle/src/message_pool.zig").MessagePool;
22
22
  const IO = @import("tigerbeetle/src/io.zig").IO;
23
- const config = @import("tigerbeetle/src/constants.zig");
23
+ const constants = @import("tigerbeetle/src/constants.zig");
24
24
 
25
25
  const vsr = @import("tigerbeetle/src/vsr.zig");
26
26
  const Header = vsr.Header;
@@ -46,7 +46,7 @@ export fn napi_register_module_v1(env: c.napi_env, exports: c.napi_value) c.napi
46
46
  env,
47
47
  exports,
48
48
  "tick_ms",
49
- config.tick_ms,
49
+ constants.tick_ms,
50
50
  "failed to add tick_ms to exports",
51
51
  ) catch return null;
52
52
 
@@ -145,7 +145,7 @@ const Context = struct {
145
145
  context.message_pool = try MessagePool.init(allocator, .client);
146
146
  errdefer context.message_pool.deinit(allocator);
147
147
 
148
- context.addresses = try vsr.parse_addresses(allocator, addresses_raw, config.replicas_max);
148
+ context.addresses = try vsr.parse_addresses(allocator, addresses_raw, constants.replicas_max);
149
149
  errdefer allocator.free(context.addresses);
150
150
  assert(context.addresses.len > 0);
151
151
 
@@ -242,7 +242,7 @@ fn decode_events_from_array(
242
242
  if (array_length < 1) return translate.throw(env, "Batch must contain at least one event.");
243
243
 
244
244
  const body_length = @sizeOf(T) * array_length;
245
- if (@sizeOf(Header) + body_length > config.message_size_max) {
245
+ if (@sizeOf(Header) + body_length > constants.message_size_max) {
246
246
  return translate.throw(env, "Batch is larger than the maximum message size.");
247
247
  }
248
248
 
@@ -1,6 +1,11 @@
1
1
  @echo off
2
2
  setlocal enabledelayedexpansion
3
3
 
4
+ REM Install Zig if it does not already exist:
5
+ if not exist "zig" (
6
+ call .\scripts\install_zig.bat
7
+ )
8
+
4
9
  if "%~1" equ ":main" (
5
10
  shift /1
6
11
  goto main
@@ -43,5 +48,5 @@ timeout /t 2
43
48
 
44
49
  echo.
45
50
  echo Benchmarking...
46
- zig\zig.exe run -OReleaseSafe src\benchmark.zig
51
+ zig\zig.exe build benchmark -Drelease-safe
47
52
  exit /b %errorlevel%
@@ -58,7 +58,7 @@ sleep 1
58
58
 
59
59
  echo ""
60
60
  echo "Benchmarking..."
61
- zig/zig run -OReleaseSafe src/benchmark.zig
61
+ zig/zig build benchmark -Drelease-safe
62
62
  echo ""
63
63
 
64
64
  for I in $REPLICAS
@@ -1,7 +1,7 @@
1
1
  const std = @import("std");
2
2
  const builtin = @import("builtin");
3
3
  const assert = std.debug.assert;
4
- const config = @import("constants.zig");
4
+ const constants = @import("constants.zig");
5
5
 
6
6
  const log = std.log;
7
7
  pub const log_level: std.log.Level = .err;
@@ -14,7 +14,7 @@ const Storage = @import("storage.zig").Storage;
14
14
  const MessagePool = @import("message_pool.zig").MessagePool;
15
15
  const MessageBus = @import("message_bus.zig").MessageBusClient;
16
16
  const StateMachine = @import("state_machine.zig").StateMachineType(Storage, .{
17
- .message_body_size_max = config.message_body_size_max,
17
+ .message_body_size_max = constants.message_body_size_max,
18
18
  });
19
19
  const RingBuffer = @import("ring_buffer.zig").RingBuffer;
20
20
 
@@ -26,7 +26,7 @@ const tb = @import("tigerbeetle.zig");
26
26
  const batches_count = 100;
27
27
 
28
28
  const transfers_per_batch: u32 = @divExact(
29
- config.message_size_max - @sizeOf(vsr.Header),
29
+ constants.message_size_max - @sizeOf(vsr.Header),
30
30
  @sizeOf(tb.Transfer),
31
31
  );
32
32
  comptime {
@@ -78,7 +78,7 @@ pub fn main() !void {
78
78
 
79
79
  const client_id = std.crypto.random.int(u128);
80
80
  const cluster_id: u32 = 0;
81
- var address = [_]std.net.Address{try std.net.Address.parseIp4("127.0.0.1", config.port)};
81
+ var address = [_]std.net.Address{try std.net.Address.parseIp4("127.0.0.1", constants.port)};
82
82
 
83
83
  var io = try IO.init(32, 0);
84
84
  defer io.deinit();
@@ -2,7 +2,7 @@ const std = @import("std");
2
2
  const os = std.os;
3
3
  const assert = std.debug.assert;
4
4
 
5
- const config = @import("../../constants.zig");
5
+ const constants = @import("../../constants.zig");
6
6
  const log = std.log.scoped(.tb_client_context);
7
7
 
8
8
  const util = @import("../../util.zig");
@@ -122,7 +122,7 @@ pub fn ContextType(
122
122
  context.addresses = vsr.parse_addresses(
123
123
  context.allocator,
124
124
  addresses,
125
- config.replicas_max,
125
+ constants.replicas_max,
126
126
  ) catch |err| return switch (err) {
127
127
  error.AddressLimitExceeded => error.AddressLimitExceeded,
128
128
  else => error.AddressInvalid,
@@ -165,7 +165,7 @@ pub fn ContextType(
165
165
  );
166
166
  errdefer context.client.deinit(context.allocator);
167
167
 
168
- context.messages_available = config.client_request_queue_max;
168
+ context.messages_available = constants.client_request_queue_max;
169
169
  context.on_completion_ctx = on_completion_ctx;
170
170
  context.on_completion_fn = on_completion_fn;
171
171
  context.implementation = .{
@@ -199,7 +199,7 @@ pub fn ContextType(
199
199
  pub fn run(self: *Context) void {
200
200
  while (!self.thread.signal.is_shutdown()) {
201
201
  self.tick();
202
- self.io.run_for_ns(config.tick_ms * std.time.ns_per_ms) catch |err| {
202
+ self.io.run_for_ns(constants.tick_ms * std.time.ns_per_ms) catch |err| {
203
203
  log.err("{}: IO.run() failed: {s}", .{
204
204
  self.client_id,
205
205
  @errorName(err),
@@ -226,7 +226,7 @@ pub fn ContextType(
226
226
  }
227
227
 
228
228
  // Make sure the packet.data wouldn't overflow a message:
229
- const writable = message.buffer[@sizeOf(Header)..][0..config.message_body_size_max];
229
+ const writable = message.buffer[@sizeOf(Header)..][0..constants.message_body_size_max];
230
230
  if (readable.len > writable.len) {
231
231
  return self.on_complete(packet, error.TooMuchData);
232
232
  }
@@ -267,7 +267,7 @@ pub fn ContextType(
267
267
  result: PacketError![]const u8,
268
268
  ) void {
269
269
  self.messages_available += 1;
270
- assert(self.messages_available <= config.client_request_queue_max);
270
+ assert(self.messages_available <= constants.client_request_queue_max);
271
271
 
272
272
  // Signal to resume sending requests that was waiting for available messages.
273
273
  if (self.messages_available == 1) self.thread.signal.notify();
@@ -2,7 +2,7 @@ const std = @import("std");
2
2
  const assert = std.debug.assert;
3
3
  const mem = std.mem;
4
4
 
5
- const config = @import("../../constants.zig");
5
+ const constants = @import("../../constants.zig");
6
6
  const vsr = @import("../../vsr.zig");
7
7
  const Header = vsr.Header;
8
8
 
@@ -24,7 +24,7 @@ pub fn EchoClient(comptime StateMachine_: type, comptime MessageBus: type) type
24
24
  };
25
25
  };
26
26
 
27
- request_queue: RingBuffer(Self.Request, config.client_request_queue_max, .array) = .{},
27
+ request_queue: RingBuffer(Self.Request, constants.client_request_queue_max, .array) = .{},
28
28
  message_pool: *MessagePool,
29
29
 
30
30
  pub fn init(
@@ -1,7 +1,6 @@
1
1
  const std = @import("std");
2
2
  const assert = std.debug.assert;
3
3
 
4
- const config = @import("../../constants.zig");
5
4
  const log = std.log.scoped(.tb_client_thread);
6
5
 
7
6
  const Packet = @import("packet.zig").Packet;
@@ -90,49 +90,48 @@ typedef enum TB_CREATE_TRANSFER_RESULT {
90
90
  TB_CREATE_TRANSFER_CREDIT_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = 10,
91
91
  TB_CREATE_TRANSFER_ACCOUNTS_MUST_BE_DIFFERENT = 11,
92
92
  TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_ZERO = 12,
93
- TB_CREATE_TRANSFER_PENDING_TRANSFER_MUST_TIMEOUT = 13,
94
- TB_CREATE_TRANSFER_LEDGER_MUST_NOT_BE_ZERO = 14,
95
- TB_CREATE_TRANSFER_CODE_MUST_NOT_BE_ZERO = 15,
96
- TB_CREATE_TRANSFER_AMOUNT_MUST_NOT_BE_ZERO = 16,
97
- TB_CREATE_TRANSFER_DEBIT_ACCOUNT_NOT_FOUND = 17,
98
- TB_CREATE_TRANSFER_CREDIT_ACCOUNT_NOT_FOUND = 18,
99
- TB_CREATE_TRANSFER_ACCOUNTS_MUST_HAVE_THE_SAME_LEDGER = 19,
100
- TB_CREATE_TRANSFER_TRANSFER_MUST_HAVE_THE_SAME_LEDGER_AS_ACCOUNTS = 20,
101
- TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_FLAGS = 21,
102
- TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_DEBIT_ACCOUNT_ID = 22,
103
- TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CREDIT_ACCOUNT_ID = 23,
104
- TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA = 24,
105
- TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_PENDING_ID = 25,
106
- TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_TIMEOUT = 26,
107
- TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CODE = 27,
108
- TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_AMOUNT = 28,
109
- TB_CREATE_TRANSFER_EXISTS = 29,
110
- TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_PENDING = 30,
111
- TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_PENDING = 31,
112
- TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_POSTED = 32,
113
- TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_POSTED = 33,
114
- TB_CREATE_TRANSFER_OVERFLOWS_DEBITS = 34,
115
- TB_CREATE_TRANSFER_OVERFLOWS_CREDITS = 35,
116
- TB_CREATE_TRANSFER_OVERFLOWS_TIMEOUT = 36,
117
- TB_CREATE_TRANSFER_EXCEEDS_CREDITS = 37,
118
- TB_CREATE_TRANSFER_EXCEEDS_DEBITS = 38,
119
- TB_CREATE_TRANSFER_CANNOT_POST_AND_VOID_PENDING_TRANSFER = 39,
120
- TB_CREATE_TRANSFER_PENDING_TRANSFER_CANNOT_POST_OR_VOID_ANOTHER = 40,
121
- TB_CREATE_TRANSFER_TIMEOUT_RESERVED_FOR_PENDING_TRANSFER = 41,
122
- TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_ZERO = 42,
123
- TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_INT_MAX = 43,
124
- TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_DIFFERENT = 44,
125
- TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_FOUND = 45,
126
- TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_PENDING = 46,
127
- TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_DEBIT_ACCOUNT_ID = 47,
128
- TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CREDIT_ACCOUNT_ID = 48,
129
- TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_LEDGER = 49,
130
- TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CODE = 50,
131
- TB_CREATE_TRANSFER_EXCEEDS_PENDING_TRANSFER_AMOUNT = 51,
132
- TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_AMOUNT = 52,
133
- TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_POSTED = 53,
134
- TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_VOIDED = 54,
135
- TB_CREATE_TRANSFER_PENDING_TRANSFER_EXPIRED = 55,
93
+ TB_CREATE_TRANSFER_LEDGER_MUST_NOT_BE_ZERO = 13,
94
+ TB_CREATE_TRANSFER_CODE_MUST_NOT_BE_ZERO = 14,
95
+ TB_CREATE_TRANSFER_AMOUNT_MUST_NOT_BE_ZERO = 15,
96
+ TB_CREATE_TRANSFER_DEBIT_ACCOUNT_NOT_FOUND = 16,
97
+ TB_CREATE_TRANSFER_CREDIT_ACCOUNT_NOT_FOUND = 17,
98
+ TB_CREATE_TRANSFER_ACCOUNTS_MUST_HAVE_THE_SAME_LEDGER = 18,
99
+ TB_CREATE_TRANSFER_TRANSFER_MUST_HAVE_THE_SAME_LEDGER_AS_ACCOUNTS = 19,
100
+ TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_FLAGS = 20,
101
+ TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_DEBIT_ACCOUNT_ID = 21,
102
+ TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CREDIT_ACCOUNT_ID = 22,
103
+ TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA = 23,
104
+ TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_PENDING_ID = 24,
105
+ TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_TIMEOUT = 25,
106
+ TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CODE = 26,
107
+ TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_AMOUNT = 27,
108
+ TB_CREATE_TRANSFER_EXISTS = 28,
109
+ TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_PENDING = 29,
110
+ TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_PENDING = 30,
111
+ TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_POSTED = 31,
112
+ TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_POSTED = 32,
113
+ TB_CREATE_TRANSFER_OVERFLOWS_DEBITS = 33,
114
+ TB_CREATE_TRANSFER_OVERFLOWS_CREDITS = 34,
115
+ TB_CREATE_TRANSFER_OVERFLOWS_TIMEOUT = 35,
116
+ TB_CREATE_TRANSFER_EXCEEDS_CREDITS = 36,
117
+ TB_CREATE_TRANSFER_EXCEEDS_DEBITS = 37,
118
+ TB_CREATE_TRANSFER_CANNOT_POST_AND_VOID_PENDING_TRANSFER = 38,
119
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_CANNOT_POST_OR_VOID_ANOTHER = 39,
120
+ TB_CREATE_TRANSFER_TIMEOUT_RESERVED_FOR_PENDING_TRANSFER = 40,
121
+ TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_ZERO = 41,
122
+ TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_INT_MAX = 42,
123
+ TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_DIFFERENT = 43,
124
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_FOUND = 44,
125
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_PENDING = 45,
126
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_DEBIT_ACCOUNT_ID = 46,
127
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CREDIT_ACCOUNT_ID = 47,
128
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_LEDGER = 48,
129
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CODE = 49,
130
+ TB_CREATE_TRANSFER_EXCEEDS_PENDING_TRANSFER_AMOUNT = 50,
131
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_AMOUNT = 51,
132
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_POSTED = 52,
133
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_VOIDED = 53,
134
+ TB_CREATE_TRANSFER_PENDING_TRANSFER_EXPIRED = 54,
136
135
  } TB_CREATE_TRANSFER_RESULT;
137
136
 
138
137
  typedef struct tb_create_accounts_result_t {
@@ -26,11 +26,11 @@ pub const tb_completion_t = fn (
26
26
  result_len: u32,
27
27
  ) callconv(.C) void;
28
28
 
29
- const config = @import("../constants.zig");
29
+ const constants = @import("../constants.zig");
30
30
  const Storage = @import("../storage.zig").Storage;
31
31
  const MessageBus = @import("../message_bus.zig").MessageBusClient;
32
32
  const StateMachine = @import("../state_machine.zig").StateMachineType(Storage, .{
33
- .message_body_size_max = config.message_body_size_max,
33
+ .message_body_size_max = constants.message_body_size_max,
34
34
  });
35
35
 
36
36
  const ContextType = @import("tb_client/context.zig").ContextType;