Skip to content

Commit 0651ffa

Browse files
authored
Print deployment id in banner (#239)
1 parent 9a5f255 commit 0651ffa

File tree

4 files changed

+36
-42
lines changed

4 files changed

+36
-42
lines changed

server/src/banner.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919

2020
use crossterm::style::Stylize;
2121

22-
use crate::option::Config;
22+
use crate::{option::Config, storage::StorageMetadata};
2323

24-
pub fn print(config: &Config) {
24+
pub fn print(config: &Config, meta: StorageMetadata) {
2525
let scheme = config.parseable.get_scheme();
2626
status_info(config, &scheme);
2727
storage_info(config);
28-
version::print();
28+
version::print(meta.deployment_id);
2929
println!();
3030
}
3131

@@ -79,7 +79,7 @@ pub mod version {
7979
use crossterm::style::Stylize;
8080
use std::fmt;
8181

82-
use crate::utils::update;
82+
use crate::utils::{uid::Uid, update};
8383

8484
pub enum ParseableVersion {
8585
Version(semver::Version),
@@ -95,32 +95,33 @@ pub mod version {
9595
}
9696
}
9797

98-
pub fn print_version(current_version: semver::Version, commit_hash: String) {
98+
pub fn print_version(current_version: semver::Version, commit_hash: String, id: Uid) {
9999
eprint!(
100100
"
101101
{}
102+
Deployment ID: {}
102103
Version: {}
103104
Commit hash: {}
104105
GitHub: https://github.com/parseablehq/parseable
105106
Docs: https://www.parseable.io/docs/introduction",
106107
"About:".to_string().blue().bold(),
108+
id.to_string(),
107109
current_version,
108110
commit_hash
109111
);
110112
}
111113

112-
pub fn print() {
114+
pub fn print(id: Uid) {
113115
// print current version
114116
let current = current();
115117

116118
match current.0 {
117119
ParseableVersion::Version(current_version) => {
118-
print_version(current_version.clone(), current.1);
120+
print_version(current_version.clone(), current.1, id);
119121
// check for latest release, if it cannot be fetched then print error as warn and return
120122
let latest_release = match update::get_latest() {
121123
Ok(latest_release) => latest_release,
122-
Err(e) => {
123-
log::warn!("{}", e);
124+
Err(_) => {
124125
return;
125126
}
126127
};

server/src/main.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ mod validator;
5454

5555
use option::CONFIG;
5656

57-
use crate::storage::resolve_parseable_metadata;
58-
5957
// Global configurations
6058
const MAX_EVENT_PAYLOAD_SIZE: usize = 1024000;
6159
const API_BASE_PATH: &str = "/api";
@@ -64,14 +62,15 @@ const API_VERSION: &str = "v1";
6462
#[actix_web::main]
6563
async fn main() -> anyhow::Result<()> {
6664
env_logger::init();
67-
banner::print(&CONFIG);
6865
CONFIG.validate();
6966
let storage = CONFIG.storage().get_object_store();
7067
CONFIG.validate_storage(&*storage).await;
68+
let metadata = storage::resolve_parseable_metadata().await?;
69+
banner::print(&CONFIG, metadata);
70+
7171
if let Err(e) = metadata::STREAM_INFO.load(&*storage).await {
7272
warn!("could not populate local metadata. {:?}", e);
7373
}
74-
resolve_parseable_metadata().await?;
7574
// track all parquet files already in the data directory
7675
storage::CACHED_FILES.track_parquet();
7776

server/src/storage.rs

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -123,54 +123,48 @@ impl ObjectStoreFormat {
123123
}
124124
}
125125

126-
pub async fn resolve_parseable_metadata() -> Result<(), ObjectStorageError> {
126+
pub async fn resolve_parseable_metadata() -> Result<StorageMetadata, ObjectStorageError> {
127127
let staging_metadata = store_metadata::get_staging_metadata()?;
128128
let storage = CONFIG.storage().get_object_store();
129129
let remote_metadata = storage.get_metadata().await?;
130130

131-
let check = store_metadata::check_metadata_conflict(
132-
staging_metadata.as_ref(),
133-
remote_metadata.as_ref(),
134-
);
131+
let check = store_metadata::check_metadata_conflict(staging_metadata, remote_metadata);
135132

136133
const MISMATCH: &str = "Could not start the server because metadata file found in staging directory does not match one in the storage";
137-
let err: Option<&str> = match check {
138-
EnvChange::None => None,
139-
EnvChange::StagingMismatch => Some(MISMATCH),
140-
EnvChange::StorageMismatch => Some(MISMATCH),
134+
let res: Result<StorageMetadata, &str> = match check {
135+
EnvChange::None(metadata) => Ok(metadata),
136+
EnvChange::StagingMismatch => Err(MISMATCH),
137+
EnvChange::StorageMismatch => Err(MISMATCH),
141138
EnvChange::NewRemote => {
142-
Some("Could not start the server because metadata not found in storage")
139+
Err("Could not start the server because metadata not found in storage")
143140
}
144-
EnvChange::NewStaging => {
141+
EnvChange::NewStaging(mut metadata) => {
145142
create_dir_all(CONFIG.staging_dir())?;
146-
let mut remote_meta = remote_metadata.expect("remote metadata exists");
147-
remote_meta.staging = CONFIG.staging_dir().canonicalize()?;
148-
create_remote_metadata(&remote_meta).await?;
149-
put_staging_metadata(&remote_meta)?;
143+
metadata.staging = CONFIG.staging_dir().canonicalize()?;
144+
create_remote_metadata(&metadata).await?;
145+
put_staging_metadata(&metadata)?;
150146

151-
None
147+
Ok(metadata)
152148
}
153149
EnvChange::CreateBoth => {
154150
create_dir_all(CONFIG.staging_dir())?;
155151
let metadata = StorageMetadata::new();
156152
create_remote_metadata(&metadata).await?;
157153
put_staging_metadata(&metadata)?;
158154

159-
None
155+
Ok(metadata)
160156
}
161157
};
162158

163-
if let Some(err) = err {
159+
res.map_err(|err| {
164160
let err = format!(
165161
"{}. {}",
166162
err,
167163
"Join us on Parseable Slack to report this incident : https://launchpass.com/parseable"
168164
);
169165
let err: Box<dyn std::error::Error + Send + Sync + 'static> = err.into();
170-
Err(ObjectStorageError::UnhandledError(err))
171-
} else {
172-
Ok(())
173-
}
166+
ObjectStorageError::UnhandledError(err)
167+
})
174168
}
175169

176170
async fn create_remote_metadata(metadata: &StorageMetadata) -> Result<(), ObjectStorageError> {

server/src/storage/store_metadata.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ impl StorageMetadata {
6262
}
6363

6464
pub fn check_metadata_conflict(
65-
staging_metadata: Option<&StorageMetadata>,
66-
remote_metadata: Option<&StorageMetadata>,
65+
staging_metadata: Option<StorageMetadata>,
66+
remote_metadata: Option<StorageMetadata>,
6767
) -> EnvChange {
6868
match (staging_metadata, remote_metadata) {
6969
(Some(staging), Some(remote)) if staging.mode == remote.mode => {
@@ -72,23 +72,23 @@ pub fn check_metadata_conflict(
7272
} else if staging.staging != remote.staging {
7373
EnvChange::StagingMismatch
7474
} else {
75-
EnvChange::None
75+
EnvChange::None(staging)
7676
}
7777
}
7878
(Some(staging), Some(remote)) if staging.mode != remote.mode => EnvChange::StorageMismatch,
7979
(None, None) => EnvChange::CreateBoth,
80-
(None, Some(_)) => EnvChange::NewStaging,
80+
(None, Some(remote)) => EnvChange::NewStaging(remote),
8181
(Some(_), None) => EnvChange::NewRemote,
8282
_ => unreachable!(),
8383
}
8484
}
85-
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
85+
#[derive(Debug, Clone, PartialEq, Eq)]
8686
pub enum EnvChange {
87-
None,
87+
None(StorageMetadata),
8888
StagingMismatch,
8989
StorageMismatch,
9090
NewRemote,
91-
NewStaging,
91+
NewStaging(StorageMetadata),
9292
CreateBoth,
9393
}
9494

0 commit comments

Comments
 (0)