]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: trim client replicas, fix client duration calc
authorSage Weil <sage@newdream.net>
Tue, 25 Mar 2008 13:56:58 +0000 (06:56 -0700)
committerSage Weil <sage@newdream.net>
Tue, 25 Mar 2008 13:56:58 +0000 (06:56 -0700)
src/client/Client.cc
src/config.cc
src/mds/MDCache.cc
src/mds/MDCache.h
src/mds/MDS.cc

index 4235fe9b95cfd09087c994479071fd6cab7f3a12..7473f5e263ed106f05cffb0fdb72a42b9e9efd7c 100644 (file)
@@ -747,7 +747,12 @@ MClientReply *Client::make_request(MClientRequest *req, Inode **ppin, int use_md
   // insert trace
   if (reply->get_result() >= 0) {
     utime_t ttl = request.sent_stamp;
-    ttl += 1000.0 * (float)reply->get_lease_duration_ms();
+    float dur = (float)reply->get_lease_duration_ms() / 1000.0;
+    ttl += dur;
+    dout(20) << "make_request got ttl of " << ttl
+            << " (sent_stamp " << request.sent_stamp
+            << " + " << dur << "s"
+            << ")" << dendl;
     Inode *in = insert_trace(reply, ttl);
     if (ppin)
       *ppin = in;
@@ -845,8 +850,10 @@ void Client::send_request(MetaRequest *request, int mds)
 
   r->set_mdsmap_epoch(mdsmap->get_epoch());
 
-  if (request->mds.empty())
+  if (request->mds.empty()) {
     request->sent_stamp = g_clock.now();
+    dout(20) << "send_request set sent_stamp to " << request->sent_stamp << dendl;
+  }
 
   dout(10) << "send_request " << *r << " to mds" << mds << dendl;
   messenger->send_message(r, mdsmap->get_inst(mds));
index 81a3e8d1124e0a393492ad0a31ea5440b0221474..a26e26c3da2270975b49eb3bfd1977305a802bea 100644 (file)
@@ -284,7 +284,7 @@ md_config_t g_conf = {
 
   mds_cap_timeout: 100,        // cap bits time out if client idle
   mds_session_autoclose: 300, // autoclose idle session 
-  mds_client_lease: 100,
+  mds_client_lease: 30,
 
   mds_tick_interval: 5,
 
index 450d4f603a95ded0b479b844ea2ba74e6441b5d1..55b0443f5c322ba02f19d25f963b3235e4ebdbfe 100644 (file)
@@ -3494,6 +3494,24 @@ void MDCache::dentry_remove_replica(CDentry *dn, int from)
 
 
 
+void MDCache::trim_client_replicas()
+{
+  dout(10) << "trim_client_replicas start - " << client_replicas.size() << " replicas" << dendl;
+
+  utime_t now = g_clock.now();
+  while (!client_replicas.empty()) {
+    ClientReplica *r = client_replicas.front();
+    if (r->ttl > now) break;
+    MDSCacheObject *p = r->parent;
+    dout(10) << " expiring client" << r->client << " replica of " << *p << dendl;
+    p->remove_client_replica(r);
+  }
+
+  dout(10) << "trim_client_replicas finish - " << client_replicas.size() << " replicas" << dendl;
+}
+
+
+
 // =========================================================================================
 // shutdown
 
index ff8cbe93769578b068bd23e1b6946c319177b2c0..29a45f25d0ecb25fc4474321a68f55135df24232 100644 (file)
@@ -503,6 +503,8 @@ public:
   void send_expire_messages(map<int, MCacheExpire*>& expiremap);
   void trim_non_auth();      // trim out trimmable non-auth items
 
+  void trim_client_replicas();
+
   // shutdown
   void shutdown_start();
   void shutdown_check();
index 4e31ab080d3d2c926e5ddf54266715249c3d6923..f2c0496f58b2f017567ce5803d69d56568e9f97a 100644 (file)
@@ -1140,6 +1140,7 @@ void MDS::_dispatch(Message *m)
 
     // trim cache
     mdcache->trim();
+    mdcache->trim_client_replicas();
   }