Skip to content

Commit 16942c9

Browse files
committedDec 5, 2024
Simpler index getting API for the server
1 parent 1eb0a63 commit 16942c9

File tree

2 files changed

+31
-34
lines changed

2 files changed

+31
-34
lines changed
 

‎src/MultiIndex.zig

+10-6
Original file line numberDiff line numberDiff line change
@@ -114,14 +114,18 @@ fn removeIndex(self: *Self, name: []const u8) void {
114114
}
115115
}
116116

117-
pub fn releaseIndex(self: *Self, index_ref: *IndexRef) void {
117+
fn releaseIndexRef(self: *Self, index_ref: *IndexRef) void {
118118
self.lock.lock();
119119
defer self.lock.unlock();
120120

121121
_ = index_ref.decRef();
122122
}
123123

124-
pub fn acquireIndex(self: *Self, name: []const u8) !*IndexRef {
124+
pub fn releaseIndex(self: *Self, index: *Index) void {
125+
self.releaseIndexRef(@fieldParentPtr("index", index));
126+
}
127+
128+
fn acquireIndex(self: *Self, name: []const u8) !*IndexRef {
125129
if (!isValidName(name)) {
126130
return error.InvalidIndexName;
127131
}
@@ -149,20 +153,20 @@ pub fn acquireIndex(self: *Self, name: []const u8) !*IndexRef {
149153
return result.value_ptr;
150154
}
151155

152-
pub fn getIndex(self: *Self, name: []const u8) !*IndexRef {
156+
pub fn getIndex(self: *Self, name: []const u8) !*Index {
153157
const index_ref = try self.acquireIndex(name);
154-
errdefer self.releaseIndex(index_ref);
158+
errdefer self.releaseIndexRef(index_ref);
155159

156160
try index_ref.ensureOpen(false);
157161

158-
return index_ref;
162+
return &index_ref.index;
159163
}
160164

161165
pub fn createIndex(self: *Self, name: []const u8) !void {
162166
log.info("creating index {s}", .{name});
163167

164168
const index_ref = try self.acquireIndex(name);
165-
defer self.releaseIndex(index_ref);
169+
defer self.releaseIndexRef(index_ref);
166170

167171
try index_ref.ensureOpen(true);
168172
}

‎src/server.zig

+21-28
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const log = std.log.scoped(.server);
66
const msgpack = @import("msgpack");
77

88
const MultiIndex = @import("MultiIndex.zig");
9-
const IndexData = MultiIndex.IndexRef;
9+
const Index = @import("Index.zig");
1010
const common = @import("common.zig");
1111
const SearchResults = common.SearchResults;
1212
const Change = @import("change.zig").Change;
@@ -138,7 +138,7 @@ fn getId(req: *httpz.Request, res: *httpz.Response, send_body: bool) !?u32 {
138138
};
139139
}
140140

141-
fn getIndex(ctx: *Context, req: *httpz.Request, res: *httpz.Response, send_body: bool) !?*IndexData {
141+
fn getIndex(ctx: *Context, req: *httpz.Request, res: *httpz.Response, send_body: bool) !?*Index {
142142
const index_name = req.param("index") orelse {
143143
if (send_body) {
144144
try writeErrorResponse(400, error.MissingIndexName, req, res);
@@ -161,7 +161,7 @@ fn getIndex(ctx: *Context, req: *httpz.Request, res: *httpz.Response, send_body:
161161
return index;
162162
}
163163

164-
fn releaseIndex(ctx: *Context, index: *IndexData) void {
164+
fn releaseIndex(ctx: *Context, index: *Index) void {
165165
ctx.indexes.releaseIndex(index);
166166
}
167167

@@ -262,9 +262,8 @@ fn getRequestBody(comptime T: type, req: *httpz.Request, res: *httpz.Response) !
262262
fn handleSearch(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !void {
263263
const body = try getRequestBody(SearchRequestJSON, req, res) orelse return;
264264

265-
const index_ref = try getIndex(ctx, req, res, true) orelse return;
266-
const index = &index_ref.index;
267-
defer releaseIndex(ctx, index_ref);
265+
const index = try getIndex(ctx, req, res, true) orelse return;
266+
defer releaseIndex(ctx, index);
268267

269268
var timeout = body.timeout;
270269
if (timeout == 0) {
@@ -299,9 +298,8 @@ const UpdateRequestJSON = struct {
299298
fn handleUpdate(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !void {
300299
const body = try getRequestBody(UpdateRequestJSON, req, res) orelse return;
301300

302-
const index_ref = try getIndex(ctx, req, res, true) orelse return;
303-
const index = &index_ref.index;
304-
defer releaseIndex(ctx, index_ref);
301+
const index = try getIndex(ctx, req, res, true) orelse return;
302+
defer releaseIndex(ctx, index);
305303

306304
metrics.update(body.changes.len);
307305

@@ -311,9 +309,8 @@ fn handleUpdate(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !void
311309
}
312310

313311
fn handleHeadFingerprint(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !void {
314-
const index_ref = try getIndex(ctx, req, res, false) orelse return;
315-
const index = &index_ref.index;
316-
defer releaseIndex(ctx, index_ref);
312+
const index = try getIndex(ctx, req, res, false) orelse return;
313+
defer releaseIndex(ctx, index);
317314

318315
var index_reader = index.acquireReader();
319316
defer index.releaseReader(&index_reader);
@@ -333,9 +330,8 @@ const GetFingerprintResponse = struct {
333330
};
334331

335332
fn handleGetFingerprint(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !void {
336-
const index_ref = try getIndex(ctx, req, res, true) orelse return;
337-
const index = &index_ref.index;
338-
defer releaseIndex(ctx, index_ref);
333+
const index = try getIndex(ctx, req, res, true) orelse return;
334+
defer releaseIndex(ctx, index);
339335

340336
var index_reader = index.acquireReader();
341337
defer index.releaseReader(&index_reader);
@@ -359,9 +355,8 @@ const PutFingerprintRequest = struct {
359355
fn handlePutFingerprint(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !void {
360356
const body = try getRequestBody(PutFingerprintRequest, req, res) orelse return;
361357

362-
const index_ref = try getIndex(ctx, req, res, true) orelse return;
363-
const index = &index_ref.index;
364-
defer releaseIndex(ctx, index_ref);
358+
const index = try getIndex(ctx, req, res, true) orelse return;
359+
defer releaseIndex(ctx, index);
365360

366361
const id = try getId(req, res, true) orelse return;
367362
const change: Change = .{ .insert = .{
@@ -377,9 +372,8 @@ fn handlePutFingerprint(ctx: *Context, req: *httpz.Request, res: *httpz.Response
377372
}
378373

379374
fn handleDeleteFingerprint(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !void {
380-
const index_ref = try getIndex(ctx, req, res, true) orelse return;
381-
const index = &index_ref.index;
382-
defer releaseIndex(ctx, index_ref);
375+
const index = try getIndex(ctx, req, res, true) orelse return;
376+
defer releaseIndex(ctx, index);
383377

384378
const id = try getId(req, res, true) orelse return;
385379
const change: Change = .{ .delete = .{
@@ -426,9 +420,8 @@ const GetIndexResponse = struct {
426420
};
427421

428422
fn handleGetIndex(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !void {
429-
const index_ref = try getIndex(ctx, req, res, true) orelse return;
430-
const index = &index_ref.index;
431-
defer releaseIndex(ctx, index_ref);
423+
const index = try getIndex(ctx, req, res, true) orelse return;
424+
defer releaseIndex(ctx, index);
432425

433426
var index_reader = index.acquireReader();
434427
defer index.releaseReader(&index_reader);
@@ -461,13 +454,13 @@ fn handleDeleteIndex(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !
461454
}
462455

463456
fn handleHeadIndex(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !void {
464-
const index_ref = try getIndex(ctx, req, res, false) orelse return;
465-
defer releaseIndex(ctx, index_ref);
457+
const index = try getIndex(ctx, req, res, false) orelse return;
458+
defer releaseIndex(ctx, index);
466459
}
467460

468461
fn handlePingIndex(ctx: *Context, req: *httpz.Request, res: *httpz.Response) !void {
469-
const index_ref = try getIndex(ctx, req, res, false) orelse return;
470-
defer releaseIndex(ctx, index_ref);
462+
const index = try getIndex(ctx, req, res, false) orelse return;
463+
defer releaseIndex(ctx, index);
471464

472465
try handlePing(ctx, req, res);
473466
}

0 commit comments

Comments
 (0)