name(n),
messenger(m),
monc(mc),
- objecter(new Objecter(m->cct, m, mc, NULL, 0, 0)),
log_client(m->cct, messenger, &mc->monmap, LogClient::NO_FLAGS),
mds_rank(NULL),
tick_event(0),
monc->set_messenger(messenger);
mdsmap = new MDSMap;
-
- objecter->unset_honor_osdmap_full();
}
MDSDaemon::~MDSDaemon() {
delete mds_rank;
mds_rank = NULL;
- delete objecter;
- objecter = NULL;
delete mdsmap;
mdsmap = NULL;
void MDSDaemon::dump_status(Formatter *f)
{
- const epoch_t osd_epoch = objecter->with_osdmap(
- std::mem_fn(&OSDMap::get_epoch));
-
f->open_object_section("status");
f->dump_stream("cluster_fsid") << monc->get_fsid();
if (mds_rank) {
}
f->dump_unsigned("mdsmap_epoch", mdsmap->get_epoch());
- f->dump_unsigned("osdmap_epoch", osd_epoch);
if (mds_rank) {
+ f->dump_unsigned("osdmap_epoch", mds_rank->get_osd_epoch());
f->dump_unsigned("osdmap_epoch_barrier", mds_rank->get_osd_epoch_barrier());
} else {
+ f->dump_unsigned("osdmap_epoch", 0);
f->dump_unsigned("osdmap_epoch_barrier", 0);
}
f->close_section(); // status
dout(10) << sizeof(Capability) << "\tCapability " << dendl;
dout(10) << sizeof(xlist<void*>::item) << "\t xlist<>::item *2=" << 2*sizeof(xlist<void*>::item) << dendl;
- objecter->init();
- messenger->add_dispatcher_tail(objecter);
-
messenger->add_dispatcher_tail(&beacon);
messenger->add_dispatcher_tail(this);
return -ETIMEDOUT;
}
- objecter->start();
-
mds_lock.Lock();
if (beacon.get_want_state() == CEPH_MDS_STATE_DNE) {
dout(4) << __func__ << ": terminated already, dropping out" << dendl;
mds_lock.Unlock();
- // verify that osds support tmap2omap
- while (true) {
- objecter->maybe_request_map();
- objecter->wait_for_osd_map();
- if (objecter->with_osdmap([&](const OSDMap& o) {
- uint64_t osd_features = o.get_up_osd_features();
- if (osd_features & CEPH_FEATURE_OSD_TMAP2OMAP)
- return true;
- if (o.get_num_up_osds() > 0) {
- derr << "*** one or more OSDs do not support TMAP2OMAP; upgrade "
- << "OSDs before starting MDS (or downgrade MDS) ***" << dendl;
- } else {
- derr << "*** no OSDs are up as of epoch " << o.get_epoch()
- << ", waiting" << dendl;
- }
- return false;
- }))
- break;
- sleep(10);
- }
-
// Set up admin socket before taking mds_lock, so that ordering
// is consistent (later we take mds_lock within asok callbacks)
set_up_admin_socket();
// Did I previously not hold a rank? Initialize!
if (mds_rank == NULL) {
mds_rank = new MDSRankDispatcher(whoami, mds_lock, clog,
- timer, beacon, mdsmap, messenger, monc, objecter,
+ timer, beacon, mdsmap, messenger, monc,
new C_VoidFn(this, &MDSDaemon::respawn),
new C_VoidFn(this, &MDSDaemon::suicide));
dout(10) << __func__ << ": initializing MDS rank "
if (mds_rank) {
mds_rank->shutdown();
} else {
-
- if (objecter->initialized.read()) {
- objecter->shutdown();
- }
timer.shutdown();
monc->shutdown();
MDSMap *& mdsmap_,
Messenger *msgr,
MonClient *monc_,
- Objecter *objecter_,
Context *respawn_hook_,
Context *suicide_hook_)
:
whoami(whoami_), incarnation(0),
mds_lock(mds_lock_), clog(clog_), timer(timer_),
mdsmap(mdsmap_),
- objecter(objecter_),
+ objecter(new Objecter(g_ceph_context, msgr, monc_, nullptr, 0, 0)),
server(NULL), mdcache(NULL), locker(NULL), mdlog(NULL),
balancer(NULL), scrubstack(NULL),
damage_table(whoami_),
{
hb = g_ceph_context->get_heartbeat_map()->add_worker("MDSRank", pthread_self());
+ objecter->unset_honor_osdmap_full();
+
finisher = new Finisher(msgr->cct);
mdcache = new MDCache(this);
delete respawn_hook;
respawn_hook = NULL;
+
+ delete objecter;
+ objecter = nullptr;
}
void MDSRankDispatcher::init()
{
+ objecter->init();
+ messenger->add_dispatcher_head(objecter);
+
+ objecter->start();
+
update_log_config();
create_logger();
MDSMap *& mdsmap_,
Messenger *msgr,
MonClient *monc_,
- Objecter *objecter_,
Context *respawn_hook_,
Context *suicide_hook_)
: MDSRank(whoami_, mds_lock_, clog_, timer_, beacon_, mdsmap_,
- msgr, monc_, objecter_, respawn_hook_, suicide_hook_)
+ msgr, monc_, respawn_hook_, suicide_hook_)
{}
bool MDSRankDispatcher::handle_command(
return false;
}
}
+
+epoch_t MDSRank::get_osd_epoch() const
+{
+ return objecter->with_osdmap(std::mem_fn(&OSDMap::get_epoch));
+}
+