@@ -5,6 +5,7 @@ const SearchResults = @import("common.zig").SearchResults;
5
5
6
6
const Change = @import ("change.zig" ).Change ;
7
7
const SegmentId = @import ("common.zig" ).SegmentId ;
8
+ const KeepOrDelete = @import ("common.zig" ).KeepOrDelete ;
8
9
9
10
const Deadline = @import ("utils/Deadline.zig" );
10
11
@@ -48,9 +49,9 @@ pub fn SegmentList(Segment: type) type {
48
49
return try SharedPtr (Self ).create (allocator , self );
49
50
}
50
51
51
- pub fn deinit (self : * Self , allocator : Allocator ) void {
52
+ pub fn deinit (self : * Self , allocator : Allocator , delete_files : KeepOrDelete ) void {
52
53
for (self .nodes .items ) | * node | {
53
- node .release (allocator , .{});
54
+ node .release (allocator , .{delete_files });
54
55
}
55
56
self .nodes .deinit (allocator );
56
57
}
@@ -60,25 +61,11 @@ pub fn SegmentList(Segment: type) type {
60
61
}
61
62
62
63
pub fn destroySegment (allocator : Allocator , segment : * Node ) void {
63
- segment .releaseWithCleanup (allocator , destroySegmentCallback , .{ });
64
+ segment .release (allocator , .{ .delete });
64
65
}
65
66
66
67
pub fn destroySegments (allocator : Allocator , segments : * SharedPtr (Self )) void {
67
- // we also call cleanup on these segments, to ensure that unused segments will get deleted from disk
68
- segments .releaseWithCleanup (allocator , destroySegmentListCallback , .{allocator });
69
- }
70
-
71
- fn destroySegmentListCallback (segments : * Self , allocator : Allocator ) void {
72
- while (segments .nodes .items .len > 0 ) {
73
- var node = segments .nodes .pop ();
74
- destroySegment (allocator , & node );
75
- }
76
- segments .deinit (allocator );
77
- }
78
-
79
- fn destroySegmentCallback (segment : * Segment ) void {
80
- segment .cleanup ();
81
- segment .deinit ();
68
+ segments .release (allocator , .{ allocator , .delete });
82
69
}
83
70
84
71
pub fn appendSegmentInto (self : Self , copy : * Self , node : Node ) void {
@@ -87,13 +74,16 @@ pub fn SegmentList(Segment: type) type {
87
74
copy .nodes .appendAssumeCapacity (n .acquire ());
88
75
}
89
76
copy .nodes .appendAssumeCapacity (node .acquire ());
77
+ std .log .debug ("adding {s} {}:{}" , .{ @typeName (Segment ), node .value .id .version , node .value .id .included_merges });
90
78
}
91
79
92
80
pub fn removeSegmentInto (self : Self , copy : * Self , node : Node ) void {
93
81
copy .nodes .clearRetainingCapacity ();
94
82
for (self .nodes .items ) | n | {
95
83
if (n .value != node .value ) {
96
84
copy .nodes .appendAssumeCapacity (n .acquire ());
85
+ } else {
86
+ std .log .debug ("removing {s} {}:{}" , .{ @typeName (Segment ), n .value .id .version , n .value .id .included_merges });
97
87
}
98
88
}
99
89
}
@@ -103,9 +93,11 @@ pub fn SegmentList(Segment: type) type {
103
93
var inserted_merged = false ;
104
94
for (self .nodes .items ) | n | {
105
95
if (node .value .id .contains (n .value .id )) {
96
+ std .log .debug ("removing {s} {}:{}" , .{ @typeName (Segment ), n .value .id .version , n .value .id .included_merges });
106
97
if (! inserted_merged ) {
107
98
copy .nodes .appendAssumeCapacity (node .acquire ());
108
99
inserted_merged = true ;
100
+ std .log .debug ("adding {s} {}:{}" , .{ @typeName (Segment ), node .value .id .version , node .value .id .included_merges });
109
101
}
110
102
} else {
111
103
copy .nodes .appendAssumeCapacity (n .acquire ());
@@ -207,8 +199,8 @@ pub fn SegmentListManager(Segment: type) type {
207
199
};
208
200
}
209
201
210
- pub fn deinit (self : * Self ) void {
211
- self .segments .release (self .allocator , .{self .allocator });
202
+ pub fn deinit (self : * Self , delete_files : KeepOrDelete ) void {
203
+ self .segments .release (self .allocator , .{ self .allocator , delete_files });
212
204
}
213
205
214
206
pub fn count (self : Self ) usize {
@@ -284,7 +276,7 @@ pub fn SegmentListManager(Segment: type) type {
284
276
errdefer self .update_lock .unlock ();
285
277
286
278
var segments = try SharedPtr (List ).create (self .allocator , List .initEmpty ());
287
- errdefer self .releaseSegments (& segments );
279
+ errdefer self .destroySegments (& segments );
288
280
289
281
// 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
290
282
try segments .value .nodes .ensureTotalCapacity (self .allocator , self .count () + 1 );
0 commit comments