@@ -175,7 +175,6 @@ pub fn SegmentListManager(Segment: type) type {
175
175
pub const List = SegmentList (Segment );
176
176
pub const MergePolicy = TieredMergePolicy (List .Node , getSegmentSize (Segment ));
177
177
178
- allocator : Allocator ,
179
178
options : Segment.Options ,
180
179
segments : SharedPtr (List ),
181
180
merge_policy : MergePolicy ,
@@ -185,7 +184,6 @@ pub fn SegmentListManager(Segment: type) type {
185
184
pub fn init (allocator : Allocator , options : Segment.Options , merge_policy : MergePolicy ) ! Self {
186
185
const segments = try SharedPtr (List ).create (allocator , List .initEmpty ());
187
186
return Self {
188
- .allocator = allocator ,
189
187
.options = options ,
190
188
.segments = segments ,
191
189
.merge_policy = merge_policy ,
@@ -194,8 +192,8 @@ pub fn SegmentListManager(Segment: type) type {
194
192
};
195
193
}
196
194
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 });
199
197
}
200
198
201
199
pub fn count (self : Self ) usize {
@@ -209,17 +207,17 @@ pub fn SegmentListManager(Segment: type) type {
209
207
return self .segments .acquire ();
210
208
}
211
209
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 );
214
212
}
215
213
216
214
pub fn needsMerge (self : Self ) bool {
217
215
return self .segments .value .nodes .items .len > self .num_allowed_segments .load (.acquire );
218
216
}
219
217
220
- pub fn prepareMerge (self : * Self ) ! ? Update {
218
+ pub fn prepareMerge (self : * Self , allocator : Allocator ) ! ? Update {
221
219
var segments = self .acquireSegments ();
222
- defer self . destroySegments (& segments );
220
+ defer destroySegments (allocator , & segments );
223
221
224
222
self .num_allowed_segments .store (self .merge_policy .calculateBudget (segments .value .nodes .items ), .release );
225
223
if (! self .needsMerge ()) {
@@ -228,10 +226,10 @@ pub fn SegmentListManager(Segment: type) type {
228
226
229
227
const candidate = self .merge_policy .findSegmentsToMerge (segments .value .nodes .items ) orelse return null ;
230
228
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 );
233
231
234
- var merger = SegmentMerger (Segment ).init (self . allocator , segments .value );
232
+ var merger = SegmentMerger (Segment ).init (allocator , segments .value );
235
233
defer merger .deinit ();
236
234
237
235
for (segments .value .nodes .items [candidate .start .. candidate .end ]) | segment | {
@@ -242,7 +240,7 @@ pub fn SegmentListManager(Segment: type) type {
242
240
try target .value .merge (& merger );
243
241
errdefer target .value .cleanup ();
244
242
245
- var update = try self .beginUpdate ();
243
+ var update = try self .beginUpdate (allocator );
246
244
update .replaceMergedSegment (target );
247
245
248
246
return update ;
@@ -266,15 +264,15 @@ pub fn SegmentListManager(Segment: type) type {
266
264
}
267
265
};
268
266
269
- pub fn beginUpdate (self : * Self ) ! Update {
267
+ pub fn beginUpdate (self : * Self , allocator : Allocator ) ! Update {
270
268
self .update_lock .lock ();
271
269
errdefer self .update_lock .unlock ();
272
270
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 );
275
273
276
274
// 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 );
278
276
279
277
return .{
280
278
.manager = self ,
@@ -288,11 +286,11 @@ pub fn SegmentListManager(Segment: type) type {
288
286
update .committed = true ;
289
287
}
290
288
291
- pub fn cleanupAfterUpdate (self : * Self , update : * Update ) void {
289
+ pub fn cleanupAfterUpdate (self : * Self , allocator : Allocator , update : * Update ) void {
292
290
if (! update .committed ) {
293
291
self .update_lock .unlock ();
294
292
}
295
- self . destroySegments (& update .segments );
293
+ destroySegments (allocator , & update .segments );
296
294
}
297
295
};
298
296
}
0 commit comments