chunk_length += p.second.length;
}
if (chunk_length == obs.oi.size) {
- // truncate
for (auto &p : obs.oi.manifest.chunk_map) {
p.second.set_flag(chunk_info_t::FLAG_MISSING);
}
- t->truncate(obs.oi.soid, 0);
- ctx->delta_stats.num_bytes -= obs.oi.size;
+ // punch hole
+ t->zero(soid, 0, oi.size);
+ oi.clear_data_digest();
ctx->delta_stats.num_wr++;
- oi.size = 0;
ctx->cache_operation = true;
}
osd->logger->inc(l_osd_tier_evict);
stat_op.stat(&size, NULL, NULL);
ASSERT_EQ(0, ioctx.operate("foo", &stat_op, NULL));
- ASSERT_EQ(0, size);
- }
-
- ioctx.snap_set_read(my_snaps[1]);
- {
- ObjectReadOperation op, stat_op;
- uint64_t size;
- op.tier_evict();
- librados::AioCompletion *completion = cluster.aio_create_completion();
- ASSERT_EQ(0, ioctx.aio_operate(
- "foo", completion, &op,
- librados::OPERATION_IGNORE_OVERLAY, NULL));
- completion->wait_for_complete();
- ASSERT_EQ(0, completion->get_return_value());
-
- stat_op.stat(&size, NULL, NULL);
- ASSERT_EQ(0, ioctx.operate("foo", &stat_op, NULL));
- ASSERT_EQ(0, size);
+ ASSERT_EQ(10, size);
}
ioctx.snap_set_read(librados::SNAP_HEAD);