tigerbeetle-node 0.3.3 → 0.5.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 (71) hide show
  1. package/README.md +21 -7
  2. package/dist/benchmark.js +1 -1
  3. package/dist/benchmark.js.map +1 -1
  4. package/dist/index.d.ts +22 -20
  5. package/dist/index.js +40 -18
  6. package/dist/index.js.map +1 -1
  7. package/dist/test.js +13 -1
  8. package/dist/test.js.map +1 -1
  9. package/package.json +12 -12
  10. package/scripts/postinstall.sh +2 -2
  11. package/src/benchmark.ts +4 -4
  12. package/src/index.ts +35 -9
  13. package/src/node.zig +139 -28
  14. package/src/test.ts +19 -5
  15. package/src/tigerbeetle/scripts/benchmark.sh +10 -3
  16. package/src/tigerbeetle/scripts/install.sh +2 -2
  17. package/src/tigerbeetle/scripts/install_zig.bat +109 -0
  18. package/src/tigerbeetle/scripts/install_zig.sh +21 -4
  19. package/src/tigerbeetle/scripts/vopr.bat +48 -0
  20. package/src/tigerbeetle/scripts/vopr.sh +33 -0
  21. package/src/tigerbeetle/src/benchmark.zig +74 -42
  22. package/src/tigerbeetle/src/cli.zig +136 -83
  23. package/src/tigerbeetle/src/config.zig +80 -26
  24. package/src/tigerbeetle/src/demo.zig +101 -78
  25. package/src/tigerbeetle/src/demo_01_create_accounts.zig +2 -7
  26. package/src/tigerbeetle/src/demo_02_lookup_accounts.zig +2 -7
  27. package/src/tigerbeetle/src/demo_03_create_transfers.zig +2 -7
  28. package/src/tigerbeetle/src/demo_04_create_transfers_two_phase_commit.zig +2 -5
  29. package/src/tigerbeetle/src/demo_05_accept_transfers.zig +2 -7
  30. package/src/tigerbeetle/src/demo_06_reject_transfers.zig +2 -7
  31. package/src/tigerbeetle/src/demo_07_lookup_transfers.zig +8 -0
  32. package/src/tigerbeetle/src/fifo.zig +20 -11
  33. package/src/tigerbeetle/src/io.zig +35 -22
  34. package/src/tigerbeetle/src/io_darwin.zig +701 -0
  35. package/src/tigerbeetle/src/main.zig +72 -25
  36. package/src/tigerbeetle/src/message_bus.zig +379 -456
  37. package/src/tigerbeetle/src/message_pool.zig +3 -3
  38. package/src/tigerbeetle/src/ring_buffer.zig +192 -37
  39. package/src/tigerbeetle/src/simulator.zig +317 -0
  40. package/src/tigerbeetle/src/state_machine.zig +846 -38
  41. package/src/tigerbeetle/src/storage.zig +488 -90
  42. package/src/tigerbeetle/src/test/cluster.zig +221 -0
  43. package/src/tigerbeetle/src/test/message_bus.zig +92 -0
  44. package/src/tigerbeetle/src/test/network.zig +182 -0
  45. package/src/tigerbeetle/src/test/packet_simulator.zig +371 -0
  46. package/src/tigerbeetle/src/test/state_checker.zig +142 -0
  47. package/src/tigerbeetle/src/test/state_machine.zig +71 -0
  48. package/src/tigerbeetle/src/test/storage.zig +375 -0
  49. package/src/tigerbeetle/src/test/time.zig +84 -0
  50. package/src/tigerbeetle/src/tigerbeetle.zig +6 -3
  51. package/src/tigerbeetle/src/time.zig +65 -0
  52. package/src/tigerbeetle/src/unit_tests.zig +14 -0
  53. package/src/tigerbeetle/src/vsr/client.zig +519 -0
  54. package/src/tigerbeetle/src/vsr/clock.zig +829 -0
  55. package/src/tigerbeetle/src/vsr/journal.zig +1368 -0
  56. package/src/tigerbeetle/src/vsr/marzullo.zig +306 -0
  57. package/src/tigerbeetle/src/vsr/replica.zig +4248 -0
  58. package/src/tigerbeetle/src/vsr.zig +601 -0
  59. package/src/tigerbeetle/LICENSE +0 -177
  60. package/src/tigerbeetle/README.md +0 -116
  61. package/src/tigerbeetle/src/client.zig +0 -319
  62. package/src/tigerbeetle/src/concurrent_ranges.zig +0 -162
  63. package/src/tigerbeetle/src/fixed_array_list.zig +0 -53
  64. package/src/tigerbeetle/src/io_async.zig +0 -600
  65. package/src/tigerbeetle/src/journal.zig +0 -567
  66. package/src/tigerbeetle/src/test_client.zig +0 -41
  67. package/src/tigerbeetle/src/test_main.zig +0 -118
  68. package/src/tigerbeetle/src/test_message_bus.zig +0 -132
  69. package/src/tigerbeetle/src/vr/journal.zig +0 -672
  70. package/src/tigerbeetle/src/vr/replica.zig +0 -3061
  71. package/src/tigerbeetle/src/vr.zig +0 -374
