]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
*** empty log message ***
authorsage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Tue, 21 Feb 2006 19:16:10 +0000 (19:16 +0000)
committersage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Tue, 21 Feb 2006 19:16:10 +0000 (19:16 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@661 29311d96-e01e-0410-9327-a35deaab8ce9

ceph/config.cc
ceph/config.h
ceph/osd/OSD.cc
ceph/osd/OSD.h

index bcf152e39a215b75178672811a2404ed1a3287ad..08b6b814a22c14fb0df2554fb3037df6490f7611 100644 (file)
Binary files a/ceph/config.cc and b/ceph/config.cc differ
index 7392848c92887b9ace6c3fd8745a2b3640a9a29f..319e0e4a4a930589961e860abbc5247ad86d02f6 100644 (file)
@@ -99,6 +99,7 @@ struct md_config_t {
   int   osd_pg_layout;
   int   osd_max_rep;
   int   osd_maxthreads;
+  int   osd_max_opq;
   bool  osd_mkfs;
   bool  osd_fake_sync;
 
index f079f901002f8dbfe0f5c4fcc757c220d5a9b87b..78c6d1be136c987f37a3f95614116989e6ac211a 100644 (file)
@@ -2041,6 +2041,11 @@ void OSD::handle_op(MOSDOp *op)
  */
 void OSD::enqueue_op(object_t oid, MOSDOp *op)
 {
+  while (pending_ops > g_conf.osd_max_opq) {
+       dout(0) << "enqueue_op waiting for pending_ops " << pending_ops << " to drop to " << g_conf.osd_max_opq << endl;
+       op_queue_cond.Wait(osd_lock);
+  }
+
   op_queue[oid].push_back(op);
   pending_ops++;
   
@@ -2083,6 +2088,10 @@ void OSD::dequeue_op(object_t oid)
   {
        dout(10) << "dequeue_op finish op " << op << endl;
        assert(pending_ops > 0);
+
+       if (pending_ops > g_conf.osd_max_opq) 
+         op_queue_cond.Signal();
+       
        pending_ops--;
        if (pending_ops == 0 && waiting_for_no_ops)
          no_pending_ops.Signal();
@@ -2386,7 +2395,7 @@ void OSD::op_modify(MOSDOp *op)
        // version?  clean?
        version_t ov = 0;  // 0 == dne (yet)
        store->getattr(oid, "version", &ov, sizeof(ov));
-       version_t nv = messenger->peek_lamport();
+       version_t nv = op->get_lamport_stamp();
        assert(nv > ov);
        
        dout(12) << opname << " " << hex << oid << dec << " v " << nv << "  off " << op->get_offset() << " len " << op->get_length() << endl;  
index 3454f7f9994206cb1afde8def57de7d93ec5ec8c..60d65dcb3168cb43681017dd5185b5d20e45fa8f 100644 (file)
@@ -115,6 +115,7 @@ class OSD : public Dispatcher {
   int   pending_ops;
   bool  waiting_for_no_ops;
   Cond  no_pending_ops;
+  Cond  op_queue_cond;
 
   void wait_for_no_ops();