Skip to content

Commit 4eb49da

Browse files
refactor
1 parent 4e9f305 commit 4eb49da

File tree

1 file changed

+30
-40
lines changed

1 file changed

+30
-40
lines changed

src/storage/store_metadata.rs

Lines changed: 30 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -116,21 +116,19 @@ pub async fn resolve_parseable_metadata(
116116
let mut overwrite_staging = false;
117117
let mut overwrite_remote = false;
118118

119-
let res = match check {
119+
let res: Result<StorageMetadata, &'static str> = match check {
120120
EnvChange::None(mut metadata) => {
121121
// overwrite staging anyways so that it matches remote in case of any divergence
122122
overwrite_staging = true;
123123
match PARSEABLE.options.mode {
124124
Mode::All => {
125125
metadata.server_mode.standalone_after_distributed()?;
126126
overwrite_remote = true;
127-
metadata.server_mode = PARSEABLE.options.mode;
128-
metadata.staging = PARSEABLE.options.staging_dir().to_path_buf();
127+
update_metadata_mode_and_staging(&mut metadata);
129128
}
130129
Mode::Query => {
131130
overwrite_remote = true;
132-
metadata.server_mode = PARSEABLE.options.mode;
133-
metadata.staging = PARSEABLE.options.staging_dir().to_path_buf();
131+
update_metadata_mode_and_staging(&mut metadata);
134132
}
135133
_=> {}
136134
}
@@ -143,46 +141,33 @@ pub async fn resolve_parseable_metadata(
143141
Err("Could not start the server because staging directory indicates stale data from previous deployment, please choose an empty staging directory and restart the server")
144142
}
145143
EnvChange::NewStaging(mut metadata) => {
146-
147-
// if server is started in ingest mode,we need to make sure that query mode has been started
148-
// i.e the metadata is updated to reflect the server mode = Query
149-
if metadata.server_mode== Mode::All && PARSEABLE.options.mode == Mode::Ingest {
150-
Err("Starting Ingest Mode is not allowed, Since Query Server has not been started yet")
151-
} else {
152-
create_dir_all(PARSEABLE.options.staging_dir())?;
153-
metadata.staging = PARSEABLE.options.staging_dir().canonicalize()?;
144+
// If server is started in ingest mode, ensure query mode has been started
145+
if metadata.server_mode == Mode::All && PARSEABLE.options.mode == Mode::Ingest {
146+
return Err(ObjectStorageError::UnhandledError(format!(
147+
"Starting Ingest Mode is not allowed, Since Query Server has not been started yet. {}",
148+
JOIN_COMMUNITY
149+
).into()));
150+
}
151+
create_dir_all(PARSEABLE.options.staging_dir())?;
152+
metadata.staging = PARSEABLE.options.staging_dir().canonicalize()?;
154153
// this flag is set to true so that metadata is copied to staging
155-
overwrite_staging = true;
156-
// overwrite remote in all and query mode
157-
// because staging dir has changed.
158-
match PARSEABLE.options.mode {
159-
Mode::All => {
160-
metadata.server_mode.standalone_after_distributed()
161-
.map_err(|err| {
162-
ObjectStorageError::Custom(err.to_string())
163-
})?;
164-
overwrite_remote = true;
165-
},
166-
Mode::Query | Mode::Prism => {
154+
overwrite_staging = true;
155+
// overwrite remote in all and query mode
156+
// because staging dir has changed.
157+
match PARSEABLE.options.mode {
158+
Mode::All => {
159+
metadata.server_mode.standalone_after_distributed()
160+
.map_err(|err| ObjectStorageError::Custom(err.to_string()))?;
161+
overwrite_remote = true;
162+
}
163+
Mode::Query | Mode::Prism | Mode::Ingest | Mode::Index => {
164+
update_metadata_mode_and_staging(&mut metadata);
165+
if matches!(PARSEABLE.options.mode, Mode::Query | Mode::Prism) {
167166
overwrite_remote = true;
168-
metadata.server_mode = PARSEABLE.options.mode;
169-
metadata.staging = PARSEABLE.options.staging_dir().to_path_buf();
170-
},
171-
Mode::Ingest => {
172-
// if ingest server is started fetch the metadata from remote
173-
// update the server mode for local metadata
174-
metadata.server_mode = PARSEABLE.options.mode;
175-
metadata.staging = PARSEABLE.options.staging_dir().to_path_buf();
176-
},
177-
Mode::Index => {
178-
// if index server is started fetch the metadata from remote
179-
// update the server mode for local metadata
180-
metadata.server_mode = PARSEABLE.options.mode;
181-
metadata.staging = PARSEABLE.options.staging_dir().to_path_buf();
182167
}
183168
}
184-
Ok(metadata)
185169
}
170+
Ok(metadata)
186171
}
187172
EnvChange::CreateBoth => {
188173
create_dir_all(PARSEABLE.options.staging_dir())?;
@@ -217,6 +202,11 @@ pub async fn resolve_parseable_metadata(
217202
Ok(metadata)
218203
}
219204

205+
fn update_metadata_mode_and_staging(metadata: &mut StorageMetadata) {
206+
metadata.server_mode = PARSEABLE.options.mode;
207+
metadata.staging = PARSEABLE.options.staging_dir().to_path_buf();
208+
}
209+
220210
pub fn determine_environment(
221211
staging_metadata: Option<StorageMetadata>,
222212
remote_metadata: Option<StorageMetadata>,

0 commit comments

Comments
 (0)