]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds: don't report slow request for blocked filelock request
authorYan, Zheng <zyan@redhat.com>
Sat, 28 Apr 2018 09:00:09 +0000 (17:00 +0800)
committerYan, Zheng <zyan@redhat.com>
Tue, 1 May 2018 04:54:29 +0000 (12:54 +0800)
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Fixes: http://tracker.ceph.com/issues/22428
src/common/TrackedOp.cc
src/common/TrackedOp.h
src/mds/Server.cc

index e937723b5f00db747d03ca5238345dc6c7c1b683..feb3e9f7308324c4181c63d95c31866d9d1750ce 100644 (file)
@@ -350,6 +350,8 @@ bool OpTracker::with_slow_ops_in_flight(utime_t* oldest_secs,
       // no more slow ops in flight
       return false;
     }
+    if (!op.warn_interval_multiplier)
+      return true;
     slow++;
     if (warned >= log_threshold) {
       // enough samples of slow ops
@@ -398,7 +400,8 @@ bool OpTracker::check_ops_in_flight(std::string* summary,
     op.warn_interval_multiplier *= 2;
   };
   int slow = 0;
-  if (with_slow_ops_in_flight(&oldest_secs, &slow, &warned, warn_on_slow_op)) {
+  if (with_slow_ops_in_flight(&oldest_secs, &slow, &warned, warn_on_slow_op) &&
+      slow > 0) {
     stringstream ss;
     ss << slow << " slow requests, "
        << warned << " included below; oldest blocked for > "
index 1a34507d1b536c0ee5980e699be80ba688869903..2e3cc09a22c2fdbeedf7ab1fc535ace6b301eff3 100644 (file)
@@ -362,6 +362,10 @@ public:
   void mark_event(const char *event,
                  utime_t stamp=ceph_clock_now());
 
+  void mark_nowarn() {
+    warn_interval_multiplier = 0;
+  }
+
   virtual const char *state_string() const {
     Mutex::Locker l(lock);
     return events.rbegin()->c_str();
index 347a5c33ff4cf42adc7b0a5c8eed224130bf1be4..72032c7b336372ef114442935bcc15240ae662b7 100644 (file)
@@ -4110,6 +4110,8 @@ void Server::handle_client_file_setlock(MDRequestRef& mdr)
        mdr->more()->flock_was_waiting = true;
        mds->locker->drop_locks(mdr.get());
        mdr->drop_local_auth_pins();
+       mdr->mark_event("failed to add lock, waiting");
+       mdr->mark_nowarn();
        cur->add_waiter(CInode::WAIT_FLOCK, new C_MDS_RetryRequest(mdcache, mdr));
       }
     } else