tigerbeetle-node 0.11.12 → 0.12.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 (143) hide show
  1. package/README.md +212 -196
  2. package/dist/bin/aarch64-linux-gnu/client.node +0 -0
  3. package/dist/bin/aarch64-linux-musl/client.node +0 -0
  4. package/dist/bin/aarch64-macos/client.node +0 -0
  5. package/dist/bin/x86_64-linux-gnu/client.node +0 -0
  6. package/dist/bin/x86_64-linux-musl/client.node +0 -0
  7. package/dist/bin/x86_64-macos/client.node +0 -0
  8. package/dist/index.js +33 -1
  9. package/dist/index.js.map +1 -1
  10. package/package-lock.json +66 -0
  11. package/package.json +8 -17
  12. package/src/index.ts +56 -1
  13. package/src/node.zig +10 -9
  14. package/dist/.client.node.sha256 +0 -1
  15. package/scripts/build_lib.sh +0 -61
  16. package/scripts/download_node_headers.sh +0 -32
  17. package/src/tigerbeetle/scripts/benchmark.bat +0 -48
  18. package/src/tigerbeetle/scripts/benchmark.sh +0 -66
  19. package/src/tigerbeetle/scripts/confirm_image.sh +0 -44
  20. package/src/tigerbeetle/scripts/fuzz_loop.sh +0 -15
  21. package/src/tigerbeetle/scripts/fuzz_unique_errors.sh +0 -7
  22. package/src/tigerbeetle/scripts/install.bat +0 -7
  23. package/src/tigerbeetle/scripts/install.sh +0 -21
  24. package/src/tigerbeetle/scripts/install_zig.bat +0 -113
  25. package/src/tigerbeetle/scripts/install_zig.sh +0 -90
  26. package/src/tigerbeetle/scripts/lint.zig +0 -199
  27. package/src/tigerbeetle/scripts/pre-commit.sh +0 -9
  28. package/src/tigerbeetle/scripts/scripts/benchmark.bat +0 -48
  29. package/src/tigerbeetle/scripts/scripts/benchmark.sh +0 -66
  30. package/src/tigerbeetle/scripts/scripts/confirm_image.sh +0 -44
  31. package/src/tigerbeetle/scripts/scripts/fuzz_loop.sh +0 -15
  32. package/src/tigerbeetle/scripts/scripts/fuzz_unique_errors.sh +0 -7
  33. package/src/tigerbeetle/scripts/scripts/install.bat +0 -7
  34. package/src/tigerbeetle/scripts/scripts/install.sh +0 -21
  35. package/src/tigerbeetle/scripts/scripts/install_zig.bat +0 -113
  36. package/src/tigerbeetle/scripts/scripts/install_zig.sh +0 -90
  37. package/src/tigerbeetle/scripts/scripts/lint.zig +0 -199
  38. package/src/tigerbeetle/scripts/scripts/pre-commit.sh +0 -9
  39. package/src/tigerbeetle/scripts/scripts/shellcheck.sh +0 -5
  40. package/src/tigerbeetle/scripts/scripts/tests_on_alpine.sh +0 -10
  41. package/src/tigerbeetle/scripts/scripts/tests_on_ubuntu.sh +0 -14
  42. package/src/tigerbeetle/scripts/scripts/upgrade_ubuntu_kernel.sh +0 -48
  43. package/src/tigerbeetle/scripts/scripts/validate_docs.sh +0 -23
  44. package/src/tigerbeetle/scripts/scripts/vr_state_enumerate +0 -46
  45. package/src/tigerbeetle/scripts/shellcheck.sh +0 -5
  46. package/src/tigerbeetle/scripts/tests_on_alpine.sh +0 -10
  47. package/src/tigerbeetle/scripts/tests_on_ubuntu.sh +0 -14
  48. package/src/tigerbeetle/scripts/upgrade_ubuntu_kernel.sh +0 -48
  49. package/src/tigerbeetle/scripts/validate_docs.sh +0 -23
  50. package/src/tigerbeetle/scripts/vr_state_enumerate +0 -46
  51. package/src/tigerbeetle/src/benchmark.zig +0 -314
  52. package/src/tigerbeetle/src/config.zig +0 -234
  53. package/src/tigerbeetle/src/constants.zig +0 -436
  54. package/src/tigerbeetle/src/ewah.zig +0 -286
  55. package/src/tigerbeetle/src/ewah_benchmark.zig +0 -120
  56. package/src/tigerbeetle/src/ewah_fuzz.zig +0 -130
  57. package/src/tigerbeetle/src/fifo.zig +0 -120
  58. package/src/tigerbeetle/src/io/benchmark.zig +0 -213
  59. package/src/tigerbeetle/src/io/darwin.zig +0 -814
  60. package/src/tigerbeetle/src/io/linux.zig +0 -1062
  61. package/src/tigerbeetle/src/io/test.zig +0 -643
  62. package/src/tigerbeetle/src/io/windows.zig +0 -1183
  63. package/src/tigerbeetle/src/io.zig +0 -34
  64. package/src/tigerbeetle/src/iops.zig +0 -107
  65. package/src/tigerbeetle/src/lsm/README.md +0 -308
  66. package/src/tigerbeetle/src/lsm/binary_search.zig +0 -341
  67. package/src/tigerbeetle/src/lsm/bloom_filter.zig +0 -125
  68. package/src/tigerbeetle/src/lsm/compaction.zig +0 -603
  69. package/src/tigerbeetle/src/lsm/composite_key.zig +0 -77
  70. package/src/tigerbeetle/src/lsm/direction.zig +0 -11
  71. package/src/tigerbeetle/src/lsm/eytzinger.zig +0 -587
  72. package/src/tigerbeetle/src/lsm/eytzinger_benchmark.zig +0 -330
  73. package/src/tigerbeetle/src/lsm/forest.zig +0 -204
  74. package/src/tigerbeetle/src/lsm/forest_fuzz.zig +0 -401
  75. package/src/tigerbeetle/src/lsm/grid.zig +0 -573
  76. package/src/tigerbeetle/src/lsm/groove.zig +0 -972
  77. package/src/tigerbeetle/src/lsm/k_way_merge.zig +0 -474
  78. package/src/tigerbeetle/src/lsm/level_iterator.zig +0 -332
  79. package/src/tigerbeetle/src/lsm/manifest.zig +0 -617
  80. package/src/tigerbeetle/src/lsm/manifest_level.zig +0 -877
  81. package/src/tigerbeetle/src/lsm/manifest_log.zig +0 -789
  82. package/src/tigerbeetle/src/lsm/manifest_log_fuzz.zig +0 -691
  83. package/src/tigerbeetle/src/lsm/merge_iterator.zig +0 -106
  84. package/src/tigerbeetle/src/lsm/node_pool.zig +0 -235
  85. package/src/tigerbeetle/src/lsm/posted_groove.zig +0 -378
  86. package/src/tigerbeetle/src/lsm/segmented_array.zig +0 -1328
  87. package/src/tigerbeetle/src/lsm/segmented_array_benchmark.zig +0 -148
  88. package/src/tigerbeetle/src/lsm/segmented_array_fuzz.zig +0 -9
  89. package/src/tigerbeetle/src/lsm/set_associative_cache.zig +0 -850
  90. package/src/tigerbeetle/src/lsm/table.zig +0 -1031
  91. package/src/tigerbeetle/src/lsm/table_immutable.zig +0 -203
  92. package/src/tigerbeetle/src/lsm/table_iterator.zig +0 -340
  93. package/src/tigerbeetle/src/lsm/table_mutable.zig +0 -220
  94. package/src/tigerbeetle/src/lsm/test.zig +0 -438
  95. package/src/tigerbeetle/src/lsm/tree.zig +0 -1193
  96. package/src/tigerbeetle/src/lsm/tree_fuzz.zig +0 -474
  97. package/src/tigerbeetle/src/message_bus.zig +0 -1012
  98. package/src/tigerbeetle/src/message_pool.zig +0 -156
  99. package/src/tigerbeetle/src/ring_buffer.zig +0 -399
  100. package/src/tigerbeetle/src/simulator.zig +0 -569
  101. package/src/tigerbeetle/src/state_machine/auditor.zig +0 -577
  102. package/src/tigerbeetle/src/state_machine/workload.zig +0 -883
  103. package/src/tigerbeetle/src/state_machine.zig +0 -1881
  104. package/src/tigerbeetle/src/static_allocator.zig +0 -65
  105. package/src/tigerbeetle/src/stdx.zig +0 -162
  106. package/src/tigerbeetle/src/storage.zig +0 -393
  107. package/src/tigerbeetle/src/testing/cluster/message_bus.zig +0 -82
  108. package/src/tigerbeetle/src/testing/cluster/network.zig +0 -237
  109. package/src/tigerbeetle/src/testing/cluster/state_checker.zig +0 -169
  110. package/src/tigerbeetle/src/testing/cluster/storage_checker.zig +0 -202
  111. package/src/tigerbeetle/src/testing/cluster.zig +0 -443
  112. package/src/tigerbeetle/src/testing/fuzz.zig +0 -140
  113. package/src/tigerbeetle/src/testing/hash_log.zig +0 -66
  114. package/src/tigerbeetle/src/testing/id.zig +0 -99
  115. package/src/tigerbeetle/src/testing/packet_simulator.zig +0 -364
  116. package/src/tigerbeetle/src/testing/priority_queue.zig +0 -645
  117. package/src/tigerbeetle/src/testing/reply_sequence.zig +0 -139
  118. package/src/tigerbeetle/src/testing/state_machine.zig +0 -249
  119. package/src/tigerbeetle/src/testing/storage.zig +0 -757
  120. package/src/tigerbeetle/src/testing/table.zig +0 -247
  121. package/src/tigerbeetle/src/testing/time.zig +0 -84
  122. package/src/tigerbeetle/src/tigerbeetle.zig +0 -227
  123. package/src/tigerbeetle/src/time.zig +0 -112
  124. package/src/tigerbeetle/src/tracer.zig +0 -529
  125. package/src/tigerbeetle/src/unit_tests.zig +0 -42
  126. package/src/tigerbeetle/src/vopr.zig +0 -495
  127. package/src/tigerbeetle/src/vsr/README.md +0 -209
  128. package/src/tigerbeetle/src/vsr/client.zig +0 -544
  129. package/src/tigerbeetle/src/vsr/clock.zig +0 -853
  130. package/src/tigerbeetle/src/vsr/journal.zig +0 -2413
  131. package/src/tigerbeetle/src/vsr/journal_format_fuzz.zig +0 -111
  132. package/src/tigerbeetle/src/vsr/marzullo.zig +0 -309
  133. package/src/tigerbeetle/src/vsr/replica.zig +0 -6381
  134. package/src/tigerbeetle/src/vsr/replica_format.zig +0 -219
  135. package/src/tigerbeetle/src/vsr/superblock.zig +0 -1631
  136. package/src/tigerbeetle/src/vsr/superblock_client_table.zig +0 -256
  137. package/src/tigerbeetle/src/vsr/superblock_free_set.zig +0 -929
  138. package/src/tigerbeetle/src/vsr/superblock_free_set_fuzz.zig +0 -334
  139. package/src/tigerbeetle/src/vsr/superblock_fuzz.zig +0 -390
  140. package/src/tigerbeetle/src/vsr/superblock_manifest.zig +0 -615
  141. package/src/tigerbeetle/src/vsr/superblock_quorums.zig +0 -394
  142. package/src/tigerbeetle/src/vsr/superblock_quorums_fuzz.zig +0 -314
  143. package/src/tigerbeetle/src/vsr.zig +0 -1352
