]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: use Message::get_cost() function for queueing
authorSage Weil <sage@inktank.com>
Mon, 21 Jan 2013 21:57:38 +0000 (13:57 -0800)
committerSamuel Just <sam.just@inktank.com>
Sat, 26 Jan 2013 01:16:13 +0000 (17:16 -0800)
The data payload is a decent proxy for cost in most cases, but not all.

Signed-off-by: Sage Weil <sage@inktank.com>
(cherry picked from commit e8e0da1a577e24cd4aad71fb94d8b244e2ac7300)

src/msg/DispatchQueue.cc
src/msg/Message.h
src/osd/OSD.cc

index 04e405581a7609458585d67ce22a1aea020eb6c9..31f37cfd5f6384ac97a8b428a5e9d8708f1bc553 100644 (file)
@@ -37,7 +37,7 @@ void DispatchQueue::enqueue(Message *m, int priority, uint64_t id)
       id, priority, QueueItem(m));
   } else {
     mqueue.enqueue(
-      id, priority, m->get_data().length(), QueueItem(m));
+      id, priority, m->get_cost(), QueueItem(m));
   }
   cond.Signal();
 }
@@ -51,7 +51,7 @@ void DispatchQueue::local_delivery(Message *m, int priority)
       0, priority, QueueItem(m));
   } else {
     mqueue.enqueue(
-      0, priority, m->get_data().length(), QueueItem(m));
+      0, priority, m->get_cost(), QueueItem(m));
   }
   cond.Signal();
 }
index fc434ed9b85a49a1d31cc1f5b1a9319fc237a4c3..f7c9ec925e17b26f9d9280e680b18d1cb6e738e5 100644 (file)
@@ -422,6 +422,10 @@ public:
     footer.data_crc = data.crc32c(0);
   }
 
+  virtual int get_cost() const {
+    return data.length();
+  }
+
   // type
   int get_type() const { return header.type; }
   void set_type(int t) { header.type = t; }
index aa6dd5f07ea20460f403ed86d168de632ccd6c06..e94229277e018c4dda70720748e4d1989872f122 100644 (file)
@@ -6038,7 +6038,7 @@ void OSD::enqueue_op(PG *pg, OpRequestRef op)
 {
   utime_t latency = ceph_clock_now(g_ceph_context) - op->request->get_recv_stamp();
   dout(15) << "enqueue_op " << op << " prio " << op->request->get_priority()
-          << " cost " << op->request->get_data().length()
+          << " cost " << op->request->get_cost()
           << " latency " << latency
           << " " << *(op->request) << dendl;
   op_wq.queue(make_pair(PGRef(pg), op));
@@ -6047,7 +6047,7 @@ void OSD::enqueue_op(PG *pg, OpRequestRef op)
 void OSD::OpWQ::_enqueue(pair<PGRef, OpRequestRef> item)
 {
   unsigned priority = item.second->request->get_priority();
-  unsigned cost = item.second->request->get_data().length();
+  unsigned cost = item.second->request->get_cost();
   if (priority >= CEPH_MSG_PRIO_LOW)
     pqueue.enqueue_strict(
       item.second->request->get_source_inst(),
@@ -6069,7 +6069,7 @@ void OSD::OpWQ::_enqueue_front(pair<PGRef, OpRequestRef> item)
     }
   }
   unsigned priority = item.second->request->get_priority();
-  unsigned cost = item.second->request->get_data().length();
+  unsigned cost = item.second->request->get_cost();
   if (priority >= CEPH_MSG_PRIO_LOW)
     pqueue.enqueue_strict_front(
       item.second->request->get_source_inst(),
@@ -6127,7 +6127,7 @@ void OSD::dequeue_op(PGRef pg, OpRequestRef op)
 {
   utime_t latency = ceph_clock_now(g_ceph_context) - op->request->get_recv_stamp();
   dout(10) << "dequeue_op " << op << " prio " << op->request->get_priority()
-          << " cost " << op->request->get_data().length()
+          << " cost " << op->request->get_cost()
           << " latency " << latency
           << " " << *(op->request)
           << " pg " << *pg << dendl;