<< dendl;
eversion_t v = recovery_info.version;
+ object_info_t oi;
if (progress.first) {
int r = store->omap_get_header(ch, ghobject_t(recovery_info.soid), &out_op->omap_header);
if(r < 0) {
// Debug
bufferlist bv = out_op->attrset[OI_ATTR];
- object_info_t oi;
try {
auto bliter = bv.cbegin();
decode(oi, bliter);
}
out_op->data.claim_append(bit);
}
+ if (progress.first && out_op->data_included.begin().get_start() == 0 &&
+ out_op->data.length() == oi.size && oi.is_data_digest()) {
+ uint32_t crc = out_op->data.crc32c(-1);
+ if (oi.data_digest != crc) {
+ dout(0) << __func__ << " " << coll << std::hex
+ << " full-object read crc 0x" << crc
+ << " != expected 0x" << oi.data_digest
+ << std::dec << " on " << recovery_info.soid << dendl;
+ return -EIO;
+ }
+ }
if (new_progress.is_complete(recovery_info)) {
new_progress.data_complete = true;