From 3839f730a68757e3db7609c24804a6054ac28c39 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Thu, 28 Jul 2016 14:59:09 +0800 Subject: [PATCH] kv/MemDB: allow _load() to passed out result to caller The _load() process can fail. By detecting there error cases earlier, we can avoid other weird failure cases later. Signed-off-by: xie xingguo --- src/kv/MemDB.cc | 19 +++++++++++-------- src/kv/MemDB.h | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/kv/MemDB.cc b/src/kv/MemDB.cc index 5831e03cc315..a84375375d33 100644 --- a/src/kv/MemDB.cc +++ b/src/kv/MemDB.cc @@ -87,7 +87,7 @@ void MemDB::_save() VOID_TEMP_FAILURE_RETRY(::close(fd)); } -void MemDB::_load() +int MemDB::_load() { std::lock_guard l(m_lock); dout(10) << __func__ << " Reading MemDB from file: "<< _get_data_fn().c_str() << dendl; @@ -99,7 +99,7 @@ void MemDB::_load() int err = errno; cerr << "can't open " << _get_data_fn().c_str() << ": " << cpp_strerror(err) << std::endl; - return; + return -err; } struct stat st; @@ -109,7 +109,7 @@ void MemDB::_load() cerr << "can't stat file " << _get_data_fn().c_str() << ": " << cpp_strerror(err) << std::endl; VOID_TEMP_FAILURE_RETRY(::close(fd)); - return; + return -err; } ssize_t file_size = st.st_size; @@ -126,25 +126,28 @@ void MemDB::_load() m_total_bytes += datap.length(); } VOID_TEMP_FAILURE_RETRY(::close(fd)); + return 0; } int MemDB::_init(bool create) { + int r; dout(1) << __func__ << dendl; if (create) { - int r = ::mkdir(m_db_path.c_str(), 0700); + r = ::mkdir(m_db_path.c_str(), 0700); if (r < 0) { r = -errno; if (r != -EEXIST) { derr << __func__ << " mkdir failed: " << cpp_strerror(r) << dendl; return r; } + return 0; // ignore EEXIST } - } else { - _load(); - } + } else { + r = _load(); + } - return 0; + return r; } int MemDB::set_merge_operator( diff --git a/src/kv/MemDB.h b/src/kv/MemDB.h index ab7726bbb8eb..ee276431fc24 100644 --- a/src/kv/MemDB.h +++ b/src/kv/MemDB.h @@ -47,7 +47,7 @@ class MemDB : public KeyValueDB std::string _get_data_fn(); void _encode(btree::btree_map:: iterator iter, bufferlist &bl); void _save(); - void _load(); + int _load(); public: MemDB(CephContext *c, const string &path, void *p) : -- 2.47.3