From 626c569200f6151cae6c9ef29a40cdafb49d3102 Mon Sep 17 00:00:00 2001 From: Zhiqiang Wang Date: Wed, 27 May 2015 16:20:36 +0800 Subject: [PATCH] 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 --- src/osd/OSD.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index f446cd9e0335c..40f4fa3951cea 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; -- 2.39.5