@@ -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+
220210pub fn determine_environment (
221211 staging_metadata : Option < StorageMetadata > ,
222212 remote_metadata : Option < StorageMetadata > ,
0 commit comments