Skip to content

Commit 6284750

Browse files
committed
Schedule checkpoint even on update
1 parent c5efe3e commit 6284750

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

src/Index.zig

+22-12
Original file line numberDiff line numberDiff line change
@@ -222,12 +222,7 @@ fn doCheckpoint(self: *Self) !bool {
222222
self.memory_segments.commitUpdate(&memory_segments_update);
223223
self.file_segments.commitUpdate(&file_segments_update);
224224

225-
if (self.file_segments.needsMerge()) {
226-
log.debug("too many file segments, scheduling merging", .{});
227-
if (self.file_segment_merge_task) |task| {
228-
self.scheduler.scheduleTask(task);
229-
}
230-
}
225+
self.maybeScheduleFileSegmentMerge();
231226

232227
return true;
233228
}
@@ -319,8 +314,27 @@ pub fn open(self: *Self, create: bool) !void {
319314
log.info("index loaded", .{});
320315
}
321316

317+
fn maybeScheduleMemorySegmentMerge(self: *Self) void {
318+
if (self.memory_segments.needsMerge()) {
319+
log.debug("too many memory segments, scheduling merging", .{});
320+
if (self.memory_segment_merge_task) |task| {
321+
self.scheduler.scheduleTask(task);
322+
}
323+
}
324+
}
325+
326+
fn maybeScheduleFileSegmentMerge(self: *Self) void {
327+
if (self.file_segments.needsMerge()) {
328+
log.debug("too many file segments, scheduling merging", .{});
329+
if (self.file_segment_merge_task) |task| {
330+
self.scheduler.scheduleTask(task);
331+
}
332+
}
333+
}
334+
322335
fn maybeScheduleCheckpoint(self: *Self) void {
323336
if (self.memory_segments.segments.value.getFirst()) |first_node| {
337+
log.debug("the first memory segment is too big, scheduling checkpoint", .{});
324338
if (first_node.value.getSize() >= self.options.min_segment_size) {
325339
if (self.checkpoint_task) |task| {
326340
self.scheduler.scheduleTask(task);
@@ -363,12 +377,8 @@ pub fn updateInternal(self: *Self, changes: []const Change, commit_id: ?u64) !vo
363377

364378
self.memory_segments.commitUpdate(&upd);
365379

366-
if (self.memory_segments.needsMerge()) {
367-
log.debug("too many memory segments, scheduling merging", .{});
368-
if (self.memory_segment_merge_task) |task| {
369-
self.scheduler.scheduleTask(task);
370-
}
371-
}
380+
self.maybeScheduleMemorySegmentMerge();
381+
self.maybeScheduleCheckpoint();
372382
}
373383

374384
pub fn acquireReader(self: *Self) IndexReader {

0 commit comments

Comments
 (0)