]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: All SimpleMessenger uses are now on the heap for appropriate destruction
authorGreg Farnum <gregf@hq.newdream.net>
Tue, 5 Jan 2010 20:02:59 +0000 (12:02 -0800)
committerGreg Farnum <gregf@hq.newdream.net>
Thu, 7 Jan 2010 01:18:48 +0000 (17:18 -0800)
src/ceph.cc
src/cfuse.cc
src/cmds.cc
src/cmon.cc
src/cosd.cc
src/csyn.cc
src/dumpjournal.cc
src/libceph.cc
src/librados.cc
src/mon/MonClient.cc
src/testmsgr.cc

index 6ac28fa54e316933b84f7553deeb904de07425fa..d13cba4e26eefe388c2879a0a7b090835f939228 100644 (file)
@@ -625,11 +625,11 @@ int main(int argc, const char **argv, const char *envp[])
     return -1;
   
   // start up network
-  SimpleMessenger rank;
-  messenger = rank.register_entity(entity_name_t::ADMIN());
+  SimpleMessenger *rank = new SimpleMessenger();
+  messenger = rank->register_entity(entity_name_t::ADMIN());
   messenger->add_dispatcher_head(&dispatcher);
 
-  rank.start();
+  rank->start();
 
   mc.set_messenger(messenger);
   mc.init();
@@ -677,8 +677,8 @@ int main(int argc, const char **argv, const char *envp[])
 
 
   // wait for messenger to finish
-  rank.wait();
-  messenger->destroy();
+  rank->wait();
+  rank->destroy();
   return 0;
 }
 
