]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: get rid of old lease mask cruft
authorSage Weil <sage@newdream.net>
Sat, 24 Jul 2010 04:02:47 +0000 (21:02 -0700)
committerSage Weil <sage@newdream.net>
Mon, 26 Jul 2010 17:24:24 +0000 (10:24 -0700)
Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/CDentry.cc
src/mds/CDentry.h
src/mds/Locker.cc
src/mds/Locker.h
src/mds/MDCache.cc
src/mds/Server.cc
src/mds/mdstypes.h

index 60ba49c30892205aa1191c07642c69cc103710ab..20416f5e3946464f263c522d35a8e6dc253ba8a9 100644 (file)
@@ -503,58 +503,42 @@ void CDentry::decode_lock_state(int type, bufferlist& bl)
 }
 
 
-ClientLease *CDentry::add_client_lease(client_t c, int mask, Session *session) 
+ClientLease *CDentry::add_client_lease(client_t c, Session *session) 
 {
   ClientLease *l;
   if (client_lease_map.count(c))
     l = client_lease_map[c];
   else {
+    dout(20) << "add_client_lease client" << c << " on " << lock << dendl;
     if (client_lease_map.empty())
       get(PIN_CLIENTLEASE);
     l = client_lease_map[c] = new ClientLease(c, this);
     l->seq = ++session->lease_seq;
-  }
   
-  int adding = ~l->mask & mask;
-  dout(20) << " had " << l->mask << " adding " << mask 
-          << " -> " << adding
-          << " ... now " << (l->mask | mask)
-          << dendl;
-  if (adding) {
     lock.get_client_lease();
-    dout(20) << "get_client_lease on " << lock << dendl;
   }
-  l->mask |= mask;
   
   return l;
 }
 
-void CDentry::remove_client_lease(ClientLease *l, int mask, Locker *locker) 
+void CDentry::remove_client_lease(ClientLease *l, Locker *locker) 
 {
   assert(l->parent == this);
 
   bool gather = false;
 
-  int removing = l->mask & mask;
-  dout(20) << "had " << l->mask << " removing " << mask << " -> " << removing
-          << " ... now " << (l->mask & ~mask) << dendl;
-  if (removing) {
-    lock.put_client_lease();
-    dout(20) << "put_client_lease on " << lock << dendl;
-    if (lock.get_num_client_lease() == 0 && !lock.is_stable())
-      gather = true;
-  }
+  dout(20) << "remove_client_lease client" << l->client << " on " << lock << dendl;
+  lock.put_client_lease();
+  if (lock.get_num_client_lease() == 0 && !lock.is_stable())
+    gather = true;
 
-  l->mask &= ~mask;
-  if (l->mask == 0) {
-    dout(20) << "removing lease for client" << l->client << dendl;
-    client_lease_map.erase(l->client);
-    l->item_lease.remove_myself();
-    l->item_session_lease.remove_myself();
-    delete l;
-    if (client_lease_map.empty())
-      put(PIN_CLIENTLEASE);
-  }
+  client_lease_map.erase(l->client);
+  l->item_lease.remove_myself();
+  l->item_session_lease.remove_myself();
+  delete l;
+
+  if (client_lease_map.empty())
+    put(PIN_CLIENTLEASE);
 
   if (gather)
     locker->eval_gather(&lock);
index 9cdae84dd4529a1538fc43224e3e811d1b7aeab1..468c4502b229ca09c35741ac4461d5f2a38675e6 100644 (file)
@@ -374,16 +374,16 @@ public:
       return client_lease_map[c];
     return 0;
   }
