From 51d7c84e7327b14f84522a1f5521f6d98c398a6f Mon Sep 17 00:00:00 2001 From: mpostma Date: Wed, 24 Jun 2020 16:06:04 +0200 Subject: [PATCH] better exit on error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update meilisearch-core/src/database.rs Co-authored-by: Clément Renault Update meilisearch-core/src/database.rs Co-authored-by: Clément Renault --- meilisearch-core/src/database.rs | 8 ++++---- meilisearch-core/src/error.rs | 6 +++++- meilisearch-http/src/data.rs | 14 ++++---------- meilisearch-http/src/main.rs | 2 +- meilisearch-http/tests/common.rs | 2 +- 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/meilisearch-core/src/database.rs b/meilisearch-core/src/database.rs index 5510331a1..07fc6840f 100644 --- a/meilisearch-core/src/database.rs +++ b/meilisearch-core/src/database.rs @@ -180,15 +180,15 @@ fn version_guard(path: &Path, create: bool) -> MResult<()> { let version_minor = version.next().ok_or(Error::VersionMismatch("bad VERSION file".to_string()))?; if version_major != current_version_major || version_minor != current_version_minor { - return Err(Error::VersionMismatch(format!("{}.{}.XX", version_major, version_major))); + return Err(Error::VersionMismatch(format!("{}.{}.XX", version_major, version_minor))); } } Err(error) => { match error.kind() { ErrorKind::NotFound => { if create { - // when no version file is found, and we've beem told to create one, - // create a new file wioth the current version in it. + // when no version file is found, and we've been told to create one, + // create a new file with the current version in it. let mut version_file = File::create(&version_path)?; version_file.write_all(format!("{}.{}.{}", current_version_major, @@ -196,7 +196,7 @@ fn version_guard(path: &Path, create: bool) -> MResult<()> { current_version_patch).as_bytes())?; } else { // when no version file is found and we were not told to create one, this - // means that the version is inferior to the one this feature was added. + // means that the version is inferior to the one this feature was added in. return Err(Error::VersionMismatch(format!("<0.12.0"))); } } diff --git a/meilisearch-core/src/error.rs b/meilisearch-core/src/error.rs index 379dbd8ff..cf6340bff 100644 --- a/meilisearch-core/src/error.rs +++ b/meilisearch-core/src/error.rs @@ -158,7 +158,11 @@ impl fmt::Display for Error { SchemaMissing => write!(f, "this index does not have a schema"), SerdeJson(e) => write!(f, "serde json error; {}", e), Serializer(e) => write!(f, "serializer error; {}", e), - VersionMismatch(version) => write!(f, "Cannot open database, expected Meilisearch version: {}", version), + VersionMismatch(version) => write!(f, "Cannot open database, expected MeiliSearch engine version: {}, currrent engine version: {}.{}.{}", + version, + env!("CARGO_PKG_VERSION_MAJOR"), + env!("CARGO_PKG_VERSION_MINOR"), + env!("CARGO_PKG_VERSION_PATCH")), WordIndexMissing => write!(f, "this index does not have a word index"), } } diff --git a/meilisearch-http/src/data.rs b/meilisearch-http/src/data.rs index 04151d3cb..3460b6bc1 100644 --- a/meilisearch-http/src/data.rs +++ b/meilisearch-http/src/data.rs @@ -1,10 +1,10 @@ +use std::error::Error; use std::ops::Deref; use std::sync::Arc; use meilisearch_core::{Database, DatabaseOptions}; use sha2::Digest; use sysinfo::Pid; -use log::error; use crate::index_update_callback; use crate::option::Opt; @@ -56,7 +56,7 @@ impl ApiKeys { } impl Data { - pub fn new(opt: Opt) -> Data { + pub fn new(opt: Opt) -> Result> { let db_path = opt.db_path.clone(); let server_pid = sysinfo::get_current_pid().unwrap(); @@ -67,13 +67,7 @@ impl Data { let http_payload_size_limit = opt.http_payload_size_limit; - let db = match Database::open_or_create(opt.db_path, db_opt) { - Ok(db) => Arc::new(db), - Err(e) => { - error!("{}", e); - std::process::exit(1); - } - }; + let db = Arc::new(Database::open_or_create(opt.db_path, db_opt)?); let mut api_keys = ApiKeys { master: opt.master_key, @@ -100,6 +94,6 @@ impl Data { index_update_callback(&index_uid, &callback_context, status); })); - data + Ok(data) } } diff --git a/meilisearch-http/src/main.rs b/meilisearch-http/src/main.rs index ec211c6ae..13ce99d57 100644 --- a/meilisearch-http/src/main.rs +++ b/meilisearch-http/src/main.rs @@ -51,7 +51,7 @@ async fn main() -> Result<(), MainError> { _ => unreachable!(), } - let data = Data::new(opt.clone()); + let data = Data::new(opt.clone())?; if !opt.no_analytics { let analytics_data = data.clone(); diff --git a/meilisearch-http/tests/common.rs b/meilisearch-http/tests/common.rs index 9d63cf8b5..1906ab44f 100644 --- a/meilisearch-http/tests/common.rs +++ b/meilisearch-http/tests/common.rs @@ -50,7 +50,7 @@ impl Server { ..Opt::default() }; - let data = Data::new(opt.clone()); + let data = Data::new(opt.clone()).unwrap(); Server { uid: uid.to_string(),