Skip to content

Commit 06f093c

Browse files
author
Devdutt Shenoi
committed
refactor: use serde
1 parent 4af4e6c commit 06f093c

File tree

4 files changed

+20
-65
lines changed

4 files changed

+20
-65
lines changed

src/analytics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ pub struct Report {
6363
memory_total_bytes: u64,
6464
platform: String,
6565
storage_mode: String,
66-
server_mode: String,
66+
server_mode: Mode,
6767
version: String,
6868
commit_hash: String,
6969
active_ingestors: u64,
@@ -111,7 +111,7 @@ impl Report {
111111
memory_total_bytes: mem_total,
112112
platform: platform().to_string(),
113113
storage_mode: CONFIG.get_storage_mode_string().to_string(),
114-
server_mode: CONFIG.parseable.mode.to_string(),
114+
server_mode: CONFIG.parseable.mode,
115115
version: current().released_version.to_string(),
116116
commit_hash: current().commit_hash,
117117
active_ingestors: ingestor_metrics.0,

src/migration/metadata_migration.rs

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818

1919
use rand::distributions::DistString;
20-
use serde_json::{Map, Value as JsonValue};
20+
use serde_json::{json, Map, Value as JsonValue};
2121

2222
use crate::{
2323
handlers::http::modal::IngestorMetadata,
@@ -47,10 +47,7 @@ pub fn v1_v3(mut storage_metadata: JsonValue) -> JsonValue {
4747
metadata.insert("users".to_string(), JsonValue::Array(vec![]));
4848
metadata.insert("streams".to_string(), JsonValue::Array(vec![]));
4949
metadata.insert("roles".to_string(), JsonValue::Array(vec![]));
50-
metadata.insert(
51-
"server_mode".to_string(),
52-
JsonValue::String(CONFIG.parseable.mode.to_string()),
53-
);
50+
metadata.insert("server_mode".to_string(), json!(CONFIG.parseable.mode));
5451
storage_metadata
5552
}
5653

@@ -111,10 +108,7 @@ pub fn v2_v3(mut storage_metadata: JsonValue) -> JsonValue {
111108
"roles".to_string(),
112109
JsonValue::Object(Map::from_iter(privileges_map)),
113110
);
114-
metadata.insert(
115-
"server_mode".to_string(),
116-
JsonValue::String(CONFIG.parseable.mode.to_string()),
117-
);
111+
metadata.insert("server_mode".to_string(), json!(CONFIG.parseable.mode));
118112
storage_metadata
119113
}
120114

@@ -125,10 +119,7 @@ pub fn v3_v4(mut storage_metadata: JsonValue) -> JsonValue {
125119
let sm = metadata.get("server_mode");
126120

127121
if sm.is_none() || sm.unwrap().as_str().unwrap() == "All" {
128-
metadata.insert(
129-
"server_mode".to_string(),
130-
JsonValue::String(CONFIG.parseable.mode.to_string()),
131-
);
122+
metadata.insert("server_mode".to_string(), json!(CONFIG.parseable.mode));
132123
}
133124

134125
let roles = metadata.get_mut("roles").unwrap().as_object_mut().unwrap();
@@ -155,10 +146,7 @@ pub fn v4_v5(mut storage_metadata: JsonValue) -> JsonValue {
155146

156147
match metadata.get("server_mode") {
157148
None => {
158-
metadata.insert(
159-
"server_mode".to_string(),
160-
JsonValue::String(CONFIG.parseable.mode.to_string()),
161-
);
149+
metadata.insert("server_mode".to_string(), json!(CONFIG.parseable.mode));
162150
}
163151
Some(JsonValue::String(mode)) => match mode.as_str() {
164152
"Query" => {
@@ -168,10 +156,7 @@ pub fn v4_v5(mut storage_metadata: JsonValue) -> JsonValue {
168156
);
169157
}
170158
"All" => {
171-
metadata.insert(
172-
"server_mode".to_string(),
173-
JsonValue::String(CONFIG.parseable.mode.to_string()),
174-
);
159+
metadata.insert("server_mode".to_string(), json!(CONFIG.parseable.mode));
175160
}
176161
_ => (),
177162
},

src/option.rs

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ use crate::storage::{
2424
use bytes::Bytes;
2525
use clap::error::ErrorKind;
2626
use clap::{command, Args, Command, FromArgMatches};
27-
use core::fmt;
2827
use once_cell::sync::Lazy;
2928
use parquet::basic::{BrotliLevel, GzipLevel, ZstdLevel};
29+
use serde::{Deserialize, Serialize};
3030
use std::env;
3131
use std::path::PathBuf;
3232
use std::sync::Arc;
@@ -245,39 +245,14 @@ Join the community at https://logg.ing/community.
245245
.subcommands([local, s3, azureblob])
246246
}
247247

248-
#[derive(Debug, Default, Eq, PartialEq)]
248+
#[derive(Debug, Default, Eq, PartialEq, Clone, Copy, Serialize, Deserialize)]
249249
pub enum Mode {
250250
Query,
251251
Ingest,
252252
#[default]
253253
All,
254254
}
255255

256-
impl Mode {
257-
pub fn to_str(&self) -> &str {
258-
match self {
259-
Mode::Query => "Query",
260-
Mode::Ingest => "Ingest",
261-
Mode::All => "All",
262-
}
263-
}
264-
265-
pub fn from_string(mode: &str) -> Result<Self, String> {
266-
match mode {
267-
"Query" => Ok(Mode::Query),
268-
"Ingest" => Ok(Mode::Ingest),
269-
"All" => Ok(Mode::All),
270-
x => Err(format!("Trying to Parse Invalid mode: {}", x)),
271-
}
272-
}
273-
}
274-
275-
impl fmt::Display for Mode {
276-
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
277-
write!(f, "{}", self.to_str())
278-
}
279-
}
280-
281256
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
282257
#[allow(non_camel_case_types, clippy::upper_case_acronyms)]
283258
pub enum Compression {

src/storage/store_metadata.rs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ pub struct StorageMetadata {
5858
pub deployment_id: uid::Uid,
5959
pub users: Vec<User>,
6060
pub streams: Vec<String>,
61-
pub server_mode: String,
61+
pub server_mode: Mode,
6262
#[serde(default)]
6363
pub roles: HashMap<String, Vec<DefaultPrivilege>>,
6464
#[serde(default)]
@@ -73,7 +73,7 @@ impl Default for StorageMetadata {
7373
staging: CONFIG.staging_dir().to_path_buf(),
7474
storage: CONFIG.storage().get_endpoint(),
7575
deployment_id: uid::gen(),
76-
server_mode: CONFIG.parseable.mode.to_string(),
76+
server_mode: CONFIG.parseable.mode,
7777
users: Vec::new(),
7878
streams: Vec::new(),
7979
roles: HashMap::default(),
@@ -121,8 +121,7 @@ pub async fn resolve_parseable_metadata(
121121
// overwrite staging anyways so that it matches remote in case of any divergence
122122
overwrite_staging = true;
123123
if CONFIG.parseable.mode == Mode::All {
124-
standalone_after_distributed(Mode::from_string(&metadata.server_mode).expect("mode should be valid here"))
125-
?;
124+
standalone_after_distributed(metadata.server_mode)?;
126125
}
127126
Ok(metadata)
128127
},
@@ -132,10 +131,7 @@ pub async fn resolve_parseable_metadata(
132131
EnvChange::NewStaging(mut metadata) => {
133132
// if server is started in ingest mode,we need to make sure that query mode has been started
134133
// i.e the metadata is updated to reflect the server mode = Query
135-
if Mode::from_string(&metadata.server_mode)
136-
.map_err(ObjectStorageError::Custom)
137-
?
138-
== Mode::All && CONFIG.parseable.mode == Mode::Ingest {
134+
if metadata.server_mode== Mode::All && CONFIG.parseable.mode == Mode::Ingest {
139135
Err("Starting Ingest Mode is not allowed, Since Query Server has not been started yet")
140136
} else {
141137
create_dir_all(CONFIG.staging_dir())?;
@@ -146,21 +142,21 @@ pub async fn resolve_parseable_metadata(
146142
// because staging dir has changed.
147143
match CONFIG.parseable.mode {
148144
Mode::All => {
149-
standalone_after_distributed(Mode::from_string(&metadata.server_mode).expect("mode should be valid at here"))
145+
standalone_after_distributed(metadata.server_mode)
150146
.map_err(|err| {
151147
ObjectStorageError::Custom(err.to_string())
152148
})?;
153149
overwrite_remote = true;
154150
},
155151
Mode::Query => {
156152
overwrite_remote = true;
157-
metadata.server_mode = CONFIG.parseable.mode.to_string();
153+
metadata.server_mode = CONFIG.parseable.mode;
158154
metadata.staging = CONFIG.staging_dir().to_path_buf();
159155
},
160156
Mode::Ingest => {
161157
// if ingest server is started fetch the metadata from remote
162158
// update the server mode for local metadata
163-
metadata.server_mode = CONFIG.parseable.mode.to_string();
159+
metadata.server_mode = CONFIG.parseable.mode;
164160
metadata.staging = CONFIG.staging_dir().to_path_buf();
165161
},
166162
}
@@ -188,7 +184,7 @@ pub async fn resolve_parseable_metadata(
188184
ObjectStorageError::UnhandledError(err)
189185
})?;
190186

191-
metadata.server_mode = CONFIG.parseable.mode.to_string();
187+
metadata.server_mode = CONFIG.parseable.mode;
192188
if overwrite_remote {
193189
put_remote_metadata(&metadata).await?;
194190
}
@@ -208,8 +204,7 @@ fn determine_environment(
208204
(Some(staging), Some(remote)) => {
209205
// if both staging and remote have same deployment id but different server modes
210206
if staging.deployment_id == remote.deployment_id
211-
&& Mode::from_string(&remote.server_mode).expect("server mode is valid here")
212-
== Mode::All
207+
&& remote.server_mode == Mode::All
213208
&& (CONFIG.parseable.mode == Mode::Query || CONFIG.parseable.mode == Mode::Ingest)
214209
{
215210
EnvChange::NewStaging(remote)
@@ -273,7 +268,7 @@ pub async fn put_remote_metadata(metadata: &StorageMetadata) -> Result<(), Objec
273268

274269
pub fn put_staging_metadata(meta: &StorageMetadata) -> io::Result<()> {
275270
let mut staging_metadata = meta.clone();
276-
staging_metadata.server_mode = CONFIG.parseable.mode.to_string();
271+
staging_metadata.server_mode = CONFIG.parseable.mode;
277272
staging_metadata.staging = CONFIG.staging_dir().to_path_buf();
278273
let path = CONFIG.staging_dir().join(PARSEABLE_METADATA_FILE_NAME);
279274
let mut file = OpenOptions::new()

0 commit comments

Comments
 (0)