Skip to content

Commit

Permalink
Merge pull request #10471 from xiexingguo/xxg-wip-fix-memdb-assert
Browse files Browse the repository at this point in the history
kv/MemDB: fix assert triggerred by m_total_bytes underflow
  • Loading branch information
yuriw committed Aug 1, 2016
2 parents a602346 + 3839f73 commit 4f5e4df
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 11 deletions.
24 changes: 14 additions & 10 deletions src/kv/MemDB.cc
Expand Up @@ -76,19 +76,19 @@ void MemDB::_save()
<< cpp_strerror(err) << std::endl;
return;
}
bufferlist bl;
btree::btree_map<string, bufferptr>::iterator iter = m_btree.begin();
while (iter != m_btree.end()) {
bufferlist bl;
dout(10) << __func__ << " Key:"<< iter->first << dendl;
_encode(iter, bl);
bl.write_fd(fd);
iter++;
}
bl.write_fd(fd);

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;
Expand All @@ -100,7 +100,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;
Expand All @@ -110,7 +110,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;
Expand All @@ -124,27 +124,31 @@ void MemDB::_load()

dout(10) << __func__ << " Key:"<< key << dendl;
m_btree[key] = datap;
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(
Expand Down
2 changes: 1 addition & 1 deletion src/kv/MemDB.h
Expand Up @@ -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) :
Expand Down

0 comments on commit 4f5e4df

Please sign in to comment.