From: xie xingguo Date: Thu, 28 Jul 2016 06:59:09 +0000 (+0800) Subject: kv/MemDB: allow _load() to passed out result to caller X-Git-Tag: ses5-milestone5~238^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F10471%2Fhead;p=ceph.git 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 --- diff --git a/src/kv/MemDB.cc b/src/kv/MemDB.cc index 5831e03cc31..a84375375d3 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 ab7726bbb8e..ee276431fc2 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) :