-  int get_client_lease_mask(client_t c) {
+  bool have_client_lease(client_t c) {
     ClientLease *l = get_client_lease(c);
     if (l) 
-      return l->mask;
+      return true;
     else
-      return 0;
+      return false;
   }
 
-  ClientLease *add_client_lease(client_t c, int mask, Session *session);
-  void remove_client_lease(ClientLease *r, int mask, class Locker *locker);  // returns remaining mask (if any), and kicks locker eval_gathers
+  ClientLease *add_client_lease(client_t c, Session *session);
+  void remove_client_lease(ClientLease *r, class Locker *locker);  // returns remaining mask (if any), and kicks locker eval_gathers
   
 
   
index 6f1bc5e4e04a6e6987107c637080b84bf6e3d7b2..3abd048145522741a4b996e3ef6a276fdbec90ee 100644 (file)
@@ -1339,8 +1339,8 @@ void Locker::remove_stale_leases(Session *session)
     ClientLease *l = *p;
     ++p;
     CDentry *parent = (CDentry*)l->parent;
-    dout(15) << " removing lease for " << l->mask << " on " << *parent << dendl;
-    parent->remove_client_lease(l, l->mask, this);
+    dout(15) << " removing lease on " << *parent << dendl;
+    parent->remove_client_lease(l, this);
   }
 }
 
@@ -1870,7 +1870,7 @@ void Locker::process_cap_update(MDRequest *mdr, client_t client,
        ClientLease *l = dn->get_client_lease(client);
        if (l) {
          dout(10) << " removing lease on " << *dn << dendl;
-         dn->remove_client_lease(l, l->mask, this);
+         dn->remove_client_lease(l, this);
        }
       } else {
        stringstream ss;
@@ -2193,7 +2193,7 @@ void Locker::handle_client_lease(MClientLease *m)
     } else {
       dout(7) << "handle_client_lease client" << client
              << " on " << *dn << dendl;
-      dn->remove_client_lease(l, CEPH_LOCK_DN, this);
+      dn->remove_client_lease(l, this);
     }
     m->put();
     break;
@@ -2222,66 +2222,37 @@ void Locker::handle_client_lease(MClientLease *m)
 }
 
 
-
-void Locker::_issue_client_lease(CDentry *dn, int mask, int pool, client_t client,
-                                bufferlist &bl, utime_t now, Session *session)
-{
-  LeaseStat e;
-  e.mask = mask;
-
-  if (mask) {
-    ClientLease *l = dn->add_client_lease(client, mask, session);
-    session->touch_lease(l);
-
-    e.seq = ++l->seq;
-
-    now += mdcache->client_lease_durations[pool];
-    mdcache->touch_client_lease(l, pool, now);
-  } else
-    e.seq = 0;
-
-  e.duration_ms = (int)(1000 * mdcache->client_lease_durations[pool]);
-  ::encode(e, bl);
-  dout(20) << "_issue_client_lease mask " << e.mask << " seq " << e.seq << " dur " << e.duration_ms << "ms "
-          << " on " << *dn << dendl;
-}
-  
-
-
-/*
-int Locker::issue_client_lease(CInode *in, client_t client, 
-                              bufferlist &bl, utime_t now, Session *session)
-{
-  int mask = CEPH_LOCK_INO;
-  int pool = 1;   // fixme.. do something smart!
-  if (in->authlock.can_lease()) mask |= CEPH_LOCK_IAUTH;
-  if (in->linklock.can_lease()) mask |= CEPH_LOCK_ILINK;
-  if (in->filelock.can_lease()) mask |= CEPH_LOCK_IFILE;
-  if (in->xattrlock.can_lease()) mask |= CEPH_LOCK_IXATTR;
-
-  _issue_client_lease(in, mask, pool, client, bl, now, session);
-  return mask;
-}
-*/
-
 void Locker::issue_client_lease(CDentry *dn, client_t client,
                               bufferlist &bl, utime_t now, Session *session)
 {
   int pool = 1;   // fixme.. do something smart!
 
-  // is it necessary?
-  // -> dont issue per-dentry lease if a dir lease is possible, or
-  //    if the client is holding EXCL|RDCACHE caps.
-  int mask = 0;
-
   CInode *diri = dn->get_dir()->get_inode();
   if (!diri->is_stray() &&  // do not issue dn leases in stray dir!
       ((!diri->filelock.can_lease(client) &&
        (diri->get_client_cap_pending(client) & (CEPH_CAP_FILE_SHARED | CEPH_CAP_FILE_EXCL)) == 0)) &&
-      dn->lock.can_lease(client))
-    mask |= 1;  // dentry lease.  always 1.
-  
-  _issue_client_lease(dn, mask, pool, client, bl, now, session);
+      dn->lock.can_lease(client)) {
+    // issue a dentry lease
+    ClientLease *l = dn->add_client_lease(client, session);
+    session->touch_lease(l);
+    
+    now += mdcache->client_lease_durations[pool];
+    mdcache->touch_client_lease(l, pool, now);
+
+    LeaseStat e;
+    e.mask = 1;
+    e.seq = ++l->seq;
+    e.duration_ms = (int)(1000 * mdcache->client_lease_durations[pool]);
+    ::encode(e, bl);
+    dout(20) << "issue_client_lease seq " << e.seq << " dur " << e.duration_ms << "ms "
+            << " on " << *dn << dendl;
+  } else {
+    // null lease
+    LeaseStat e;
+    e.mask = 0;
+    ::encode(e, bl);
+    dout(20) << "issue_client_lease no/null lease on " << *dn << dendl;
+  }
 }
 
 
