MOSDOp *m = static_cast<MOSDOp*>(op->get_req());
const object_locator_t& oloc = m->get_object_locator();
+ if (must_promote) {
+ promote_object(obc, missing_oid, oloc, op);
+ return true;
+ }
+
switch (pool.info.cache_mode) {
case pg_pool_t::CACHEMODE_NONE:
return false;
waiting_for_cache_not_full.push_back(op);
return true;
}
- if (!must_promote && can_skip_promote(op, obc)) {
+ if (can_skip_promote(op, obc)) {
return false;
}
- if (op->may_write() || write_ordered || must_promote || !hit_set) {
+ if (op->may_write() || write_ordered || !hit_set) {
promote_object(obc, missing_oid, oloc, op);
} else {
switch (pool.info.min_read_recency_for_promote) {
return true;
case pg_pool_t::CACHEMODE_FORWARD:
- if (must_promote)
- promote_object(obc, missing_oid, oloc, op);
- else
- do_cache_redirect(op, obc);
+ do_cache_redirect(op, obc);
return true;
case pg_pool_t::CACHEMODE_READONLY:
waiting_for_cache_not_full.push_back(op);
return true;
}
- if (!must_promote && can_skip_promote(op, obc)) {
+ if (can_skip_promote(op, obc)) {
return false;
}
promote_object(obc, missing_oid, oloc, op);
}
// If it is a read, we can read, we need to forward it
- if (must_promote)
- promote_object(obc, missing_oid, oloc, op);
- else
- do_cache_redirect(op, obc);
+ do_cache_redirect(op, obc);
return true;
default: