tigerbeetle-node 0.10.0 → 0.11.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 +302 -101
- package/dist/index.d.ts +70 -72
- package/dist/index.js +70 -72
- package/dist/index.js.map +1 -1
- package/package.json +9 -8
- package/scripts/download_node_headers.sh +14 -7
- package/src/index.ts +6 -10
- package/src/node.zig +6 -3
- package/src/tigerbeetle/scripts/benchmark.sh +4 -4
- package/src/tigerbeetle/scripts/confirm_image.sh +44 -0
- package/src/tigerbeetle/scripts/fuzz_loop.sh +15 -0
- package/src/tigerbeetle/scripts/fuzz_unique_errors.sh +7 -0
- package/src/tigerbeetle/scripts/install.sh +19 -4
- package/src/tigerbeetle/scripts/install_zig.bat +5 -1
- package/src/tigerbeetle/scripts/install_zig.sh +24 -14
- package/src/tigerbeetle/scripts/pre-commit.sh +9 -0
- package/src/tigerbeetle/scripts/shellcheck.sh +5 -0
- package/src/tigerbeetle/scripts/tests_on_alpine.sh +10 -0
- package/src/tigerbeetle/scripts/tests_on_ubuntu.sh +14 -0
- package/src/tigerbeetle/scripts/validate_docs.sh +17 -0
- package/src/tigerbeetle/src/benchmark.zig +29 -13
- package/src/tigerbeetle/src/c/tb_client/context.zig +248 -47
- package/src/tigerbeetle/src/c/tb_client/echo_client.zig +108 -0
- package/src/tigerbeetle/src/c/tb_client/packet.zig +2 -2
- package/src/tigerbeetle/src/c/tb_client/signal.zig +2 -4
- package/src/tigerbeetle/src/c/tb_client/thread.zig +17 -257
- package/src/tigerbeetle/src/c/tb_client.h +118 -84
- package/src/tigerbeetle/src/c/tb_client.zig +88 -23
- package/src/tigerbeetle/src/c/tb_client_header_test.zig +135 -0
- package/src/tigerbeetle/src/c/test.zig +371 -1
- package/src/tigerbeetle/src/cli.zig +37 -7
- package/src/tigerbeetle/src/config.zig +58 -17
- package/src/tigerbeetle/src/demo.zig +5 -2
- package/src/tigerbeetle/src/demo_01_create_accounts.zig +1 -1
- package/src/tigerbeetle/src/demo_03_create_transfers.zig +13 -0
- package/src/tigerbeetle/src/ewah.zig +11 -33
- package/src/tigerbeetle/src/ewah_benchmark.zig +8 -9
- package/src/tigerbeetle/src/io/linux.zig +1 -1
- package/src/tigerbeetle/src/lsm/README.md +308 -0
- package/src/tigerbeetle/src/lsm/binary_search.zig +137 -10
- package/src/tigerbeetle/src/lsm/bloom_filter.zig +43 -0
- package/src/tigerbeetle/src/lsm/compaction.zig +376 -397
- package/src/tigerbeetle/src/lsm/composite_key.zig +2 -0
- package/src/tigerbeetle/src/lsm/eytzinger.zig +1 -1
- package/src/tigerbeetle/src/{eytzinger_benchmark.zig → lsm/eytzinger_benchmark.zig} +34 -21
- package/src/tigerbeetle/src/lsm/forest.zig +21 -447
- package/src/tigerbeetle/src/lsm/forest_fuzz.zig +414 -0
- package/src/tigerbeetle/src/lsm/grid.zig +170 -76
- package/src/tigerbeetle/src/lsm/groove.zig +197 -133
- package/src/tigerbeetle/src/lsm/k_way_merge.zig +40 -18
- package/src/tigerbeetle/src/lsm/level_iterator.zig +28 -9
- package/src/tigerbeetle/src/lsm/manifest.zig +93 -180
- package/src/tigerbeetle/src/lsm/manifest_level.zig +161 -454
- package/src/tigerbeetle/src/lsm/manifest_log.zig +243 -356
- package/src/tigerbeetle/src/lsm/manifest_log_fuzz.zig +665 -0
- package/src/tigerbeetle/src/lsm/node_pool.zig +4 -0
- package/src/tigerbeetle/src/lsm/posted_groove.zig +65 -76
- package/src/tigerbeetle/src/lsm/segmented_array.zig +580 -251
- package/src/tigerbeetle/src/lsm/segmented_array_benchmark.zig +148 -0
- package/src/tigerbeetle/src/lsm/segmented_array_fuzz.zig +9 -0
- package/src/tigerbeetle/src/lsm/set_associative_cache.zig +62 -12
- package/src/tigerbeetle/src/lsm/table.zig +115 -68
- package/src/tigerbeetle/src/lsm/table_immutable.zig +30 -23
- package/src/tigerbeetle/src/lsm/table_iterator.zig +27 -17
- package/src/tigerbeetle/src/lsm/table_mutable.zig +63 -12
- package/src/tigerbeetle/src/lsm/test.zig +61 -56
- package/src/tigerbeetle/src/lsm/tree.zig +450 -407
- package/src/tigerbeetle/src/lsm/tree_fuzz.zig +461 -0
- package/src/tigerbeetle/src/main.zig +83 -8
- package/src/tigerbeetle/src/message_bus.zig +20 -9
- package/src/tigerbeetle/src/message_pool.zig +22 -19
- package/src/tigerbeetle/src/ring_buffer.zig +7 -3
- package/src/tigerbeetle/src/simulator.zig +179 -119
- package/src/tigerbeetle/src/state_machine.zig +381 -246
- package/src/tigerbeetle/src/static_allocator.zig +65 -0
- package/src/tigerbeetle/src/storage.zig +3 -7
- package/src/tigerbeetle/src/test/accounting/auditor.zig +577 -0
- package/src/tigerbeetle/src/test/accounting/workload.zig +823 -0
- package/src/tigerbeetle/src/test/cluster.zig +33 -81
- package/src/tigerbeetle/src/test/conductor.zig +366 -0
- package/src/tigerbeetle/src/test/fuzz.zig +121 -0
- package/src/tigerbeetle/src/test/id.zig +89 -0
- package/src/tigerbeetle/src/test/network.zig +45 -19
- package/src/tigerbeetle/src/test/packet_simulator.zig +40 -29
- package/src/tigerbeetle/src/test/priority_queue.zig +645 -0
- package/src/tigerbeetle/src/test/state_checker.zig +91 -69
- package/src/tigerbeetle/src/test/state_machine.zig +11 -35
- package/src/tigerbeetle/src/test/storage.zig +470 -106
- package/src/tigerbeetle/src/test/storage_checker.zig +204 -0
- package/src/tigerbeetle/src/tigerbeetle.zig +15 -16
- package/src/tigerbeetle/src/unit_tests.zig +13 -1
- package/src/tigerbeetle/src/util.zig +97 -11
- package/src/tigerbeetle/src/vopr.zig +495 -0
- package/src/tigerbeetle/src/vsr/client.zig +21 -3
- package/src/tigerbeetle/src/vsr/journal.zig +293 -212
- package/src/tigerbeetle/src/vsr/replica.zig +1086 -515
- package/src/tigerbeetle/src/vsr/superblock.zig +382 -637
- package/src/tigerbeetle/src/vsr/superblock_client_table.zig +14 -16
- package/src/tigerbeetle/src/vsr/superblock_free_set.zig +416 -153
- package/src/tigerbeetle/src/vsr/superblock_free_set_fuzz.zig +332 -0
- package/src/tigerbeetle/src/vsr/superblock_fuzz.zig +349 -0
- package/src/tigerbeetle/src/vsr/superblock_manifest.zig +62 -12
- package/src/tigerbeetle/src/vsr/superblock_quorums.zig +394 -0
- package/src/tigerbeetle/src/vsr/superblock_quorums_fuzz.zig +312 -0
- package/src/tigerbeetle/src/vsr.zig +94 -60
- package/src/tigerbeetle/scripts/vopr.bat +0 -48
- package/src/tigerbeetle/scripts/vopr.sh +0 -33
- package/src/tigerbeetle/src/benchmark_array_search.zig +0 -317
- package/src/tigerbeetle/src/benchmarks/perf.zig +0 -299
|
@@ -4,6 +4,7 @@ const mem = std.mem;
|
|
|
4
4
|
|
|
5
5
|
const config = @import("../config.zig");
|
|
6
6
|
const vsr = @import("../vsr.zig");
|
|
7
|
+
const util = @import("../util.zig");
|
|
7
8
|
|
|
8
9
|
const MessagePool = @import("../message_pool.zig").MessagePool;
|
|
9
10
|
|
|
@@ -45,7 +46,7 @@ pub const ClientTable = struct {
|
|
|
45
46
|
try entries.ensureTotalCapacity(allocator, @intCast(u32, config.clients_max));
|
|
46
47
|
assert(entries.capacity() >= config.clients_max);
|
|
47
48
|
|
|
48
|
-
const sorted = try allocator.alloc(*const Entry,
|
|
49
|
+
const sorted = try allocator.alloc(*const Entry, config.clients_max);
|
|
49
50
|
errdefer allocator.free(sorted);
|
|
50
51
|
|
|
51
52
|
return ClientTable{
|
|
@@ -111,7 +112,6 @@ pub const ClientTable = struct {
|
|
|
111
112
|
assert(entries_count < client_table.sorted.len);
|
|
112
113
|
assert(entry.reply.header.command == .reply);
|
|
113
114
|
client_table.sorted[entries_count] = entry;
|
|
114
|
-
entries_count += 1;
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
|
|
@@ -128,7 +128,7 @@ pub const ClientTable = struct {
|
|
|
128
128
|
size = new_size;
|
|
129
129
|
|
|
130
130
|
for (entries) |entry| {
|
|
131
|
-
|
|
131
|
+
util.copy_disjoint(.inexact, u8, target[size..], mem.asBytes(entry.reply.header));
|
|
132
132
|
size += @sizeOf(vsr.Header);
|
|
133
133
|
}
|
|
134
134
|
|
|
@@ -138,7 +138,7 @@ pub const ClientTable = struct {
|
|
|
138
138
|
size = new_size;
|
|
139
139
|
|
|
140
140
|
for (entries) |entry| {
|
|
141
|
-
|
|
141
|
+
util.copy_disjoint(.inexact, u8, target[size..], mem.asBytes(&entry.session));
|
|
142
142
|
size += @sizeOf(u64);
|
|
143
143
|
}
|
|
144
144
|
|
|
@@ -150,7 +150,7 @@ pub const ClientTable = struct {
|
|
|
150
150
|
for (entries) |entry| {
|
|
151
151
|
const body = entry.reply.body();
|
|
152
152
|
assert(body.len == (entry.reply.header.size - @sizeOf(vsr.Header)));
|
|
153
|
-
|
|
153
|
+
util.copy_disjoint(.inexact, u8, target[size..], body);
|
|
154
154
|
size += body.len;
|
|
155
155
|
}
|
|
156
156
|
|
|
@@ -159,7 +159,7 @@ pub const ClientTable = struct {
|
|
|
159
159
|
std.mem.set(u8, target[size..new_size], 0);
|
|
160
160
|
size = new_size;
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
util.copy_disjoint(.inexact, u8, target[size..], mem.asBytes(&entries_count));
|
|
163
163
|
size += @sizeOf(u32);
|
|
164
164
|
|
|
165
165
|
assert(size <= encode_size_max);
|
|
@@ -169,7 +169,7 @@ pub const ClientTable = struct {
|
|
|
169
169
|
pub fn decode(client_table: *ClientTable, source: []align(@alignOf(vsr.Header)) const u8) void {
|
|
170
170
|
// Read the entry count at the end of the buffer to determine how many there are.
|
|
171
171
|
var entries_count: u32 = undefined;
|
|
172
|
-
|
|
172
|
+
util.copy_disjoint(.exact, u8, mem.asBytes(&entries_count), source[source.len - @sizeOf(u32) ..]);
|
|
173
173
|
assert(entries_count <= client_table.sorted.len);
|
|
174
174
|
|
|
175
175
|
assert(client_table.count() == 0);
|
|
@@ -185,27 +185,25 @@ pub const ClientTable = struct {
|
|
|
185
185
|
size = std.mem.alignForward(size, @alignOf(vsr.Header));
|
|
186
186
|
const headers = mem.bytesAsSlice(
|
|
187
187
|
vsr.Header,
|
|
188
|
-
source[size .. entries_count * @sizeOf(vsr.Header)],
|
|
188
|
+
source[size..][0 .. entries_count * @sizeOf(vsr.Header)],
|
|
189
189
|
);
|
|
190
190
|
size += mem.sliceAsBytes(headers).len;
|
|
191
191
|
|
|
192
192
|
size = std.mem.alignForward(size, @alignOf(u64));
|
|
193
|
-
const sessions = mem.bytesAsSlice(u64, source[size .. entries_count * @sizeOf(u64)]);
|
|
193
|
+
const sessions = mem.bytesAsSlice(u64, source[size..][0 .. entries_count * @sizeOf(u64)]);
|
|
194
194
|
size += mem.sliceAsBytes(sessions).len;
|
|
195
195
|
|
|
196
196
|
size = std.mem.alignForward(size, @alignOf(u8));
|
|
197
|
-
var bodies = source[size..];
|
|
198
|
-
assert(bodies.len > 0);
|
|
197
|
+
var bodies = source[size .. source.len - @sizeOf(u32)];
|
|
199
198
|
|
|
200
|
-
|
|
201
|
-
while (i < entries_count) : (i += 1) {
|
|
199
|
+
for (headers) |header, i| {
|
|
202
200
|
// Prepare the entry with a message.
|
|
203
201
|
var entry: Entry = undefined;
|
|
204
202
|
entry.reply = client_table.message_pool.get_message();
|
|
205
203
|
|
|
206
204
|
// Read the header and session for the entry.
|
|
207
205
|
entry.session = sessions[i];
|
|
208
|
-
entry.reply.header.* =
|
|
206
|
+
entry.reply.header.* = header;
|
|
209
207
|
assert(entry.reply.header.valid_checksum());
|
|
210
208
|
assert(entry.reply.header.command == .reply);
|
|
211
209
|
assert(entry.reply.header.commit >= entry.session);
|
|
@@ -216,7 +214,7 @@ pub const ClientTable = struct {
|
|
|
216
214
|
|
|
217
215
|
// Read the message body for the entry.
|
|
218
216
|
assert(bodies.len >= body_size);
|
|
219
|
-
|
|
217
|
+
util.copy_disjoint(.exact, u8, body, bodies[0..body_size]);
|
|
220
218
|
bodies = bodies[body_size..];
|
|
221
219
|
assert(entry.reply.header.valid_checksum_body(body));
|
|
222
220
|
|
|
@@ -230,7 +228,7 @@ pub const ClientTable = struct {
|
|
|
230
228
|
}
|
|
231
229
|
|
|
232
230
|
pub fn capacity(client_table: *const ClientTable) usize {
|
|
233
|
-
return client_table.
|
|
231
|
+
return client_table.sorted.len;
|
|
234
232
|
}
|
|
235
233
|
|
|
236
234
|
pub fn get(client_table: *ClientTable, client: u128) ?*Entry {
|