@@ -1,162 +0,0 @@
1
- const std = @import("std");
2
- const assert = std.debug.assert;
3
- const log = std.log.scoped(.concurrent_ranges);
4
-
5
- pub const ConcurrentRanges = struct {
6
- name: []const u8,
7
-
8
- /// A queue of ranges acquired and in progress:
9
- acquired: ?*Range = null,
10
-
11
- pub fn acquire(self: *ConcurrentRanges, range: *Range) void {
12
- assert(range.status == .initialized);
13
- range.status = .acquiring;
14
-
15
- assert(range.prev == null);
16
- assert(range.next == null);
17
- assert(range.head == null);
18
- assert(range.tail == null);
19
-
20
- range.frame = @frame();
21
-
22
- while (true) {
23
- if (self.has_overlapping_range(range)) |overlapping_range| {
24
- log.debug("{s}: range {} overlaps with concurrent range {}, enqueueing", .{
25
- self.name,
26
- range,
27
- overlapping_range,
28
- });
29
- overlapping_range.enqueue(range);
30
- suspend {}
31
- } else {
32
- break;
33
- }
34
- }
35
-
36
- // TODO This can be removed for performance down the line:
37
- assert(self.has_overlapping_range(range) == null);
38
-
39
- // Add the range to the linked list:
40
- if (self.acquired) |next| {
41
- range.next = next;
42
- next.prev = range;
43
- }
44
- self.acquired = range;
45
-
46
- range.status = .acquired;
47
-
48
- log.debug("{s}: acquired: {}", .{ self.name, range });
49
- }
50
-
51
- pub fn release(self: *ConcurrentRanges, range: *Range) void {
52
- assert(range.status == .acquired);
53
- range.status = .releasing;
54
-
55
- log.debug("{s}: released: {}", .{ self.name, range });
56
-
57
- // Remove the range from the linked list:
58
- // Connect the previous range to the next range:
59
- if (range.prev) |prev| {
60
- prev.next = range.next;
61
- } else {
62
- self.acquired = range.next;
63
- }
64
- // ... and connect the next range to the previous range:
65
- if (range.next) |next| {
66
- next.prev = range.prev;
67
- }
68
- range.prev = null;
69
- range.next = null;
70
-
71
- range.resume_queued_ranges();
72
- }
73
-
74
- pub fn has_overlapping_range(self: *ConcurrentRanges, range: *const Range) ?*Range {
75
- var head = self.acquired;
76
- while (head) |concurrent_range| {
77
- head = concurrent_range.next;
78
-
79
- if (range.overlaps(concurrent_range)) return concurrent_range;
80
- }
81
- return null;
82
- }
83
- };
84
-
85
- pub const Range = struct {
86
- offset: u64,
87
- len: u64,
88
- frame: anyframe = undefined,
89
- status: RangeStatus = .initialized,
90
-
91
- /// Links to concurrently executing sibling ranges:
92
- prev: ?*Range = null,
93
- next: ?*Range = null,
94
-
95
- /// A queue of child ranges waiting on this range to complete:
96
- head: ?*Range = null,
97
- tail: ?*Range = null,
98
-
99
- const RangeStatus = enum {
100
- initialized,
101
- acquiring,
102
- acquired,
103
- releasing,
104
- released,
105
- };
106
-
107
- fn enqueue(self: *Range, range: *Range) void {
108
- assert(self.status == .acquired);
109
- assert(range.status == .acquiring);
110
-
111
- if (self.head == null) {
112
- assert(self.tail == null);
113
- self.head = range;
114
- self.tail = range;
115
- } else {
116
- self.tail.?.next = range;
117
- self.tail = range;
118
- }
119
- }
120
-
121
- fn overlaps(self: *const Range, range: *const Range) bool {
122
- if (self.offset < range.offset) {
123
- return self.offset + self.len > range.offset;
124
- } else {
125
- return range.offset + range.len > self.offset;
126
- }
127
- }
128
-
129
- fn resume_queued_ranges(self: *Range) void {
130
- assert(self.status == .releasing);
131
- self.status = .released;
132
-
133
- // This range should have been removed from the list of concurrent ranges:
134
- assert(self.prev == null);
135
- assert(self.next == null);
136
-
137
- var head = self.head;
138
- self.head = null;
139
- self.tail = null;
140
- while (head) |queued| {
141
- assert(queued.status == .acquiring);
142
- head = queued.next;
143
- resume queued.frame;
144
- }
145
-
146
- // This range should be finished executing and should no longer overlap or have any queue:
147
- assert(self.head == null);
148
- assert(self.tail == null);
149
- }
150
-
151
- pub fn format(
152
- value: Range,
153
- comptime fmt: []const u8,
154
- options: std.fmt.FormatOptions,
155
- writer: anytype,
156
- ) !void {
157
- try writer.print("offset={} len={}", .{
158
- value.offset,
159
- value.len,
160
- });
161
- }
162
- };
@@ -1,53 +0,0 @@
1
- const std = @import("std");
2
- const mem = std.mem;
3
-
4
- pub fn FixedArrayList(comptime T: type, comptime size: usize) type {
5
- return struct {
6
- const Self = @This();
7
-
8
- items: []T,
9
-
10
- pub fn init(allocator: *mem.Allocator) !Self {
11
- var ret = Self{ .items = &[0]T{} };
12
- ret.items.ptr = try allocator.create([size]T);
13
- return ret;
14
- }
15
-
16
- pub fn deinit(self: *Self, allocator: *std.mem.Allocator) void {
17
- // Must use "unsafe" slicing here to avoid safety checks
18
- allocator.free(self.items.ptr[0..size]);
19
- }
20
-
21
- pub fn append(self: *Self, item: T) error{NoSpaceLeft}!void {
22
- if (self.items.len == size) return error.NoSpaceLeft;
23
- self.items.len += 1;
24
- self.items[self.items.len - 1] = item;
25
- }
26
-
27
- pub fn clear(self: *Self) void {
28
- self.items.len = 0;
29
- }
30
- };
31
- }
32
-
33
- test "init/deinit/appendSlice/clear" {
34
- const testing = std.testing;
35
-
36
- var list = try FixedArrayList(u32, 5).init(testing.allocator);
37
- defer list.deinit(testing.allocator);
38
-
39
- try list.append(1);
40
- try list.append(2);
41
- try list.append(3);
42
-
43
- testing.expectEqualSlices(u32, &[_]u32{ 1, 2, 3 }, list.items);
44
-
45
- try list.append(4);
46
- try list.append(5);
47
-
48
- testing.expectError(error.NoSpaceLeft, list.append(6));
49
-
50
- list.clear();
51
-
52
- testing.expect(list.items.len == 0);
53
- }