Skip to content

Commit 450bc96

Browse files
committed
Simplify cleanup after merge
1 parent d5770b0 commit 450bc96

File tree

4 files changed

+25
-26
lines changed

4 files changed

+25
-26
lines changed

src/FileSegment.zig

+4
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ pub fn delete(self: *Self, dir: std.fs.Dir) void {
9696
};
9797
}
9898

99+
pub fn cleanup(self: *Self, dir: std.fs.Dir) void {
100+
self.delete(dir);
101+
}
102+
99103
pub fn build(self: *Self, dir: std.fs.Dir, source: anytype) !void {
100104
var file_name_buf: [filefmt.max_file_name_size]u8 = undefined;
101105
const file_name = filefmt.buildSegmentFileName(&file_name_buf, source.segment.id);

src/Index.zig

+2-21
Original file line numberDiff line numberDiff line change
@@ -146,16 +146,7 @@ fn prepareMemorySegmentMerge(self: *Self) !?MemorySegmentList.PreparedMerge {
146146
}
147147

148148
fn finishMemorySegmentMerge(self: *Self, merge: MemorySegmentList.PreparedMerge) bool {
149-
defer {
150-
var iter = merge.sources.start;
151-
while (true) {
152-
const next_node = iter.next;
153-
const is_end = iter == merge.sources.end;
154-
self.memory_segments.destroySegment(iter);
155-
if (is_end) break;
156-
iter = next_node orelse break;
157-
}
158-
}
149+
defer self.memory_segments.cleanupAfterMerge(merge, .{});
159150

160151
self.segments_lock.lock();
161152
defer self.segments_lock.unlock();
@@ -459,17 +450,7 @@ fn finishFileSegmentMerge(self: *Self, merge: FileSegmentList.PreparedMerge) !vo
459450

460451
try filefmt.writeIndexFile(self.data_dir, ids.items);
461452

462-
defer {
463-
var iter = merge.sources.start;
464-
while (true) {
465-
const next_node = iter.next;
466-
const is_end = iter == merge.sources.end;
467-
iter.data.delete(self.data_dir);
468-
self.file_segments.destroySegment(iter);
469-
if (is_end) break;
470-
iter = next_node orelse break;
471-
}
472-
}
453+
defer self.file_segments.cleanupAfterMerge(merge, .{self.data_dir});
473454

474455
self.segments_lock.lock();
475456
defer self.segments_lock.unlock();

src/MemorySegment.zig

+4
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ pub fn build(self: *Self, changes: []const Change) !void {
101101
std.sort.pdq(Item, self.items.items, {}, Item.cmp);
102102
}
103103

104+
pub fn cleanup(self: *Self) void {
105+
_ = self;
106+
}
107+
104108
pub fn merge(self: *Self, merger: *SegmentMerger(Self)) !void {
105109
self.id = merger.segment.id;
106110
self.max_commit_id = merger.segment.max_commit_id;

src/segment_list.zig

+15-5
Original file line numberDiff line numberDiff line change
@@ -128,17 +128,27 @@ pub fn SegmentList(Segment: type) type {
128128
return .{ .sources = sources, .merger = merger, .target = target };
129129
}
130130

131+
pub fn cleanupAfterMerge(self: *Self, merge: PreparedMerge, cleanup_args: anytype) void {
132+
var iter = merge.sources.start;
133+
while (true) {
134+
const next_node = iter.next;
135+
const is_end = iter == merge.sources.end;
136+
@call(.auto, Segment.cleanup, .{&iter.data} ++ cleanup_args);
137+
self.destroySegment(iter);
138+
if (is_end) break;
139+
iter = next_node orelse break;
140+
}
141+
}
142+
131143
pub fn applyMerge(self: *Self, merge: PreparedMerge) void {
132144
self.segments.insertBefore(merge.sources.start, merge.target);
133145
var iter = merge.sources.start;
134146
while (true) {
135147
const next_node = iter.next;
148+
const is_end = iter == merge.sources.end;
136149
self.segments.remove(iter);
137-
if (iter == merge.sources.end) {
138-
break;
139-
} else {
140-
iter = next_node orelse break;
141-
}
150+
if (is_end) break;
151+
iter = next_node orelse break;
142152
}
143153
}
144154
};

0 commit comments

Comments
 (0)