@@ -11,6 +11,19 @@ use crate::registry::WalRegistry;
11
11
12
12
pub ( crate ) type NotifyCheckpointer = mpsc:: Sender < NamespaceName > ;
13
13
14
+ pub enum CheckpointMessage {
15
+ /// notify that a namespace may be checkpointable
16
+ Namespace ( NamespaceName ) ,
17
+ /// shutdown initiated
18
+ Shutdown ,
19
+ }
20
+
21
+ impl From < NamespaceName > for CheckpointMessage {
22
+ fn from ( value : NamespaceName ) -> Self {
23
+ Self :: Namespace ( value)
24
+ }
25
+ }
26
+
14
27
pub type LibsqlCheckpointer < IO , S > = Checkpointer < WalRegistry < IO , S > > ;
15
28
16
29
impl < IO , S > LibsqlCheckpointer < IO , S >
20
33
{
21
34
pub fn new (
22
35
registry : Arc < WalRegistry < IO , S > > ,
23
- notifier : mpsc:: Receiver < NamespaceName > ,
36
+ notifier : mpsc:: Receiver < CheckpointMessage > ,
24
37
max_checkpointing_conccurency : usize ,
25
38
) -> Self {
26
39
Self :: new_with_performer ( registry, notifier, max_checkpointing_conccurency)
@@ -70,7 +83,7 @@ pub struct Checkpointer<P> {
70
83
checkpointing : HashSet < NamespaceName > ,
71
84
/// the checkpointer is notifier whenever there is a change to a namespage that could trigger a
72
85
/// checkpoint
73
- recv : mpsc:: Receiver < NamespaceName > ,
86
+ recv : mpsc:: Receiver < CheckpointMessage > ,
74
87
max_checkpointing_conccurency : usize ,
75
88
shutting_down : bool ,
76
89
join_set : JoinSet < ( NamespaceName , crate :: error:: Result < ( ) > ) > ,
85
98
{
86
99
fn new_with_performer (
87
100
perform_checkpoint : Arc < P > ,
88
- notifier : mpsc:: Receiver < NamespaceName > ,
101
+ notifier : mpsc:: Receiver < CheckpointMessage > ,
89
102
max_checkpointing_conccurency : usize ,
90
103
) -> Self {
91
104
Self {
@@ -141,10 +154,10 @@ where
141
154
}
142
155
notified = self . recv. recv( ) , if !self . shutting_down => {
143
156
match notified {
144
- Some ( namespace) => {
157
+ Some ( CheckpointMessage :: Namespace ( namespace) ) => {
145
158
self . scheduled. insert( namespace) ;
146
159
}
147
- None => {
160
+ None | Some ( CheckpointMessage :: Shutdown ) => {
148
161
self . shutting_down = true ;
149
162
}
150
163
}
@@ -204,7 +217,7 @@ mod test {
204
217
let mut checkpointer = Checkpointer :: new_with_performer ( TestPerformCheckoint . into ( ) , receiver, 5 ) ;
205
218
let ns = NamespaceName :: from ( "test" ) ;
206
219
207
- sender. send ( ns. clone ( ) ) . await . unwrap ( ) ;
220
+ sender. send ( ns. clone ( ) . into ( ) ) . await . unwrap ( ) ;
208
221
209
222
checkpointer. step ( ) . await ;
210
223
@@ -236,7 +249,7 @@ mod test {
236
249
let mut checkpointer = Checkpointer :: new_with_performer ( TestPerformCheckoint . into ( ) , receiver, 5 ) ;
237
250
let ns = NamespaceName :: from ( "test" ) ;
238
251
239
- sender. send ( ns. clone ( ) ) . await . unwrap ( ) ;
252
+ sender. send ( ns. clone ( ) . into ( ) ) . await . unwrap ( ) ;
240
253
241
254
checkpointer. step ( ) . await ;
242
255
assert_eq ! ( checkpointer. errors, 0 ) ;
@@ -327,8 +340,8 @@ mod test {
327
340
328
341
let ns: NamespaceName = "test" . into ( ) ;
329
342
330
- sender. send ( ns. clone ( ) ) . await . unwrap ( ) ;
331
- sender. send ( ns. clone ( ) ) . await . unwrap ( ) ;
343
+ sender. send ( ns. clone ( ) . into ( ) ) . await . unwrap ( ) ;
344
+ sender. send ( ns. clone ( ) . into ( ) ) . await . unwrap ( ) ;
332
345
333
346
checkpointer. step ( ) . await ;
334
347
@@ -360,8 +373,8 @@ mod test {
360
373
let ns1: NamespaceName = "test1" . into ( ) ;
361
374
let ns2: NamespaceName = "test2" . into ( ) ;
362
375
363
- sender. send ( ns1. clone ( ) ) . await . unwrap ( ) ;
364
- sender. send ( ns2. clone ( ) ) . await . unwrap ( ) ;
376
+ sender. send ( ns1. clone ( ) . into ( ) ) . await . unwrap ( ) ;
377
+ sender. send ( ns2. clone ( ) . into ( ) ) . await . unwrap ( ) ;
365
378
366
379
checkpointer. step ( ) . await ;
367
380
@@ -396,9 +409,9 @@ mod test {
396
409
let ns2: NamespaceName = "test2" . into ( ) ;
397
410
let ns3: NamespaceName = "test3" . into ( ) ;
398
411
399
- sender. send ( ns1. clone ( ) ) . await . unwrap ( ) ;
400
- sender. send ( ns2. clone ( ) ) . await . unwrap ( ) ;
401
- sender. send ( ns3. clone ( ) ) . await . unwrap ( ) ;
412
+ sender. send ( ns1. clone ( ) . into ( ) ) . await . unwrap ( ) ;
413
+ sender. send ( ns2. clone ( ) . into ( ) ) . await . unwrap ( ) ;
414
+ sender. send ( ns3. clone ( ) . into ( ) ) . await . unwrap ( ) ;
402
415
403
416
checkpointer. step ( ) . await ;
404
417
checkpointer. step ( ) . await ;
0 commit comments