]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kv/MemDB: allow _load() to passed out result to caller 10471/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Thu, 28 Jul 2016 06:59:09 +0000 (14:59 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Thu, 28 Jul 2016 08:30:03 +0000 (16:30 +0800)
The _load() process can fail. By detecting there error
cases earlier, we can avoid other weird failure cases
later.

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/kv/MemDB.cc
src/kv/MemDB.h

index 5831e03cc315a1a0b2d463fb79d4f9d418bc074f..a84375375d331ba101949cd70fe9219c9c21aa3c 100644 (file)
@@ -87,7 +87,7 @@ void MemDB::_save()
   VOID_TEMP_FAILURE_RETRY(::close(fd));
 }
 
-void MemDB::_load()
+int MemDB::_load()
 {
   std::lock_guard<std::mutex> 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(
index ab7726bbb8eb9d46add37773966d647acd6f6736..ee276431fc2403377ac4afbac54455d8352c61a4 100644 (file)
@@ -47,7 +47,7 @@ class MemDB : public KeyValueDB
   std::string _get_data_fn();
   void _encode(btree::btree_map<string, bufferptr>:: iterator iter, bufferlist &bl);
   void _save();
-  void _load();
+  int _load();
 
 public:
   MemDB(CephContext *c, const string &path, void *p) :