Skip to content

Commit 072e153

Browse files
committed
Make Index own its own dir
1 parent 8a8eab7 commit 072e153

File tree

3 files changed

+20
-26
lines changed

3 files changed

+20
-26
lines changed

src/Index.zig

+12-12
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const Options = struct {
4242
options: Options,
4343
allocator: std.mem.Allocator,
4444

45-
data_dir: std.fs.Dir,
45+
dir: std.fs.Dir,
4646

4747
oplog: Oplog,
4848

@@ -83,11 +83,11 @@ fn getMemorySegmentSize(segment: SharedPtr(MemorySegment)) usize {
8383
return segment.value.getSize();
8484
}
8585

86-
pub fn init(allocator: std.mem.Allocator, dir: std.fs.Dir, options: Options) !Self {
87-
var data_dir = try dir.makeOpenPath("data", .{ .iterate = true });
88-
errdefer data_dir.close();
86+
pub fn init(allocator: std.mem.Allocator, parent_dir: std.fs.Dir, path: []const u8, options: Options) !Self {
87+
var dir = try parent_dir.makeOpenPath(path, .{ .iterate = true });
88+
errdefer dir.close();
8989

90-
var oplog = try Oplog.init(allocator, data_dir);
90+
var oplog = try Oplog.init(allocator, dir);
9191
errdefer oplog.deinit();
9292

9393
const memory_segments = try SegmentListManager(MemorySegment).init(
@@ -105,7 +105,7 @@ pub fn init(allocator: std.mem.Allocator, dir: std.fs.Dir, options: Options) !Se
105105
const file_segments = try SegmentListManager(FileSegment).init(
106106
allocator,
107107
.{
108-
.dir = data_dir,
108+
.dir = dir,
109109
},
110110
.{
111111
.min_segment_size = options.min_segment_size,
@@ -118,7 +118,7 @@ pub fn init(allocator: std.mem.Allocator, dir: std.fs.Dir, options: Options) !Se
118118
return .{
119119
.options = options,
120120
.allocator = allocator,
121-
.data_dir = data_dir,
121+
.dir = dir,
122122
.oplog = oplog,
123123
.segments_lock = .{},
124124
.memory_segments = memory_segments,
@@ -138,7 +138,7 @@ pub fn deinit(self: *Self) void {
138138
self.file_segments.deinit();
139139

140140
self.oplog.deinit();
141-
self.data_dir.close();
141+
self.dir.close();
142142
}
143143

144144
pub const PendingUpdate = struct {
@@ -211,7 +211,7 @@ fn cancelUpdate(self: *Self, pending_update: *PendingUpdate) void {
211211
}
212212

213213
fn loadSegment(self: *Self, segment_id: SegmentId) !FileSegmentNode {
214-
var node = try FileSegmentList.createSegment(self.allocator, .{ .dir = self.data_dir });
214+
var node = try FileSegmentList.createSegment(self.allocator, .{ .dir = self.dir });
215215
errdefer FileSegmentList.destroySegment(self.allocator, &node);
216216

217217
try node.value.open(segment_id);
@@ -223,7 +223,7 @@ fn loadSegments(self: *Self) !void {
223223
self.segments_lock.lock();
224224
defer self.segments_lock.unlock();
225225

226-
const segment_ids = filefmt.readIndexFile(self.data_dir, self.allocator) catch |err| {
226+
const segment_ids = filefmt.readIndexFile(self.dir, self.allocator) catch |err| {
227227
if (err == error.FileNotFound) {
228228
if (self.options.create) {
229229
try self.updateIndexFile(self.file_segments.segments.value);
@@ -254,7 +254,7 @@ fn doCheckpoint(self: *Self) !bool {
254254

255255
// build new file segment
256256

257-
var target = try FileSegmentList.createSegment(self.allocator, .{ .dir = self.data_dir });
257+
var target = try FileSegmentList.createSegment(self.allocator, .{ .dir = self.dir });
258258
errdefer FileSegmentList.destroySegment(self.allocator, &target);
259259

260260
var reader = source.value.reader();
@@ -328,7 +328,7 @@ fn updateIndexFile(self: *Self, segments: *FileSegmentList) !void {
328328
var ids = try segments.getIds(self.allocator);
329329
defer ids.deinit(self.allocator);
330330

331-
try filefmt.writeIndexFile(self.data_dir, ids.items);
331+
try filefmt.writeIndexFile(self.dir, ids.items);
332332
}
333333

334334
fn maybeMergeFileSegments(self: *Self) !bool {

src/MultiIndex.zig

+1-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ const Self = @This();
88

99
pub const IndexRef = struct {
1010
index: Index,
11-
dir: std.fs.Dir,
1211
references: usize = 0,
1312
last_used_at: i64 = std.math.minInt(i64),
1413
};
@@ -33,7 +32,6 @@ pub fn deinit(self: *Self) void {
3332
var iter = self.indexes.iterator();
3433
while (iter.next()) |entry| {
3534
entry.value_ptr.index.deinit();
36-
entry.value_ptr.dir.close();
3735
}
3836
self.indexes.deinit();
3937
}
@@ -63,10 +61,7 @@ pub fn acquireIndex(self: *Self, id: u8, create: bool) !*IndexRef {
6361
var sub_dir_name_buf: [max_sub_dir_name_size]u8 = undefined;
6462
const sub_dir_name = try std.fmt.bufPrint(&sub_dir_name_buf, sub_dir_name_fmt, .{id});
6563

66-
result.value_ptr.dir = try self.dir.makeOpenPath(sub_dir_name, .{ .iterate = true });
67-
errdefer result.value_ptr.dir.close();
68-
69-
result.value_ptr.index = try Index.init(self.allocator, result.value_ptr.dir, .{ .create = create });
64+
result.value_ptr.index = try Index.init(self.allocator, self.dir, sub_dir_name, .{ .create = create });
7065
errdefer result.value_ptr.index.deinit();
7166

7267
try result.value_ptr.index.open();
@@ -91,7 +86,6 @@ pub fn deleteIndex(self: *Self, id: u8) !void {
9186

9287
if (self.indexes.getEntry(id)) |entry| {
9388
entry.value_ptr.index.deinit();
94-
entry.value_ptr.dir.close();
9589
self.indexes.removeByPtr(entry.key_ptr);
9690
}
9791

src/index_tests.zig

+7-7
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ test "index does not exist" {
1919
var tmp_dir = std.testing.tmpDir(.{});
2020
defer tmp_dir.cleanup();
2121

22-
var index = try Index.init(std.testing.allocator, tmp_dir.dir, .{});
22+
var index = try Index.init(std.testing.allocator, tmp_dir.dir, "idx", .{});
2323
defer index.deinit();
2424

2525
const result = index.open();
@@ -30,7 +30,7 @@ test "index create, update and search" {
3030
var tmp_dir = std.testing.tmpDir(.{});
3131
defer tmp_dir.cleanup();
3232

33-
var index = try Index.init(std.testing.allocator, tmp_dir.dir, .{ .create = true });
33+
var index = try Index.init(std.testing.allocator, tmp_dir.dir, "idx", .{ .create = true });
3434
defer index.deinit();
3535

3636
try index.open();
@@ -69,7 +69,7 @@ test "index create, update, reopen and search" {
6969
var hashes: [100]u32 = undefined;
7070

7171
{
72-
var index = try Index.init(std.testing.allocator, tmp_dir.dir, .{ .create = true });
72+
var index = try Index.init(std.testing.allocator, tmp_dir.dir, "idx", .{ .create = true });
7373
defer index.deinit();
7474

7575
try index.open();
@@ -81,7 +81,7 @@ test "index create, update, reopen and search" {
8181
}
8282

8383
{
84-
var index = try Index.init(std.testing.allocator, tmp_dir.dir, .{ .create = false });
84+
var index = try Index.init(std.testing.allocator, tmp_dir.dir, "idx", .{ .create = false });
8585
defer index.deinit();
8686

8787
try index.open();
@@ -105,7 +105,7 @@ test "index many updates" {
105105
var hashes: [100]u32 = undefined;
106106

107107
{
108-
var index = try Index.init(std.testing.allocator, tmp_dir.dir, .{ .create = true });
108+
var index = try Index.init(std.testing.allocator, tmp_dir.dir, "idx", .{ .create = true });
109109
defer index.deinit();
110110

111111
try index.open();
@@ -118,7 +118,7 @@ test "index many updates" {
118118
}
119119
}
120120

121-
var index = try Index.init(std.testing.allocator, tmp_dir.dir, .{ .create = false });
121+
var index = try Index.init(std.testing.allocator, tmp_dir.dir, "idx", .{ .create = false });
122122
defer index.deinit();
123123

124124
try index.open();
@@ -146,7 +146,7 @@ test "index, multiple fingerprints with the same hashes" {
146146
var tmp_dir = std.testing.tmpDir(.{});
147147
defer tmp_dir.cleanup();
148148

149-
var index = try Index.init(std.testing.allocator, tmp_dir.dir, .{ .create = true });
149+
var index = try Index.init(std.testing.allocator, tmp_dir.dir, "idx", .{ .create = true });
150150
defer index.deinit();
151151

152152
try index.open();

0 commit comments

Comments
 (0)