tigerbeetle-node 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +305 -103
  2. package/dist/index.d.ts +70 -67
  3. package/dist/index.js +70 -67
  4. package/dist/index.js.map +1 -1
  5. package/package.json +6 -6
  6. package/scripts/download_node_headers.sh +14 -7
  7. package/src/index.ts +11 -10
  8. package/src/node.zig +22 -20
  9. package/src/tigerbeetle/scripts/benchmark.bat +4 -3
  10. package/src/tigerbeetle/scripts/benchmark.sh +25 -10
  11. package/src/tigerbeetle/scripts/confirm_image.sh +44 -0
  12. package/src/tigerbeetle/scripts/fuzz_loop.sh +15 -0
  13. package/src/tigerbeetle/scripts/fuzz_unique_errors.sh +7 -0
  14. package/src/tigerbeetle/scripts/install.sh +20 -4
  15. package/src/tigerbeetle/scripts/install_zig.bat +5 -1
  16. package/src/tigerbeetle/scripts/install_zig.sh +32 -26
  17. package/src/tigerbeetle/scripts/pre-commit.sh +9 -0
  18. package/src/tigerbeetle/scripts/shellcheck.sh +5 -0
  19. package/src/tigerbeetle/scripts/tests_on_alpine.sh +10 -0
  20. package/src/tigerbeetle/scripts/tests_on_ubuntu.sh +14 -0
  21. package/src/tigerbeetle/scripts/upgrade_ubuntu_kernel.sh +12 -3
  22. package/src/tigerbeetle/src/benchmark.zig +19 -9
  23. package/src/tigerbeetle/src/benchmark_array_search.zig +317 -0
  24. package/src/tigerbeetle/src/benchmarks/perf.zig +299 -0
  25. package/src/tigerbeetle/src/c/tb_client/context.zig +103 -0
  26. package/src/tigerbeetle/src/c/tb_client/packet.zig +80 -0
  27. package/src/tigerbeetle/src/c/tb_client/signal.zig +288 -0
  28. package/src/tigerbeetle/src/c/tb_client/thread.zig +328 -0
  29. package/src/tigerbeetle/src/c/tb_client.h +221 -0
  30. package/src/tigerbeetle/src/c/tb_client.zig +104 -0
  31. package/src/tigerbeetle/src/c/test.zig +1 -0
  32. package/src/tigerbeetle/src/cli.zig +143 -84
  33. package/src/tigerbeetle/src/config.zig +161 -20
  34. package/src/tigerbeetle/src/demo.zig +14 -8
  35. package/src/tigerbeetle/src/demo_05_post_pending_transfers.zig +2 -2
  36. package/src/tigerbeetle/src/ewah.zig +318 -0
  37. package/src/tigerbeetle/src/ewah_benchmark.zig +121 -0
  38. package/src/tigerbeetle/src/eytzinger_benchmark.zig +317 -0
  39. package/src/tigerbeetle/src/fifo.zig +17 -1
  40. package/src/tigerbeetle/src/io/darwin.zig +12 -10
  41. package/src/tigerbeetle/src/io/linux.zig +25 -9
  42. package/src/tigerbeetle/src/io/windows.zig +13 -9
  43. package/src/tigerbeetle/src/iops.zig +101 -0
  44. package/src/tigerbeetle/src/lsm/README.md +214 -0
  45. package/src/tigerbeetle/src/lsm/binary_search.zig +341 -0
  46. package/src/tigerbeetle/src/lsm/bloom_filter.zig +125 -0
  47. package/src/tigerbeetle/src/lsm/compaction.zig +557 -0
  48. package/src/tigerbeetle/src/lsm/composite_key.zig +77 -0
  49. package/src/tigerbeetle/src/lsm/direction.zig +11 -0
  50. package/src/tigerbeetle/src/lsm/eytzinger.zig +587 -0
  51. package/src/tigerbeetle/src/lsm/forest.zig +204 -0
  52. package/src/tigerbeetle/src/lsm/forest_fuzz.zig +412 -0
  53. package/src/tigerbeetle/src/lsm/grid.zig +549 -0
  54. package/src/tigerbeetle/src/lsm/groove.zig +1002 -0
  55. package/src/tigerbeetle/src/lsm/k_way_merge.zig +474 -0
  56. package/src/tigerbeetle/src/lsm/level_iterator.zig +315 -0
  57. package/src/tigerbeetle/src/lsm/manifest.zig +580 -0
  58. package/src/tigerbeetle/src/lsm/manifest_level.zig +925 -0
  59. package/src/tigerbeetle/src/lsm/manifest_log.zig +953 -0
  60. package/src/tigerbeetle/src/lsm/node_pool.zig +231 -0
  61. package/src/tigerbeetle/src/lsm/posted_groove.zig +387 -0
  62. package/src/tigerbeetle/src/lsm/segmented_array.zig +1318 -0
  63. package/src/tigerbeetle/src/lsm/segmented_array_benchmark.zig +148 -0
  64. package/src/tigerbeetle/src/lsm/segmented_array_fuzz.zig +9 -0
  65. package/src/tigerbeetle/src/lsm/set_associative_cache.zig +894 -0
  66. package/src/tigerbeetle/src/lsm/table.zig +967 -0
  67. package/src/tigerbeetle/src/lsm/table_immutable.zig +203 -0
  68. package/src/tigerbeetle/src/lsm/table_iterator.zig +306 -0
  69. package/src/tigerbeetle/src/lsm/table_mutable.zig +174 -0
  70. package/src/tigerbeetle/src/lsm/test.zig +423 -0
  71. package/src/tigerbeetle/src/lsm/tree.zig +1090 -0
  72. package/src/tigerbeetle/src/lsm/tree_fuzz.zig +457 -0
  73. package/src/tigerbeetle/src/main.zig +141 -109
  74. package/src/tigerbeetle/src/message_bus.zig +49 -48
  75. package/src/tigerbeetle/src/message_pool.zig +22 -12
  76. package/src/tigerbeetle/src/ring_buffer.zig +126 -30
  77. package/src/tigerbeetle/src/simulator.zig +205 -140
  78. package/src/tigerbeetle/src/state_machine.zig +1268 -721
  79. package/src/tigerbeetle/src/static_allocator.zig +65 -0
  80. package/src/tigerbeetle/src/storage.zig +40 -14
  81. package/src/tigerbeetle/src/test/accounting/auditor.zig +577 -0
  82. package/src/tigerbeetle/src/test/accounting/workload.zig +819 -0
  83. package/src/tigerbeetle/src/test/cluster.zig +104 -88
  84. package/src/tigerbeetle/src/test/conductor.zig +365 -0
  85. package/src/tigerbeetle/src/test/fuzz.zig +121 -0
  86. package/src/tigerbeetle/src/test/id.zig +89 -0
  87. package/src/tigerbeetle/src/test/message_bus.zig +15 -24
  88. package/src/tigerbeetle/src/test/network.zig +26 -17
  89. package/src/tigerbeetle/src/test/priority_queue.zig +645 -0
  90. package/src/tigerbeetle/src/test/state_checker.zig +94 -68
  91. package/src/tigerbeetle/src/test/state_machine.zig +135 -69
  92. package/src/tigerbeetle/src/test/storage.zig +78 -28
  93. package/src/tigerbeetle/src/tigerbeetle.zig +19 -16
  94. package/src/tigerbeetle/src/unit_tests.zig +15 -0
  95. package/src/tigerbeetle/src/util.zig +51 -0
  96. package/src/tigerbeetle/src/vopr.zig +494 -0
  97. package/src/tigerbeetle/src/vopr_hub/README.md +58 -0
  98. package/src/tigerbeetle/src/vopr_hub/SETUP.md +199 -0
  99. package/src/tigerbeetle/src/vopr_hub/go.mod +3 -0
  100. package/src/tigerbeetle/src/vopr_hub/main.go +1022 -0
  101. package/src/tigerbeetle/src/vopr_hub/scheduler/go.mod +3 -0
  102. package/src/tigerbeetle/src/vopr_hub/scheduler/main.go +403 -0
  103. package/src/tigerbeetle/src/vsr/client.zig +34 -7
  104. package/src/tigerbeetle/src/vsr/journal.zig +164 -174
  105. package/src/tigerbeetle/src/vsr/replica.zig +1602 -651
  106. package/src/tigerbeetle/src/vsr/superblock.zig +1761 -0
  107. package/src/tigerbeetle/src/vsr/superblock_client_table.zig +255 -0
  108. package/src/tigerbeetle/src/vsr/superblock_free_set.zig +644 -0
  109. package/src/tigerbeetle/src/vsr/superblock_manifest.zig +561 -0
  110. package/src/tigerbeetle/src/vsr.zig +118 -170
  111. package/src/tigerbeetle/scripts/vopr.bat +0 -48
  112. package/src/tigerbeetle/scripts/vopr.sh +0 -33
