From: Zhiqiang Wang Date: Wed, 27 May 2015 13:54:35 +0000 (+0800) Subject: osd: skip promotion when proxying a delete op X-Git-Tag: v9.1.0~345^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fa5b6e6d5e59c1dc501c834f2e8625efe601df38;p=ceph.git osd: skip promotion when proxying a delete op When the object is deleted, there is no need to promote it. Signed-off-by: Zhiqiang Wang --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index f10ead5c23f5..00df5129179d 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -8642,6 +8642,10 @@ int OSD::init_op_flags(OpRequestRef& op) iter->op.flags == CEPH_OSD_OP_FLAG_FAILOK) { op->set_skip_handle_cache(); } + // skip promotion when proxying a delete op + if (m->ops.size() == 1) { + op->set_skip_promote(); + } break; case CEPH_OSD_OP_CACHE_TRY_FLUSH: diff --git a/src/osd/OpRequest.cc b/src/osd/OpRequest.cc index fb6007c0fa7c..7104a3156637 100644 --- a/src/osd/OpRequest.cc +++ b/src/osd/OpRequest.cc @@ -104,6 +104,9 @@ bool OpRequest::need_promote() { bool OpRequest::need_skip_handle_cache() { return check_rmw(CEPH_OSD_RMW_FLAG_SKIP_HANDLE_CACHE); } +bool OpRequest::need_skip_promote() { + return check_rmw(CEPH_OSD_RMW_FLAG_SKIP_PROMOTE); +} void OpRequest::set_rmw_flags(int flags) { #ifdef WITH_LTTNG @@ -123,6 +126,7 @@ void OpRequest::set_pg_op() { set_rmw_flags(CEPH_OSD_RMW_FLAG_PGOP); } void OpRequest::set_cache() { set_rmw_flags(CEPH_OSD_RMW_FLAG_CACHE); } void OpRequest::set_promote() { set_rmw_flags(CEPH_OSD_RMW_FLAG_FORCE_PROMOTE); } void OpRequest::set_skip_handle_cache() { set_rmw_flags(CEPH_OSD_RMW_FLAG_SKIP_HANDLE_CACHE); } +void OpRequest::set_skip_promote() { set_rmw_flags(CEPH_OSD_RMW_FLAG_SKIP_PROMOTE); } void OpRequest::mark_flag_point(uint8_t flag, const string& s) { #ifdef WITH_LTTNG diff --git a/src/osd/OpRequest.h b/src/osd/OpRequest.h index 0a79a7de536c..c8649b8500a3 100644 --- a/src/osd/OpRequest.h +++ b/src/osd/OpRequest.h @@ -67,6 +67,7 @@ struct OpRequest : public TrackedOp { bool need_class_write_cap(); bool need_promote(); bool need_skip_handle_cache(); + bool need_skip_promote(); void set_read(); void set_write(); void set_cache(); @@ -75,6 +76,7 @@ struct OpRequest : public TrackedOp { void set_pg_op(); void set_promote(); void set_skip_handle_cache(); + void set_skip_promote(); void _dump(utime_t now, Formatter *f) const; diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 79aedf20bf63..aa87d85a9886 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1863,9 +1863,11 @@ bool ReplicatedPG::maybe_handle_cache(OpRequestRef op, } // Promote too? - maybe_promote(obc, missing_oid, oloc, in_hit_set, - pool.info.min_write_recency_for_promote, - OpRequestRef()); + if (!op->need_skip_promote()) { + maybe_promote(obc, missing_oid, oloc, in_hit_set, + pool.info.min_write_recency_for_promote, + OpRequestRef()); + } } else { if (can_proxy_read) do_proxy_read(op); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 94de7abdb2ef..73df5bb7ccf3 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -261,6 +261,7 @@ enum { CEPH_OSD_RMW_FLAG_CACHE = (1 << 6), CEPH_OSD_RMW_FLAG_FORCE_PROMOTE = (1 << 7), CEPH_OSD_RMW_FLAG_SKIP_HANDLE_CACHE = (1 << 8), + CEPH_OSD_RMW_FLAG_SKIP_PROMOTE = (1 << 9), };