Skip to content

Commit ea95a4b

Browse files
author
Devdutt Shenoi
committed
refactor: use serde
1 parent a794eb8 commit ea95a4b

File tree

4 files changed

+20
-65
lines changed

4 files changed

+20
-65
lines changed

server/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,

server/src/migration/metadata_migration.rs

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
use base64::Engine;
2020
use rand::distributions::DistString;
21-
use serde_json::{Map, Value as JsonValue};
21+
use serde_json::{json, Map, Value as JsonValue};
2222

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

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

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

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

135126
let roles = metadata.get_mut("roles").unwrap().as_object_mut().unwrap();
@@ -157,10 +148,7 @@ pub fn v4_v5(mut storage_metadata: JsonValue) -> JsonValue {
157148

158149
match metadata.get("server_mode") {
159150
None => {
160-
metadata.insert(
161-
"server_mode".to_string(),
162-
JsonValue::String(CONFIG.parseable.mode.to_string()),
163-
);
151+
metadata.insert("server_mode".to_string(), json!(CONFIG.parseable.mode));
164152
}
165153
Some(JsonValue::String(mode)) => match mode.as_str() {
166154
"Query" => {
@@ -170,10 +158,7 @@ pub fn v4_v5(mut storage_metadata: JsonValue) -> JsonValue {
170158
);
171159
}
172160
"All" => {
173-
metadata.insert(
174-
"server_mode".to_string(),
175-
JsonValue::String(CONFIG.parseable.mode.to_string()),
176-
);
161+
metadata.insert("server_mode".to_string(), json!(CONFIG.parseable.mode));
177162
metadata.insert(
178163
"querier_endpoint".to_string(),
179164
JsonValue::String(CONFIG.parseable.address.clone()),

server/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 {

server/src/storage/store_metadata.rs

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ pub struct StorageMetadata {
5959
pub deployment_id: uid::Uid,
6060
pub users: Vec<User>,
6161
pub streams: Vec<String>,
62-
pub server_mode: String,
62+
pub server_mode: Mode,
6363
#[serde(default)]
6464
pub roles: HashMap<String, Vec<DefaultPrivilege>>,
6565
#[serde(default)]
@@ -93,7 +93,7 @@ impl StorageMetadata {
9393
staging: CONFIG.staging_dir().to_path_buf(),
9494
storage: CONFIG.storage().get_endpoint(),
9595
deployment_id: uid::gen(),
96-
server_mode: CONFIG.parseable.mode.to_string(),
96+
server_mode: CONFIG.parseable.mode,
9797
users: Vec::new(),
9898
streams: Vec::new(),
9999
roles: HashMap::default(),
@@ -140,8 +140,7 @@ pub async fn resolve_parseable_metadata(
140140
// overwrite staging anyways so that it matches remote in case of any divergence
141141
overwrite_staging = true;
142142
if CONFIG.parseable.mode == Mode::All {
143-
standalone_after_distributed(Mode::from_string(&metadata.server_mode).expect("mode should be valid here"))
144-
?;
143+
standalone_after_distributed(metadata.server_mode)?;
145144
}
146145
Ok(metadata)
147146
},
@@ -151,10 +150,7 @@ pub async fn resolve_parseable_metadata(
151150
EnvChange::NewStaging(mut metadata) => {
152151
// if server is started in ingest mode,we need to make sure that query mode has been started
153152
// i.e the metadata is updated to reflect the server mode = Query
154-
if Mode::from_string(&metadata.server_mode)
155-
.map_err(ObjectStorageError::Custom)
156-
?
157-
== Mode::All && CONFIG.parseable.mode == Mode::Ingest {
153+
if metadata.server_mode== Mode::All && CONFIG.parseable.mode == Mode::Ingest {
158154
Err("Starting Ingest Mode is not allowed, Since Query Server has not been started yet")
159155
} else {
160156
create_dir_all(CONFIG.staging_dir())?;
@@ -165,21 +161,21 @@ pub async fn resolve_parseable_metadata(
165161
// because staging dir has changed.
166162
match CONFIG.parseable.mode {
167163
Mode::All => {
168-
standalone_after_distributed(Mode::from_string(&metadata.server_mode).expect("mode should be valid at here"))
164+
standalone_after_distributed(metadata.server_mode)
169165
.map_err(|err| {
170166
ObjectStorageError::Custom(err.to_string())
171167
})?;
172168
overwrite_remote = true;
173169
},
174170
Mode::Query => {
175171
overwrite_remote = true;
176-
metadata.server_mode = CONFIG.parseable.mode.to_string();
172+
metadata.server_mode = CONFIG.parseable.mode;
177173
metadata.staging = CONFIG.staging_dir().to_path_buf();
178174
},
179175
Mode::Ingest => {
180176
// if ingest server is started fetch the metadata from remote
181177
// update the server mode for local metadata
182-
metadata.server_mode = CONFIG.parseable.mode.to_string();
178+
metadata.server_mode = CONFIG.parseable.mode;
183179
metadata.staging = CONFIG.staging_dir().to_path_buf();
184180
},
185181
}
@@ -207,7 +203,7 @@ pub async fn resolve_parseable_metadata(
207203
ObjectStorageError::UnhandledError(err)
208204
})?;
209205

210-
metadata.server_mode = CONFIG.parseable.mode.to_string();
206+
metadata.server_mode = CONFIG.parseable.mode;
211207
if overwrite_remote {
212208
put_remote_metadata(&metadata).await?;
213209
}
@@ -227,8 +223,7 @@ fn determine_environment(
227223
(Some(staging), Some(remote)) => {
228224
// if both staging and remote have same deployment id but different server modes
229225
if staging.deployment_id == remote.deployment_id
230-
&& Mode::from_string(&remote.server_mode).expect("server mode is valid here")
231-
== Mode::All
226+
&& remote.server_mode == Mode::All
232227
&& (CONFIG.parseable.mode == Mode::Query || CONFIG.parseable.mode == Mode::Ingest)
233228
{
234229
EnvChange::NewStaging(remote)
@@ -292,7 +287,7 @@ pub async fn put_remote_metadata(metadata: &StorageMetadata) -> Result<(), Objec
292287

293288
pub fn put_staging_metadata(meta: &StorageMetadata) -> io::Result<()> {
294289
let mut staging_metadata = meta.clone();
295-
staging_metadata.server_mode = CONFIG.parseable.mode.to_string();
290+
staging_metadata.server_mode = CONFIG.parseable.mode;
296291
staging_metadata.staging = CONFIG.staging_dir().to_path_buf();
297292
let path = CONFIG.staging_dir().join(PARSEABLE_METADATA_FILE_NAME);
298293
let mut file = OpenOptions::new()

0 commit comments

Comments
 (0)