ctx->mtime));
if (soid.snap < CEPH_NOSNAP) {
OSDriver::OSTransaction _t(osdriver.get_transaction(&(ctx->local_t)));
- if (log_op_type == pg_log_entry_t::MODIFY ||
- log_op_type == pg_log_entry_t::PROMOTE) {
+ set<snapid_t> _snaps(ctx->new_obs.oi.snaps.begin(),
+ ctx->new_obs.oi.snaps.end());
+ switch (log_op_type) {
+ case pg_log_entry_t::MODIFY:
+ case pg_log_entry_t::PROMOTE:
dout(20) << __func__ << " encoding snaps " << ctx->new_obs.oi.snaps
<< dendl;
::encode(ctx->new_obs.oi.snaps, ctx->log.back().snaps);
-
- set<snapid_t> _snaps(ctx->new_obs.oi.snaps.begin(),
- ctx->new_obs.oi.snaps.end());
snap_mapper.add_oid(soid, _snaps, &_t);
- } else {
+ break;
+ case pg_log_entry_t::CLEAN:
+ dout(20) << __func__ << " encoding snaps " << ctx->new_obs.oi.snaps
+ << dendl;
+ ::encode(ctx->new_obs.oi.snaps, ctx->log.back().snaps);
+ break;
+ case pg_log_entry_t::DELETE:
snap_mapper.remove_oid(soid, &_t);
+ break;
}
}
ctx->new_obs.oi.clear_flag(object_info_t::FLAG_DIRTY);
--ctx->delta_stats.num_objects_dirty;
- finish_ctx(ctx, pg_log_entry_t::MODIFY);
+ finish_ctx(ctx, pg_log_entry_t::CLEAN);
if (!fop->dup_ops.empty()) {
dout(20) << __func__ << " queueing dups for " << ctx->at_version << dendl;
LOST_DELETE = 6, // lost new version, revert to no object (deleted).
LOST_MARK = 7, // lost new version, now EIO
PROMOTE = 8, // promoted object from another tier
+ CLEAN = 9, // mark an object clean
};
static const char *get_op_name(int op) {
switch (op) {
return "l_delete";
case LOST_MARK:
return "l_mark ";
+ case CLEAN:
+ return "clean ";
default:
return "unknown ";
}
bool is_clone() const { return op == CLONE; }
bool is_modify() const { return op == MODIFY; }
bool is_promote() const { return op == PROMOTE; }
+ bool is_clean() const { return op == CLEAN; }
bool is_backlog() const { return op == BACKLOG; }
bool is_lost_revert() const { return op == LOST_REVERT; }
bool is_lost_delete() const { return op == LOST_DELETE; }
bool is_lost_mark() const { return op == LOST_MARK; }
bool is_update() const {
- return is_clone() || is_modify() || is_promote() || is_backlog() || is_lost_revert() || is_lost_mark();
+ return
+ is_clone() || is_modify() || is_promote() || is_clean() ||
+ is_backlog() || is_lost_revert() || is_lost_mark();
}
bool is_delete() const {
return op == DELETE || op == LOST_DELETE;