@@ -1,529 +0,0 @@
1
- //! The tracer records a tree of event spans.
2
- //!
3
- //! In order to create event spans, you need somewhere to store the `SpanStart`.
4
- //!
5
- //! var slot: ?SpanStart = null;
6
- //! tracer.start(&slot, group, event, @src());
7
- //! ... do stuff ...
8
- //! tracer.end(&slot, group, event);
9
- //!
10
- //! Each slot can be used as many times as you like,
11
- //! but you must alternate calls to start and end,
12
- //! and you must end every event.
13
- //!
14
- //! // good
15
- //! tracer.start(&slot, group_a, event_a, @src());
16
- //! tracer.end(&slot, group_a, event_a);
17
- //! tracer.start(&slot, group_b, event_b, @src());
18
- //! tracer.end(&slot, group_b, event_b);
19
- //!
20
- //! // bad
21
- //! tracer.start(&slot, group_a, event_a, @src());
22
- //! tracer.start(&slot, group_b, event_b, @src());
23
- //! tracer.end(&slot, group_b, event_b);
24
- //! tracer.end(&slot, group_a, event_a);
25
- //!
26
- //! // bad
27
- //! tracer.end(&slot, group_a, event_a);
28
- //! tracer.start(&slot, group_a, event_a, @src());
29
- //!
30
- //! // bad
31
- //! tracer.start(&slot, group_a, event_a, @src());
32
- //! std.os.exit(0);
33
- //!
34
- //! Before freeing a slot, you should `assert(slot == null)`
35
- //! to ensure that you didn't forget to end an event.
36
- //!
37
- //! Each `Event` has an `EventGroup`.
38
- //! Within each group, event spans should form a tree.
39
- //!
40
- //! // good
41
- //! tracer.start(&a, group, ...);
42
- //! tracer.start(&b, group, ...);
43
- //! tracer.end(&b, group, ...);
44
- //! tracer.end(&a, group, ...);
45
- //!
46
- //! // bad
47
- //! tracer.start(&a, group, ...);
48
- //! tracer.start(&b, group, ...);
49
- //! tracer.end(&a, group, ...);
50
- //! tracer.end(&b, group, ...);
51
- //!
52
- //! The tracer itself will not object to non-tree spans, but
53
- //! some constants.tracer_backends will either refuse to open the trace or will render it weirdly.
54
- //!
55
- //! If you're having trouble making your spans form a tree, feel free to just add new groups.
56
-
57
- const std = @import("std");
58
- const assert = std.debug.assert;
59
- const Allocator = std.mem.Allocator;
60
- const log = std.log.scoped(.tracer);
61
-
62
- const constants = @import("./constants.zig");
63
- const Time = @import("./time.zig").Time;
64
- const stdx = @import("stdx.zig");
65
-
66
- /// All strings in Event must be comptime constants to ensure that they live until after `tracer.deinit` is called.
67
- pub const Event = union(enum) {
68
- tracer_flush,
69
- commit: struct {
70
- op: u64,
71
- },
72
- checkpoint,
73
- state_machine_prefetch,
74
- state_machine_commit,
75
- state_machine_compact,
76
- tree_compaction_beat,
77
- tree_compaction_tick: struct {
78
- level_b: u8,
79
- },
80
- tree_compaction_merge: struct {
81
- level_b: u8,
82
- },
83
-
84
- pub fn format(
85
- event: Event,
86
- comptime fmt: []const u8,
87
- options: std.fmt.FormatOptions,
88
- writer: anytype,
89
- ) !void {
90
- _ = fmt;
91
- _ = options;
92
-
93
- switch (event) {
94
- .tracer_flush,
95
- .checkpoint,
96
- .state_machine_prefetch,
97
- .state_machine_commit,
98
- .state_machine_compact,
99
- .tree_compaction_beat,
100
- => try writer.writeAll(@tagName(event)),
101
- .commit => |commit| try writer.print("commit({})", .{commit.op}),
102
- .tree_compaction_tick => |args| {
103
- if (args.level_b == 0)
104
- try writer.print(
105
- "tree_compaction_tick({s}->{})",
106
- .{
107
- "immutable",
108
- args.level_b,
109
- },
110
- )
111
- else
112
- try writer.print(
113
- "tree_compaction_tick({}->{})",
114
- .{
115
- args.level_b - 1,
116
- args.level_b,
117
- },
118
- );
119
- },
120
- .tree_compaction_merge => |args| {
121
- if (args.level_b == 0)
122
- try writer.print(
123
- "tree_compaction_merge({s}->{})",
124
- .{
125
- "immutable",
126
- args.level_b,
127
- },
128
- )
129
- else
130
- try writer.print(
131
- "tree_compaction_merge({}->{})",
132
- .{
133
- args.level_b - 1,
134
- args.level_b,
135
- },
136
- );
137
- },
138
- }
139
- }
140
- };
141
-
142
- /// All strings in EventGroup must be comptime constants to ensure that they live until after `tracer.deinit` is called.
143
- pub const EventGroup = union(enum) {
144
- main,
145
- tracer,
146
- tree: struct {
147
- tree_name: [:0]const u8,
148
- },
149
- tree_compaction: struct {
150
- compaction_name: [:0]const u8,
151
- },
152
-
153
- fn name(event_group: EventGroup) [:0]const u8 {
154
- return switch (event_group) {
155
- .main => "main",
156
- .tracer => "tracer",
157
- .tree => |args| args.tree_name,
158
- .tree_compaction => |args| args.compaction_name,
159
- };
160
- }
161
- };
162
-
163
- usingnamespace switch (constants.tracer_backend) {
164
- .none => TracerNone,
165
- .perfetto => TracerPerfetto,
166
- .tracy => TracerTracy,
167
- };
168
-
169
- pub const TracerNone = struct {
170
- pub const SpanStart = void;
171
- pub fn init(allocator: Allocator) !void {
172
- _ = allocator;
173
- }
174
- pub fn deinit(allocator: Allocator) void {
175
- _ = allocator;
176
- }
177
- pub fn start(
178
- slot: *?SpanStart,
179
- event_group: EventGroup,
180
- event: Event,
181
- src: std.builtin.SourceLocation,
182
- ) void {
183
- _ = src;
184
- _ = slot;
185
- _ = event_group;
186
- _ = event;
187
- }
188
- pub fn end(slot: *?SpanStart, event_group: EventGroup, event: Event) void {
189
- _ = slot;
190
- _ = event_group;
191
- _ = event;
192
- }
193
- pub fn flush() void {}
194
- };
195
-
196
- pub const TracerPerfetto = struct {
197
- var is_initialized = false;
198
- var timer = Time{};
199
- var span_id_next: u64 = 0;
200
- var spans: std.ArrayList(Span) = undefined;
201
- var flush_slot: ?SpanStart = null;
202
- var log_file: std.fs.File = undefined;
203
-
204
- const span_count_max = 1 << 20;
205
- const log_path = "./tracer.json";
206
-
207
- const SpanId = u64;
208
-
209
- pub const SpanStart = struct {
210
- id: SpanId,
211
- start_time_ns: u64,
212
- group: EventGroup,
213
- event: Event,
214
- };
215
-
216
- const Span = struct {
217
- id: SpanId,
218
- start_time_ns: u64,
219
- end_time_ns: u64,
220
- group: EventGroup,
221
- event: Event,
222
- };
223
-
224
- pub fn init(allocator: Allocator) !void {
225
- assert(!is_initialized);
226
-
227
- spans = try std.ArrayList(Span).initCapacity(allocator, span_count_max);
228
- errdefer spans.deinit();
229
-
230
- log_file = try std.fs.cwd().createFile(log_path, .{ .truncate = true });
231
- errdefer log_file.close();
232
-
233
- try log_file.writeAll(
234
- \\{"traceEvents":[
235
- \\
236
- );
237
-
238
- is_initialized = true;
239
- }
240
-
241
- pub fn deinit(allocator: Allocator) void {
242
- _ = allocator;
243
-
244
- assert(is_initialized);
245
-
246
- flush();
247
- log_file.close();
248
- assert(flush_slot == null);
249
- spans.deinit();
250
- is_initialized = false;
251
- }
252
-
253
- pub fn start(
254
- slot: *?SpanStart,
255
- event_group: EventGroup,
256
- event: Event,
257
- src: std.builtin.SourceLocation,
258
- ) void {
259
- _ = src;
260
- assert(is_initialized);
261
-
262
- // The event must not have already been started.
263
- assert(slot.* == null);
264
-
265
- slot.* = .{
266
- .id = span_id_next,
267
- .start_time_ns = timer.monotonic(),
268
- .group = event_group,
269
- .event = event,
270
- };
271
- span_id_next += 1;
272
- }
273
-
274
- pub fn end(slot: *?SpanStart, event_group: EventGroup, event: Event) void {
275
- assert(is_initialized);
276
-
277
- // The event must have already been started.
278
- const span_start = &slot.*.?;
279
- assert(std.meta.eql(span_start.group, event_group));
280
- assert(std.meta.eql(span_start.event, event));
281
-
282
- // Make sure we have room in spans.
283
- if (spans.items.len >= span_count_max) flush();
284
- assert(spans.items.len < span_count_max);
285
-
286
- spans.appendAssumeCapacity(.{
287
- .id = span_start.id,
288
- .start_time_ns = span_start.start_time_ns,
289
- .end_time_ns = timer.monotonic(),
290
- .group = span_start.group,
291
- .event = span_start.event,
292
- });
293
- slot.* = null;
294
- }
295
-
296
- pub fn flush() void {
297
- assert(is_initialized);
298
-
299
- if (spans.items.len == 0) return;
300
-
301
- start(&flush_slot, .tracer, .tracer_flush, @src());
302
- flush_or_err() catch |err| {
303
- log.err("Could not flush tracer log, discarding instead: {}", .{err});
304
- };
305
- spans.shrinkRetainingCapacity(0);
306
- end(&flush_slot, .tracer, .tracer_flush);
307
- }
308
-
309
- fn flush_or_err() !void {
310
- for (spans.items) |span| {
311
- // Perfetto requires this json format:
312
- // https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview
313
- const NameJson = struct {
314
- event: Event,
315
-
316
- pub fn jsonStringify(
317
- name_json: @This(),
318
- options: std.json.StringifyOptions,
319
- writer: anytype,
320
- ) @TypeOf(writer).Error!void {
321
- _ = options;
322
- try writer.writeAll("\"");
323
- try writer.print("{}", .{name_json.event});
324
- try writer.writeAll("\"");
325
- }
326
- };
327
- const SpanJson = struct {
328
- name: NameJson,
329
- cat: []const u8 = "default",
330
- ph: []const u8 = "X",
331
- ts: f64,
332
- dur: f64,
333
- pid: u64 = 0,
334
- tid: u64,
335
- };
336
- const MetaJson = struct {
337
- name: []const u8,
338
- ph: []const u8 = "M",
339
- pid: u64 = 0,
340
- tid: u64,
341
- args: struct {
342
- name: []const u8,
343
- },
344
- };
345
-
346
- const tid_64 = std.hash_map.hashString(span.group.name());
347
- const tid = @truncate(u32, tid_64) ^ @truncate(u32, tid_64 >> 32);
348
-
349
- var buffered_writer = std.io.bufferedWriter(log_file.writer());
350
- const writer = buffered_writer.writer();
351
-
352
- try std.json.stringify(
353
- SpanJson{
354
- .name = .{ .event = span.event },
355
- .ts = @intToFloat(f64, span.start_time_ns) / 1000,
356
- .dur = @intToFloat(f64, span.end_time_ns - span.start_time_ns) / 1000,
357
- .tid = tid,
358
- },
359
- .{},
360
- writer,
361
- );
362
- try writer.writeAll(",\n");
363
-
364
- // TODO Only emit metadata once per group name.
365
- try std.json.stringify(
366
- MetaJson{
367
- .name = "thread_name",
368
- .tid = tid,
369
- .args = .{ .name = span.group.name() },
370
- },
371
- .{},
372
- writer,
373
- );
374
- try writer.writeAll(",\n");
375
-
376
- try buffered_writer.flush();
377
- }
378
- }
379
- };
380
-
381
- const TracerTracy = struct {
382
- const c = @cImport({
383
- @cDefine("TRACY_ENABLE", "1");
384
- @cDefine("TRACY_FIBERS", "1");
385
- @cInclude("TracyC.h");
386
- });
387
-
388
- // TODO Ask constants.zig for a static bound on callstack depth.
389
- const callstack_depth = 64;
390
-
391
- pub const SpanStart = c.___tracy_c_zone_context;
392
-
393
- var print_buffer: [1024]u8 = undefined;
394
-
395
- pub fn init(allocator: Allocator) !void {
396
- _ = allocator;
397
- }
398
-
399
- pub fn deinit(allocator: Allocator) void {
400
- _ = allocator;
401
- }
402
-
403
- pub fn start(
404
- slot: *?SpanStart,
405
- event_group: EventGroup,
406
- event: Event,
407
- src: std.builtin.SourceLocation,
408
- ) void {
409
- // The event must not already have been started.
410
- assert(slot.* == null);
411
- c.___tracy_fiber_enter(event_group.name());
412
- const name = std.fmt.bufPrint(&print_buffer, "{}", .{event}) catch name: {
413
- const dots = "...";
414
- stdx.copy_disjoint(.exact, u8, print_buffer[print_buffer.len - dots.len ..], dots);
415
- break :name &print_buffer;
416
- };
417
- // TODO The alloc_srcloc here is not free and should be unnecessary,
418
- // but the alloc-free version currently crashes:
419
- // https://github.com/ziglang/zig/issues/13315#issuecomment-1331099909.
420
- slot.* = c.___tracy_emit_zone_begin_alloc_callstack(c.___tracy_alloc_srcloc_name(
421
- src.line,
422
- src.file.ptr,
423
- src.file.len,
424
- src.fn_name.ptr,
425
- src.fn_name.len,
426
- name.ptr,
427
- name.len,
428
- ), callstack_depth, 1);
429
- }
430
-
431
- pub fn end(slot: *?SpanStart, event_group: EventGroup, event: Event) void {
432
- _ = event;
433
-
434
- // The event must already have been started.
435
- const tracy_context = slot.*.?;
436
- c.___tracy_fiber_enter(event_group.name());
437
- c.___tracy_emit_zone_end(tracy_context);
438
- slot.* = null;
439
- }
440
-
441
- pub fn flush() void {}
442
-
443
- pub fn log_fn(
444
- comptime level: std.log.Level,
445
- comptime scope: @TypeOf(.EnumLiteral),
446
- comptime format: []const u8,
447
- args: anytype,
448
- ) void {
449
- const level_text = comptime level.asText();
450
- const prefix = if (scope == .default) ": " else "(" ++ @tagName(scope) ++ "): ";
451
- const message = std.fmt.bufPrint(
452
- &print_buffer,
453
- level_text ++ prefix ++ format,
454
- args,
455
- ) catch message: {
456
- const dots = "...";
457
- stdx.copy_disjoint(.exact, u8, print_buffer[print_buffer.len - dots.len ..], dots);
458
- break :message &print_buffer;
459
- };
460
- c.___tracy_fiber_enter((EventGroup{ .main = {} }).name());
461
- c.___tracy_emit_message(message.ptr, message.len, callstack_depth);
462
- }
463
-
464
- // Copied from zig/src/tracy.zig
465
- pub const TracerAllocator = struct {
466
- parent_allocator: std.mem.Allocator,
467
-
468
- pub fn init(parent_allocator: std.mem.Allocator) TracerAllocator {
469
- return .{
470
- .parent_allocator = parent_allocator,
471
- };
472
- }
473
-
474
- pub fn allocator(self: *TracerAllocator) std.mem.Allocator {
475
- return std.mem.Allocator.init(self, allocFn, resizeFn, freeFn);
476
- }
477
-
478
- fn allocFn(
479
- self: *TracerAllocator,
480
- len: usize,
481
- ptr_align: u29,
482
- len_align: u29,
483
- ret_addr: usize,
484
- ) std.mem.Allocator.Error![]u8 {
485
- const result = self.parent_allocator.rawAlloc(len, ptr_align, len_align, ret_addr);
486
- if (result) |data| {
487
- if (data.len != 0) {
488
- c.___tracy_emit_memory_alloc_callstack(data.ptr, data.len, callstack_depth, 0);
489
- }
490
- } else |_| {}
491
- return result;
492
- }
493
-
494
- fn resizeFn(
495
- self: *TracerAllocator,
496
- buf: []u8,
497
- buf_align: u29,
498
- new_len: usize,
499
- len_align: u29,
500
- ret_addr: usize,
501
- ) ?usize {
502
- if (self.parent_allocator.rawResize(
503
- buf,
504
- buf_align,
505
- new_len,
506
- len_align,
507
- ret_addr,
508
- )) |resized_len| {
509
- c.___tracy_emit_memory_free_callstack(buf.ptr, callstack_depth, 0);
510
- c.___tracy_emit_memory_alloc_callstack(buf.ptr, resized_len, callstack_depth, 0);
511
-
512
- return resized_len;
513
- }
514
-
515
- // during normal operation the compiler hits this case thousands of times due to this
516
- // emitting messages for it is both slow and causes clutter
517
- return null;
518
- }
519
-
520
- fn freeFn(self: *TracerAllocator, buf: []u8, buf_align: u29, ret_addr: usize) void {
521
- self.parent_allocator.rawFree(buf, buf_align, ret_addr);
522
- // this condition is to handle free being called on an empty slice that was never even allocated
523
- // example case: `std.process.getSelfExeSharedLibPaths` can return `&[_][:0]u8{}`
524
- if (buf.len != 0) {
525
- c.___tracy_emit_memory_free_callstack(buf.ptr, callstack_depth, 0);
526
- }
527
- }
528
- };
529
- };
@@ -1,42 +0,0 @@
1
- test {
2
- _ = @import("vsr.zig");
3
- _ = @import("vsr/journal.zig");
4
- _ = @import("vsr/marzullo.zig");
5
- _ = @import("vsr/replica_format.zig");
6
- _ = @import("vsr/superblock.zig");
7
- _ = @import("vsr/superblock_free_set.zig");
8
- _ = @import("vsr/superblock_manifest.zig");
9
- _ = @import("vsr/superblock_quorums.zig");
10
- // TODO: clean up logging of clock test and enable it here.
11
- //_ = @import("vsr/clock.zig");
12
-
13
- _ = @import("state_machine.zig");
14
- _ = @import("state_machine/auditor.zig");
15
- _ = @import("state_machine/workload.zig");
16
-
17
- _ = @import("fifo.zig");
18
- _ = @import("ring_buffer.zig");
19
-
20
- _ = @import("io.zig");
21
- _ = @import("ewah.zig");
22
- _ = @import("stdx.zig");
23
-
24
- _ = @import("clients/c/test.zig");
25
- _ = @import("clients/c/tb_client_header_test.zig");
26
-
27
- // TODO Add remaining unit tests from lsm namespace.
28
- _ = @import("lsm/forest.zig");
29
- _ = @import("lsm/manifest_level.zig");
30
- _ = @import("lsm/segmented_array.zig");
31
-
32
- _ = @import("testing/id.zig");
33
- _ = @import("testing/storage.zig");
34
- _ = @import("testing/table.zig");
35
-
36
- _ = @import("clients/go/go_bindings_test.zig");
37
- _ = @import("clients/dotnet/dotnet_bindings_test.zig");
38
- _ = @import("clients/java/java_bindings.zig");
39
-
40
- // This one is a bit sketchy: we rely on tests not actually using the `vsr` package.
41
- _ = @import("tigerbeetle/cli.zig");
42
- }