@@ -16,8 +16,7 @@ use std::path::PathBuf;
1616use std:: sync:: Mutex ;
1717
1818use crate :: error_code:: ErrorCode ;
19- use crate :: kvs_api:: { FlushOnExit , InstanceId , KvsApi , SnapshotId } ;
20- use crate :: kvs_api:: { OpenNeedDefaults , OpenNeedKvs } ;
19+ use crate :: kvs_api:: { Defaults , FlushOnExit , InstanceId , KvsApi , KvsLoad , SnapshotId } ;
2120use crate :: kvs_backend:: KvsBackend ;
2221use crate :: kvs_value:: { KvsMap , KvsValue } ;
2322
@@ -48,29 +47,34 @@ pub struct GenericKvs<J: KvsBackend> {
4847}
4948
5049/// Need-File flag
51- #[ derive( PartialEq ) ]
50+ #[ derive( Clone , Debug , PartialEq ) ]
5251enum OpenKvsNeedFile {
52+ /// Ignored: do not load file.
53+ Ignored ,
54+
5355 /// Optional: If the file doesn't exist, start with empty data
5456 Optional ,
5557
5658 /// Required: The file must already exist
5759 Required ,
5860}
5961
60- impl From < OpenNeedDefaults > for OpenKvsNeedFile {
61- fn from ( val : OpenNeedDefaults ) -> OpenKvsNeedFile {
62+ impl From < Defaults > for OpenKvsNeedFile {
63+ fn from ( val : Defaults ) -> OpenKvsNeedFile {
6264 match val {
63- OpenNeedDefaults :: Optional => OpenKvsNeedFile :: Optional ,
64- OpenNeedDefaults :: Required => OpenKvsNeedFile :: Required ,
65+ Defaults :: Ignored => OpenKvsNeedFile :: Ignored ,
66+ Defaults :: Optional => OpenKvsNeedFile :: Optional ,
67+ Defaults :: Required => OpenKvsNeedFile :: Required ,
6568 }
6669 }
6770}
6871
69- impl From < OpenNeedKvs > for OpenKvsNeedFile {
70- fn from ( val : OpenNeedKvs ) -> OpenKvsNeedFile {
72+ impl From < KvsLoad > for OpenKvsNeedFile {
73+ fn from ( val : KvsLoad ) -> OpenKvsNeedFile {
7174 match val {
72- OpenNeedKvs :: Optional => OpenKvsNeedFile :: Optional ,
73- OpenNeedKvs :: Required => OpenKvsNeedFile :: Required ,
75+ KvsLoad :: Ignored => OpenKvsNeedFile :: Ignored ,
76+ KvsLoad :: Optional => OpenKvsNeedFile :: Optional ,
77+ KvsLoad :: Required => OpenKvsNeedFile :: Required ,
7478 }
7579 }
7680}
@@ -111,11 +115,17 @@ impl<J: KvsBackend> GenericKvs<J> {
111115 hash_filename : Option < & PathBuf > ,
112116 ) -> Result < KvsMap , ErrorCode >
113117 where
114- T : Into < OpenKvsNeedFile > ,
118+ T : Into < OpenKvsNeedFile > + Clone ,
115119 {
116120 let do_hash = matches ! ( verify_hash, OpenKvsVerifyHash :: Yes ) ;
117121 let filename_path = filename. clone ( ) ;
118122 let hash_filename_path = hash_filename. cloned ( ) ;
123+
124+ // Return empty map if `Ignored`.
125+ if need_file. clone ( ) . into ( ) == OpenKvsNeedFile :: Ignored {
126+ return Ok ( KvsMap :: new ( ) ) ;
127+ }
128+
119129 match J :: load_kvs ( filename_path. clone ( ) , do_hash, hash_filename_path. clone ( ) ) {
120130 Ok ( _) => {
121131 let map = J :: load_kvs ( filename_path, do_hash, hash_filename_path) . map_err ( |e| {
@@ -187,8 +197,8 @@ impl<J: KvsBackend> KvsApi for GenericKvs<J> {
187197 ///
188198 /// # Parameters
189199 /// * `instance_id`: Instance ID
190- /// * `need_defaults `: Fail when no default file was found
191- /// * `need_kvs `: Fail when no KVS file was found
200+ /// * `defaults `: Defaults load mode.
201+ /// * `kvs_load `: KVS load mode.
192202 ///
193203 /// # Return Values
194204 /// * Ok: KVS instance
@@ -199,8 +209,8 @@ impl<J: KvsBackend> KvsApi for GenericKvs<J> {
199209 /// * `ErrorCode::UnmappedError`: Generic error
200210 fn open (
201211 instance_id : InstanceId ,
202- need_defaults : OpenNeedDefaults ,
203- need_kvs : OpenNeedKvs ,
212+ defaults : Defaults ,
213+ kvs_load : KvsLoad ,
204214 dir : Option < String > ,
205215 ) -> Result < GenericKvs < J > , ErrorCode > {
206216 let dir = if let Some ( dir) = dir {
@@ -213,18 +223,14 @@ impl<J: KvsBackend> KvsApi for GenericKvs<J> {
213223 let filename_kvs =
214224 filename_prefix. with_file_name ( format ! ( "{}_0" , filename_prefix. display( ) ) ) ;
215225
216- let default = GenericKvs :: < J > :: open_kvs (
217- & filename_default,
218- need_defaults,
219- OpenKvsVerifyHash :: No ,
220- None ,
221- ) ?;
226+ let default =
227+ GenericKvs :: < J > :: open_kvs ( & filename_default, defaults, OpenKvsVerifyHash :: No , None ) ?;
222228 // Use hash checking for the main KVS file
223229 let hash_path =
224230 filename_prefix. with_file_name ( format ! ( "{}_0.hash" , filename_prefix. display( ) ) ) ;
225231 let kvs = GenericKvs :: < J > :: open_kvs (
226232 & filename_kvs,
227- need_kvs ,
233+ kvs_load ,
228234 OpenKvsVerifyHash :: Yes ,
229235 Some ( & hash_path) ,
230236 ) ?;
@@ -555,12 +561,7 @@ impl<J: KvsBackend> KvsApi for GenericKvs<J> {
555561 }
556562
557563 let snap_path = PathBuf :: from ( format ! ( "{}_{}" , self . filename_prefix. display( ) , id. 0 ) ) ;
558- let kvs = Self :: open_kvs (
559- & snap_path,
560- OpenKvsNeedFile :: Required ,
561- OpenKvsVerifyHash :: Yes ,
562- None ,
563- ) ?;
564+ let kvs = Self :: open_kvs ( & snap_path, KvsLoad :: Required , OpenKvsVerifyHash :: Yes , None ) ?;
564565 * self . kvs . lock ( ) ? = kvs;
565566
566567 Ok ( ( ) )
@@ -624,9 +625,7 @@ mod kvs_tests {
624625 use crate :: error_code:: ErrorCode ;
625626 use crate :: json_backend:: JsonBackend ;
626627 use crate :: kvs:: { GenericKvs , KVS_MAX_SNAPSHOTS } ;
627- use crate :: kvs_api:: {
628- FlushOnExit , InstanceId , KvsApi , OpenNeedDefaults , OpenNeedKvs , SnapshotId ,
629- } ;
628+ use crate :: kvs_api:: { Defaults , FlushOnExit , InstanceId , KvsApi , KvsLoad , SnapshotId } ;
630629 use crate :: kvs_backend:: KvsBackend ;
631630 use crate :: kvs_value:: { KvsMap , KvsValue } ;
632631 use std:: path:: PathBuf ;
@@ -663,8 +662,8 @@ mod kvs_tests {
663662 let instance_id = InstanceId ( 1 ) ;
664663 let mut kvs = GenericKvs :: < B > :: open (
665664 instance_id,
666- OpenNeedDefaults :: Optional ,
667- OpenNeedKvs :: Optional ,
665+ Defaults :: Optional ,
666+ KvsLoad :: Optional ,
668667 Some ( working_dir. display ( ) . to_string ( ) ) ,
669668 )
670669 . unwrap ( ) ;
0 commit comments