Skip to content

Commit 71e63f2

Browse files
committed
More code cleanup
1 parent ea7d3a4 commit 71e63f2

File tree

2 files changed

+36
-30
lines changed

2 files changed

+36
-30
lines changed

src/Index2.zig

+34-23
Original file line numberDiff line numberDiff line change
@@ -306,14 +306,17 @@ fn doCheckpoint(self: *Self) !bool {
306306
self.memory_segments.commitUpdate(&memory_segments_update);
307307
self.file_segments.commitUpdate(&file_segments_update);
308308

309+
if (self.file_segments.needsMerge()) {
310+
self.file_segment_merge_event.set();
311+
}
312+
309313
return true;
310314
}
311315

312316
fn checkpointThreadFn(self: *Self) void {
313317
while (!self.stopping.load(.acquire)) {
314318
if (self.doCheckpoint()) |successful| {
315319
if (successful) {
316-
self.scheduleFileSegmentMerge();
317320
continue;
318321
}
319322
self.checkpoint_event.reset();
@@ -357,6 +360,7 @@ fn maybeMergeFileSegments(self: *Self) !bool {
357360
defer self.segments_lock.unlock();
358361

359362
self.file_segments.commitUpdate(&upd);
363+
360364
return true;
361365
}
362366

@@ -398,14 +402,16 @@ fn maybeMergeMemorySegments(self: *Self) !bool {
398402
defer self.segments_lock.unlock();
399403

400404
self.memory_segments.commitUpdate(&upd);
405+
406+
self.maybeScheduleCheckpoint();
407+
401408
return true;
402409
}
403410

404411
fn memorySegmentMergeThreadFn(self: *Self) void {
405412
while (!self.stopping.load(.acquire)) {
406413
if (self.maybeMergeMemorySegments()) |successful| {
407414
if (successful) {
408-
self.checkpoint_event.set();
409415
continue;
410416
}
411417
self.memory_segment_merge_event.reset();
@@ -445,6 +451,14 @@ const Checkpoint = struct {
445451
dest: ?*FileSegmentNode = null,
446452
};
447453

454+
fn maybeScheduleCheckpoint(self: *Self) void {
455+
if (self.memory_segments.segments.value.getFirst()) |first_node| {
456+
if (first_node.value.getSize() >= self.options.min_segment_size) {
457+
self.checkpoint_event.set();
458+
}
459+
}
460+
}
461+
448462
fn readyForCheckpoint(self: *Self) ?MemorySegmentNode {
449463
self.segments_lock.lockShared();
450464
defer self.segments_lock.unlockShared();
@@ -457,32 +471,29 @@ fn readyForCheckpoint(self: *Self) ?MemorySegmentNode {
457471
return null;
458472
}
459473

460-
fn scheduleCheckpoint(self: *Self) void {
461-
self.checkpoint_event.set();
462-
}
474+
pub fn update(self: *Self, changes: []const Change) !void {
475+
log.debug("update with {} changes", .{changes.len});
463476

464-
fn scheduleMemorySegmentMerge(self: *Self) void {
465-
self.segments_lock.lockShared();
466-
defer self.segments_lock.unlockShared();
477+
var target = try MemorySegmentList.createSegment(self.allocator, .{});
478+
defer MemorySegmentList.destroySegment(self.allocator, &target);
467479

468-
if (self.memory_segments.needsMerge()) {
469-
self.memory_segment_merge_event.set();
470-
}
471-
}
480+
try target.value.build(changes);
472481

473-
fn scheduleFileSegmentMerge(self: *Self) void {
474-
self.segments_lock.lockShared();
475-
defer self.segments_lock.unlockShared();
482+
var upd = try self.memory_segments.beginUpdate();
483+
defer self.memory_segments.cleanupAfterUpdate(&upd);
476484

477-
if (self.file_segments.needsMerge()) {
478-
self.file_segment_merge_event.set();
479-
}
480-
}
485+
upd.appendSegment(target);
481486

482-
pub fn update(self: *Self, changes: []const Change) !void {
483-
log.debug("update with {} changes", .{changes.len});
484-
try self.oplog.write(changes, Updater{ .index = self });
485-
self.scheduleMemorySegmentMerge();
487+
try self.oplog.write(changes);
488+
489+
self.segments_lock.lock();
490+
defer self.segments_lock.unlock();
491+
492+
self.memory_segments.commitUpdate(&upd);
493+
494+
if (self.memory_segments.needsMerge()) {
495+
self.memory_segment_merge_event.set();
496+
}
486497
}
487498

488499
const SegmentsSnapshot = struct {

src/Oplog.zig

+2-7
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,7 @@ pub fn truncate(self: *Self, commit_id: u64) !void {
197197
try self.truncateNoLock(commit_id);
198198
}
199199

200-
pub fn write(self: *Self, changes: []const Change, receiver: anytype) !void {
201-
var pending_update = try receiver.prepareUpdate(changes);
202-
defer receiver.cancelUpdate(&pending_update);
203-
200+
pub fn write(self: *Self, changes: []const Change) !void {
204201
self.write_lock.lock();
205202
defer self.write_lock.unlock();
206203

@@ -227,8 +224,6 @@ pub fn write(self: *Self, changes: []const Change, receiver: anytype) !void {
227224
}
228225
return err;
229226
};
230-
231-
receiver.commitUpdate(&pending_update, commit_id);
232227
}
233228

234229
test "write entries" {
@@ -269,7 +264,7 @@ test "write entries" {
269264
.hashes = &[_]u32{ 1, 2, 3 },
270265
} }};
271266

272-
try oplog.write(&changes, &updater);
267+
try oplog.write(&changes);
273268

274269
var file = try oplogDir.openFile("0000000000000001.xlog", .{});
275270
defer file.close();

0 commit comments

Comments
 (0)