index f43c2969baaa74e2114c891911ff98f58d8a1f5b..c5a213813c1d40a1c1cebaeecddb6b9a95ef080d 100644 (file)
@@ -68,12 +68,12 @@ int main(int argc, const char **argv, const char *envp[]) {
     return -1;
 
   // start up network
-  SimpleMessenger rank;
+  SimpleMessenger *rank = new SimpleMessenger();
   cout << "mounting ceph" << std::endl;
 
-  Client *client = new Client(rank.register_entity(entity_name_t::CLIENT()), &mc);
+  Client *client = new Client(rank->register_entity(entity_name_t::CLIENT()), &mc);
 
-  rank.start();
+  rank->start();
 
   // start client
   client->init();
@@ -100,7 +100,8 @@ int main(int argc, const char **argv, const char *envp[]) {
   delete client;
   
   // wait for messenger to finish
-  rank.wait();
+  rank->wait();
+  rank->destroy();
   
   return 0;
 }
index 547355e454b6b115511238cae3572b15b65c33ca..f617490b583b09abbab3fb4c7c88fd31847b6c6a 100644 (file)
@@ -67,27 +67,27 @@ int main(int argc, const char **argv)
   if (mc.build_initial_monmap() < 0)
     return -1;
 
-  SimpleMessenger rank;
-  rank.bind();
+  SimpleMessenger *rank = new SimpleMessenger();
+  rank->bind();
   cout << "starting mds." << g_conf.id
-       << " at " << rank.get_rank_addr() 
+       << " at " << rank->get_rank_addr() 
        << std::endl;
 
-  Messenger *m = rank.register_entity(entity_name_t::MDS(-1));
+  Messenger *m = rank->register_entity(entity_name_t::MDS(-1));
   assert_warn(m);
   if (!m)
     return 1;
 
-  rank.set_policy(entity_name_t::TYPE_CLIENT, SimpleMessenger::Policy::stateful_server());
-  rank.set_policy(entity_name_t::TYPE_MDS, SimpleMessenger::Policy::lossless_peer());
+  rank->set_policy(entity_name_t::TYPE_CLIENT, SimpleMessenger::Policy::stateful_server());
+  rank->set_policy(entity_name_t::TYPE_MDS, SimpleMessenger::Policy::lossless_peer());
 
-  rank.start();
+  rank->start();
   
   // start mds
   MDS *mds = new MDS(g_conf.id, m, &mc);
   mds->init();
   
-  rank.wait();
+  rank->wait();
 
   // yuck: grab the mds lock, so we can be sure that whoever in *mds 
   // called shutdown finishes what they were doing.
@@ -99,6 +99,8 @@ int main(int argc, const char **argv)
   if (mds->is_stopped())
     delete mds;
 
+  rank->destroy();
+
   // cd on exit, so that gmon.out (if any) goes into a separate directory for each node.
   char s[20];
   sprintf(s, "gmon/%d", getpid());
index d5e512cfa27ad5eb5b2ecf836e724549f81e3455..22f6132e67b29d47cc418cb8c2246fd095b6ad99 100644 (file)
@@ -127,7 +127,7 @@ int main(int argc, const char **argv)
         << "         continuing with monmap configuration" << std::endl;
 
   // bind
-  SimpleMessenger rank;
+  SimpleMessenger *rank = new SimpleMessenger();
 
   cout << "starting mon" << whoami 
        << " at " << monmap.get_inst(whoami).addr
@@ -135,24 +135,25 @@ int main(int argc, const char **argv)
        << " fsid " << monmap.get_fsid()
        << std::endl;
   g_my_addr = monmap.get_inst(whoami).addr;
-  err = rank.bind();
+  err = rank->bind();
   if (err < 0)
     return 1;
 
   _dout_create_courtesy_output_symlink("mon", whoami);
   
   // start monitor
-  Messenger *m = rank.register_entity(entity_name_t::MON(whoami));
+  Messenger *m = rank->register_entity(entity_name_t::MON(whoami));
   m->set_default_send_priority(CEPH_MSG_PRIO_HIGH);
   Monitor *mon = new Monitor(whoami, &store, m, &monmap);
 
-  rank.start();  // may daemonize
+  rank->start();  // may daemonize
 
-  rank.set_default_policy(SimpleMessenger::Policy::stateless_server());
-  rank.set_policy(entity_name_t::TYPE_MON, SimpleMessenger::Policy::lossless_peer());
+  rank->set_default_policy(SimpleMessenger::Policy::stateless_server());
+  rank->set_policy(entity_name_t::TYPE_MON, SimpleMessenger::Policy::lossless_peer());
 
   mon->init();
-  rank.wait();
+  rank->wait();
+  rank->destroy();
 
   store.umount();
   delete mon;
index f4267a89736a0e6f3e155f88b8ffe86f7702da66..fd7deaf6bb1f0504a984d9507feaee057479e5b1 100644 (file)
@@ -138,12 +138,13 @@ int main(int argc, const char **argv)
   g_my_addr.ss_addr() = mc.get_my_addr().ss_addr();
   g_my_addr.set_port(0);
 
-  SimpleMessenger rank, rank_hb;
-  rank.bind();
-  rank_hb.bind();
+  SimpleMessenger *rank = new SimpleMessenger();
+  SimpleMessenger *rank_hb = new SimpleMessenger();
+  rank->bind();
+  rank_hb->bind();
 
   cout << "starting osd" << whoami
-       << " at " << rank.get_rank_addr() 
+       << " at " << rank->get_rank_addr() 
        << " osd_data " << g_conf.osd_data
        << " " << ((g_conf.osd_journal && g_conf.osd_journal[0]) ? g_conf.osd_journal:"(no journal)")
        << " fsid " << mc.monmap.fsid
@@ -151,21 +152,21 @@ int main(int argc, const char **argv)
 
   g_timer.shutdown();
 
-  Messenger *m = rank.register_entity(entity_name_t::OSD(whoami));
+  Messenger *m = rank->register_entity(entity_name_t::OSD(whoami));
   assert_warn(m);
   if (!m)
     return 1;
-  Messenger *hbm = rank_hb.register_entity(entity_name_t::OSD(whoami));
+  Messenger *hbm = rank_hb->register_entity(entity_name_t::OSD(whoami));
   assert_warn(hbm);
   if (!hbm)
     return 1;
 
-  rank.set_default_policy(SimpleMessenger::Policy::stateless_server());
-  rank.set_policy(entity_name_t::TYPE_MON, SimpleMessenger::Policy::client());
-  rank.set_policy(entity_name_t::TYPE_OSD, SimpleMessenger::Policy::lossless_peer());
+  rank->set_default_policy(SimpleMessenger::Policy::stateless_server());
+  rank->set_policy(entity_name_t::TYPE_MON, SimpleMessenger::Policy::client());
+  rank->set_policy(entity_name_t::TYPE_OSD, SimpleMessenger::Policy::lossless_peer());
 
-  rank.start();
-  rank_hb.start(true);  // only need to daemon() once
+  rank->start();
+  rank_hb->start(true);  // only need to daemon() once
 
   // start osd
   OSD *osd = new OSD(whoami, m, hbm, &mc, g_conf.osd_data, g_conf.osd_journal, mkjournal);
@@ -174,8 +175,10 @@ int main(int argc, const char **argv)
     return 1;
   }
 
