dout(20) << __func__ << " " << soid << " " << ctx
<< " op " << pg_log_entry_t::get_op_name(log_op_type)
<< dendl;
+ utime_t now = ceph_clock_now(cct);
// snapset
bufferlist bss;
ctx->snapset_obc->obs.oi.version = ctx->at_version;
ctx->snapset_obc->obs.oi.last_reqid = ctx->reqid;
ctx->snapset_obc->obs.oi.mtime = ctx->mtime;
+ ctx->snapset_obc->obs.oi.local_mtime = now;
bufferlist bv(sizeof(ctx->new_obs.oi));
::encode(ctx->snapset_obc->obs.oi, bv);
if (ctx->mtime != utime_t()) {
ctx->new_obs.oi.mtime = ctx->mtime;
dout(10) << " set mtime to " << ctx->new_obs.oi.mtime << dendl;
+ ctx->new_obs.oi.local_mtime = now;
} else {
dout(10) << " mtime unchanged at " << ctx->new_obs.oi.mtime << dendl;
}
}
utime_t now = ceph_clock_now(NULL);
- if (obc->obs.oi.mtime + utime_t(pool.info.cache_min_flush_age, 0) > now) {
+ utime_t ob_local_mtime;
+ if (obc->obs.oi.local_mtime != utime_t()) {
+ ob_local_mtime = obc->obs.oi.local_mtime;
+ } else {
+ ob_local_mtime = obc->obs.oi.mtime;
+ }
+ if (ob_local_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;
// these bits are copied from head->clone.
size = other.size;
mtime = other.mtime;
+ local_mtime = other.local_mtime;
last_reqid = other.last_reqid;
truncate_seq = other.truncate_seq;
truncate_size = other.truncate_size;
++i) {
old_watchers.insert(make_pair(i->first.second, i->second));
}
- ENCODE_START(13, 8, bl);
+ ENCODE_START(14, 8, bl);
::encode(soid, bl);
::encode(myoloc, bl); //Retained for compatibility
::encode(category, bl);
::encode(watchers, bl);
__u32 _flags = flags;
::encode(_flags, bl);
+ ::encode(local_mtime, bl);
ENCODE_FINISH(bl);
}
::decode(_flags, bl);
flags = (flag_t)_flags;
}
+ if (struct_v >= 14) {
+ ::decode(local_mtime, bl);
+ } else {
+ local_mtime = utime_t();
+ }
DECODE_FINISH(bl);
}
f->dump_unsigned("user_version", user_version);
f->dump_unsigned("size", size);
f->dump_stream("mtime") << mtime;
+ f->dump_stream("local_mtime") << local_mtime;
f->dump_unsigned("lost", (int)is_lost());
f->dump_unsigned("flags", (int)flags);
f->dump_stream("wrlock_by") << wrlock_by;
uint64_t size;
utime_t mtime;
+ utime_t local_mtime; // local mtime
// note: these are currently encoded into a total 16 bits; see
// encode()/decode() for the weirdness.