This fixes a bug when the time of the OSDs and clients are not synchronized
(especially when client is ahead of OSD), and the cache tier dirty ratio
reaches the threshold, the agent skips the flush work because it thinks
the object is too young.

The skipping flush code is as following:

  if (obc->obs.oi.mtime + utime_t(pool.info.cache_min_flush_age, 0) > now) {
    dout(20) << __func__ << " skip (too young) " << obc->obs.oi << dendl;
    osd->logger->inc(l_osd_agent_skip);
    return false;
  }

Signed-off-by: Zhiqiang Wang <[email protected]>
---
 src/osd/ReplicatedPG.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index 5d822c1..1c7c527 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -1805,7 +1805,7 @@ void ReplicatedPG::execute_ctx(OpContext *ctx)

     // version
     ctx->at_version = get_next_version();
-    ctx->mtime = m->get_mtime();
+    ctx->mtime = ceph_clock_now(cct);

     dout(10) << "do_op " << soid << " " << ctx->ops
             << " ov " << obc->obs.oi.version << " av " << ctx->at_version
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to