X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Ftools%2Fcephfs%2FResetter.cc;fp=src%2Fceph%2Fsrc%2Ftools%2Fcephfs%2FResetter.cc;h=0000000000000000000000000000000000000000;hb=7da45d65be36d36b880cc55c5036e96c24b53f00;hp=58465c2ffc79ed3458afe2d90a5cf1f58ddee8cf;hpb=691462d09d0987b47e112d6ee8740375df3c51b2;p=stor4nfv.git diff --git a/src/ceph/src/tools/cephfs/Resetter.cc b/src/ceph/src/tools/cephfs/Resetter.cc deleted file mode 100644 index 58465c2..0000000 --- a/src/ceph/src/tools/cephfs/Resetter.cc +++ /dev/null @@ -1,181 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab -/* - * Ceph - scalable distributed file system - * - * Copyright (C) 2010 Greg Farnum - * - * This is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software - * Foundation. See file COPYING. - * - */ - -#include "common/errno.h" -#include "osdc/Journaler.h" -#include "mds/JournalPointer.h" - -#include "mds/mdstypes.h" -#include "mds/MDCache.h" -#include "mon/MonClient.h" -#include "mds/events/EResetJournal.h" - -#include "Resetter.h" - -#define dout_context g_ceph_context -#define dout_subsys ceph_subsys_mds - -int Resetter::reset(mds_role_t role) -{ - Mutex mylock("Resetter::reset::lock"); - Cond cond; - bool done; - int r; - - auto fs = fsmap->get_filesystem(role.fscid); - assert(fs != nullptr); - int64_t const pool_id = fs->mds_map.get_metadata_pool(); - - JournalPointer jp(role.rank, pool_id); - int jp_load_result = jp.load(objecter); - if (jp_load_result != 0) { - std::cerr << "Error loading journal: " << cpp_strerror(jp_load_result) << - ", pass --force to forcibly reset this journal" << std::endl; - return jp_load_result; - } - - Journaler journaler("resetter", jp.front, - pool_id, - 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(); - - if (r != 0) { - if (r == -ENOENT) { - cerr << "journal does not exist on-disk. Did you set a bad rank?" - << std::endl; - std::cerr << "Error loading journal: " << cpp_strerror(r) << - ", pass --force to forcibly reset this journal" << std::endl; - return r; - } else { - cerr << "got error " << r << "from Journaler, failing" << std::endl; - return r; - } - } - - 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; - cout << "old journal was " << old_start << "~" << old_len << std::endl; - - uint64_t new_start = ROUND_UP_TO(old_end+1, journaler.get_layout_period()); - cout << "new journal start will be " << new_start - << " (" << (new_start - old_end) << " bytes past old end)" << std::endl; - - journaler.set_read_pos(new_start); - journaler.set_write_pos(new_start); - journaler.set_expire_pos(new_start); - journaler.set_trimmed_pos(new_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); - if (r != 0) { - return r; - } - - r = _write_reset_event(&journaler); - if (r != 0) { - return r; - } - - cout << "done" << std::endl; - - return 0; -} - -int Resetter::reset_hard(mds_role_t role) -{ - auto fs = fsmap->get_filesystem(role.fscid); - assert(fs != nullptr); - int64_t const pool_id = fs->mds_map.get_metadata_pool(); - - JournalPointer jp(role.rank, pool_id); - jp.front = role.rank + MDS_INO_LOG_OFFSET; - jp.back = 0; - int r = jp.save(objecter); - if (r != 0) { - derr << "Error writing journal pointer: " << cpp_strerror(r) << dendl; - return r; - } - - Journaler journaler("resetter", jp.front, - pool_id, - CEPH_FS_ONDISK_MAGIC, - objecter, 0, 0, &finisher); - journaler.set_writeable(); - - file_layout_t default_log_layout = MDCache::gen_default_log_layout( - fsmap->get_filesystem(role.fscid)->mds_map); - journaler.create(&default_log_layout, g_conf->mds_journal_format); - - C_SaferCond cond; - { - Mutex::Locker l(lock); - journaler.write_head(&cond); - } - r = cond.wait(); - if (r != 0) { - derr << "Error writing journal header: " << cpp_strerror(r) << dendl; - return r; - } - - { - Mutex::Locker l(lock); - r = _write_reset_event(&journaler); - } - if (r != 0) { - derr << "Error writing EResetJournal: " << cpp_strerror(r) << dendl; - return r; - } - - dout(4) << "Successfully wrote new journal pointer and header for rank " - << role << dendl; - return 0; -} - -int Resetter::_write_reset_event(Journaler *journaler) -{ - assert(journaler != NULL); - - LogEvent *le = new EResetJournal; - - bufferlist bl; - le->encode_with_header(bl, CEPH_FEATURES_SUPPORTED_DEFAULT); - - cout << "writing EResetJournal entry" << std::endl; - C_SaferCond cond; - journaler->append_entry(bl); - journaler->flush(&cond); - - return cond.wait(); -} -