@@ -116,21 +116,19 @@ pub async fn resolve_parseable_metadata(
116
116
let mut overwrite_staging = false ;
117
117
let mut overwrite_remote = false ;
118
118
119
- let res = match check {
119
+ let res: Result < StorageMetadata , & ' static str > = match check {
120
120
EnvChange :: None ( mut metadata) => {
121
121
// overwrite staging anyways so that it matches remote in case of any divergence
122
122
overwrite_staging = true ;
123
123
match PARSEABLE . options . mode {
124
124
Mode :: All => {
125
125
metadata. server_mode . standalone_after_distributed ( ) ?;
126
126
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) ;
129
128
}
130
129
Mode :: Query => {
131
130
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) ;
134
132
}
135
133
_=> { }
136
134
}
@@ -143,46 +141,33 @@ pub async fn resolve_parseable_metadata(
143
141
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" )
144
142
}
145
143
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 ( ) ?;
154
153
// 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 ) {
167
166
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 ( ) ;
182
167
}
183
168
}
184
- Ok ( metadata)
185
169
}
170
+ Ok ( metadata)
186
171
}
187
172
EnvChange :: CreateBoth => {
188
173
create_dir_all ( PARSEABLE . options . staging_dir ( ) ) ?;
@@ -217,6 +202,11 @@ pub async fn resolve_parseable_metadata(
217
202
Ok ( metadata)
218
203
}
219
204
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
+
220
210
pub fn determine_environment (
221
211
staging_metadata : Option < StorageMetadata > ,
222
212
remote_metadata : Option < StorageMetadata > ,
0 commit comments