t->touch(soid);
ctx->delta_stats.num_objects++;
obs.exists = true;
+ obs.oi.new_object();
}
t->set_alloc_hint(soid, op.alloc_hint.expected_object_size,
op.alloc_hint.expected_write_size);
if (!obs.exists) {
ctx->delta_stats.num_objects++;
obs.exists = true;
+ obs.oi.set_omap_digest(-1);
}
+ if (op.extent.offset == 0 && op.extent.length == oi.size)
+ obs.oi.set_data_digest(osd_op.indata.crc32c(-1));
+ else
+ obs.oi.clear_data_digest();
}
break;
if (!obs.exists) {
ctx->delta_stats.num_objects++;
obs.exists = true;
+ obs.oi.set_omap_digest(-1); // no omap yet
}
+ obs.oi.set_data_digest(osd_op.indata.crc32c(-1));
+
interval_set<uint64_t> ch;
if (oi.size > 0)
ch.insert(0, oi.size);
ch.insert(op.extent.offset, op.extent.length);
ctx->modified_ranges.union_of(ch);
ctx->delta_stats.num_wr++;
+ oi.clear_data_digest();
} else {
// no-op
}
if (!obs.exists) {
ctx->delta_stats.num_objects++;
obs.exists = true;
+ obs.oi.new_object();
}
}
}
}
ctx->delta_stats.num_wr++;
// do no set exists, or we will break above DELETE -> TRUNCATE munging.
+
+ oi.clear_data_digest();
}
break;
t->touch(obs.oi.soid);
ctx->delta_stats.num_objects++;
obs.exists = true;
+ obs.oi.new_object();
}
if (op.clonerange.src_offset + op.clonerange.length > src_obc->obs.oi.size) {
dout(10) << " clonerange source " << osd_op.soid << " "
t->clone_range(src_obc->obs.oi.soid,
obs.oi.soid, op.clonerange.src_offset,
op.clonerange.length, op.clonerange.offset);
-
+
+ obs.oi.clear_data_digest();
write_update_size_and_usage(ctx->delta_stats, oi, ctx->modified_ranges,
op.clonerange.offset, op.clonerange.length, false);
t->touch(soid);
ctx->delta_stats.num_objects++;
obs.exists = true;
+ obs.oi.new_object();
}
string aname;
bp.copy(op.xattr.name_len, aname);
if (!obs.exists) {
ctx->delta_stats.num_objects++;
obs.exists = true;
+ obs.oi.set_data_digest(-1);
}
+ obs.oi.clear_omap_digest();
t->touch(soid);
map<string, bufferlist> to_set;
try {
if (!obs.exists) {
ctx->delta_stats.num_objects++;
obs.exists = true;
+ obs.oi.set_data_digest(-1);
}
+ obs.oi.clear_omap_digest();
t->touch(soid);
t->omap_setheader(soid, osd_op.indata);
ctx->delta_stats.num_wr++;
ctx->delta_stats.num_wr++;
}
obs.oi.set_flag(object_info_t::FLAG_OMAP);
+ obs.oi.set_omap_digest(-1);
break;
case CEPH_OSD_OP_OMAPRMKEYS:
ctx->delta_stats.num_wr++;
}
obs.oi.set_flag(object_info_t::FLAG_OMAP);
+ obs.oi.clear_omap_digest();
break;
case CEPH_OSD_OP_COPY_GET_CLASSIC:
ctx->delta_stats.num_bytes -= oi.size;
}
oi.size = 0;
+ oi.new_object();
// disconnect all watchers
for (map<pair<uint64_t, entity_name_t>, watch_info_t>::iterator p =
ctx->delta_stats.num_bytes -= obs.oi.size;
ctx->delta_stats.num_bytes += rollback_to->obs.oi.size;
obs.oi.size = rollback_to->obs.oi.size;
+ if (rollback_to->obs.oi.is_data_digest())
+ obs.oi.set_data_digest(rollback_to->obs.oi.data_digest);
+ else
+ obs.oi.clear_data_digest();
+ if (rollback_to->obs.oi.is_omap_digest())
+ obs.oi.set_omap_digest(rollback_to->obs.oi.omap_digest);
+ else
+ obs.oi.clear_omap_digest();
snapset.head_exists = true;
}
}