Skip to content

Commit 9e601ab

Browse files
fix for #573: corrected error message in case of deployment mismatch
data directory creation should not happen in case of deployment mismatch staging should be overwritten in case of new staging
1 parent 0614298 commit 9e601ab

File tree

4 files changed

+8
-28
lines changed

4 files changed

+8
-28
lines changed

server/src/migration.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,7 @@ use crate::{
3535
pub async fn run_metadata_migration(config: &Config) -> anyhow::Result<()> {
3636
let object_store = config.storage().get_object_store();
3737
let storage_metadata = get_storage_metadata(&*object_store).await?;
38-
println!("storage_metadata in run_metadata_migration: {:?}", storage_metadata);
3938
let staging_metadata = get_staging_metadata(config)?;
40-
println!("staging_metadata in run_metadata_migration: {:?}", staging_metadata);
4139

4240
fn get_version(metadata: &serde_json::Value) -> Option<&str> {
4341
metadata

server/src/option.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,13 @@ impl Config {
4848
let server = match Server::from_arg_matches(m) {
4949

5050
Ok(server) => {
51-
println!("server: {:?}", server);
5251
server
5352
},
5453
Err(err) => err.exit(),
5554
};
5655
let storage = match FSConfig::from_arg_matches(m) {
5756

5857
Ok(storage) => {
59-
println!("storage: {:?}", storage);
6058
storage
6159
},
6260
Err(err) => err.exit(),
@@ -89,14 +87,12 @@ impl Config {
8987
Some(("s3-store", m)) => {
9088
let server = match Server::from_arg_matches(m) {
9189
Ok(server) => {
92-
println!("server: {:?}", server);
9390
server
9491
},
9592
Err(err) => err.exit(),
9693
};
9794
let storage = match S3Config::from_arg_matches(m) {
9895
Ok(storage) => {
99-
println!("storage: {:?}", storage);
10096
storage
10197
},
10298
Err(err) => err.exit(),

server/src/storage/localfs.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ use tokio::fs::{self, DirEntry};
3232
use tokio_stream::wrappers::ReadDirStream;
3333

3434
use crate::metrics::storage::{localfs::REQUEST_RESPONSE_TIME, StorageMetrics};
35-
use crate::{option::validation, utils::validate_path_is_writeable};
35+
use crate::utils::validate_path_is_writeable;
3636

3737
use super::{object_storage, LogStream, ObjectStorage, ObjectStorageError, ObjectStorageProvider};
3838

@@ -49,8 +49,7 @@ pub struct FSConfig {
4949
#[arg(
5050
env = "P_FS_DIR",
5151
value_name = "filesystem path",
52-
default_value = "./data",
53-
value_parser = validation::canonicalize_path
52+
default_value = "./data"
5453
)]
5554
pub root: PathBuf,
5655
}
@@ -120,7 +119,6 @@ impl ObjectStorage for LocalFS {
120119
let path = self.path_in_root(path);
121120
if let Some(parent) = path.parent() {
122121
fs::create_dir_all(parent).await?;
123-
println!("created dir {:?}", parent);
124122
}
125123
let res = fs::write(path, resource).await;
126124

@@ -141,7 +139,6 @@ impl ObjectStorage for LocalFS {
141139

142140
async fn check(&self) -> Result<(), ObjectStorageError> {
143141
fs::create_dir_all(&self.root).await?;
144-
println!("created dir self.root {:?}", &self.root);
145142
validate_path_is_writeable(&self.root)
146143
.map_err(|e| ObjectStorageError::UnhandledError(e.into()))
147144
}
@@ -189,9 +186,9 @@ impl ObjectStorage for LocalFS {
189186
};
190187
let to_path = self.root.join(key);
191188
if let Some(path) = to_path.parent() {
192-
println!("created dir path {:?}", &path);
193-
fs::create_dir_all(path).await?
194189

190+
fs::create_dir_all(path).await?;
191+
195192
}
196193
let _ = fs_extra::file::copy(path, to_path, &op)?;
197194
Ok(())

server/src/storage/store_metadata.rs

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -96,19 +96,11 @@ impl StorageMetadata {
9696
// overwrites staging metadata while updating storage info
9797
pub async fn resolve_parseable_metadata() -> Result<StorageMetadata, ObjectStorageError> {
9898
let staging_metadata = get_staging_metadata()?;
99-
println!("staging metadata in resolve_parseable_metadata: {:?}", staging_metadata);
10099
let storage = CONFIG.storage().get_object_store();
101100
let remote_metadata = storage.get_metadata().await?;
102-
println!("remote metadata in resolve_parseable_metadata: {:?}", remote_metadata);
103101

104102
let check = match (staging_metadata, remote_metadata) {
105-
(Some(staging), Some(remote)) => {
106-
if staging.deployment_id == remote.deployment_id {
107-
EnvChange::None(remote)
108-
} else {
109-
EnvChange::DeploymentMismatch
110-
}
111-
}
103+
(Some(_staging), Some(remote)) => EnvChange::None(remote),
112104
(None, Some(remote)) => EnvChange::NewStaging(remote),
113105
(Some(_), None) => EnvChange::NewRemote,
114106
(None, None) => EnvChange::CreateBoth,
@@ -118,16 +110,14 @@ pub async fn resolve_parseable_metadata() -> Result<StorageMetadata, ObjectStora
118110
let mut overwrite_staging = false;
119111
let mut overwrite_remote = false;
120112

121-
const MISMATCH: &str = "Could not start the server because metadata file found in staging directory does not match one in the storage";
122113
let res = match check {
123114
EnvChange::None(metadata) => {
124115
// overwrite staging anyways so that it matches remote in case of any divergence
125116
overwrite_staging = true;
126117
Ok(metadata)
127-
}
128-
EnvChange::DeploymentMismatch => Err(MISMATCH),
118+
},
129119
EnvChange::NewRemote => {
130-
Err("Could not start the server because metadata not found in storage")
120+
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")
131121
}
132122
EnvChange::NewStaging(mut metadata) => {
133123
create_dir_all(CONFIG.staging_dir())?;
@@ -173,9 +163,8 @@ pub async fn resolve_parseable_metadata() -> Result<StorageMetadata, ObjectStora
173163
#[derive(Debug, Clone, PartialEq, Eq)]
174164
pub enum EnvChange {
175165
/// No change in env i.e both staging and remote have same id
166+
/// or deployment id of staging is not matching with that of remote
176167
None(StorageMetadata),
177-
/// Mismatch in deployment id. Cannot use this staging for this remote
178-
DeploymentMismatch,
179168
/// Metadata not found in storage. Treated as possible misconfiguration on user side.
180169
NewRemote,
181170
/// If a new staging is found then we just copy remote metadata to this staging.

0 commit comments

Comments
 (0)