]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge branch 'wip-extensible_tier-redirect' of git://github.com/myoungwon/ceph into...
authorSage Weil <sage@redhat.com>
Sat, 27 May 2017 02:50:14 +0000 (22:50 -0400)
committerSage Weil <sage@redhat.com>
Sat, 27 May 2017 02:50:14 +0000 (22:50 -0400)
1  2 
src/include/rados/librados.h
src/include/rados/librados.hpp
src/librados/librados.cc
src/osd/PrimaryLogPG.cc
src/osd/PrimaryLogPG.h
src/osd/osd_types.cc
src/osd/osd_types.h
src/osdc/Objecter.h

Simple merge
Simple merge
Simple merge
index c8fc5cb5b147afa8c12c2056942599a572e7f404,c462047a7f0f0ec16bfad5e22d3a0259f4ef540e..e6d57cd09e5e5c78186b431a30ab15c350501ed8
@@@ -2292,10 -2245,54 +2299,57 @@@ void PrimaryLogPG::do_op(OpRequestRef& 
    } else if (op->may_write() || op->may_cache()) {
      osd->logger->tinc(l_osd_op_w_prepare_lat, prepare_latency);
    }
 +
 +  // force recovery of the oldest missing object if too many logs
 +  maybe_force_recovery();
  }
+ PrimaryLogPG::cache_result_t PrimaryLogPG::maybe_handle_manifest_detail(
+   OpRequestRef op,
+   bool write_ordered,
+   ObjectContextRef obc)
+ {
+   if (static_cast<const MOSDOp *>(op->get_req())->get_flags() &
+       CEPH_OSD_FLAG_IGNORE_REDIRECT) {
+     dout(20) << __func__ << ": ignoring redirect due to flag" << dendl;
+     return cache_result_t::NOOP;
+   }
+   if (obc)
+     dout(10) << __func__ << " " << obc->obs.oi << " "
+        << (obc->obs.exists ? "exists" : "DNE")
+        << dendl;
+   // if it is write-ordered and blocked, stop now
+   if (obc.get() && obc->is_blocked() && write_ordered) {
+     // we're already doing something with this object
+     dout(20) << __func__ << " blocked on " << obc->obs.oi.soid << dendl;
+     return cache_result_t::NOOP;
+   }
+   vector<OSDOp> ops = static_cast<const MOSDOp*>(op->get_req())->ops;
+   for (vector<OSDOp>::iterator p = ops.begin(); p != ops.end(); ++p) {
+     OSDOp& osd_op = *p;
+     ceph_osd_op& op = osd_op.op;
+     if (op.op == CEPH_OSD_OP_SET_REDIRECT) {
+       return cache_result_t::NOOP;
+     }
+   }
+   switch (obc->obs.oi.manifest.type) {
+   case object_manifest_t::TYPE_REDIRECT:
+     if (op->may_write() || write_ordered) {
+       do_proxy_write(op, obc->obs.oi.soid, obc);
+     } else {
+       do_proxy_read(op, obc);
+     }
+     return cache_result_t::HANDLED_PROXY;
+   case object_manifest_t::TYPE_CHUNKED:
+   default:
+     assert(0 == "unrecognized manifest type");
+   }
+   return cache_result_t::NOOP;
+ }
  
  void PrimaryLogPG::record_write_error(OpRequestRef op, const hobject_t &soid,
                                      MOSDOpReply *orig_reply, int r)
Simple merge
Simple merge
Simple merge
Simple merge