-  rank.wait();
-  rank_hb.wait();
+  rank->wait();
+  rank->destroy();
+  rank_hb->wait();
+  rank_hb->wait();
 
   // done
   delete osd;
index e14167386f009228b72c9cd38312f0d3e913386e..3a5b4f440276fabf7c76444e401f98d6892e7a63 100644 (file)
@@ -55,7 +55,7 @@ int main(int argc, const char **argv, char *envp[])
     return -1;
 
   // start up network
-  SimpleMessenger rank;
+  SimpleMessenger *rank = new SimpleMessenger();
   cout << "starting csyn" << std::endl;
 
   list<Client*> clients;
@@ -63,13 +63,13 @@ int main(int argc, const char **argv, char *envp[])
 
   cout << "mounting and starting " << g_conf.num_client << " syn client(s)" << std::endl;
   for (int i=0; i<g_conf.num_client; i++) {
-    Client *client = new Client(rank.register_entity(entity_name_t(entity_name_t::TYPE_CLIENT,-1)), &mc);
+    Client *client = new Client(rank->register_entity(entity_name_t(entity_name_t::TYPE_CLIENT,-1)), &mc);
     SyntheticClient *syn = new SyntheticClient(client);
     clients.push_back(client);
     synclients.push_back(syn);
   }
 
-  rank.start();
+  rank->start();
 
   for (list<SyntheticClient*>::iterator p = synclients.begin(); 
        p != synclients.end();
@@ -88,7 +88,8 @@ int main(int argc, const char **argv, char *envp[])
   }
     
   // wait for messenger to finish
-  rank.wait();
+  rank->wait();
+  rank->destroy();
   
   return 0;
 }
index c69c442cdaff47012197c7a4913394f889a468f9..e97ed5bdee4265fcf9aad17c915a968cbf0f4e6c 100644 (file)
@@ -89,11 +89,11 @@ int main(int argc, const char **argv, const char *envp[])
     return -1;
   
   // start up network
-  SimpleMessenger rank;
-  rank.bind();
+  SimpleMessenger *rank = new SimpleMessenger();
+  rank->bind();
   g_conf.daemonize = false; // not us!
-  rank.start();
-  messenger = rank.register_entity(entity_name_t::ADMIN());
+  rank->start();
+  messenger = rank->register_entity(entity_name_t::ADMIN());
   messenger->add_dispatcher_head(&dispatcher);
 
   inodeno_t ino = MDS_INO_LOG_OFFSET + mds;
@@ -130,7 +130,8 @@ int main(int argc, const char **argv, const char *envp[])
   messenger->shutdown();
 
   // wait for messenger to finish
-  rank.wait();
+  rank->wait();
+  rank->destroy();
   
   return 0;
 }
