]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
a few client/mds reconnect fixes
authorSage Weil <sage@newdream.net>
Tue, 22 Jan 2008 04:34:24 +0000 (20:34 -0800)
committerSage Weil <sage@newdream.net>
Tue, 22 Jan 2008 04:34:24 +0000 (20:34 -0800)
src/kernel/mds_client.c
src/kernel/messenger.c
src/mds/SessionMap.cc
src/mds/journal.cc
src/start.sh

index 0a94574ef83158ef9846c58a8bd934fb43c5ed54..e468bc4678b30b46daf41c9db6142863436f7cb5 100644 (file)
@@ -829,7 +829,8 @@ void send_mds_reconnect(struct ceph_mds_client *mdsc, int mds)
                dout(10, " adding cap %p on ino %lx\n", cap, ci->vfs_inode.i_ino);
                ceph_encode_64(&p, end, ci->vfs_inode.i_ino);
                rec = p;
-               BUG_ON(p + sizeof(*rec) > end);
+               p += sizeof(*rec);
+               BUG_ON(p > end);
                rec->wanted = cpu_to_le32(ceph_caps_wanted(ci));
                rec->issued = cpu_to_le32(ceph_caps_issued(ci));
                rec->size = cpu_to_le64(ci->i_wr_size);
index d831812379e35ecff402932b92387c5875ad2e53..17d7c4c6166b797bc231070969012e50458b94c1 100644 (file)
@@ -972,6 +972,7 @@ static void try_accept(struct work_struct *work)
        dout(5, "accepted connection \n");
 
        new_con->in_tag = CEPH_MSGR_TAG_READY;
+       new_con->connect_seq = 1;
        set_bit(ACCEPTING, &new_con->state);
        clear_bit(NEW,&new_con->state);
        prepare_write_accept_announce(msgr, new_con);
index f0b0685ba42bb369965534da9777f5b7ddd1a3fc..543fdac06285c53969359fa6d68936e9aa608342 100644 (file)
@@ -61,7 +61,7 @@ void SessionMap::load(Context *onload)
 void SessionMap::_load_finish(bufferlist &bl)
 { 
   bufferlist::iterator blp = bl.begin();
-  decode(blp);
+  decode(blp);  // note: this sets last_cap_renew = now()
   dout(10) << "_load_finish v " << version 
           << ", " << session_map.size() << " sessions, "
           << bl.length() << " bytes"
@@ -132,6 +132,8 @@ void SessionMap::encode(bufferlist& bl)
 
 void SessionMap::decode(bufferlist::iterator& p)
 {
+  utime_t now = g_clock.now();
+
   ::_decode_simple(version, p);
   __u32 n;
   ::_decode_simple(n, p);
@@ -139,5 +141,6 @@ void SessionMap::decode(bufferlist::iterator& p)
     Session *s = new Session;
     s->_decode(p);
     session_map[s->inst.name] = s;
+    s->last_cap_renew = now;
   }
 }
index d743196d79cc5a468797348b1fe20457d66d552a..d28ee0b3fead0182a301edf913e6649aa410cc6b 100644 (file)
@@ -480,6 +480,7 @@ void ESession::replay(MDS *mds)
     assert(mds->sessionmap.version == cmapv);
     if (open) {
       Session *session = mds->sessionmap.get_or_add_session(client_inst);
+      session->last_cap_renew = g_clock.now();
       mds->sessionmap.set_state(session, Session::STATE_OPEN);
     } else {
       Session *session = mds->sessionmap.get_session(client_inst.name);
index f77c005d50d639a5dcf998d9978face9d99094f1..91794d8f1b5aeec16cf2a590205cc64ae88471d6 100755 (executable)
@@ -1,4 +1,5 @@
 #!/bin/sh
+rm core*
 ./stop.sh
 ./mkmonmap `host \`hostname -f\`|cut -d ' ' -f 4`:12345  # your IP here; any unused port will do
 ./cmon --mkfs --mon 0 &