From 9e10934d59f50aea008138ec0dce11f7c6d7b9b2 Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Fri, 12 Jul 2019 21:01:39 +0900 Subject: [PATCH] src/osd/PrimaryLogPG.cc: do manifest_flush() before tier_promote() when an object is dirty Signed-off-by: Myoungwon Oh --- src/osd/PrimaryLogPG.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index eeb619345c0f1..6635ab9d46090 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -2276,10 +2276,20 @@ PrimaryLogPG::cache_result_t PrimaryLogPG::maybe_handle_manifest_detail( ceph_osd_op& op = osd_op.op; if (op.op == CEPH_OSD_OP_SET_REDIRECT || op.op == CEPH_OSD_OP_SET_CHUNK || - op.op == CEPH_OSD_OP_TIER_PROMOTE || op.op == CEPH_OSD_OP_UNSET_MANIFEST || op.op == CEPH_OSD_OP_TIER_FLUSH) { return cache_result_t::NOOP; + } else if (op.op == CEPH_OSD_OP_TIER_PROMOTE) { + bool is_dirty = false; + for (auto& p : obc->obs.oi.manifest.chunk_map) { + if (p.second.is_dirty()) { + is_dirty = true; + } + } + if (is_dirty) { + start_flush(OpRequestRef(), obc, true, NULL, std::nullopt); + } + return cache_result_t::NOOP; } } -- 2.39.5