Skip to content

Commit b0b7867

Browse files
committed
Don't store allocator in SegmentListManager
1 parent 5d8ea32 commit b0b7867

File tree

2 files changed

+28
-30
lines changed

2 files changed

+28
-30
lines changed

src/Index.zig

+12-12
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ pub fn deinit(self: *Self) void {
135135
self.stopMemorySegmentMergeThread();
136136
self.stopFileSegmentMergeThread();
137137

138-
self.memory_segments.deinit(.keep);
139-
self.file_segments.deinit(.keep);
138+
self.memory_segments.deinit(self.allocator, .keep);
139+
self.file_segments.deinit(self.allocator, .keep);
140140

141141
self.oplog.deinit();
142142
self.dir.close();
@@ -197,15 +197,15 @@ fn doCheckpoint(self: *Self) !bool {
197197

198198
// update memory segments list
199199

200-
var memory_segments_update = try self.memory_segments.beginUpdate();
201-
defer self.memory_segments.cleanupAfterUpdate(&memory_segments_update);
200+
var memory_segments_update = try self.memory_segments.beginUpdate(self.allocator);
201+
defer self.memory_segments.cleanupAfterUpdate(self.allocator, &memory_segments_update);
202202

203203
memory_segments_update.removeSegment(source);
204204

205205
// update file segments list
206206

207-
var file_segments_update = try self.file_segments.beginUpdate();
208-
defer self.file_segments.cleanupAfterUpdate(&file_segments_update);
207+
var file_segments_update = try self.file_segments.beginUpdate(self.allocator);
208+
defer self.file_segments.cleanupAfterUpdate(self.allocator, &file_segments_update);
209209

210210
file_segments_update.appendSegment(target);
211211

@@ -264,8 +264,8 @@ fn updateIndexFile(self: *Self, segments: *FileSegmentList) !void {
264264
}
265265

266266
fn maybeMergeFileSegments(self: *Self) !bool {
267-
var upd = try self.file_segments.prepareMerge() orelse return false;
268-
defer self.file_segments.cleanupAfterUpdate(&upd);
267+
var upd = try self.file_segments.prepareMerge(self.allocator) orelse return false;
268+
defer self.file_segments.cleanupAfterUpdate(self.allocator, &upd);
269269

270270
try self.updateIndexFile(upd.segments.value);
271271

@@ -310,8 +310,8 @@ fn stopFileSegmentMergeThread(self: *Self) void {
310310
}
311311

312312
fn maybeMergeMemorySegments(self: *Self) !bool {
313-
var upd = try self.memory_segments.prepareMerge() orelse return false;
314-
defer self.memory_segments.cleanupAfterUpdate(&upd);
313+
var upd = try self.memory_segments.prepareMerge(self.allocator) orelse return false;
314+
defer self.memory_segments.cleanupAfterUpdate(self.allocator, &upd);
315315

316316
self.segments_lock.lock();
317317
defer self.segments_lock.unlock();
@@ -405,8 +405,8 @@ pub fn updateInternal(self: *Self, changes: []const Change, commit_id: ?u64) !vo
405405

406406
try target.value.build(changes);
407407

408-
var upd = try self.memory_segments.beginUpdate();
409-
defer self.memory_segments.cleanupAfterUpdate(&upd);
408+
var upd = try self.memory_segments.beginUpdate(self.allocator);
409+
defer self.memory_segments.cleanupAfterUpdate(self.allocator, &upd);
410410

411411
target.value.max_commit_id = commit_id orelse try self.oplog.write(changes);
412412

src/segment_list.zig

+16-18
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,6 @@ pub fn SegmentListManager(Segment: type) type {
175175
pub const List = SegmentList(Segment);
176176
pub const MergePolicy = TieredMergePolicy(List.Node, getSegmentSize(Segment));
177177

178-
allocator: Allocator,
179178
options: Segment.Options,
180179
segments: SharedPtr(List),
181180
merge_policy: MergePolicy,
@@ -185,7 +184,6 @@ pub fn SegmentListManager(Segment: type) type {
185184
pub fn init(allocator: Allocator, options: Segment.Options, merge_policy: MergePolicy) !Self {
186185
const segments = try SharedPtr(List).create(allocator, List.initEmpty());
187186
return Self{
188-
.allocator = allocator,
189187
.options = options,
190188
.segments = segments,
191189
.merge_policy = merge_policy,
@@ -194,8 +192,8 @@ pub fn SegmentListManager(Segment: type) type {
194192
};
195193
}
196194

197-
pub fn deinit(self: *Self, delete_files: KeepOrDelete) void {
198-
self.segments.release(self.allocator, .{ self.allocator, delete_files });
195+
pub fn deinit(self: *Self, allocator: Allocator, delete_files: KeepOrDelete) void {
196+
self.segments.release(allocator, .{ allocator, delete_files });
199197
}
200198

201199
pub fn count(self: Self) usize {
@@ -209,17 +207,17 @@ pub fn SegmentListManager(Segment: type) type {
209207
return self.segments.acquire();
210208
}
211209

212-
fn destroySegments(self: *Self, segments: *SharedPtr(List)) void {
213-
List.destroySegments(self.allocator, segments);
210+
fn destroySegments(allocator: Allocator, segments: *SharedPtr(List)) void {
211+
List.destroySegments(allocator, segments);
214212
}
215213

216214
pub fn needsMerge(self: Self) bool {
217215
return self.segments.value.nodes.items.len > self.num_allowed_segments.load(.acquire);
218216
}
219217

220-
pub fn prepareMerge(self: *Self) !?Update {
218+
pub fn prepareMerge(self: *Self, allocator: Allocator) !?Update {
221219
var segments = self.acquireSegments();
222-
defer self.destroySegments(&segments);
220+
defer destroySegments(allocator, &segments);
223221

224222
self.num_allowed_segments.store(self.merge_policy.calculateBudget(segments.value.nodes.items), .release);
225223
if (!self.needsMerge()) {
@@ -228,10 +226,10 @@ pub fn SegmentListManager(Segment: type) type {
228226

229227
const candidate = self.merge_policy.findSegmentsToMerge(segments.value.nodes.items) orelse return null;
230228

231-
var target = try List.createSegment(self.allocator, self.options);
232-
defer List.destroySegment(self.allocator, &target);
229+
var target = try List.createSegment(allocator, self.options);
230+
defer List.destroySegment(allocator, &target);
233231

234-
var merger = SegmentMerger(Segment).init(self.allocator, segments.value);
232+
var merger = SegmentMerger(Segment).init(allocator, segments.value);
235233
defer merger.deinit();
236234

237235
for (segments.value.nodes.items[candidate.start..candidate.end]) |segment| {
@@ -242,7 +240,7 @@ pub fn SegmentListManager(Segment: type) type {
242240
try target.value.merge(&merger);
243241
errdefer target.value.cleanup();
244242

245-
var update = try self.beginUpdate();
243+
var update = try self.beginUpdate(allocator);
246244
update.replaceMergedSegment(target);
247245

248246
return update;
@@ -266,15 +264,15 @@ pub fn SegmentListManager(Segment: type) type {
266264
}
267265
};
268266

269-
pub fn beginUpdate(self: *Self) !Update {
267+
pub fn beginUpdate(self: *Self, allocator: Allocator) !Update {
270268
self.update_lock.lock();
271269
errdefer self.update_lock.unlock();
272270

273-
var segments = try SharedPtr(List).create(self.allocator, List.initEmpty());
274-
errdefer self.destroySegments(&segments);
271+
var segments = try SharedPtr(List).create(allocator, List.initEmpty());
272+
errdefer destroySegments(allocator, &segments);
275273

276274
// allocate memory for one extra segment, if it's going to be unused, it's going to be unused, but we need to have it ready
277-
try segments.value.nodes.ensureTotalCapacity(self.allocator, self.count() + 1);
275+
try segments.value.nodes.ensureTotalCapacity(allocator, self.count() + 1);
278276

279277
return .{
280278
.manager = self,
@@ -288,11 +286,11 @@ pub fn SegmentListManager(Segment: type) type {
288286
update.committed = true;
289287
}
290288

291-
pub fn cleanupAfterUpdate(self: *Self, update: *Update) void {
289+
pub fn cleanupAfterUpdate(self: *Self, allocator: Allocator, update: *Update) void {
292290
if (!update.committed) {
293291
self.update_lock.unlock();
294292
}
295-
self.destroySegments(&update.segments);
293+
destroySegments(allocator, &update.segments);
296294
}
297295
};
298296
}

0 commit comments

Comments
 (0)