int Dumper::recover_journal(Journaler *journaler)
{
C_SaferCond cond;
- lock.Lock();
+ lock.lock();
journaler->recover(&cond);
- lock.Unlock();
+ lock.unlock();
const int r = cond.wait();
if (r < 0) { // Error
const uint32_t read_size = std::min<uint64_t>(chunk_size, end - pos);
C_SaferCond cond;
- lock.Lock();
+ lock.lock();
filer.read(ino, &journaler.get_layout(), CEPH_NOSNAP,
pos, read_size, &bl, 0, &cond);
- lock.Unlock();
+ lock.unlock();
r = cond.wait();
if (r < 0) {
derr << "Error " << r << " (" << cpp_strerror(r) << ") reading "
cout << "writing header " << oid << std::endl;
C_SaferCond header_cond;
- lock.Lock();
+ lock.lock();
objecter->write_full(oid, oloc, snapc, hbl,
ceph::real_clock::now(), 0,
&header_cond);
- lock.Unlock();
+ lock.unlock();
r = header_cond.wait();
if (r != 0) {
}
C_SaferCond purge_cond;
cout << "Purging " << purge_count << " objects from " << last_obj << std::endl;
- lock.Lock();
+ lock.lock();
filer.purge_range(ino, &h.layout, snapc, last_obj, purge_count,
ceph::real_clock::now(), 0, &purge_cond);
- lock.Unlock();
+ lock.unlock();
purge_cond.wait();
}
/* When the length is zero, zero the last object
C_SaferCond zero_cond;
cout << "Zeroing " << len << " bytes in the last object." << std::endl;
- lock.Lock();
+ lock.lock();
filer.zero(ino, &h.layout, snapc, h.write_pos, len, ceph::real_clock::now(), 0, &zero_cond);
- lock.Unlock();
+ lock.unlock();
zero_cond.wait();
}
// Write
cout << " writing " << pos << "~" << l << std::endl;
C_SaferCond write_cond;
- lock.Lock();
+ lock.lock();
filer.write(ino, &h.layout, snapc, pos, l, j,
ceph::real_clock::now(), 0, &write_cond);
- lock.Unlock();
+ lock.unlock();
r = write_cond.wait();
if (r != 0) {
MDSUtility::MDSUtility() :
Dispatcher(g_ceph_context),
objecter(NULL),
- lock("MDSUtility::lock"),
finisher(g_ceph_context, "MDSUtility", "fn_mds_utility"),
waiting_for_mds_map(NULL),
inited(false)
objecter->wait_for_osd_map();
// Prepare to receive MDS map and request it
- Mutex init_lock("MDSUtility:init");
- Cond cond;
+ ceph::mutex init_lock = ceph::make_mutex("MDSUtility:init");
+ ceph::condition_variable cond;
bool done = false;
ceph_assert(!fsmap->get_epoch());
- lock.Lock();
- waiting_for_mds_map = new C_SafeCond(&init_lock, &cond, &done, NULL);
- lock.Unlock();
+ lock.lock();
+ waiting_for_mds_map = new C_SafeCond(init_lock, cond, &done, NULL);
+ lock.unlock();
monc->sub_want("fsmap", 0, CEPH_SUBSCRIBE_ONETIME);
monc->renew_subs();
// Wait for MDS map
dout(4) << "waiting for MDS map..." << dendl;
- init_lock.Lock();
- while (!done)
- cond.Wait(init_lock);
- init_lock.Unlock();
+ {
+ std::unique_lock locker{init_lock};
+ cond.wait(locker, [&done] { return done; });
+ }
dout(4) << "Got MDS map " << fsmap->get_epoch() << dendl;
finisher.start();
{
finisher.stop();
- lock.Lock();
+ lock.lock();
objecter->shutdown();
- lock.Unlock();
+ lock.unlock();
monc->shutdown();
messenger->shutdown();
messenger->wait();
bool MDSUtility::ms_dispatch(Message *m)
{
- Mutex::Locker locker(lock);
+ std::lock_guard locker{lock};
switch (m->get_type()) {
case CEPH_MSG_FS_MAP:
handle_fs_map((MFSMap*)m);
Messenger *messenger;
MonClient *monc;
- Mutex lock;
+ ceph::mutex lock = ceph::make_mutex("MDSUtility::lock");
Finisher finisher;
Context *waiting_for_mds_map;
int Resetter::reset()
{
- Mutex mylock("Resetter::reset::lock");
- Cond cond;
+ ceph::mutex mylock = ceph::make_mutex("Resetter::reset::lock");
+ ceph::condition_variable cond;
bool done;
int r;
fs->mds_map.get_metadata_pool(),
CEPH_FS_ONDISK_MAGIC,
objecter, 0, 0, &finisher);
-
- lock.Lock();
- journaler.recover(new C_SafeCond(&mylock, &cond, &done, &r));
- lock.Unlock();
-
- mylock.Lock();
- while (!done)
- cond.Wait(mylock);
- mylock.Unlock();
-
+ {
+ std::lock_guard locker{lock};
+ journaler.recover(new C_SafeCond(mylock, cond, &done, &r));
+ }
+ {
+ std::unique_lock locker{mylock};
+ cond.wait(locker, [&done] { return done; });
+ }
if (r != 0) {
if (r == -ENOENT) {
cerr << "journal does not exist on-disk. Did you set a bad rank?"
}
}
- lock.Lock();
+ lock.lock();
uint64_t old_start = journaler.get_read_pos();
uint64_t old_end = journaler.get_write_pos();
uint64_t old_len = old_end - old_start;
journaler.set_writeable();
cout << "writing journal head" << std::endl;
- journaler.write_head(new C_SafeCond(&mylock, &cond, &done, &r));
- lock.Unlock();
-
- mylock.Lock();
- while (!done)
- cond.Wait(mylock);
- mylock.Unlock();
-
- Mutex::Locker l(lock);
+ journaler.write_head(new C_SafeCond(mylock, cond, &done, &r));
+ lock.unlock();
+ {
+ std::unique_lock locker{mylock};
+ cond.wait(locker, [&done] { return done; });
+ }
+ std::lock_guard l{lock};
if (r != 0) {
return r;
}
C_SaferCond cond;
{
- Mutex::Locker l(lock);
+ std::lock_guard l{lock};
journaler.write_head(&cond);
}
if (is_mdlog) // reset event is specific for mdlog journal
{
- Mutex::Locker l(lock);
+ std::lock_guard l{lock};
r = _write_reset_event(&journaler);
if (r != 0) {
derr << "Error writing EResetJournal: " << cpp_strerror(r) << dendl;