@@ -28,7 +28,7 @@ pub const Network = struct {
28
28
  message: *Message,
29
29
 
30
30
  pub fn deinit(packet: *const Packet, path: PacketSimulatorPath) void {
31
- const source_bus = &packet.network.buses.items[path.source];
31
+ const source_bus = packet.network.buses.items[path.source];
32
32
  source_bus.unref(packet.message);
33
33
  }
34
34
  };
@@ -43,7 +43,16 @@ pub const Network = struct {
43
43
  options: NetworkOptions,
44
44
  packet_simulator: PacketSimulator(Packet),
45
45
 
46
- buses: std.ArrayListUnmanaged(MessageBus),
46
+ // TODO If this stored a ?*MessageBus, then a process's bus could be set to `null` while
47
+ // the replica is crashed, and replaced when it is destroy. Zig complains:
48
+ //
49
+ // ./src/test/message_bus.zig:20:24: error: struct 'test.message_bus.MessageBus' depends on itself
50
+ // pub const MessageBus = struct {
51
+ // ^
52
+ // ./src/test/message_bus.zig:21:5: note: while checking this field
53
+ // network: *Network,
54
+ // ^
55
+ buses: std.ArrayListUnmanaged(*MessageBus),
47
56
  processes: std.ArrayListUnmanaged(u128),
48
57
 
49
58
  pub fn init(
@@ -55,7 +64,7 @@ pub const Network = struct {
55
64
  const process_count = client_count + replica_count;
56
65
  assert(process_count <= std.math.maxInt(u8));
57
66
 
58
- var buses = try std.ArrayListUnmanaged(MessageBus).initCapacity(allocator, process_count);
67
+ var buses = try std.ArrayListUnmanaged(*MessageBus).initCapacity(allocator, process_count);
59
68
  errdefer buses.deinit(allocator);
60
69
 
61
70
  var processes = try std.ArrayListUnmanaged(u128).initCapacity(allocator, process_count);
@@ -77,13 +86,11 @@ pub const Network = struct {
77
86
  }
78
87
 
79
88
  pub fn deinit(network: *Network) void {
80
- // TODO: deinit the buses themselves when they gain a deinit()
81
89
  network.buses.deinit(network.allocator);
82
90
  network.processes.deinit(network.allocator);
83
91
  }
84
92
 
85
- /// Returns the address (index into Network.buses)
86
- pub fn init_message_bus(network: *Network, cluster: u32, process: Process) !*MessageBus {
93
+ pub fn link(network: *Network, process: Process, message_bus: *MessageBus) void {
87
94
  const raw_process = switch (process) {
88
95
  .replica => |replica| replica,
89
96
  .client => |client| blk: {
@@ -92,14 +99,16 @@ pub const Network = struct {
92
99
  },
93
100
  };
94
101
 
95
- for (network.processes.items) |p| assert(p != raw_process);
96
-
97
- const bus = try MessageBus.init(network.allocator, cluster, process, network);
98
-
99
- network.processes.appendAssumeCapacity(raw_process);
100
- network.buses.appendAssumeCapacity(bus);
101
-
102
- return &network.buses.items[network.buses.items.len - 1];
102
+ for (network.processes.items) |existing_process, i| {
103
+ if (existing_process == raw_process) {
104
+ network.buses.items[i] = message_bus;
105
+ break;
106
+ }
107
+ } else {
108
+ network.processes.appendAssumeCapacity(raw_process);
109
+ network.buses.appendAssumeCapacity(message_bus);
110
+ }
111
+ assert(network.processes.items.len == network.buses.items.len);
103
112
  }
104
113
 
105
114
  pub fn send_message(network: *Network, message: *Message, path: Path) void {
@@ -131,13 +140,13 @@ pub const Network = struct {
131
140
  }
132
141
 
133
142
  pub fn get_message_bus(network: *Network, process: Process) *MessageBus {
134
- return &network.buses.items[network.process_to_address(process)];
143
+ return network.buses.items[network.process_to_address(process)];
135
144
  }
136
145
 
137
146
  fn deliver_message(packet: Packet, path: PacketSimulatorPath) void {
138
147
  const network = packet.network;
139
148
 
140
- const target_bus = &network.buses.items[path.target];
149
+ const target_bus = network.buses.items[path.target];
141
150
 
142
151
  const message = target_bus.get_message();
143
152
  defer target_bus.unref(message);
@@ -164,7 +173,7 @@ pub const Network = struct {
164
173
  }
165
174
  }
166
175
 
167
- target_bus.on_message_callback.?(target_bus.on_message_context, message);
176
+ target_bus.on_message_callback(target_bus, message);
168
177
  }
169
178
 
170
179
  fn raw_process_to_process(raw: u128) Process {