@@ -153,6 +153,7 @@ impl From<JsonGenerateError> for ErrorCode {
153153
154154/// KVS backend implementation based on TinyJSON.
155155pub struct JsonBackend {
156+ instance_id : InstanceId ,
156157 working_dir : PathBuf ,
157158}
158159
@@ -173,17 +174,17 @@ impl JsonBackend {
173174 /// # Return Values
174175 /// * Ok: Rotation successful, also if no rotation was needed
175176 /// * `ErrorCode::UnmappedError`: Unmapped error
176- fn snapshot_rotate ( & self , instance_id : & InstanceId ) -> Result < ( ) , ErrorCode > {
177+ fn snapshot_rotate ( & self ) -> Result < ( ) , ErrorCode > {
177178 for idx in ( 1 ..=Self :: snapshot_max_count ( ) ) . rev ( ) {
178179 let old_snapshot_id = SnapshotId ( idx - 1 ) ;
179180 let new_snapshot_id = SnapshotId ( idx) ;
180181
181- let hash_path_old = self . hash_file_path ( instance_id , & old_snapshot_id) ;
182- let hash_path_new = self . hash_file_path ( instance_id , & new_snapshot_id) ;
183- let snap_name_old = self . kvs_file_name ( instance_id , & old_snapshot_id) ;
184- let snap_path_old = self . kvs_file_path ( instance_id , & old_snapshot_id) ;
185- let snap_name_new = self . kvs_file_name ( instance_id , & new_snapshot_id) ;
186- let snap_path_new = self . kvs_file_path ( instance_id , & new_snapshot_id) ;
182+ let hash_path_old = self . hash_file_path ( & old_snapshot_id) ;
183+ let hash_path_new = self . hash_file_path ( & new_snapshot_id) ;
184+ let snap_name_old = self . kvs_file_name ( & old_snapshot_id) ;
185+ let snap_path_old = self . kvs_file_path ( & old_snapshot_id) ;
186+ let snap_name_new = self . kvs_file_name ( & new_snapshot_id) ;
187+ let snap_path_new = self . kvs_file_path ( & new_snapshot_id) ;
187188
188189 println ! ( "rotating: {snap_name_old} -> {snap_name_new}" ) ;
189190
@@ -285,40 +286,36 @@ impl JsonBackend {
285286}
286287
287288impl KvsBackend for JsonBackend {
288- fn load_kvs (
289- & self ,
290- instance_id : & InstanceId ,
291- snapshot_id : & SnapshotId ,
292- ) -> Result < KvsMap , ErrorCode > {
293- let kvs_path = self . kvs_file_path ( instance_id, snapshot_id) ;
294- let hash_path = self . hash_file_path ( instance_id, snapshot_id) ;
289+ fn load_kvs ( & self , snapshot_id : & SnapshotId ) -> Result < KvsMap , ErrorCode > {
290+ let kvs_path = self . kvs_file_path ( snapshot_id) ;
291+ let hash_path = self . hash_file_path ( snapshot_id) ;
295292 Self :: load ( & kvs_path, Some ( & hash_path) )
296293 }
297294
298- fn load_defaults ( & self , instance_id : & InstanceId ) -> Result < KvsMap , ErrorCode > {
299- let defaults_path = self . defaults_file_path ( instance_id ) ;
295+ fn load_defaults ( & self ) -> Result < KvsMap , ErrorCode > {
296+ let defaults_path = self . defaults_file_path ( ) ;
300297 Self :: load ( & defaults_path, None )
301298 }
302299
303- fn flush ( & self , kvs_map : & KvsMap , instance_id : & InstanceId ) -> Result < ( ) , ErrorCode > {
300+ fn flush ( & self , kvs_map : & KvsMap ) -> Result < ( ) , ErrorCode > {
304301 // Rotate previous snapshots.
305- self . snapshot_rotate ( instance_id ) ?;
302+ self . snapshot_rotate ( ) ?;
306303
307304 // Save new snapshot with snapshot ID = 0.
308305 let snapshot_id = SnapshotId ( 0 ) ;
309- let kvs_path = self . kvs_file_path ( instance_id , & snapshot_id) ;
310- let hash_path = self . hash_file_path ( instance_id , & snapshot_id) ;
306+ let kvs_path = self . kvs_file_path ( & snapshot_id) ;
307+ let hash_path = self . hash_file_path ( & snapshot_id) ;
311308 Self :: save ( kvs_map, & kvs_path, Some ( & hash_path) ) ?;
312309
313310 Ok ( ( ) )
314311 }
315312
316- fn snapshot_count ( & self , instance_id : & InstanceId ) -> usize {
313+ fn snapshot_count ( & self ) -> usize {
317314 let mut count = 0 ;
318315
319316 for idx in 0 ..Self :: snapshot_max_count ( ) {
320317 let snapshot_id = SnapshotId ( idx) ;
321- let snapshot_path = self . kvs_file_path ( instance_id , & snapshot_id) ;
318+ let snapshot_path = self . kvs_file_path ( & snapshot_id) ;
322319 if !snapshot_path. exists ( ) {
323320 break ;
324321 }
@@ -333,59 +330,54 @@ impl KvsBackend for JsonBackend {
333330 KVS_MAX_SNAPSHOTS
334331 }
335332
336- fn snapshot_restore (
337- & self ,
338- instance_id : & InstanceId ,
339- snapshot_id : & SnapshotId ,
340- ) -> Result < KvsMap , ErrorCode > {
333+ fn snapshot_restore ( & self , snapshot_id : & SnapshotId ) -> Result < KvsMap , ErrorCode > {
341334 // Fail if given snapshot ID is for current KVS.
342335 if * snapshot_id == SnapshotId ( 0 ) {
343336 eprintln ! ( "error: tried to restore current KVS as snapshot" ) ;
344337 return Err ( ErrorCode :: InvalidSnapshotId ) ;
345338 }
346339
347340 // Fail if snapshot doesn't exist.
348- if self . snapshot_count ( instance_id ) < snapshot_id. 0 {
341+ if self . snapshot_count ( ) < snapshot_id. 0 {
349342 eprintln ! ( "error: tried to restore a non-existing snapshot" ) ;
350343 return Err ( ErrorCode :: InvalidSnapshotId ) ;
351344 }
352345
353- self . load_kvs ( instance_id , snapshot_id)
346+ self . load_kvs ( snapshot_id)
354347 }
355348}
356349
357350/// KVS backend path resolver for `JsonBackend`.
358351impl KvsPathResolver for JsonBackend {
359- fn new ( working_dir : & Path ) -> Self {
352+ fn new ( instance_id : InstanceId , working_dir : & Path ) -> Self {
360353 Self {
354+ instance_id,
361355 working_dir : working_dir. to_path_buf ( ) ,
362356 }
363357 }
364358
365- fn kvs_file_name ( & self , instance_id : & InstanceId , snapshot_id : & SnapshotId ) -> String {
366- format ! ( "kvs_{instance_id }_{snapshot_id}.json" )
359+ fn kvs_file_name ( & self , snapshot_id : & SnapshotId ) -> String {
360+ format ! ( "kvs_{}_{snapshot_id}.json" , self . instance_id )
367361 }
368362
369- fn kvs_file_path ( & self , instance_id : & InstanceId , snapshot_id : & SnapshotId ) -> PathBuf {
370- self . working_dir
371- . join ( self . kvs_file_name ( instance_id, snapshot_id) )
363+ fn kvs_file_path ( & self , snapshot_id : & SnapshotId ) -> PathBuf {
364+ self . working_dir . join ( self . kvs_file_name ( snapshot_id) )
372365 }
373366
374- fn hash_file_name ( & self , instance_id : & InstanceId , snapshot_id : & SnapshotId ) -> String {
375- format ! ( "kvs_{instance_id }_{snapshot_id}.hash" )
367+ fn hash_file_name ( & self , snapshot_id : & SnapshotId ) -> String {
368+ format ! ( "kvs_{}_{snapshot_id}.hash" , self . instance_id )
376369 }
377370
378- fn hash_file_path ( & self , instance_id : & InstanceId , snapshot_id : & SnapshotId ) -> PathBuf {
379- self . working_dir
380- . join ( self . hash_file_name ( instance_id, snapshot_id) )
371+ fn hash_file_path ( & self , snapshot_id : & SnapshotId ) -> PathBuf {
372+ self . working_dir . join ( self . hash_file_name ( snapshot_id) )
381373 }
382374
383- fn defaults_file_name ( & self , instance_id : & InstanceId ) -> String {
384- format ! ( "kvs_{instance_id }_default.json" )
375+ fn defaults_file_name ( & self ) -> String {
376+ format ! ( "kvs_{}_default.json" , self . instance_id )
385377 }
386378
387- fn defaults_file_path ( & self , instance_id : & InstanceId ) -> PathBuf {
388- self . working_dir . join ( self . defaults_file_name ( instance_id ) )
379+ fn defaults_file_path ( & self ) -> PathBuf {
380+ self . working_dir . join ( self . defaults_file_name ( ) )
389381 }
390382}
391383
@@ -1032,9 +1024,9 @@ mod path_resolver_tests {
10321024 fn test_kvs_file_name ( ) {
10331025 let instance_id = InstanceId ( 123 ) ;
10341026 let snapshot_id = SnapshotId ( 2 ) ;
1035- let backend = JsonBackend :: new ( & PathBuf :: new ( ) ) ;
1027+ let backend = JsonBackend :: new ( instance_id . clone ( ) , & PathBuf :: new ( ) ) ;
10361028 let exp_name = format ! ( "kvs_{instance_id}_{snapshot_id}.json" ) ;
1037- let act_name = backend. kvs_file_name ( & instance_id , & snapshot_id) ;
1029+ let act_name = backend. kvs_file_name ( & snapshot_id) ;
10381030 assert_eq ! ( exp_name, act_name) ;
10391031 }
10401032
@@ -1045,18 +1037,18 @@ mod path_resolver_tests {
10451037
10461038 let instance_id = InstanceId ( 123 ) ;
10471039 let snapshot_id = SnapshotId ( 2 ) ;
1048- let backend = JsonBackend :: new ( dir_path) ;
1040+ let backend = JsonBackend :: new ( instance_id . clone ( ) , dir_path) ;
10491041 let exp_name = dir_path. join ( format ! ( "kvs_{instance_id}_{snapshot_id}.json" ) ) ;
1050- let act_name = backend. kvs_file_path ( & instance_id , & snapshot_id) ;
1042+ let act_name = backend. kvs_file_path ( & snapshot_id) ;
10511043 assert_eq ! ( exp_name, act_name) ;
10521044 }
10531045 #[ test]
10541046 fn test_hash_file_name ( ) {
10551047 let instance_id = InstanceId ( 123 ) ;
10561048 let snapshot_id = SnapshotId ( 2 ) ;
1057- let backend = JsonBackend :: new ( & PathBuf :: new ( ) ) ;
1049+ let backend = JsonBackend :: new ( instance_id . clone ( ) , & PathBuf :: new ( ) ) ;
10581050 let exp_name = format ! ( "kvs_{instance_id}_{snapshot_id}.hash" ) ;
1059- let act_name = backend. hash_file_name ( & instance_id , & snapshot_id) ;
1051+ let act_name = backend. hash_file_name ( & snapshot_id) ;
10601052 assert_eq ! ( exp_name, act_name) ;
10611053 }
10621054
@@ -1067,18 +1059,18 @@ mod path_resolver_tests {
10671059
10681060 let instance_id = InstanceId ( 123 ) ;
10691061 let snapshot_id = SnapshotId ( 2 ) ;
1070- let backend = JsonBackend :: new ( dir_path) ;
1062+ let backend = JsonBackend :: new ( instance_id . clone ( ) , dir_path) ;
10711063 let exp_name = dir_path. join ( format ! ( "kvs_{instance_id}_{snapshot_id}.hash" ) ) ;
1072- let act_name = backend. hash_file_path ( & instance_id , & snapshot_id) ;
1064+ let act_name = backend. hash_file_path ( & snapshot_id) ;
10731065 assert_eq ! ( exp_name, act_name) ;
10741066 }
10751067
10761068 #[ test]
10771069 fn test_defaults_file_name ( ) {
10781070 let instance_id = InstanceId ( 123 ) ;
1079- let backend = JsonBackend :: new ( & PathBuf :: new ( ) ) ;
1071+ let backend = JsonBackend :: new ( instance_id . clone ( ) , & PathBuf :: new ( ) ) ;
10801072 let exp_name = format ! ( "kvs_{instance_id}_default.json" ) ;
1081- let act_name = backend. defaults_file_name ( & instance_id ) ;
1073+ let act_name = backend. defaults_file_name ( ) ;
10821074 assert_eq ! ( exp_name, act_name) ;
10831075 }
10841076
@@ -1088,9 +1080,9 @@ mod path_resolver_tests {
10881080 let dir_path = dir. path ( ) ;
10891081
10901082 let instance_id = InstanceId ( 123 ) ;
1091- let backend = JsonBackend :: new ( dir_path) ;
1083+ let backend = JsonBackend :: new ( instance_id . clone ( ) , dir_path) ;
10921084 let exp_name = dir_path. join ( format ! ( "kvs_{instance_id}_default.json" ) ) ;
1093- let act_name = backend. defaults_file_path ( & instance_id ) ;
1085+ let act_name = backend. defaults_file_path ( ) ;
10941086 assert_eq ! ( exp_name, act_name) ;
10951087 }
10961088}
0 commit comments