Skip to content

Commit 0d5b0e4

Browse files
committed
Refactoring
1 parent 6e9a411 commit 0d5b0e4

File tree

3 files changed

+22
-25
lines changed

3 files changed

+22
-25
lines changed

src/Index.zig

+6-16
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,11 @@ fn prepareMemorySegmentMerge(self: *Self) !?MemorySegmentList.PreparedMerge {
136136
self.segments_lock.lockShared();
137137
defer self.segments_lock.unlockShared();
138138

139-
const merge = try self.memory_segments.prepareMerge() orelse return null;
139+
var merge = try self.memory_segments.prepareMerge() orelse return null;
140+
defer merge.merger.deinit();
140141
errdefer self.memory_segments.destroySegment(merge.target);
141142

142-
std.debug.assert(merge.sources.num_segments == 2);
143-
try merge.target.data.merge(&merge.sources.start.data, &merge.sources.end.data, &self.memory_segments);
143+
try merge.target.data.merge(&merge.merger);
144144

145145
return merge;
146146
}
@@ -410,21 +410,11 @@ fn prepareFileSegmentMerge(self: *Self) !?FileSegmentList.PreparedMerge {
410410
self.segments_lock.lockShared();
411411
defer self.segments_lock.unlockShared();
412412

413-
const merge = try self.file_segments.prepareMerge() orelse return null;
413+
var merge = try self.file_segments.prepareMerge() orelse return null;
414+
defer merge.merger.deinit();
414415
errdefer self.file_segments.destroySegment(merge.target);
415416

416-
var merger = SegmentMerger(FileSegment).init(self.allocator, &self.file_segments);
417-
defer merger.deinit();
418-
419-
var source_node = merge.sources.start;
420-
while (true) {
421-
try merger.addSource(&source_node.data);
422-
if (source_node == merge.sources.end) break;
423-
source_node = source_node.next orelse break;
424-
}
425-
try merger.prepare();
426-
427-
try merge.target.data.build(self.data_dir, &merger);
417+
try merge.target.data.build(self.data_dir, &merge.merger);
428418

429419
return merge;
430420
}

src/MemorySegment.zig

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

104-
pub fn merge(self: *Self, source1: *Self, source2: *Self, collection: *List) !void {
105-
var merger = SegmentMerger(Self).init(self.allocator, collection);
106-
defer merger.deinit();
107-
108-
try merger.addSource(source1);
109-
try merger.addSource(source2);
110-
try merger.prepare();
111-
104+
pub fn merge(self: *Self, merger: *SegmentMerger(Self)) !void {
112105
self.id = merger.segment.id;
113106
self.max_commit_id = merger.segment.max_commit_id;
114107

src/segment_list.zig

+15-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const std = @import("std");
33
const common = @import("common.zig");
44
const SearchResults = common.SearchResults;
55

6+
const SegmentMerger = @import("segment_merger.zig").SegmentMerger;
67
const TieredMergePolicy = @import("segment_merge_policy.zig").TieredMergePolicy;
78

89
const Deadline = @import("utils/Deadline.zig");
@@ -106,12 +107,25 @@ pub fn SegmentList(Segment: type) type {
106107
pub const PreparedMerge = struct {
107108
sources: SegmentsToMerge,
108109
target: *List.Node,
110+
merger: SegmentMerger(Segment),
109111
};
110112

111113
pub fn prepareMerge(self: *Self) !?PreparedMerge {
112114
const sources = self.merge_policy.findSegmentsToMerge(self.segments) orelse return null;
115+
116+
var merger = SegmentMerger(Segment).init(self.allocator, self);
117+
errdefer merger.deinit();
118+
119+
var source_node = sources.start;
120+
while (true) {
121+
try merger.addSource(&source_node.data);
122+
if (source_node == sources.end) break;
123+
source_node = source_node.next orelse break;
124+
}
125+
try merger.prepare();
126+
113127
const target = try self.createSegment();
114-
return .{ .sources = sources, .target = target };
128+
return .{ .sources = sources, .merger = merger, .target = target };
115129
}
116130

117131
pub fn applyMerge(self: *Self, merge: PreparedMerge) void {

0 commit comments

Comments
 (0)