]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD: queue ops based on message priority
authorSamuel Just <sam.just@inktank.com>
Sat, 29 Sep 2012 00:24:40 +0000 (17:24 -0700)
committerSamuel Just <sam.just@inktank.com>
Tue, 13 Nov 2012 18:45:00 +0000 (10:45 -0800)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/OSD.cc

index dc64e08c8b213779dfeb75d3ad117fc43fde4034..84e94d3d3705f981a9f8c4c967e2374af8e8fc18 100644 (file)
@@ -5613,8 +5613,15 @@ void OSD::enqueue_op(PG *pg, OpRequestRef op)
 
 void OSD::OpWQ::_enqueue(pair<PGRef, OpRequestRef> item)
 {
-  pqueue.enqueue(item.second->request->get_source_inst(),
-                1, 1, item);
+  unsigned priority = item.second->request->get_priority();
+  unsigned cost = item.second->request->get_data().length();
+  if (priority >= CEPH_MSG_PRIO_LOW)
+    pqueue.enqueue_immediate(
+      item.second->request->get_source_inst(),
+      priority, item);
+  else
+    pqueue.enqueue(item.second->request->get_source_inst(),
+      priority, cost, item);
   osd->logger->set(l_osd_opq, pqueue.length());
 }
 
@@ -5628,8 +5635,15 @@ void OSD::OpWQ::_enqueue_front(pair<PGRef, OpRequestRef> item)
       pg_for_processing[&*(item.first)].pop_back();
     }
   }
-  pqueue.enqueue_front(item.second->request->get_source_inst(),
-                      1, 1, item);
+  unsigned priority = item.second->request->get_priority();
+  unsigned cost = item.second->request->get_data().length();
+  if (priority >= CEPH_MSG_PRIO_HIGH)
+    pqueue.enqueue_immediate_front(
+      item.second->request->get_source_inst(),
+      priority, item);
+  else
+    pqueue.enqueue_front(item.second->request->get_source_inst(),
+      priority, cost, item);
   osd->logger->set(l_osd_opq, pqueue.length());
 }