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.
Files changed (92) hide show
  1. package/README.md +302 -101
  2. package/dist/index.d.ts +70 -72
  3. package/dist/index.js +70 -72
  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 +6 -10
  8. package/src/node.zig +6 -3
  9. package/src/tigerbeetle/scripts/benchmark.sh +4 -4
  10. package/src/tigerbeetle/scripts/confirm_image.sh +44 -0
  11. package/src/tigerbeetle/scripts/fuzz_loop.sh +15 -0
  12. package/src/tigerbeetle/scripts/fuzz_unique_errors.sh +7 -0
  13. package/src/tigerbeetle/scripts/install.sh +19 -4
  14. package/src/tigerbeetle/scripts/install_zig.bat +5 -1
  15. package/src/tigerbeetle/scripts/install_zig.sh +24 -14
  16. package/src/tigerbeetle/scripts/pre-commit.sh +9 -0
  17. package/src/tigerbeetle/scripts/shellcheck.sh +5 -0
  18. package/src/tigerbeetle/scripts/tests_on_alpine.sh +10 -0
  19. package/src/tigerbeetle/scripts/tests_on_ubuntu.sh +14 -0
  20. package/src/tigerbeetle/src/benchmark.zig +4 -2
  21. package/src/tigerbeetle/src/benchmark_array_search.zig +3 -3
  22. package/src/tigerbeetle/src/c/tb_client/thread.zig +8 -9
  23. package/src/tigerbeetle/src/c/tb_client.h +100 -80
  24. package/src/tigerbeetle/src/c/tb_client.zig +4 -1
  25. package/src/tigerbeetle/src/cli.zig +1 -1
  26. package/src/tigerbeetle/src/config.zig +48 -16
  27. package/src/tigerbeetle/src/demo.zig +3 -1
  28. package/src/tigerbeetle/src/eytzinger_benchmark.zig +3 -3
  29. package/src/tigerbeetle/src/io/linux.zig +1 -1
  30. package/src/tigerbeetle/src/lsm/README.md +214 -0
  31. package/src/tigerbeetle/src/lsm/binary_search.zig +137 -10
  32. package/src/tigerbeetle/src/lsm/bloom_filter.zig +43 -0
  33. package/src/tigerbeetle/src/lsm/compaction.zig +352 -398
  34. package/src/tigerbeetle/src/lsm/composite_key.zig +2 -0
  35. package/src/tigerbeetle/src/lsm/eytzinger.zig +1 -1
  36. package/src/tigerbeetle/src/lsm/forest.zig +21 -447
  37. package/src/tigerbeetle/src/lsm/forest_fuzz.zig +412 -0
  38. package/src/tigerbeetle/src/lsm/grid.zig +145 -69
  39. package/src/tigerbeetle/src/lsm/groove.zig +196 -133
  40. package/src/tigerbeetle/src/lsm/k_way_merge.zig +40 -18
  41. package/src/tigerbeetle/src/lsm/level_iterator.zig +28 -9
  42. package/src/tigerbeetle/src/lsm/manifest.zig +81 -181
  43. package/src/tigerbeetle/src/lsm/manifest_level.zig +210 -454
  44. package/src/tigerbeetle/src/lsm/manifest_log.zig +77 -28
  45. package/src/tigerbeetle/src/lsm/posted_groove.zig +64 -76
  46. package/src/tigerbeetle/src/lsm/segmented_array.zig +561 -241
  47. package/src/tigerbeetle/src/lsm/segmented_array_benchmark.zig +148 -0
  48. package/src/tigerbeetle/src/lsm/segmented_array_fuzz.zig +9 -0
  49. package/src/tigerbeetle/src/lsm/set_associative_cache.zig +62 -12
  50. package/src/tigerbeetle/src/lsm/table.zig +83 -48
  51. package/src/tigerbeetle/src/lsm/table_immutable.zig +30 -23
  52. package/src/tigerbeetle/src/lsm/table_iterator.zig +25 -14
  53. package/src/tigerbeetle/src/lsm/table_mutable.zig +63 -12
  54. package/src/tigerbeetle/src/lsm/test.zig +49 -55
  55. package/src/tigerbeetle/src/lsm/tree.zig +407 -402
  56. package/src/tigerbeetle/src/lsm/tree_fuzz.zig +457 -0
  57. package/src/tigerbeetle/src/main.zig +28 -6
  58. package/src/tigerbeetle/src/message_bus.zig +2 -2
  59. package/src/tigerbeetle/src/message_pool.zig +14 -17
  60. package/src/tigerbeetle/src/simulator.zig +145 -112
  61. package/src/tigerbeetle/src/state_machine.zig +338 -228
  62. package/src/tigerbeetle/src/static_allocator.zig +65 -0
  63. package/src/tigerbeetle/src/storage.zig +3 -7
  64. package/src/tigerbeetle/src/test/accounting/auditor.zig +577 -0
  65. package/src/tigerbeetle/src/test/accounting/workload.zig +819 -0
  66. package/src/tigerbeetle/src/test/cluster.zig +18 -48
  67. package/src/tigerbeetle/src/test/conductor.zig +365 -0
  68. package/src/tigerbeetle/src/test/fuzz.zig +121 -0
  69. package/src/tigerbeetle/src/test/id.zig +89 -0
  70. package/src/tigerbeetle/src/test/priority_queue.zig +645 -0
  71. package/src/tigerbeetle/src/test/state_checker.zig +93 -69
  72. package/src/tigerbeetle/src/test/state_machine.zig +11 -35
  73. package/src/tigerbeetle/src/test/storage.zig +29 -8
  74. package/src/tigerbeetle/src/tigerbeetle.zig +14 -16
  75. package/src/tigerbeetle/src/unit_tests.zig +7 -0
  76. package/src/tigerbeetle/src/vopr.zig +494 -0
  77. package/src/tigerbeetle/src/vopr_hub/README.md +58 -0
  78. package/src/tigerbeetle/src/vopr_hub/SETUP.md +199 -0
  79. package/src/tigerbeetle/src/vopr_hub/go.mod +3 -0
  80. package/src/tigerbeetle/src/vopr_hub/main.go +1022 -0
  81. package/src/tigerbeetle/src/vopr_hub/scheduler/go.mod +3 -0
  82. package/src/tigerbeetle/src/vopr_hub/scheduler/main.go +403 -0
  83. package/src/tigerbeetle/src/vsr/client.zig +13 -0
  84. package/src/tigerbeetle/src/vsr/journal.zig +16 -13
  85. package/src/tigerbeetle/src/vsr/replica.zig +924 -491
  86. package/src/tigerbeetle/src/vsr/superblock.zig +55 -37
  87. package/src/tigerbeetle/src/vsr/superblock_client_table.zig +7 -10
  88. package/src/tigerbeetle/src/vsr/superblock_free_set.zig +2 -2
  89. package/src/tigerbeetle/src/vsr/superblock_manifest.zig +18 -3
  90. package/src/tigerbeetle/src/vsr.zig +75 -55
  91. package/src/tigerbeetle/scripts/vopr.bat +0 -48
  92. 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
+ }