Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(ledger,shred-network): memory leak #510

Merged
merged 29 commits into from
Jan 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
8c47bb1
fix(shred-network): keep up with turbine
dnut Jan 13, 2025
32cc994
feat(shred-network): simplify repair logic, remove metric-like loggin…
dnut Jan 14, 2025
9d8954d
fix(shred-network): tests + linting
dnut Jan 14, 2025
543301f
fix(shred-network): test
dnut Jan 14, 2025
431d9e5
fix(repair) add jitter to handle edge case where all the following ar…
dnut Jan 15, 2025
84b8e81
grafan: update shred collector dashboard
dnut Jan 16, 2025
df39a11
refactor(ledger): switch formatting
dnut Jan 22, 2025
b3e1def
refactor(shred-network): function spacing
dnut Jan 22, 2025
20934fe
feat(time): expand Instant to support shred repair
dnut Jan 22, 2025
4a03b5e
const shred wip
dnut Jan 16, 2025
7a3d12f
refactor(ledger): decouple shred mutations from shred struct
dnut Jan 21, 2025
ada12a5
refactor: clean up shred inserter params with options struct
dnut Jan 21, 2025
eced84e
fix(ledger): shreds leak - clarify shred lifetimes and clean them up
dnut Jan 22, 2025
08c4981
fix: memory errors and rocksdb writebatch leak
dnut Jan 22, 2025
afbf93b
fix(shred-network): reduce repair service peer cache size by factor o…
dnut Jan 22, 2025
f2a99d8
fix: style
dnut Jan 22, 2025
c9e0104
Merge branch 'master' into dnut/fix/shred-network/keepup
dnut Jan 22, 2025
7f38b9b
Merge branch 'dnut/fix/shred-network/keepup' into dnut/fix/shred-netw…
dnut Jan 22, 2025
59b51e1
rename rng to prng
dnut Jan 23, 2025
403d5f7
fix timer usage
dnut Jan 23, 2025
c323f03
refactor(time,repair): use Duration for repair sleep delay
dnut Jan 23, 2025
7c1573a
remove unused
dnut Jan 23, 2025
e835b5f
rename shred collector to shred network
dnut Jan 23, 2025
8f66f72
docs: shred network cli args
dnut Jan 23, 2025
a970a64
Merge branch 'dnut/fix/shred-network/keepup' into dnut/fix/shred-netw…
dnut Jan 23, 2025
db3fa97
Merge commit '0784b211308247ffa3a76fc565dc510e1524069d' into dnut/fix…
dnut Jan 24, 2025
84fdcb7
Merge remote-tracking branch 'remotes/origin/main' into dnut/fix/shre…
dnut Jan 24, 2025
a1c4d60
Merge remote-tracking branch 'remotes/origin/main' into dnut/fix/shre…
dnut Jan 27, 2025
ee8b611
docs(ledger): shred inserter lifetime rules
dnut Jan 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.zig.zon
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
.hash = "122030ebe280b73693963a67ed656226a67b7f00a0a05665155da00c9fcdee90de88",
},
.rocksdb = .{
.url = "https://github.com/Syndica/rocksdb-zig/archive/6d4230e131183cccb730a7248bd4ca30c559b8bd.tar.gz",
.hash = "12207766d25ba350d6e2f2153fc74a2b3ff204224e1c08adf211cd9e400075033898",
.url = "https://github.com/Syndica/rocksdb-zig/archive/cf966c0c6bb6205a08bb2006f399719542e4e770.tar.gz",
.hash = "1220d25e3ef18526cb6c980b441f05dc96330bedd88a512dcb3aed775a981ce3707d",
},
.lsquic = .{
.url = "https://github.com/Syndica/lsquic/archive/ed6ced0cbc6447f7135a32db491e398debdf8af7.tar.gz",
Expand Down
25 changes: 17 additions & 8 deletions src/ledger/benchmarks.zig
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ pub const BenchmarkLedger = struct {
}

var timer = try sig.time.Timer.start();
_ = try inserter.insertShreds(shreds, is_repairs, null, false, null, null);
const result = try inserter.insertShreds(shreds, is_repairs, .{});
defer result.deinit();
return timer.read();
}

