]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: mdstable/client, anchorserver/client fixes
authorSage Weil <sage@newdream.net>
Sun, 3 Aug 2008 21:20:12 +0000 (14:20 -0700)
committerSage Weil <sage@newdream.net>
Sun, 3 Aug 2008 22:08:00 +0000 (15:08 -0700)
src/mds/AnchorClient.cc
src/mds/AnchorServer.cc
src/mds/AnchorServer.h
src/mds/MDSTableServer.cc
src/mds/MDSTableServer.h
src/messages/MMDSTableRequest.h

index 3565434fcfde4459455061a1cc853fa0910253d2..603f89e9c98e7cb34df2cf90829511a731f86582 100644 (file)
@@ -48,8 +48,6 @@ void AnchorClient::handle_query_result(class MMDSTableRequest *m)
     onfinish->finish(0);
     delete onfinish;
   }
-
-  delete m;
 }
 
 void AnchorClient::resend_queries()
index 5f0dd13fed898e61ed8af0597fe7e38014927b56..54cb16b2ee270d74a080895d2ab897dd06be2397 100644 (file)
@@ -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<Anchor> 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;
index 8bc65fd4595b21e203e53eac5e17267533c738ed..4c0cd9548cee991be620dddf35573583a212b1e5 100644 (file)
@@ -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);
index ed39405b5ad090c222014e70e2ed46640cb8687f..887ec4f472734cab6a1801a2b95e65c2cd9adbc4 100644 (file)
@@ -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<version_t,_pending>::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);
   }
 }
index 8b9370473070902224a36d9f6fc8903cd4798504..b1a491349732e6d8ef96e4ca4bd98f7ddd11fbf6 100644 (file)
@@ -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;
 
index 3b18d22e7a3cd125e0ba2fa7298ea267be3a2cee..a3cbbabebb33cc98f61d2f8028e14447586f5aec 100644 (file)
@@ -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 << ")";