index 5e9b730f9d3b91ee5e503da133fec6ab0ddf95f2..497f1c9e2fa111a7039b579d7a4116e95ab98318 100644 (file)
@@ -71,7 +71,7 @@ extern "C" void ceph_deinitialize()
     client->shutdown();
     delete client;
     rank->wait();
-    delete rank;
+    rank->destroy();
     delete monclient;
   }
   ceph_client_mutex.Unlock();
index e765dcad42a02f801cc12a3727bf3faf0562d26a..7a69470dba02667953595d105c780bf44c89248a 100644 (file)
@@ -50,7 +50,7 @@ class RadosClient : public Dispatcher
   OSDMap osdmap;
   Messenger *messenger;
   MonClient monclient;
-  SimpleMessenger rank;
+  SimpleMessenger *rank;
 
   bool _dispatch(Message *m);
   bool ms_dispatch(Message *m);
@@ -75,7 +75,10 @@ class RadosClient : public Dispatcher
 
  
 public:
-  RadosClient() : messenger(NULL), lock("radosclient") {}
+  RadosClient() : messenger(NULL), lock("radosclient") {
+    rank = new SimpleMessenger();
+  }
+
   ~RadosClient();
   bool init();
   void shutdown();
@@ -286,9 +289,9 @@ bool RadosClient::init()
   if (monclient.build_initial_monmap() < 0)
     return false;
 
-  dout(1) << "starting msgr at " << rank.get_rank_addr() << dendl;
+  dout(1) << "starting msgr at " << rank->get_rank_addr() << dendl;
 
-  messenger = rank.register_entity(entity_name_t::CLIENT(-1));
+  messenger = rank->register_entity(entity_name_t::CLIENT(-1));
   assert_warn(messenger);
   if (!messenger)
     return false;
@@ -302,7 +305,7 @@ bool RadosClient::init()
   
   messenger->add_dispatcher_head(this);
 
-  rank.start(1);
+  rank->start(1);
   messenger->add_dispatcher_head(this);
 
   dout(1) << "setting wanted keys" << dendl;
@@ -336,7 +339,8 @@ void RadosClient::shutdown()
   objecter->shutdown();
   lock.Unlock();
   messenger->shutdown();
-  rank.wait();
+  rank->wait();
+  rank->destroy();
   dout(1) << "shutdown" << dendl;
 }
 
index 23e164930c39064b70968831a5e4d3108ea51b43..afb8ed28bff97e4299f181e4417ac14b10dd40cb 100644 (file)
@@ -166,7 +166,7 @@ int MonClient::get_monmap_privately()
     monc_lock.Unlock();
     messenger->shutdown();
     rank->wait();
-    messenger->destroy();
+    rank->destroy();
     messenger = 0;
     monc_lock.Lock();
   }
index 99871a685eafb67afaeb6e87db37c9d2d9f6914d..408ed5d72700ec268417ceee0ea28d4544e4ecbc 100644 (file)
@@ -82,19 +82,19 @@ int main(int argc, const char **argv, const char *envp[]) {
   
   // start up network
   g_my_addr = mc.get_mon_addr(whoami);
-  SimpleMessenger rank;
-  int err = rank.bind();
+  SimpleMessenger *rank = new SimpleMessenger();
+  int err = rank->bind();
   if (err < 0)
     return 1;
 
   _dout_create_courtesy_output_symlink("mon", whoami);
 
   // start monitor
-  messenger = rank.register_entity(entity_name_t::MON(whoami));
+  messenger = rank->register_entity(entity_name_t::MON(whoami));
   messenger->set_default_send_priority(CEPH_MSG_PRIO_HIGH);
   messenger->add_dispatcher_head(&dispatcher);
 
-  rank.start();
+  rank->start();
   
   int isend = 0;
   if (whoami == 0)
@@ -126,7 +126,8 @@ int main(int argc, const char **argv, const char *envp[]) {
   lock.Unlock();
 
   // wait for messenger to finish
-  rank.wait();
+  rank->wait();
+  rank->destroy();
   
   return 0;
 }