Expand Down Expand Up @@ -112,7 +113,9 @@ pub const BenchmarkLedger = struct {

const total_shreds = shreds.len;

_ = try ledger.shred_inserter.shred_inserter.insertShredsForTest(&inserter, shreds);
const result = try ledger.shred_inserter.shred_inserter
.insertShredsForTest(&inserter, shreds);
result.deinit();

const slot: u32 = 0;
const num_reads = total_shreds / 15;
Expand Down Expand Up @@ -141,7 +144,9 @@ pub const BenchmarkLedger = struct {
defer deinitShreds(allocator, shreds);

const total_shreds = shreds.len;
_ = try ledger.shred_inserter.shred_inserter.insertShredsForTest(&inserter, shreds);
const result = try ledger.shred_inserter.shred_inserter
.insertShredsForTest(&inserter, shreds);
result.deinit();
const num_reads = total_shreds / 15;

const slot: u32 = 0;
Expand All @@ -166,7 +171,7 @@ pub const BenchmarkLedger = struct {
defer state.deinit();
var reader = try state.reader();
const result = try ledger_tests.insertDataForBlockTest(state);
defer result.deinit();
result.deinit();

var timer = try sig.time.Timer.start();
_ = try reader.getCompleteBlock(result.slot + 2, true);
Expand All @@ -178,7 +183,7 @@ pub const BenchmarkLedger = struct {
defer state.deinit();
var reader = try state.reader();
const result = try ledger_tests.insertDataForBlockTest(state);
defer result.deinit();
result.deinit();

var timer = try sig.time.Timer.start();
const shreds = try reader.getDataShredsForSlot(result.slot + 2, 0);
Expand All @@ -192,7 +197,7 @@ pub const BenchmarkLedger = struct {
defer state.deinit();
var reader = try state.reader();
const result = try ledger_tests.insertDataForBlockTest(state);
defer result.deinit();
result.deinit();

var timer = try sig.time.Timer.start();
const items = try reader.getSlotEntriesWithShredInfo(result.slot + 2, 0, true);
Expand All @@ -213,7 +218,9 @@ pub const BenchmarkLedger = struct {
defer deinitShreds(allocator, shreds);

const total_shreds = shreds.len;
_ = try ledger.shred_inserter.shred_inserter.insertShredsForTest(&inserter, shreds);
const result = try ledger.shred_inserter.shred_inserter
.insertShredsForTest(&inserter, shreds);
result.deinit();

const slot: u32 = 1;

Expand Down Expand Up @@ -243,7 +250,9 @@ pub const BenchmarkLedger = struct {
const shreds = try testShreds(std.heap.c_allocator, shreds_path);
defer deinitShreds(allocator, shreds);

_ = try ledger.shred_inserter.shred_inserter.insertShredsForTest(&inserter, shreds);
const result = try ledger.shred_inserter.shred_inserter
.insertShredsForTest(&inserter, shreds);
result.deinit();

const slot = 1;
const start_index = 0;
Expand Down
9 changes: 8 additions & 1 deletion src/ledger/database/interface.zig
Original file line number Diff line number Diff line change
Expand Up @@ -277,10 +277,17 @@ pub const BytesRef = struct {
data: []const u8,
deinitializer: ?Deinitializer = null,

pub fn deinit(self: @This()) void {
pub fn deinit(self: BytesRef) void {
if (self.deinitializer) |d| d.deinit(self.data);
}

pub fn clone(self: BytesRef, allocator: Allocator) Allocator.Error!BytesRef {
return .{
.data = try allocator.dupe(u8, self.data),
.deinitializer = .{ .allocator = allocator },
};
}

pub const Deinitializer = union(enum) {
allocator: Allocator,
rocksdb: *const fn (?*anyopaque) callconv(.C) void,
Expand Down
4 changes: 2 additions & 2 deletions src/ledger/reader.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2103,7 +2103,7 @@ test "findMissingDataIndexes" {
.resigned = false,
};
shred.data.common.variant = variant;
try shred.data.writePayload(&(.{2} ** 100));
try ledger.shred.overwriteShredForTest(allocator, &shred, &(.{2} ** 100));

var slot_meta = SlotMeta.init(allocator, shred_slot, null);
slot_meta.last_index = 4;
Expand Down Expand Up @@ -2172,7 +2172,7 @@ test "getCodeShred" {
shred.code.common.variant = variant;
shred.code.custom.num_data_shreds = 1;
shred.code.custom.num_code_shreds = 1;
try shred.code.writePayload(&(.{2} ** 100));
try ledger.shred.overwriteShredForTest(allocator, &shred, &(.{2} ** 100));

const shred_slot = shred.commonHeader().slot;
const shred_index = shred.commonHeader().index;
Expand Down
Loading
Loading