@@ -2294,9 +2265,6 @@ void Locker::revoke_client_leases(SimpleLock *lock)
        p++) {
     ClientLease *l = p->second;
     
-    if (l->mask == 0)
-      continue;
-    
     n++;
     assert(lock->get_type() == CEPH_LOCK_DN);
 
index b117e166e2529960f28f97e1773a1fa3768733e1..31ae5ff3e97e89761b53341eee44d621a5ba9578 100644 (file)
@@ -241,7 +241,6 @@ private:
 public:
   void handle_client_lease(class MClientLease *m);
 
-  void _issue_client_lease(CDentry *dn, int mask, int pool, client_t client, bufferlist &bl, utime_t now, Session *session);
   void issue_client_lease(CDentry *dn, client_t client, bufferlist &bl, utime_t now, Session *session);
   void revoke_client_leases(SimpleLock *lock);
 };
index d6fcb89883b78f77b1d1ff7b769eee6acdd094c4..06a6d97d02c9eef6bc78f2f05337b87a17a34754 100644 (file)
@@ -5314,7 +5314,7 @@ void MDCache::trim_client_leases()
       if (r->ttl > now) break;
       CDentry *dn = (CDentry*)r->parent;
       dout(10) << " expiring client" << r->client << " lease of " << *dn << dendl;
-      dn->remove_client_lease(r, r->mask, mds->locker);
+      dn->remove_client_lease(r, mds->locker);
     }
     int after = client_leases[pool].size();
     dout(10) << "trim_client_leases pool " << pool << " trimmed "
index a35f909099f0891ab9ed6974769f167a0ec4d23a..d4908e0cc2ecddf621220454ca5c5c02ac8eed73 100644 (file)
@@ -293,7 +293,7 @@ void Server::_session_logged(Session *session, uint64_t state_seq, bool open, ve
       ClientLease *r = session->leases.front();
       CDentry *dn = (CDentry*)r->parent;
       dout(20) << " killing client lease of " << *dn << dendl;
-      dn->remove_client_lease(r, r->mask, mds->locker);
+      dn->remove_client_lease(r, mds->locker);
     }
     while (!session->requests.empty()) {
       MDRequest *mdr = session->requests.front(member_offset(MDRequest,
index a3ca5d3a4ed293e79115349f98a0fc0f97b6f7d0..ad24f1e6a5bd1cd2f2dc1bbd9d9a76603da9557b 100644 (file)
@@ -1050,7 +1050,6 @@ class MDSCacheObject;
  */
 struct ClientLease {
   client_t client;
-  int mask;                 // CEPH_STAT_MASK_*
   MDSCacheObject *parent;
 
   ceph_seq_t seq;
@@ -1059,7 +1058,7 @@ struct ClientLease {
   xlist<ClientLease*>::item item_lease;         // global list
 
   ClientLease(client_t c, MDSCacheObject *p) : 
-    client(c), mask(0), parent(p), seq(0),
+    client(c), parent(p), seq(0),
     item_session_lease(this),
     item_lease(this) { }
 };