From: Zhiqiang Wang Date: Wed, 27 May 2015 08:20:36 +0000 (+0800) Subject: osd: force promote for object overwrites on a ec base pool X-Git-Tag: v9.1.0~345^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=626c569200f6151cae6c9ef29a40cdafb49d3102;p=ceph.git osd: force promote for object overwrites on a ec base pool When doing object overwrites on the ec base pool, the write op can't be proxied. Always force promotion in this case. Signed-off-by: Zhiqiang Wang --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index f446cd9e0335..40f4fa3951ce 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -8651,6 +8651,24 @@ int OSD::init_op_flags(OpRequestRef& op) if (m->ops.size() == 1) { op->set_skip_promote(); } + break; + + case CEPH_OSD_OP_WRITE: + case CEPH_OSD_OP_ZERO: + case CEPH_OSD_OP_TRUNCATE: + // always force promotion for object overwrites on a ec base pool + { + int64_t poolid = m->get_pg().pool(); + const pg_pool_t *pool = osdmap->get_pg_pool(poolid); + if (pool->is_tier()) { + const pg_pool_t *base_pool = osdmap->get_pg_pool(pool->tier_of); + assert(base_pool); + if (base_pool->is_erasure()) { + op->set_promote(); + } + } + } + break; default: break;