When the object is deleted, there is no need to promote it.
Signed-off-by: Zhiqiang Wang <zhiqiang.wang@intel.com>
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:
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
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
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();
void set_pg_op();
void set_promote();
void set_skip_handle_cache();
+ void set_skip_promote();
void _dump(utime_t now, Formatter *f) const;
}
// 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);
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),
};