Skip to content

Commit

Permalink
address race in geyser (tsan failing on ci)
Browse files Browse the repository at this point in the history
  • Loading branch information
0xNineteen committed Jan 30, 2025
1 parent ea137f5 commit 553c803
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 15 deletions.
14 changes: 10 additions & 4 deletions src/accountsdb/db.zig
Original file line number Diff line number Diff line change
Expand Up @@ -3474,12 +3474,18 @@ test "geyser stream on load" {
// start the geyser writer
try geyser_writer.spawnIOLoop();

const reader_handle = try std.Thread.spawn(.{}, sig.geyser.core.streamReader, .{
var reader = try sig.geyser.GeyserReader.init(
allocator,
geyser_pipe_path,
&geyser_exit,
.{},
);
defer reader.deinit();

const reader_handle = try std.Thread.spawn(.{}, sig.geyser.core.streamReader, .{
&reader,
.noop,
&geyser_exit,
geyser_pipe_path,
null,
null,
});
defer reader_handle.join();
Expand All @@ -3505,7 +3511,7 @@ test "geyser stream on load" {
snapshot.accounts_db_fields,
1,
allocator,
1_500,
500,
);
}

Expand Down
10 changes: 9 additions & 1 deletion src/geyser/benchmark.zig
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,18 @@ pub fn runBenchmark(logger: sig.trace.Logger) !void {

exit.* = std.atomic.Value(bool).init(false);

var reader = try sig.geyser.GeyserReader.init(
allocator,
PIPE_PATH,
exit,
.{},
);
defer reader.deinit();

const reader_handle = try std.Thread.spawn(
.{},
geyser.core.streamReader,
.{ allocator, logger, exit, PIPE_PATH, MEASURE_RATE, null },
.{ &reader, logger, exit, MEASURE_RATE },
);
const writer_handle = try std.Thread.spawn(.{}, streamWriter, .{ allocator, exit });

Expand Down
7 changes: 1 addition & 6 deletions src/geyser/core.zig
Original file line number Diff line number Diff line change
Expand Up @@ -479,16 +479,11 @@ pub fn openPipe(pipe_path: []const u8) !std.fs.File {
}

pub fn streamReader(
allocator: std.mem.Allocator,
reader: *GeyserReader,
logger: sig.trace.Logger,
exit: *std.atomic.Value(bool),
pipe_path: []const u8,
measure_rate: ?sig.time.Duration,
allocator_config: ?GeyserReader.AllocatorConfig,
) !void {
var reader = try sig.geyser.GeyserReader.init(allocator, pipe_path, exit, allocator_config orelse .{});
defer reader.deinit();

var bytes_read: usize = 0;
var timer = try sig.time.Timer.start();

Expand Down
15 changes: 11 additions & 4 deletions src/geyser/main.zig
Original file line number Diff line number Diff line change
Expand Up @@ -356,15 +356,22 @@ pub fn benchmark() !void {
logger.info().logf("using pipe path: {s}", .{pipe_path});

var exit = std.atomic.Value(bool).init(false);
try sig.geyser.core.streamReader(

var reader = try sig.geyser.GeyserReader.init(
allocator,
logger,
&exit,
pipe_path,
sig.time.Duration.fromSecs(config.measure_rate_secs),
&exit,
.{
.io_buf_len = 1 << 30,
.bincode_buf_len = 1 << 30,
},
);
defer reader.deinit();

try sig.geyser.core.streamReader(
&reader,
logger,
&exit,
sig.time.Duration.fromSecs(config.measure_rate_secs),
);
}

0 comments on commit 553c803

Please sign in to comment.