]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
TokenBucketThrottle: Add name for TokenBucketThrottle.
authorShiyang Ruan <ruansy.fnst@cn.fujitsu.com>
Wed, 28 Nov 2018 02:23:34 +0000 (10:23 +0800)
committerShiyang Ruan <ruansy.fnst@cn.fujitsu.com>
Fri, 7 Dec 2018 01:54:15 +0000 (09:54 +0800)
In order to specific which one is failed when applying the limit.

Signed-off-by: Shiyang Ruan <ruansy.fnst@cn.fujitsu.com>
src/common/Throttle.cc
src/common/Throttle.h
src/librbd/io/ImageRequestWQ.cc

index 4d0e3409664750fb9ae11284326bc3e345a74159..40a8e6ed3eb95846b703c46e8c3c37246edb2998 100644 (file)
@@ -656,6 +656,10 @@ void OrderedThrottle::complete_pending_ops(std::unique_lock<std::mutex>& l) {
   }
 }
 
+#undef dout_prefix
+#define dout_prefix *_dout << "TokenBucketThrottle(" << m_name << " " \
+                           << (void*)this << ") "
+
 uint64_t TokenBucketThrottle::Bucket::get(uint64_t c) {
   if (0 == max) {
     return 0;
@@ -700,13 +704,15 @@ void TokenBucketThrottle::Bucket::set_max(uint64_t m) {
 
 TokenBucketThrottle::TokenBucketThrottle(
     CephContext *cct,
+    const std::string &name,
     uint64_t capacity,
     uint64_t avg,
     SafeTimer *timer,
     Mutex *timer_lock)
-  : m_cct(cct), m_throttle(m_cct, "token_bucket_throttle", capacity),
+  : m_cct(cct), m_name(name),
+    m_throttle(m_cct, name + "_bucket", capacity),
     m_avg(avg), m_timer(timer), m_timer_lock(timer_lock),
-    m_lock("token_bucket_throttle_lock")
+    m_lock(name + "_lock")
 {}
 
 TokenBucketThrottle::~TokenBucketThrottle() {
index 0164dc9815ab3bf611a57ece55bdf90766b9ae7c..f382140e8bfb9fa996a69f5ea9262d9defdf6dc6 100644 (file)
@@ -357,6 +357,7 @@ class TokenBucketThrottle {
   };
 
   CephContext *m_cct;
+  const std::string m_name;
   Bucket m_throttle;
   uint64_t m_avg = 0;
   uint64_t m_burst = 0;
@@ -406,11 +407,16 @@ class TokenBucketThrottle {
   double m_schedule_tick = 1.0;
 
 public:
-  TokenBucketThrottle(CephContext *cct, uint64_t capacity, uint64_t avg,
+  TokenBucketThrottle(CephContext *cct, const std::string &name,
+                      uint64_t capacity, uint64_t avg,
                       SafeTimer *timer, Mutex *timer_lock);
   
   ~TokenBucketThrottle();
 
+  const std::string &get_name() {
+    return m_name;
+  }
+
   template <typename T, typename I, void(T::*MF)(int, I*, uint64_t)>
   void add_blocker(uint64_t c, T *handler, I *item, uint64_t flag) {
     Context *ctx = new FunctionContext([handler, item, flag](int r) {
index 9aef36cc40097e38d5b37cddcf10abd1683965e8..81c39d9b1420a0c8b7508705750acda90db8b424 100644 (file)
@@ -79,13 +79,13 @@ struct ImageRequestWQ<I>::C_RefreshFinish : public Context {
   }
 };
 
-static std::list<uint64_t> throttle_flags = {
-  RBD_QOS_IOPS_THROTTLE,
-  RBD_QOS_BPS_THROTTLE,
-  RBD_QOS_READ_IOPS_THROTTLE,
-  RBD_QOS_WRITE_IOPS_THROTTLE,
-  RBD_QOS_READ_BPS_THROTTLE,
-  RBD_QOS_WRITE_BPS_THROTTLE
+static std::map<uint64_t, std::string> throttle_flags = {
+  { RBD_QOS_IOPS_THROTTLE,       "rbd_qos_iops_throttle"       },
+  { RBD_QOS_BPS_THROTTLE,        "rbd_qos_bps_throttle"        },
+  { RBD_QOS_READ_IOPS_THROTTLE,  "rbd_qos_read_iops_throttle"  },
+  { RBD_QOS_WRITE_IOPS_THROTTLE, "rbd_qos_write_iops_throttle" },
+  { RBD_QOS_READ_BPS_THROTTLE,   "rbd_qos_read_bps_throttle"   },
+  { RBD_QOS_WRITE_BPS_THROTTLE,  "rbd_qos_write_bps_throttle"  }
 };
 
 template <typename I>
@@ -103,7 +103,8 @@ ImageRequestWQ<I>::ImageRequestWQ(I *image_ctx, const string &name,
 
   for (auto flag : throttle_flags) {
     m_throttles.push_back(make_pair(
-         flag, new TokenBucketThrottle(cct, 0, 0, timer, timer_lock)));
+      flag.first,
+      new TokenBucketThrottle(cct, flag.second, 0, 0, timer, timer_lock)));
   }
 
   this->register_work_queue();
@@ -638,7 +639,7 @@ void ImageRequestWQ<I>::apply_qos_limit(const uint64_t flag,
 
   int r = throttle->set_limit(limit, burst);
   if (r < 0) {
-    lderr(cct) << "invalid qos parameter: "
+    lderr(cct) << throttle->get_name() << ": invalid qos parameter: "
                << "burst(" << burst << ") is less than "
                << "limit(" << limit << ")" << dendl;
     // if apply failed, we should at least make sure the limit works.