objectcacher->start();
+ objecter->init();
// ok!
messenger->add_dispatcher_head(this);
monclient->shutdown();
return r;
}
-
- client_lock.Unlock();
- objecter->init();
- client_lock.Lock();
+ objecter->start();
monclient->set_want_keys(CEPH_ENTITY_TYPE_MDS | CEPH_ENTITY_TYPE_OSD);
monclient->sub_want("mdsmap", 0, 0);
monclient.set_messenger(messenger);
+ objecter->init();
messenger->add_dispatcher_head(this);
messenger->start();
messenger->set_myname(entity_name_t::CLIENT(monclient.get_global_id()));
objecter->set_client_incarnation(0);
- objecter->init();
+ objecter->start();
lock.Lock();
timer.init();
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(this);
// get monmap
while (monc->wait_auth_rotating(30.0) < 0) {
derr << "unable to obtain rotating service keys; retrying" << dendl;
}
- objecter->init();
+ objecter->start();
mds_lock.Lock();
if (want_state == CEPH_MDS_STATE_DNE) {
#ifdef PG_DEBUG_REFS
, pgid_lock("OSDService::pgid_lock")
#endif
-{}
+{
+ objecter->init();
+}
OSDService::~OSDService()
{
reserver_finisher.start();
objecter_finisher.start();
objecter->set_client_incarnation(0);
- objecter->init();
+ objecter->start();
watch_timer.init();
agent_timer.init();
dout(2) << "superblock: i am osd." << superblock.whoami << dendl;
create_logger();
-
+
// i'm ready!
client_messenger->add_dispatcher_head(this);
cluster_messenger->add_dispatcher_head(this);
// messages ------------------------------
+/*
+ * initialize only internal data structures, don't initiate cluster interaction
+ */
void Objecter::init()
{
assert(!initialized.read());
timer.init();
- rwlock.get_read();
+ initialized.set(1);
+}
+
+/*
+ * ok, cluster interaction can happen
+ */
+void Objecter::start()
+{
+ RWLock::RLocker rl(rwlock);
schedule_tick();
if (osdmap->get_epoch() == 0) {
int r = _maybe_request_map();
assert (r == 0 || osdmap->get_epoch() > 0);
}
-
- rwlock.unlock();
-
- initialized.set(1);
}
void Objecter::shutdown()
{
assert(initialized.read());
- initialized.set(0);
RWLock::WLocker wl(rwlock);
+ initialized.set(0);
+
map<int,OSDSession*>::iterator p;
while (!osd_sessions.empty()) {
p = osd_sessions.begin();
}
void init();
+ void start();
void shutdown();
/**
objecter->set_balanced_budget();
monc.set_messenger(messenger.get());
+ objecter->init();
messenger->add_dispatcher_head(this);
messenger->start();
monc.set_want_keys(CEPH_ENTITY_TYPE_MON|CEPH_ENTITY_TYPE_OSD);
monc.wait_auth_rotating(30.0);
objecter->set_client_incarnation(0);
- objecter->init();
+ objecter->start();
lock.Lock();
timer.init();