Skip to content

Commit eb25877

Browse files
committed
impl: consistent instance params
- Add `Ignored` mode. - Consistently use enums. - Remove bool conversions.
1 parent 29016f8 commit eb25877

File tree

14 files changed

+189
-203
lines changed

14 files changed

+189
-203
lines changed

src/rust/rust_kvs/examples/basic.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//! Example for basic operations.
2-
//! - Creating KVS instance using `KvsBuilder` with `need_kvs` modes.
2+
//! - Creating KVS instance using `KvsBuilder` with `kvs_load` modes.
33
//! - Basic key-value operations: `get_value`, `get_value_as`, `set_value`, `get_all_keys`.
44
//! - Other key-value operations: `reset`, `key_exists`, `remove_key`.
55
@@ -17,11 +17,11 @@ fn main() -> Result<(), ErrorCode> {
1717

1818
{
1919
// Build KVS instance for given instance ID and temporary directory.
20-
// `need_kvs` is explicitly set to `false`, but this is the default value.
20+
// `kvs_load` is explicitly set to `KvsLoad::Optional`, but this is the default value.
2121
// KVS files are not required.
2222
let builder = KvsBuilder::<Kvs>::new(instance_id.clone())
2323
.dir(dir_string.clone())
24-
.need_kvs(false);
24+
.kvs_load(KvsLoad::Optional);
2525
let kvs = builder.build()?;
2626

2727
println!("-> `set_value` usage");
@@ -63,10 +63,10 @@ fn main() -> Result<(), ErrorCode> {
6363

6464
{
6565
// Build KVS instance for given instance ID and temporary directory.
66-
// `need_kvs` is set to `true` - KVS files must already exist from previous KVS instance.
66+
// `kvs_load` is set to `KvsLoad::Required` - KVS files must already exist from previous KVS instance.
6767
let builder = KvsBuilder::<Kvs>::new(instance_id)
6868
.dir(dir_string)
69-
.need_kvs(true);
69+
.kvs_load(KvsLoad::Required);
7070
let kvs = builder.build()?;
7171

7272
// `get_value` usage - print all existing keys with their values.

src/rust/rust_kvs/examples/defaults.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//! Example for default values.
2-
//! - Creating KVS instance using `KvsBuilder` with `need_defaults` modes.
2+
//! - Creating KVS instance using `KvsBuilder` with `defaults` modes.
33
//! - Default-specific APIs: `get_default_value`, `is_value_default`.
44
//! - Key-value operations behavior on defaults available.
55
@@ -42,10 +42,10 @@ fn main() -> Result<(), ErrorCode> {
4242
create_defaults_file(dir.path().to_path_buf(), instance_id.clone())?;
4343

4444
// Build KVS instance for given instance ID and temporary directory.
45-
// `need_defaults` is set to `true` - defaults are required.
45+
// `defaults` is set to `Defaults::Required` - defaults are required.
4646
let builder = KvsBuilder::<Kvs>::new(instance_id)
4747
.dir(dir_string)
48-
.need_defaults(true);
48+
.defaults(Defaults::Required);
4949
let kvs = builder.build()?;
5050

5151
// Set explicit value to `k1`.

src/rust/rust_kvs/examples/flush.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ fn main() -> Result<(), ErrorCode> {
9393
// Build KVS instance to check current state.
9494
let builder = KvsBuilder::<Kvs>::new(instance_id.clone())
9595
.dir(dir_string)
96-
.need_kvs(true);
96+
.kvs_load(KvsLoad::Required);
9797
let kvs = builder.build()?;
9898
kvs.set_flush_on_exit(FlushOnExit::No);
9999

src/rust/rust_kvs/src/kvs.rs

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ use std::path::PathBuf;
1616
use std::sync::Mutex;
1717

1818
use 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};
2120
use crate::kvs_backend::KvsBackend;
2221
use 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)]
5251
enum 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();

src/rust/rust_kvs/src/kvs_api.rs

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -49,46 +49,32 @@ impl From<SnapshotId> for usize {
4949
}
5050
}
5151

52-
/// Need-Defaults flag
52+
/// Defaults handling mode.
5353
#[derive(Clone, Debug, PartialEq)]
54-
pub enum OpenNeedDefaults {
55-
/// Optional: Open defaults only if available
54+
pub enum Defaults {
55+
/// Defaults are not loaded.
56+
Ignored,
57+
58+
/// Defaults are loaded if available.
5659
Optional,
5760

58-
/// Required: Defaults must be available
61+
/// Defaults must be loaded.
5962
Required,
6063
}
6164

62-
/// Need-KVS flag
65+
/// KVS load mode.
6366
#[derive(Clone, Debug, PartialEq)]
64-
pub enum OpenNeedKvs {
65-
/// Optional: Use an empty KVS if no KVS is available
67+
pub enum KvsLoad {
68+
/// KVS is not loaded, current shared state is used.
69+
Ignored,
70+
71+
/// KVS is loaded if available.
6672
Optional,
6773

68-
/// Required: KVS must be already exist
74+
/// KVS must be loaded.
6975
Required,
7076
}
7177

72-
impl From<bool> for OpenNeedDefaults {
73-
fn from(flag: bool) -> OpenNeedDefaults {
74-
if flag {
75-
OpenNeedDefaults::Required
76-
} else {
77-
OpenNeedDefaults::Optional
78-
}
79-
}
80-
}
81-
82-
impl From<bool> for OpenNeedKvs {
83-
fn from(flag: bool) -> OpenNeedKvs {
84-
if flag {
85-
OpenNeedKvs::Required
86-
} else {
87-
OpenNeedKvs::Optional
88-
}
89-
}
90-
}
91-
9278
/// Flush on exit mode.
9379
#[derive(Clone, Debug, PartialEq)]
9480
pub enum FlushOnExit {
@@ -102,8 +88,8 @@ pub enum FlushOnExit {
10288
pub trait KvsApi {
10389
fn open(
10490
instance_id: InstanceId,
105-
need_defaults: OpenNeedDefaults,
106-
need_kvs: OpenNeedKvs,
91+
defaults: Defaults,
92+
kvs_load: KvsLoad,
10793
dir: Option<String>,
10894
) -> Result<Self, ErrorCode>
10995
where

0 commit comments

Comments
 (0)