tigerbeetle-node 0.8.1 → 0.9.143
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 +584 -184
- package/dist/benchmark.js +59 -51
- package/dist/benchmark.js.map +1 -1
- 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/bin/x86_64-windows/client.node +0 -0
- package/dist/bindings.d.ts +141 -0
- package/dist/bindings.js +112 -0
- package/dist/bindings.js.map +1 -0
- package/dist/index.d.ts +2 -125
- package/dist/index.js +51 -101
- package/dist/index.js.map +1 -1
- package/dist/test.js +69 -55
- package/dist/test.js.map +1 -1
- package/package-lock.json +26 -0
- package/package.json +17 -28
- package/src/benchmark.ts +58 -49
- package/src/bindings.ts +631 -0
- package/src/index.ts +71 -163
- package/src/node.zig +169 -148
- package/src/test.ts +71 -57
- package/src/translate.zig +19 -36
- package/.yarn/releases/yarn-berry.cjs +0 -55
- package/.yarnrc.yml +0 -1
- package/scripts/download_node_headers.sh +0 -25
- package/scripts/postinstall.sh +0 -6
- package/src/tigerbeetle/scripts/benchmark.bat +0 -46
- package/src/tigerbeetle/scripts/benchmark.sh +0 -55
- package/src/tigerbeetle/scripts/install.sh +0 -6
- package/src/tigerbeetle/scripts/install_zig.bat +0 -109
- package/src/tigerbeetle/scripts/install_zig.sh +0 -84
- package/src/tigerbeetle/scripts/lint.zig +0 -199
- package/src/tigerbeetle/scripts/upgrade_ubuntu_kernel.sh +0 -39
- package/src/tigerbeetle/scripts/vopr.bat +0 -48
- package/src/tigerbeetle/scripts/vopr.sh +0 -33
- package/src/tigerbeetle/scripts/vr_state_enumerate +0 -46
- package/src/tigerbeetle/src/benchmark.zig +0 -290
- package/src/tigerbeetle/src/cli.zig +0 -244
- package/src/tigerbeetle/src/config.zig +0 -239
- package/src/tigerbeetle/src/demo.zig +0 -125
- package/src/tigerbeetle/src/demo_01_create_accounts.zig +0 -35
- package/src/tigerbeetle/src/demo_02_lookup_accounts.zig +0 -7
- package/src/tigerbeetle/src/demo_03_create_transfers.zig +0 -24
- package/src/tigerbeetle/src/demo_04_create_pending_transfers.zig +0 -61
- package/src/tigerbeetle/src/demo_05_post_pending_transfers.zig +0 -37
- package/src/tigerbeetle/src/demo_06_void_pending_transfers.zig +0 -24
- package/src/tigerbeetle/src/demo_07_lookup_transfers.zig +0 -7
- package/src/tigerbeetle/src/fifo.zig +0 -104
- package/src/tigerbeetle/src/io/benchmark.zig +0 -213
- package/src/tigerbeetle/src/io/darwin.zig +0 -793
- package/src/tigerbeetle/src/io/linux.zig +0 -1038
- package/src/tigerbeetle/src/io/test.zig +0 -643
- package/src/tigerbeetle/src/io/windows.zig +0 -1161
- package/src/tigerbeetle/src/io.zig +0 -34
- package/src/tigerbeetle/src/main.zig +0 -144
- package/src/tigerbeetle/src/message_bus.zig +0 -1000
- package/src/tigerbeetle/src/message_pool.zig +0 -142
- package/src/tigerbeetle/src/ring_buffer.zig +0 -289
- package/src/tigerbeetle/src/simulator.zig +0 -417
- package/src/tigerbeetle/src/state_machine.zig +0 -2470
- package/src/tigerbeetle/src/storage.zig +0 -308
- package/src/tigerbeetle/src/test/cluster.zig +0 -351
- package/src/tigerbeetle/src/test/message_bus.zig +0 -93
- package/src/tigerbeetle/src/test/network.zig +0 -179
- package/src/tigerbeetle/src/test/packet_simulator.zig +0 -387
- package/src/tigerbeetle/src/test/state_checker.zig +0 -145
- package/src/tigerbeetle/src/test/state_machine.zig +0 -76
- package/src/tigerbeetle/src/test/storage.zig +0 -438
- package/src/tigerbeetle/src/test/time.zig +0 -84
- package/src/tigerbeetle/src/tigerbeetle.zig +0 -222
- package/src/tigerbeetle/src/time.zig +0 -113
- package/src/tigerbeetle/src/unit_tests.zig +0 -14
- package/src/tigerbeetle/src/vsr/client.zig +0 -505
- package/src/tigerbeetle/src/vsr/clock.zig +0 -812
- package/src/tigerbeetle/src/vsr/journal.zig +0 -2293
- package/src/tigerbeetle/src/vsr/marzullo.zig +0 -309
- package/src/tigerbeetle/src/vsr/replica.zig +0 -5015
- package/src/tigerbeetle/src/vsr.zig +0 -1017
- package/yarn.lock +0 -42
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
const std = @import("std");
|
|
2
|
-
const builtin = @import("builtin");
|
|
3
|
-
const assert = std.debug.assert;
|
|
4
|
-
const os = std.os;
|
|
5
|
-
|
|
6
|
-
const FIFO = @import("fifo.zig").FIFO;
|
|
7
|
-
const IO_Linux = @import("io/linux.zig").IO;
|
|
8
|
-
const IO_Darwin = @import("io/darwin.zig").IO;
|
|
9
|
-
const IO_Windows = @import("io/windows.zig").IO;
|
|
10
|
-
|
|
11
|
-
pub const IO = switch (builtin.target.os.tag) {
|
|
12
|
-
.linux => IO_Linux,
|
|
13
|
-
.windows => IO_Windows,
|
|
14
|
-
.macos, .tvos, .watchos, .ios => IO_Darwin,
|
|
15
|
-
else => @compileError("IO is not supported for platform"),
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
pub fn buffer_limit(buffer_len: usize) usize {
|
|
19
|
-
// Linux limits how much may be written in a `pwrite()/pread()` call, which is `0x7ffff000` on
|
|
20
|
-
// both 64-bit and 32-bit systems, due to using a signed C int as the return value, as well as
|
|
21
|
-
// stuffing the errno codes into the last `4096` values.
|
|
22
|
-
// Darwin limits writes to `0x7fffffff` bytes, more than that returns `EINVAL`.
|
|
23
|
-
// The corresponding POSIX limit is `std.math.maxInt(isize)`.
|
|
24
|
-
const limit = switch (builtin.target.os.tag) {
|
|
25
|
-
.linux => 0x7ffff000,
|
|
26
|
-
.macos, .ios, .watchos, .tvos => std.math.maxInt(i32),
|
|
27
|
-
else => std.math.maxInt(isize),
|
|
28
|
-
};
|
|
29
|
-
return std.math.min(limit, buffer_len);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
test "I/O" {
|
|
33
|
-
_ = @import("io/test.zig");
|
|
34
|
-
}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
const std = @import("std");
|
|
2
|
-
const assert = std.debug.assert;
|
|
3
|
-
const fmt = std.fmt;
|
|
4
|
-
const mem = std.mem;
|
|
5
|
-
const os = std.os;
|
|
6
|
-
const log = std.log;
|
|
7
|
-
|
|
8
|
-
const config = @import("config.zig");
|
|
9
|
-
pub const log_level: std.log.Level = @intToEnum(std.log.Level, config.log_level);
|
|
10
|
-
|
|
11
|
-
const cli = @import("cli.zig");
|
|
12
|
-
|
|
13
|
-
const IO = @import("io.zig").IO;
|
|
14
|
-
const Time = @import("time.zig").Time;
|
|
15
|
-
const Storage = @import("storage.zig").Storage;
|
|
16
|
-
const MessageBus = @import("message_bus.zig").MessageBusReplica;
|
|
17
|
-
const StateMachine = @import("state_machine.zig").StateMachine;
|
|
18
|
-
|
|
19
|
-
const vsr = @import("vsr.zig");
|
|
20
|
-
const Replica = vsr.Replica(StateMachine, MessageBus, Storage, Time);
|
|
21
|
-
|
|
22
|
-
pub fn main() !void {
|
|
23
|
-
var io = try IO.init(128, 0);
|
|
24
|
-
defer io.deinit();
|
|
25
|
-
|
|
26
|
-
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
|
|
27
|
-
defer arena.deinit();
|
|
28
|
-
|
|
29
|
-
const allocator = arena.allocator();
|
|
30
|
-
|
|
31
|
-
switch (try cli.parse_args(allocator)) {
|
|
32
|
-
.init => |args| try init(&io, args.cluster, args.replica, args.dir_fd),
|
|
33
|
-
.start => |args| try start(
|
|
34
|
-
&io,
|
|
35
|
-
allocator,
|
|
36
|
-
args.cluster,
|
|
37
|
-
args.replica,
|
|
38
|
-
args.addresses,
|
|
39
|
-
args.dir_fd,
|
|
40
|
-
),
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Pad the cluster id number and the replica index with 0s
|
|
45
|
-
const filename_fmt = "cluster_{d:0>10}_replica_{d:0>3}.tigerbeetle";
|
|
46
|
-
const filename_len = fmt.count(filename_fmt, .{ 0, 0 });
|
|
47
|
-
|
|
48
|
-
/// Create a .tigerbeetle data file for the given args and exit
|
|
49
|
-
fn init(io: *IO, cluster: u32, replica: u8, dir_fd: os.fd_t) !void {
|
|
50
|
-
// Add 1 for the terminating null byte
|
|
51
|
-
var buffer: [filename_len + 1]u8 = undefined;
|
|
52
|
-
const filename = fmt.bufPrintZ(&buffer, filename_fmt, .{ cluster, replica }) catch unreachable;
|
|
53
|
-
assert(filename.len == filename_len);
|
|
54
|
-
|
|
55
|
-
// TODO Expose data file size on the CLI.
|
|
56
|
-
const fd = try io.open_file(
|
|
57
|
-
dir_fd,
|
|
58
|
-
filename,
|
|
59
|
-
config.journal_size_max,
|
|
60
|
-
true,
|
|
61
|
-
);
|
|
62
|
-
std.os.close(fd);
|
|
63
|
-
|
|
64
|
-
const file = try (std.fs.Dir{ .fd = dir_fd }).openFile(filename, .{ .write = true });
|
|
65
|
-
defer file.close();
|
|
66
|
-
|
|
67
|
-
{
|
|
68
|
-
const write_size_max = 4 * 1024 * 1024;
|
|
69
|
-
var write: [write_size_max]u8 = undefined;
|
|
70
|
-
var offset: u64 = 0;
|
|
71
|
-
while (true) {
|
|
72
|
-
const write_size = vsr.format_journal(cluster, offset, &write);
|
|
73
|
-
if (write_size == 0) break;
|
|
74
|
-
try file.writeAll(write[0..write_size]);
|
|
75
|
-
offset += write_size;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
log.info("initialized data file", .{});
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/// Run as a replica server defined by the given args
|
|
83
|
-
fn start(
|
|
84
|
-
io: *IO,
|
|
85
|
-
allocator: mem.Allocator,
|
|
86
|
-
cluster: u32,
|
|
87
|
-
replica_index: u8,
|
|
88
|
-
addresses: []std.net.Address,
|
|
89
|
-
dir_fd: os.fd_t,
|
|
90
|
-
) !void {
|
|
91
|
-
// Add 1 for the terminating null byte
|
|
92
|
-
var buffer: [filename_len + 1]u8 = undefined;
|
|
93
|
-
const filename = fmt.bufPrintZ(&buffer, filename_fmt, .{ cluster, replica_index }) catch {
|
|
94
|
-
unreachable;
|
|
95
|
-
};
|
|
96
|
-
assert(filename.len == filename_len);
|
|
97
|
-
|
|
98
|
-
// TODO Expose data file size on the CLI.
|
|
99
|
-
const storage_fd = try io.open_file(
|
|
100
|
-
dir_fd,
|
|
101
|
-
filename,
|
|
102
|
-
config.journal_size_max, // TODO Double-check that we have space for redundant headers.
|
|
103
|
-
false,
|
|
104
|
-
);
|
|
105
|
-
|
|
106
|
-
var state_machine = try StateMachine.init(
|
|
107
|
-
allocator,
|
|
108
|
-
config.accounts_max,
|
|
109
|
-
config.transfers_max,
|
|
110
|
-
config.transfers_pending_max,
|
|
111
|
-
);
|
|
112
|
-
var storage = try Storage.init(config.journal_size_max, storage_fd, io);
|
|
113
|
-
var message_bus = try MessageBus.init(
|
|
114
|
-
allocator,
|
|
115
|
-
cluster,
|
|
116
|
-
addresses,
|
|
117
|
-
replica_index,
|
|
118
|
-
io,
|
|
119
|
-
);
|
|
120
|
-
var time: Time = .{};
|
|
121
|
-
var replica = try Replica.init(
|
|
122
|
-
allocator,
|
|
123
|
-
cluster,
|
|
124
|
-
@intCast(u8, addresses.len),
|
|
125
|
-
replica_index,
|
|
126
|
-
&time,
|
|
127
|
-
&storage,
|
|
128
|
-
&message_bus,
|
|
129
|
-
&state_machine,
|
|
130
|
-
);
|
|
131
|
-
message_bus.set_on_message(*Replica, &replica, Replica.on_message);
|
|
132
|
-
|
|
133
|
-
log.info("cluster={x} replica={}: listening on {}", .{
|
|
134
|
-
cluster,
|
|
135
|
-
replica_index,
|
|
136
|
-
addresses[replica_index],
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
while (true) {
|
|
140
|
-
replica.tick();
|
|
141
|
-
message_bus.tick();
|
|
142
|
-
try io.run_for_ns(config.tick_ms * std.time.ns_per_ms);
|
|
143
|
-
}
|
|
144
|
-
}
|