From: Sage Weil Date: Sun, 20 Jul 2014 21:16:49 +0000 (-0700) Subject: osdc/Objecter: take over ownership of OSDMap X-Git-Tag: v0.86~213^2~65 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c7b7bdd9941688bda1ee463c47fc88c9ed54d4ea;p=ceph.git osdc/Objecter: take over ownership of OSDMap Instead of taking a pointer to an existing OSDMap in our constructor, allocate our own, so that we completely own it. Signed-off-by: Sage Weil --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 9afac7878fa..69074e5245e 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -191,9 +191,8 @@ Client::Client(Messenger *m, MonClient *mc) messenger = m; // osd interfaces - osdmap = new OSDMap; // initially blank.. see mount() mdsmap = new MDSMap; - objecter = new Objecter(cct, messenger, monclient, osdmap, + objecter = new Objecter(cct, messenger, monclient, 0, 0); objecter->set_client_incarnation(0); // client always 0, for now. writeback_handler = new ObjecterWriteback(objecter); @@ -221,7 +220,6 @@ Client::~Client() delete filer; delete objecter; - delete osdmap; delete mdsmap; delete logger; diff --git a/src/client/Client.h b/src/client/Client.h index 648920b858f..075ea2a8625 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -53,7 +53,6 @@ using std::fstream; #include "osdc/ObjectCacher.h" class MDSMap; -class OSDMap; class MonClient; class CephContext; @@ -210,7 +209,6 @@ class Client : public Dispatcher { // cluster descriptors MDSMap *mdsmap; - OSDMap *osdmap; SafeTimer timer; diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 3e77269d200..19691766596 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -221,7 +221,7 @@ int librados::RadosClient::connect() ldout(cct, 1) << "starting objecter" << dendl; err = -ENOMEM; - objecter = new Objecter(cct, messenger, &monclient, &osdmap, + objecter = new Objecter(cct, messenger, &monclient, cct->_conf->rados_mon_op_timeout, cct->_conf->rados_osd_op_timeout); if (!objecter) diff --git a/src/librados/RadosClient.h b/src/librados/RadosClient.h index 7c3df8cbb66..a3895bbf6dd 100755 --- a/src/librados/RadosClient.h +++ b/src/librados/RadosClient.h @@ -22,7 +22,6 @@ #include "include/rados/librados.hpp" #include "mon/MonClient.h" #include "msg/Dispatcher.h" -#include "osd/OSDMap.h" #include "IoCtxImpl.h" @@ -47,7 +46,6 @@ private: CONNECTED, } state; - OSDMap osdmap; MonClient monclient; SimpleMessenger *messenger; diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index d7b07304db7..ea206281250 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -27,7 +27,6 @@ #include "msg/Messenger.h" #include "mon/MonClient.h" -#include "osd/OSDMap.h" #include "osdc/Objecter.h" #include "osdc/Filer.h" #include "osdc/Journaler.h" @@ -115,10 +114,8 @@ MDS::MDS(const std::string &n, Messenger *m, MonClient *mc) : monc->set_messenger(messenger); mdsmap = new MDSMap; - osdmap = new OSDMap; - objecter = new Objecter(m->cct, messenger, monc, osdmap, - 0, 0); + objecter = new Objecter(m->cct, messenger, monc, 0, 0); objecter->unset_honor_osdmap_full(); filer = new Filer(objecter); @@ -171,7 +168,6 @@ MDS::~MDS() { if (inotable) { delete inotable; inotable = NULL; } if (snapserver) { delete snapserver; snapserver = NULL; } if (snapclient) { delete snapclient; snapclient = NULL; } - if (osdmap) { delete osdmap; osdmap = 0; } if (mdsmap) { delete mdsmap; mdsmap = 0; } if (server) { delete server; server = 0; } diff --git a/src/mds/MDS.h b/src/mds/MDS.h index a5a3aaf797b..2f00b6e0b0e 100644 --- a/src/mds/MDS.h +++ b/src/mds/MDS.h @@ -110,7 +110,6 @@ class filepath; class MonClient; -class OSDMap; class Objecter; class Filer; @@ -161,7 +160,6 @@ class MDS : public Dispatcher, public md_config_obs_t { Messenger *messenger; MonClient *monc; MDSMap *mdsmap; - OSDMap *osdmap; Objecter *objecter; Filer *filer; // for reading/writing to/from osds LogClient clog; @@ -342,7 +340,6 @@ class MDS : public Dispatcher, public md_config_obs_t { int get_nodeid() { return whoami; } uint64_t get_metadata_pool() { return mdsmap->get_metadata_pool(); } MDSMap *get_mds_map() { return mdsmap; } - OSDMap *get_osd_map() { return osdmap; } void send_message_mds(Message *m, int mds); void forward_message_mds(Message *req, int mds); diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 1cadbda10f3..179ec0dac60 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -210,8 +210,7 @@ OSDService::OSDService(OSD *osd) : agent_stop_flag(false), agent_timer_lock("OSD::agent_timer_lock"), agent_timer(osd->client_messenger->cct, agent_timer_lock), - objecter(new Objecter(osd->client_messenger->cct, osd->objecter_messenger, osd->monc, &objecter_osdmap, - 0, 0)), + objecter(new Objecter(osd->client_messenger->cct, osd->objecter_messenger, osd->monc, 0, 0)), objecter_finisher(osd->client_messenger->cct), watch_lock("OSD::watch_lock"), watch_timer(osd->client_messenger->cct, watch_lock), diff --git a/src/osd/OSD.h b/src/osd/OSD.h index f60dd25b6d0..7d73f07f40e 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -649,7 +649,6 @@ public: // -- Objecter, for teiring reads/writes from/to other OSDs -- - OSDMap objecter_osdmap; Objecter *objecter; Finisher objecter_finisher; diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index 05d11acff94..e87b2ebc1a0 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -1583,10 +1583,12 @@ public: public: Objecter(CephContext *cct_, Messenger *m, MonClient *mc, - OSDMap *om, double mon_timeout, + double mon_timeout, double osd_timeout) : Dispatcher(cct), - messenger(m), monc(mc), osdmap(om), cct(cct_), + messenger(m), monc(mc), + osdmap(new OSDMap), + cct(cct_), initialized(false), last_tid(0), client_inc(-1), max_linger_id(0), num_unacked(0), num_uncommitted(0), @@ -1606,6 +1608,7 @@ public: op_throttle_ops(cct, "objecter_ops", cct->_conf->objecter_inflight_ops) { } ~Objecter() { + delete osdmap; assert(!tick_event); assert(!m_request_state_hook); assert(!logger); diff --git a/src/test/mon/test_mon_workloadgen.cc b/src/test/mon/test_mon_workloadgen.cc index 6a5b00f22f9..d7537b5a5e6 100644 --- a/src/test/mon/test_mon_workloadgen.cc +++ b/src/test/mon/test_mon_workloadgen.cc @@ -32,7 +32,6 @@ #include "osd/osd_types.h" #include "osd/OSD.h" -#include "osd/OSDMap.h" #include "osdc/Objecter.h" #include "mon/MonClient.h" #include "msg/Dispatcher.h" @@ -184,7 +183,6 @@ class TestStub : public Dispatcher class ClientStub : public TestStub { - OSDMap osdmap; ObjecterRef objecter; rngen_t gen; @@ -255,7 +253,7 @@ class ClientStub : public TestStub dout(10) << "ClientStub::" << __func__ << " starting messenger at " << messenger->get_myaddr() << dendl; - objecter.reset(new Objecter(cct, messenger.get(), &monc, &osdmap, 0, 0)); + objecter.reset(new Objecter(cct, messenger.get(), &monc, 0, 0)); assert(objecter.get() != NULL); objecter->set_balanced_budget(); diff --git a/src/tools/cephfs/MDSUtility.cc b/src/tools/cephfs/MDSUtility.cc index 3f59c92932a..6784052d03a 100644 --- a/src/tools/cephfs/MDSUtility.cc +++ b/src/tools/cephfs/MDSUtility.cc @@ -27,8 +27,7 @@ MDSUtility::MDSUtility() : monc = new MonClient(g_ceph_context); messenger = Messenger::create(g_ceph_context, entity_name_t::CLIENT(), "mds", getpid()); mdsmap = new MDSMap(); - osdmap = new OSDMap(); - objecter = new Objecter(g_ceph_context, messenger, monc, osdmap, 0, 0); + objecter = new Objecter(g_ceph_context, messenger, monc, 0, 0); } @@ -37,7 +36,6 @@ MDSUtility::~MDSUtility() delete objecter; delete monc; delete messenger; - delete osdmap; delete mdsmap; assert(waiting_for_mds_map == NULL); } diff --git a/src/tools/cephfs/MDSUtility.h b/src/tools/cephfs/MDSUtility.h index d3f938e8171..1b48d504b25 100644 --- a/src/tools/cephfs/MDSUtility.h +++ b/src/tools/cephfs/MDSUtility.h @@ -14,7 +14,6 @@ #ifndef MDS_UTILITY_H_ #define MDS_UTILITY_H_ -#include "osd/OSDMap.h" #include "osdc/Objecter.h" #include "mds/MDSMap.h" #include "messages/MMDSMap.h" @@ -31,7 +30,6 @@ class MDSUtility : public Dispatcher { protected: Objecter *objecter; - OSDMap *osdmap; MDSMap *mdsmap; Messenger *messenger; MonClient *monc;