diff --git a/ng-repo/src/errors.rs b/ng-repo/src/errors.rs index 8f67688..d67eea5 100644 --- a/ng-repo/src/errors.rs +++ b/ng-repo/src/errors.rs @@ -218,6 +218,7 @@ pub enum StorageError { OverlayBranchNotFound, Abort, NotEmpty, + ServerAlreadyRunningInOtherProcess, } impl core::fmt::Display for StorageError { diff --git a/ng-storage-rocksdb/src/block_storage.rs b/ng-storage-rocksdb/src/block_storage.rs index 33d394e..66675f0 100644 --- a/ng-storage-rocksdb/src/block_storage.rs +++ b/ng-storage-rocksdb/src/block_storage.rs @@ -79,7 +79,14 @@ impl RocksDbBlockStorage { let env = Env::enc_env(key).unwrap(); opts.set_env(&env); let tx_options = TransactionDBOptions::new(); - let db: TransactionDB = TransactionDB::open(&opts, &tx_options, &path).unwrap(); + let db: TransactionDB = TransactionDB::open(&opts, &tx_options, &path).map_err(|e| { + log_err!("{e}"); + if e.into_string().starts_with("IO error: While lock file") { + StorageError::ServerAlreadyRunningInOtherProcess + } else { + StorageError::BackendError + } + })?; log_info!( "created blockstorage with Rocksdb Version: {}", diff --git a/ng-storage-rocksdb/src/kcv_storage.rs b/ng-storage-rocksdb/src/kcv_storage.rs index 7d9a253..b497c30 100644 --- a/ng-storage-rocksdb/src/kcv_storage.rs +++ b/ng-storage-rocksdb/src/kcv_storage.rs @@ -702,7 +702,14 @@ impl RocksDbKCVStorage { // TODO: use open_cf and choose which column family to create/ versus using set_prefix_extractor and doing prefix seek let tx_options = TransactionDBOptions::new(); - let db: TransactionDB = TransactionDB::open(&opts, &tx_options, &path).unwrap(); + let db: TransactionDB = TransactionDB::open(&opts, &tx_options, &path).map_err(|e| { + log_err!("{e}"); + if e.into_string().starts_with("IO error: While lock file") { + StorageError::ServerAlreadyRunningInOtherProcess + } else { + StorageError::BackendError + } + })?; log_info!( "created kcv storage with Rocksdb Version: {}",