tigerbeetle-node 0.10.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.
- 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 +6 -6
- 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/src/benchmark.zig +4 -2
- package/src/tigerbeetle/src/benchmark_array_search.zig +3 -3
- package/src/tigerbeetle/src/c/tb_client/thread.zig +8 -9
- package/src/tigerbeetle/src/c/tb_client.h +100 -80
- package/src/tigerbeetle/src/c/tb_client.zig +4 -1
- package/src/tigerbeetle/src/cli.zig +1 -1
- package/src/tigerbeetle/src/config.zig +48 -16
- package/src/tigerbeetle/src/demo.zig +3 -1
- package/src/tigerbeetle/src/eytzinger_benchmark.zig +3 -3
- package/src/tigerbeetle/src/io/linux.zig +1 -1
- package/src/tigerbeetle/src/lsm/README.md +214 -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 +352 -398
- package/src/tigerbeetle/src/lsm/composite_key.zig +2 -0
- package/src/tigerbeetle/src/lsm/eytzinger.zig +1 -1
- package/src/tigerbeetle/src/lsm/forest.zig +21 -447
- package/src/tigerbeetle/src/lsm/forest_fuzz.zig +412 -0
- package/src/tigerbeetle/src/lsm/grid.zig +145 -69
- package/src/tigerbeetle/src/lsm/groove.zig +196 -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 +81 -181
- package/src/tigerbeetle/src/lsm/manifest_level.zig +210 -454
- package/src/tigerbeetle/src/lsm/manifest_log.zig +77 -28
- package/src/tigerbeetle/src/lsm/posted_groove.zig +64 -76
- package/src/tigerbeetle/src/lsm/segmented_array.zig +561 -241
- 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 +83 -48
- package/src/tigerbeetle/src/lsm/table_immutable.zig +30 -23
- package/src/tigerbeetle/src/lsm/table_iterator.zig +25 -14
- package/src/tigerbeetle/src/lsm/table_mutable.zig +63 -12
- package/src/tigerbeetle/src/lsm/test.zig +49 -55
- package/src/tigerbeetle/src/lsm/tree.zig +407 -402
- package/src/tigerbeetle/src/lsm/tree_fuzz.zig +457 -0
- package/src/tigerbeetle/src/main.zig +28 -6
- package/src/tigerbeetle/src/message_bus.zig +2 -2
- package/src/tigerbeetle/src/message_pool.zig +14 -17
- package/src/tigerbeetle/src/simulator.zig +145 -112
- package/src/tigerbeetle/src/state_machine.zig +338 -228
- 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 +819 -0
- package/src/tigerbeetle/src/test/cluster.zig +18 -48
- package/src/tigerbeetle/src/test/conductor.zig +365 -0
- package/src/tigerbeetle/src/test/fuzz.zig +121 -0
- package/src/tigerbeetle/src/test/id.zig +89 -0
- package/src/tigerbeetle/src/test/priority_queue.zig +645 -0
- package/src/tigerbeetle/src/test/state_checker.zig +93 -69
- package/src/tigerbeetle/src/test/state_machine.zig +11 -35
- package/src/tigerbeetle/src/test/storage.zig +29 -8
- package/src/tigerbeetle/src/tigerbeetle.zig +14 -16
- package/src/tigerbeetle/src/unit_tests.zig +7 -0
- package/src/tigerbeetle/src/vopr.zig +494 -0
- package/src/tigerbeetle/src/vopr_hub/README.md +58 -0
- package/src/tigerbeetle/src/vopr_hub/SETUP.md +199 -0
- package/src/tigerbeetle/src/vopr_hub/go.mod +3 -0
- package/src/tigerbeetle/src/vopr_hub/main.go +1022 -0
- package/src/tigerbeetle/src/vopr_hub/scheduler/go.mod +3 -0
- package/src/tigerbeetle/src/vopr_hub/scheduler/main.go +403 -0
- package/src/tigerbeetle/src/vsr/client.zig +13 -0
- package/src/tigerbeetle/src/vsr/journal.zig +16 -13
- package/src/tigerbeetle/src/vsr/replica.zig +924 -491
- package/src/tigerbeetle/src/vsr/superblock.zig +55 -37
- package/src/tigerbeetle/src/vsr/superblock_client_table.zig +7 -10
- package/src/tigerbeetle/src/vsr/superblock_free_set.zig +2 -2
- package/src/tigerbeetle/src/vsr/superblock_manifest.zig +18 -3
- package/src/tigerbeetle/src/vsr.zig +75 -55
- package/src/tigerbeetle/scripts/vopr.bat +0 -48
- package/src/tigerbeetle/scripts/vopr.sh +0 -33
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
const std = @import("std");
|
|
2
|
+
|
|
3
|
+
/// Permute indices (or other encoded data) into ids to:
|
|
4
|
+
///
|
|
5
|
+
/// * test different patterns of ids (e.g. random, ascending, descending), and
|
|
6
|
+
/// * allow the original index to recovered from the id, enabling less stateful testing.
|
|
7
|
+
///
|
|
8
|
+
pub const IdPermutation = union(enum) {
|
|
9
|
+
/// Ascending indices become ascending ids.
|
|
10
|
+
identity: void,
|
|
11
|
+
|
|
12
|
+
/// Ascending indices become descending ids.
|
|
13
|
+
inversion: void,
|
|
14
|
+
|
|
15
|
+
/// Ascending indices alternate between ascending/descending (e.g. 1,100,3,98,…).
|
|
16
|
+
zigzag: void,
|
|
17
|
+
|
|
18
|
+
/// Ascending indices become pseudo-UUIDs.
|
|
19
|
+
///
|
|
20
|
+
/// Sandwich the index "data" between random bits — this randomizes the id's prefix and suffix,
|
|
21
|
+
/// but the index is easily recovered:
|
|
22
|
+
///
|
|
23
|
+
/// * id_bits[_0.._32] = random
|
|
24
|
+
/// * id_bits[32.._96] = data
|
|
25
|
+
/// * id_bits[96..128] = random
|
|
26
|
+
random: u64,
|
|
27
|
+
|
|
28
|
+
pub fn encode(self: *const IdPermutation, data: usize) u128 {
|
|
29
|
+
return switch (self.*) {
|
|
30
|
+
.identity => data,
|
|
31
|
+
.inversion => std.math.maxInt(u128) - @as(u128, data),
|
|
32
|
+
.zigzag => {
|
|
33
|
+
if (data % 2 == 0) {
|
|
34
|
+
return data;
|
|
35
|
+
} else {
|
|
36
|
+
// -1 to stay odd.
|
|
37
|
+
return std.math.maxInt(u128) - @as(u128, data) -% 1;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
.random => |seed| {
|
|
41
|
+
var prng = std.rand.DefaultPrng.init(seed +% data);
|
|
42
|
+
const random = prng.random();
|
|
43
|
+
const random_mask = ~@as(u128, std.math.maxInt(u64) << 32);
|
|
44
|
+
const random_bits = random_mask & random.int(u128);
|
|
45
|
+
return @as(u128, data) << 32 | random_bits;
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
pub fn decode(self: *const IdPermutation, id: u128) usize {
|
|
51
|
+
return switch (self.*) {
|
|
52
|
+
.identity => @intCast(usize, id),
|
|
53
|
+
.inversion => @intCast(usize, std.math.maxInt(u128) - id),
|
|
54
|
+
.zigzag => {
|
|
55
|
+
if (id % 2 == 0) {
|
|
56
|
+
return @intCast(usize, id);
|
|
57
|
+
} else {
|
|
58
|
+
// -1 to stay odd.
|
|
59
|
+
return @intCast(usize, std.math.maxInt(u128) - id -% 1);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
.random => @truncate(usize, id >> 32),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
test "IdPermutation" {
|
|
68
|
+
var prng = std.rand.DefaultPrng.init(123);
|
|
69
|
+
const random = prng.random();
|
|
70
|
+
|
|
71
|
+
for ([_]IdPermutation{
|
|
72
|
+
.{ .identity = {} },
|
|
73
|
+
.{ .inversion = {} },
|
|
74
|
+
.{ .zigzag = {} },
|
|
75
|
+
.{ .random = random.int(u64) },
|
|
76
|
+
}) |permutation| {
|
|
77
|
+
var i: usize = 0;
|
|
78
|
+
while (i < 20) : (i += 1) {
|
|
79
|
+
const r = random.int(usize);
|
|
80
|
+
try test_id_permutation(permutation, r);
|
|
81
|
+
try test_id_permutation(permutation, i);
|
|
82
|
+
try test_id_permutation(permutation, std.math.maxInt(usize) - i);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
fn test_id_permutation(permutation: IdPermutation, value: usize) !void {
|
|
88
|
+
try std.testing.expectEqual(value, permutation.decode(permutation.encode(value)));
|
|
89
|
+
}
|