Skip to content

Commit 05c287b

Browse files
committed
Consolidate config defaults
Use #[serde(default)] to provide default values for missing configuration options during deserialization. This typically makes use of the type's Default trait, but we also specify a couple default functions for standard types when a custom default is desired. Also make number_of_queries optional to bring its semantics into alignment with the documentation in the README.md. I think it was accidentally specified as a required option.
1 parent 14c977b commit 05c287b

File tree

4 files changed

+36
-39
lines changed

4 files changed

+36
-39
lines changed

src/config.rs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@ pub enum QueryDiscoveryMode {
5151
External,
5252
}
5353

54+
fn default_lock_file() -> String {
55+
"/tmp/readyset_scheduler.lock".to_string()
56+
}
57+
58+
fn default_number_of_queries() -> u16 {
59+
10
60+
}
61+
5462
#[derive(Deserialize, Clone, Debug)]
5563
pub struct Config {
5664
pub proxysql_user: String,
@@ -61,14 +69,22 @@ pub struct Config {
6169
pub readyset_password: String,
6270
pub source_hostgroup: u16,
6371
pub readyset_hostgroup: u16,
64-
pub warmup_time_s: Option<u16>,
65-
pub lock_file: Option<String>,
66-
pub operation_mode: Option<OperationMode>,
72+
#[serde(default)]
73+
pub warmup_time_s: u16,
74+
#[serde(default = "default_lock_file")]
75+
pub lock_file: String,
76+
#[serde(default)]
77+
pub operation_mode: OperationMode,
78+
#[serde(default = "default_number_of_queries")]
6779
pub number_of_queries: u16,
68-
pub query_discovery_mode: Option<QueryDiscoveryMode>,
69-
pub query_discovery_min_execution: Option<u64>,
70-
pub query_discovery_min_row_sent: Option<u64>,
71-
pub log_verbosity: Option<MessageType>,
80+
#[serde(default)]
81+
pub query_discovery_mode: QueryDiscoveryMode,
82+
#[serde(default)]
83+
pub query_discovery_min_execution: u64,
84+
#[serde(default)]
85+
pub query_discovery_min_row_sent: u64,
86+
#[serde(default)]
87+
pub log_verbosity: MessageType,
7288
}
7389

7490
pub fn read_config_file(path: &str) -> Result<String, std::io::Error> {

src/main.rs

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ mod queries;
55
mod readyset;
66

77
use clap::Parser;
8-
use config::read_config_file;
8+
use config::{read_config_file, OperationMode};
99
use file_guard::Lock;
10-
use messages::MessageType;
1110
use mysql::{Conn, OptsBuilder};
1211
use proxysql::ProxySQL;
1312
use std::fs::OpenOptions;
@@ -29,30 +28,19 @@ fn main() {
2928
let args = Args::parse();
3029
let config_file = read_config_file(&args.config).expect("Failed to read config file");
3130
let config = config::parse_config_file(&config_file).expect("Failed to parse config file");
32-
messages::set_log_verbosity(config.clone().log_verbosity.unwrap_or(MessageType::Note));
31+
messages::set_log_verbosity(config.log_verbosity);
3332
messages::print_info("Running readyset_scheduler");
3433
let file = match OpenOptions::new()
3534
.read(true)
3635
.write(true)
3736
.create(true)
3837
.truncate(true)
39-
.open(
40-
config
41-
.clone()
42-
.lock_file
43-
.unwrap_or("/tmp/readyset_scheduler.lock".to_string()),
44-
) {
38+
.open(&config.lock_file)
39+
{
4540
Ok(file) => file,
4641
Err(err) => {
4742
messages::print_error(
48-
format!(
49-
"Failed to open lock file {}: {}",
50-
config
51-
.lock_file
52-
.unwrap_or("/tmp/readyset_scheduler.lock".to_string()),
53-
err
54-
)
55-
.as_str(),
43+
format!("Failed to open lock file {}: {}", config.lock_file, err).as_str(),
5644
);
5745
std::process::exit(1);
5846
}
@@ -68,19 +56,14 @@ fn main() {
6856

6957
let mut proxysql = ProxySQL::new(&config, args.dry_run);
7058

71-
let running_mode = match config.operation_mode {
72-
Some(mode) => mode,
73-
None => config::OperationMode::All,
74-
};
75-
76-
if running_mode == config::OperationMode::HealthCheck
77-
|| running_mode == config::OperationMode::All
59+
if config.operation_mode == OperationMode::HealthCheck
60+
|| config.operation_mode == OperationMode::All
7861
{
7962
proxysql.health_check();
8063
}
8164

82-
if running_mode == config::OperationMode::QueryDiscovery
83-
|| running_mode == config::OperationMode::All
65+
if config.operation_mode == OperationMode::QueryDiscovery
66+
|| config.operation_mode == OperationMode::All
8467
{
8568
let mut conn = Conn::new(
8669
OptsBuilder::new()

src/proxysql.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ impl ProxySQL {
6060
ProxySQL {
6161
conn,
6262
readyset_hostgroup: config.readyset_hostgroup,
63-
warmup_time_s: config.warmup_time_s.unwrap_or(0),
63+
warmup_time_s: config.warmup_time_s,
6464
readysets,
6565
dry_run,
6666
}

src/queries.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,9 @@ impl QueryDiscovery {
9696
/// A new QueryDiscovery struct.
9797
pub fn new(config: &Config) -> Self {
9898
QueryDiscovery {
99-
query_discovery_mode: config
100-
.query_discovery_mode
101-
.unwrap_or(QueryDiscoveryMode::CountStar),
102-
query_discovery_min_execution: config.query_discovery_min_execution.unwrap_or(0),
103-
query_discovery_min_rows_sent: config.query_discovery_min_row_sent.unwrap_or(0),
99+
query_discovery_mode: config.query_discovery_mode,
100+
query_discovery_min_execution: config.query_discovery_min_execution,
101+
query_discovery_min_rows_sent: config.query_discovery_min_row_sent,
104102
source_hostgroup: config.source_hostgroup,
105103
readyset_user: config.readyset_user.clone(),
106104
number_of_queries: config.number_of_queries,

0 commit comments

Comments
 (0)