From a49b294291a6d0e5199e94a7bada6aa8884bf891 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 3 Aug 2008 14:20:12 -0700 Subject: [PATCH] mds: mdstable/client, anchorserver/client fixes --- src/mds/AnchorClient.cc | 2 -- src/mds/AnchorServer.cc | 24 ++++++++---------------- src/mds/AnchorServer.h | 1 - src/mds/MDSTableServer.cc | 13 +++++++------ src/mds/MDSTableServer.h | 1 - src/messages/MMDSTableRequest.h | 4 +++- 6 files changed, 18 insertions(+), 27 deletions(-) diff --git a/src/mds/AnchorClient.cc b/src/mds/AnchorClient.cc index 3565434fcfde4..603f89e9c98e7 100644 --- a/src/mds/AnchorClient.cc +++ b/src/mds/AnchorClient.cc @@ -48,8 +48,6 @@ void AnchorClient::handle_query_result(class MMDSTableRequest *m) onfinish->finish(0); delete onfinish; } - - delete m; } void AnchorClient::resend_queries() diff --git a/src/mds/AnchorServer.cc b/src/mds/AnchorServer.cc index 5f0dd13fed898..54cb16b2ee270 100644 --- a/src/mds/AnchorServer.cc +++ b/src/mds/AnchorServer.cc @@ -155,14 +155,6 @@ void AnchorServer::_prepare(bufferlist &bl, __u64 reqid, int bymds) //dump(); } -bool AnchorServer::_is_prepared(version_t tid) -{ - return - pending_create.count(tid) || - pending_destroy.count(tid) || - pending_update.count(tid); -} - void AnchorServer::_commit(version_t tid) { if (pending_create.count(tid)) { @@ -202,8 +194,6 @@ void AnchorServer::_commit(version_t tid) else assert(0); - pending_for_mds.erase(tid); - // bump version. version++; //dump(); @@ -241,11 +231,12 @@ void AnchorServer::_rollback(version_t tid) void AnchorServer::handle_query(MMDSTableRequest *req) { bufferlist::iterator p = req->bl.begin(); - inodeno_t curino; - ::decode(curino, p); - dout(7) << "handle_lookup " << *req << " ino " << curino << dendl; + inodeno_t ino; + ::decode(ino, p); + dout(7) << "handle_lookup " << *req << " ino " << ino << dendl; vector trace; + inodeno_t curino = ino; while (true) { assert(anchor_map.count(curino) == 1); Anchor &anchor = anchor_map[curino]; @@ -253,14 +244,15 @@ void AnchorServer::handle_query(MMDSTableRequest *req) dout(10) << "handle_lookup adding " << anchor << dendl; trace.insert(trace.begin(), anchor); // lame FIXME - if (anchor.dirino < MDS_INO_BASE) break; + if (anchor.dirino < MDS_INO_BASE) + break; curino = anchor.dirino; } // reply MMDSTableRequest *reply = new MMDSTableRequest(table, TABLE_OP_QUERY_REPLY, req->reqid, version); - ::encode(curino, req->bl); - ::encode(trace, req->bl); + ::encode(ino, reply->bl); + ::encode(trace, reply->bl); mds->send_message_mds(reply, req->get_source().num()); delete req; diff --git a/src/mds/AnchorServer.h b/src/mds/AnchorServer.h index 8bc65fd4595b2..4c0cd9548cee9 100644 --- a/src/mds/AnchorServer.h +++ b/src/mds/AnchorServer.h @@ -56,7 +56,6 @@ class AnchorServer : public MDSTableServer { // server bits void _prepare(bufferlist &bl, __u64 reqid, int bymds); - bool _is_prepared(version_t tid); void _commit(version_t tid); void _rollback(version_t tid); void handle_query(MMDSTableRequest *m); diff --git a/src/mds/MDSTableServer.cc b/src/mds/MDSTableServer.cc index ed39405b5ad09..887ec4f472734 100644 --- a/src/mds/MDSTableServer.cc +++ b/src/mds/MDSTableServer.cc @@ -44,9 +44,9 @@ void MDSTableServer::handle_prepare(MMDSTableRequest *req) int from = req->get_source().num(); _prepare(req->bl, req->reqid, from); - pending_for_mds[req->reqid].mds = from; - pending_for_mds[req->reqid].reqid = req->reqid; - pending_for_mds[req->reqid].tid = version; + pending_for_mds[version].mds = from; + pending_for_mds[version].reqid = req->reqid; + pending_for_mds[version].tid = version; ETableServer *le = new ETableServer(table, TABLE_OP_PREPARE, req->reqid, from, version, version); le->mutation = req->bl; @@ -70,7 +70,7 @@ void MDSTableServer::handle_commit(MMDSTableRequest *req) version_t tid = req->tid; - if (_is_prepared(tid)) { + if (pending_for_mds.count(tid)) { _commit(tid); pending_for_mds.erase(tid); mds->mdlog->submit_entry(new ETableServer(table, TABLE_OP_COMMIT, 0, -1, tid, version)); @@ -124,8 +124,9 @@ void MDSTableServer::handle_mds_recovery(int who) for (map::iterator p = pending_for_mds.begin(); p != pending_for_mds.end(); p++) { - if (who >= 0 && p->second.mds != who) continue; + if (who >= 0 && p->second.mds != who) + continue; MMDSTableRequest *reply = new MMDSTableRequest(table, TABLE_OP_AGREE, p->second.reqid, p->second.tid); - mds->send_message_mds(reply, who); + mds->send_message_mds(reply, p->second.mds); } } diff --git a/src/mds/MDSTableServer.h b/src/mds/MDSTableServer.h index 8b93704730709..b1a491349732e 100644 --- a/src/mds/MDSTableServer.h +++ b/src/mds/MDSTableServer.h @@ -74,7 +74,6 @@ private: public: virtual void handle_query(MMDSTableRequest *m) = 0; virtual void _prepare(bufferlist &bl, __u64 reqid, int bymds) = 0; - virtual bool _is_prepared(version_t tid) = 0; virtual void _commit(version_t tid) = 0; virtual void _rollback(version_t tid) = 0; diff --git a/src/messages/MMDSTableRequest.h b/src/messages/MMDSTableRequest.h index 3b18d22e7a3cd..a3cbbabebb33c 100644 --- a/src/messages/MMDSTableRequest.h +++ b/src/messages/MMDSTableRequest.h @@ -34,7 +34,9 @@ class MMDSTableRequest : public Message { virtual const char *get_type_name() { return "mds_table_request"; } void print(ostream& o) { - o << "mds_table_request(" << get_mdstable_opname(op) << " " << reqid; + o << "mds_table_request(" << get_mdstable_name(table) + << " " << get_mdstable_opname(op); + if (reqid) o << " " << reqid; if (tid) o << " tid " << tid; if (bl.length()) o << " " << bl.length() << " bytes"; o << ")"; -- 2.39.5