tigerbeetle-node 0.11.13 → 0.12.1
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 +5 -10
- package/dist/bin/aarch64-linux-gnu/client.node +0 -0
- package/dist/bin/aarch64-linux-musl/client.node +0 -0
- package/dist/bin/aarch64-macos/client.node +0 -0
- package/dist/bin/x86_64-linux-gnu/client.node +0 -0
- package/dist/bin/x86_64-linux-musl/client.node +0 -0
- package/dist/bin/x86_64-macos/client.node +0 -0
- package/dist/index.js +33 -1
- package/dist/index.js.map +1 -1
- package/package-lock.json +66 -0
- package/package.json +6 -16
- package/src/index.ts +56 -1
- package/src/node.zig +9 -9
- package/dist/.client.node.sha256 +0 -1
- package/scripts/build_lib.sh +0 -61
- package/scripts/download_node_headers.sh +0 -32
- package/src/tigerbeetle/scripts/benchmark.bat +0 -55
- package/src/tigerbeetle/scripts/benchmark.sh +0 -66
- package/src/tigerbeetle/scripts/confirm_image.sh +0 -44
- package/src/tigerbeetle/scripts/fail_on_diff.sh +0 -9
- package/src/tigerbeetle/scripts/fuzz_loop.sh +0 -15
- package/src/tigerbeetle/scripts/fuzz_loop_hash_log.sh +0 -12
- package/src/tigerbeetle/scripts/fuzz_unique_errors.sh +0 -7
- package/src/tigerbeetle/scripts/install.bat +0 -7
- package/src/tigerbeetle/scripts/install.sh +0 -21
- package/src/tigerbeetle/scripts/install_zig.bat +0 -113
- package/src/tigerbeetle/scripts/install_zig.sh +0 -90
- package/src/tigerbeetle/scripts/lint.zig +0 -199
- package/src/tigerbeetle/scripts/pre-commit.sh +0 -9
- package/src/tigerbeetle/scripts/scripts/benchmark.bat +0 -55
- package/src/tigerbeetle/scripts/scripts/benchmark.sh +0 -66
- package/src/tigerbeetle/scripts/scripts/confirm_image.sh +0 -44
- package/src/tigerbeetle/scripts/scripts/fail_on_diff.sh +0 -9
- package/src/tigerbeetle/scripts/scripts/fuzz_loop.sh +0 -15
- package/src/tigerbeetle/scripts/scripts/fuzz_loop_hash_log.sh +0 -12
- package/src/tigerbeetle/scripts/scripts/fuzz_unique_errors.sh +0 -7
- package/src/tigerbeetle/scripts/scripts/install.bat +0 -7
- package/src/tigerbeetle/scripts/scripts/install.sh +0 -21
- package/src/tigerbeetle/scripts/scripts/install_zig.bat +0 -113
- package/src/tigerbeetle/scripts/scripts/install_zig.sh +0 -90
- package/src/tigerbeetle/scripts/scripts/lint.zig +0 -199
- package/src/tigerbeetle/scripts/scripts/pre-commit.sh +0 -9
- package/src/tigerbeetle/scripts/scripts/shellcheck.sh +0 -5
- package/src/tigerbeetle/scripts/scripts/tests_on_alpine.sh +0 -10
- package/src/tigerbeetle/scripts/scripts/tests_on_ubuntu.sh +0 -14
- package/src/tigerbeetle/scripts/scripts/upgrade_ubuntu_kernel.sh +0 -48
- package/src/tigerbeetle/scripts/scripts/validate_docs.sh +0 -23
- package/src/tigerbeetle/scripts/scripts/vr_state_enumerate +0 -46
- package/src/tigerbeetle/scripts/shellcheck.sh +0 -5
- package/src/tigerbeetle/scripts/tests_on_alpine.sh +0 -10
- package/src/tigerbeetle/scripts/tests_on_ubuntu.sh +0 -14
- package/src/tigerbeetle/scripts/upgrade_ubuntu_kernel.sh +0 -48
- package/src/tigerbeetle/scripts/validate_docs.sh +0 -23
- package/src/tigerbeetle/scripts/vr_state_enumerate +0 -46
- package/src/tigerbeetle/src/benchmark.zig +0 -336
- package/src/tigerbeetle/src/config.zig +0 -233
- package/src/tigerbeetle/src/constants.zig +0 -428
- package/src/tigerbeetle/src/ewah.zig +0 -286
- package/src/tigerbeetle/src/ewah_benchmark.zig +0 -120
- package/src/tigerbeetle/src/ewah_fuzz.zig +0 -130
- package/src/tigerbeetle/src/fifo.zig +0 -120
- package/src/tigerbeetle/src/io/benchmark.zig +0 -213
- package/src/tigerbeetle/src/io/darwin.zig +0 -814
- package/src/tigerbeetle/src/io/linux.zig +0 -1071
- package/src/tigerbeetle/src/io/test.zig +0 -643
- package/src/tigerbeetle/src/io/windows.zig +0 -1183
- package/src/tigerbeetle/src/io.zig +0 -34
- package/src/tigerbeetle/src/iops.zig +0 -107
- package/src/tigerbeetle/src/lsm/README.md +0 -308
- package/src/tigerbeetle/src/lsm/binary_search.zig +0 -341
- package/src/tigerbeetle/src/lsm/bloom_filter.zig +0 -125
- package/src/tigerbeetle/src/lsm/compaction.zig +0 -603
- package/src/tigerbeetle/src/lsm/composite_key.zig +0 -77
- package/src/tigerbeetle/src/lsm/direction.zig +0 -11
- package/src/tigerbeetle/src/lsm/eytzinger.zig +0 -587
- package/src/tigerbeetle/src/lsm/eytzinger_benchmark.zig +0 -330
- package/src/tigerbeetle/src/lsm/forest.zig +0 -205
- package/src/tigerbeetle/src/lsm/forest_fuzz.zig +0 -450
- package/src/tigerbeetle/src/lsm/grid.zig +0 -573
- package/src/tigerbeetle/src/lsm/groove.zig +0 -1036
- package/src/tigerbeetle/src/lsm/k_way_merge.zig +0 -474
- package/src/tigerbeetle/src/lsm/level_iterator.zig +0 -332
- package/src/tigerbeetle/src/lsm/manifest.zig +0 -617
- package/src/tigerbeetle/src/lsm/manifest_level.zig +0 -878
- package/src/tigerbeetle/src/lsm/manifest_log.zig +0 -789
- package/src/tigerbeetle/src/lsm/manifest_log_fuzz.zig +0 -691
- package/src/tigerbeetle/src/lsm/merge_iterator.zig +0 -106
- package/src/tigerbeetle/src/lsm/node_pool.zig +0 -235
- package/src/tigerbeetle/src/lsm/posted_groove.zig +0 -381
- package/src/tigerbeetle/src/lsm/segmented_array.zig +0 -1329
- package/src/tigerbeetle/src/lsm/segmented_array_benchmark.zig +0 -148
- package/src/tigerbeetle/src/lsm/segmented_array_fuzz.zig +0 -9
- package/src/tigerbeetle/src/lsm/set_associative_cache.zig +0 -850
- package/src/tigerbeetle/src/lsm/table.zig +0 -1009
- package/src/tigerbeetle/src/lsm/table_immutable.zig +0 -192
- package/src/tigerbeetle/src/lsm/table_iterator.zig +0 -340
- package/src/tigerbeetle/src/lsm/table_mutable.zig +0 -203
- package/src/tigerbeetle/src/lsm/test.zig +0 -439
- package/src/tigerbeetle/src/lsm/tree.zig +0 -1169
- package/src/tigerbeetle/src/lsm/tree_fuzz.zig +0 -479
- package/src/tigerbeetle/src/message_bus.zig +0 -1013
- package/src/tigerbeetle/src/message_pool.zig +0 -156
- package/src/tigerbeetle/src/ring_buffer.zig +0 -399
- package/src/tigerbeetle/src/simulator.zig +0 -580
- package/src/tigerbeetle/src/state_machine/auditor.zig +0 -578
- package/src/tigerbeetle/src/state_machine/workload.zig +0 -883
- package/src/tigerbeetle/src/state_machine.zig +0 -2099
- package/src/tigerbeetle/src/static_allocator.zig +0 -65
- package/src/tigerbeetle/src/stdx.zig +0 -171
- package/src/tigerbeetle/src/storage.zig +0 -393
- package/src/tigerbeetle/src/testing/cluster/message_bus.zig +0 -82
- package/src/tigerbeetle/src/testing/cluster/network.zig +0 -237
- package/src/tigerbeetle/src/testing/cluster/state_checker.zig +0 -169
- package/src/tigerbeetle/src/testing/cluster/storage_checker.zig +0 -202
- package/src/tigerbeetle/src/testing/cluster.zig +0 -444
- package/src/tigerbeetle/src/testing/fuzz.zig +0 -140
- package/src/tigerbeetle/src/testing/hash_log.zig +0 -66
- package/src/tigerbeetle/src/testing/id.zig +0 -99
- package/src/tigerbeetle/src/testing/packet_simulator.zig +0 -374
- package/src/tigerbeetle/src/testing/priority_queue.zig +0 -645
- package/src/tigerbeetle/src/testing/reply_sequence.zig +0 -139
- package/src/tigerbeetle/src/testing/state_machine.zig +0 -250
- package/src/tigerbeetle/src/testing/storage.zig +0 -757
- package/src/tigerbeetle/src/testing/table.zig +0 -247
- package/src/tigerbeetle/src/testing/time.zig +0 -84
- package/src/tigerbeetle/src/tigerbeetle.zig +0 -227
- package/src/tigerbeetle/src/time.zig +0 -112
- package/src/tigerbeetle/src/tracer.zig +0 -529
- package/src/tigerbeetle/src/unit_tests.zig +0 -40
- package/src/tigerbeetle/src/vopr.zig +0 -495
- package/src/tigerbeetle/src/vsr/README.md +0 -209
- package/src/tigerbeetle/src/vsr/client.zig +0 -544
- package/src/tigerbeetle/src/vsr/clock.zig +0 -855
- package/src/tigerbeetle/src/vsr/journal.zig +0 -2415
- package/src/tigerbeetle/src/vsr/journal_format_fuzz.zig +0 -111
- package/src/tigerbeetle/src/vsr/marzullo.zig +0 -309
- package/src/tigerbeetle/src/vsr/replica.zig +0 -6616
- package/src/tigerbeetle/src/vsr/replica_format.zig +0 -219
- package/src/tigerbeetle/src/vsr/superblock.zig +0 -1631
- package/src/tigerbeetle/src/vsr/superblock_client_table.zig +0 -256
- package/src/tigerbeetle/src/vsr/superblock_free_set.zig +0 -929
- package/src/tigerbeetle/src/vsr/superblock_free_set_fuzz.zig +0 -334
- package/src/tigerbeetle/src/vsr/superblock_fuzz.zig +0 -390
- package/src/tigerbeetle/src/vsr/superblock_manifest.zig +0 -615
- package/src/tigerbeetle/src/vsr/superblock_quorums.zig +0 -394
- package/src/tigerbeetle/src/vsr/superblock_quorums_fuzz.zig +0 -314
- package/src/tigerbeetle/src/vsr.zig +0 -1425
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
const std = @import("std");
|
|
2
|
-
const os = std.os;
|
|
3
|
-
const assert = std.debug.assert;
|
|
4
|
-
const log = std.log.scoped(.io_benchmark);
|
|
5
|
-
|
|
6
|
-
const Time = @import("../time.zig").Time;
|
|
7
|
-
const IO = @import("../io.zig").IO;
|
|
8
|
-
|
|
9
|
-
// 1 MB: larger than socket buffer so forces io_pending on darwin
|
|
10
|
-
// Configure this value to smaller amounts to test IO scheduling overhead
|
|
11
|
-
const buffer_size = 1 * 1024 * 1024;
|
|
12
|
-
|
|
13
|
-
// max time for the benchmark to run
|
|
14
|
-
const run_duration = 1 * std.time.ns_per_s;
|
|
15
|
-
|
|
16
|
-
pub fn main() !void {
|
|
17
|
-
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
|
18
|
-
const allocator = gpa.allocator();
|
|
19
|
-
defer {
|
|
20
|
-
const leaks = gpa.deinit();
|
|
21
|
-
assert(!leaks);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const buffer = try allocator.alloc(u8, buffer_size * 2);
|
|
25
|
-
defer allocator.free(buffer);
|
|
26
|
-
std.mem.set(u8, buffer, 0);
|
|
27
|
-
|
|
28
|
-
var self = Context{
|
|
29
|
-
.io = try IO.init(32, 0),
|
|
30
|
-
.tx = .{ .buffer = buffer[0 * buffer_size ..][0..buffer_size] },
|
|
31
|
-
.rx = .{ .buffer = buffer[1 * buffer_size ..][0..buffer_size] },
|
|
32
|
-
};
|
|
33
|
-
defer self.io.deinit();
|
|
34
|
-
|
|
35
|
-
var timer = Time{};
|
|
36
|
-
const started = timer.monotonic();
|
|
37
|
-
defer {
|
|
38
|
-
const elapsed_ns = timer.monotonic() - started;
|
|
39
|
-
const transferred_mb = @intToFloat(f64, self.transferred) / 1024 / 1024;
|
|
40
|
-
|
|
41
|
-
log.info("took {}ms @ {d:.2} MB/s\n", .{
|
|
42
|
-
elapsed_ns / std.time.ns_per_ms,
|
|
43
|
-
transferred_mb / (@intToFloat(f64, elapsed_ns) / std.time.ns_per_s),
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Setup the server socket
|
|
48
|
-
self.server.fd = try self.io.open_socket(os.AF.INET, os.SOCK.STREAM, os.IPPROTO.TCP);
|
|
49
|
-
defer os.closeSocket(self.server.fd);
|
|
50
|
-
|
|
51
|
-
const address = try std.net.Address.parseIp4("127.0.0.1", 3131);
|
|
52
|
-
try os.setsockopt(
|
|
53
|
-
self.server.fd,
|
|
54
|
-
os.SOL.SOCKET,
|
|
55
|
-
os.SO.REUSEADDR,
|
|
56
|
-
&std.mem.toBytes(@as(c_int, 1)),
|
|
57
|
-
);
|
|
58
|
-
try os.bind(self.server.fd, &address.any, address.getOsSockLen());
|
|
59
|
-
try os.listen(self.server.fd, 1);
|
|
60
|
-
|
|
61
|
-
// Start accepting the client
|
|
62
|
-
self.io.accept(
|
|
63
|
-
*Context,
|
|
64
|
-
&self,
|
|
65
|
-
Context.on_accept,
|
|
66
|
-
&self.server.completion,
|
|
67
|
-
self.server.fd,
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
// Setup the client connection
|
|
71
|
-
self.tx.socket.fd = try self.io.open_socket(os.AF.INET, os.SOCK.STREAM, os.IPPROTO.TCP);
|
|
72
|
-
defer os.closeSocket(self.tx.socket.fd);
|
|
73
|
-
|
|
74
|
-
self.io.connect(
|
|
75
|
-
*Context,
|
|
76
|
-
&self,
|
|
77
|
-
Context.on_connect,
|
|
78
|
-
&self.tx.socket.completion,
|
|
79
|
-
self.tx.socket.fd,
|
|
80
|
-
address,
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
// Run the IO loop for the duration of the benchmark
|
|
84
|
-
log.info("running for {}", .{std.fmt.fmtDuration(run_duration)});
|
|
85
|
-
try self.io.run_for_ns(run_duration);
|
|
86
|
-
|
|
87
|
-
// Assert that everything is connected
|
|
88
|
-
assert(self.server.fd != IO.INVALID_SOCKET);
|
|
89
|
-
assert(self.tx.socket.fd != IO.INVALID_SOCKET);
|
|
90
|
-
assert(self.rx.socket.fd != IO.INVALID_SOCKET);
|
|
91
|
-
|
|
92
|
-
// Close the accepted client socket.
|
|
93
|
-
// The actual client socket + server socket are closed by defer
|
|
94
|
-
os.closeSocket(self.rx.socket.fd);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const Context = struct {
|
|
98
|
-
io: IO,
|
|
99
|
-
tx: Pipe,
|
|
100
|
-
rx: Pipe,
|
|
101
|
-
server: Socket = .{},
|
|
102
|
-
transferred: u64 = 0,
|
|
103
|
-
|
|
104
|
-
const Socket = struct {
|
|
105
|
-
fd: os.socket_t = IO.INVALID_SOCKET,
|
|
106
|
-
completion: IO.Completion = undefined,
|
|
107
|
-
};
|
|
108
|
-
const Pipe = struct {
|
|
109
|
-
socket: Socket = .{},
|
|
110
|
-
buffer: []u8,
|
|
111
|
-
transferred: usize = 0,
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
fn on_accept(
|
|
115
|
-
self: *Context,
|
|
116
|
-
completion: *IO.Completion,
|
|
117
|
-
result: IO.AcceptError!os.socket_t,
|
|
118
|
-
) void {
|
|
119
|
-
assert(self.rx.socket.fd == IO.INVALID_SOCKET);
|
|
120
|
-
assert(&self.server.completion == completion);
|
|
121
|
-
self.rx.socket.fd = result catch |err| std.debug.panic("accept error {}", .{err});
|
|
122
|
-
|
|
123
|
-
// Start reading data from the accepted client socket
|
|
124
|
-
assert(self.rx.transferred == 0);
|
|
125
|
-
self.do_transfer("rx", .read, 0);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
fn on_connect(
|
|
129
|
-
self: *Context,
|
|
130
|
-
completion: *IO.Completion,
|
|
131
|
-
result: IO.ConnectError!void,
|
|
132
|
-
) void {
|
|
133
|
-
_ = result catch unreachable;
|
|
134
|
-
|
|
135
|
-
assert(self.tx.socket.fd != IO.INVALID_SOCKET);
|
|
136
|
-
assert(&self.tx.socket.completion == completion);
|
|
137
|
-
|
|
138
|
-
// Start sending data to the server's accepted client
|
|
139
|
-
assert(self.tx.transferred == 0);
|
|
140
|
-
self.do_transfer("tx", .write, 0);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const TransferType = enum {
|
|
144
|
-
read,
|
|
145
|
-
write,
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
fn do_transfer(
|
|
149
|
-
self: *Context,
|
|
150
|
-
comptime pipe_name: []const u8,
|
|
151
|
-
comptime transfer_type: TransferType,
|
|
152
|
-
bytes: usize,
|
|
153
|
-
) void {
|
|
154
|
-
// The type of IO to perform and what type of IO to perform next (after the current one completes).
|
|
155
|
-
const transfer_info = switch (transfer_type) {
|
|
156
|
-
.read => .{
|
|
157
|
-
.IoError = IO.RecvError,
|
|
158
|
-
.io_func = "recv",
|
|
159
|
-
.next = TransferType.write,
|
|
160
|
-
},
|
|
161
|
-
.write => .{
|
|
162
|
-
.IoError = IO.SendError,
|
|
163
|
-
.io_func = "send",
|
|
164
|
-
.next = TransferType.read,
|
|
165
|
-
},
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
assert(bytes <= buffer_size);
|
|
169
|
-
self.transferred += bytes;
|
|
170
|
-
|
|
171
|
-
// Select which connection (tx or rx) depending on the type of transfer
|
|
172
|
-
const pipe = &@field(self, pipe_name);
|
|
173
|
-
pipe.transferred += bytes;
|
|
174
|
-
assert(pipe.transferred <= pipe.buffer.len);
|
|
175
|
-
|
|
176
|
-
// There's still more data to transfer on the connection
|
|
177
|
-
if (pipe.transferred < pipe.buffer.len) {
|
|
178
|
-
// Callback which calls this function again when data is transferred.
|
|
179
|
-
// Effectively loops back above.
|
|
180
|
-
const on_transfer = struct {
|
|
181
|
-
fn on_transfer(
|
|
182
|
-
_self: *Context,
|
|
183
|
-
completion: *IO.Completion,
|
|
184
|
-
result: transfer_info.IoError!usize,
|
|
185
|
-
) void {
|
|
186
|
-
const _bytes = result catch |err| {
|
|
187
|
-
std.debug.panic("{s} error: {}", .{ transfer_info.io_func, err });
|
|
188
|
-
};
|
|
189
|
-
assert(&@field(_self, pipe_name).socket.completion == completion);
|
|
190
|
-
_self.do_transfer(pipe_name, transfer_type, _bytes);
|
|
191
|
-
}
|
|
192
|
-
}.on_transfer;
|
|
193
|
-
|
|
194
|
-
// Perform the IO with the callback for the completion
|
|
195
|
-
return @field(self.io, transfer_info.io_func)(
|
|
196
|
-
*Context,
|
|
197
|
-
self,
|
|
198
|
-
on_transfer,
|
|
199
|
-
&pipe.socket.completion,
|
|
200
|
-
pipe.socket.fd,
|
|
201
|
-
pipe.buffer[pipe.transferred..],
|
|
202
|
-
);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// This transfer type completed transferring all the bytes.
|
|
206
|
-
// Now, switch the transfer type (transfer_info.next).
|
|
207
|
-
// This means if we read to the buffer, now we write it out.
|
|
208
|
-
// Inversely, if we wrote the buffer, now we read it back.
|
|
209
|
-
// This is basically a modified echo benchmark.
|
|
210
|
-
pipe.transferred = 0;
|
|
211
|
-
self.do_transfer(pipe_name, transfer_info.next, 0);
|
|
212
|
-
}
|
|
213
|
-
};
|