.set_description("number of seconds before maintenance request times out"),
Option("rbd_skip_partial_discard", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
- .set_default(false)
- .set_description("when trying to discard a range inside an object, set to true to skip zeroing the range"),
+ .set_default(true)
+ .set_description("skip discard (zero) of unaligned extents within an object"),
Option("rbd_enable_alloc_hint", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
.set_default(true)
TEST_F(TestMockDeepCopyObjectCopyRequest, Trim) {
ASSERT_EQ(0, m_src_image_ctx->operations->metadata_set(
"conf_rbd_skip_partial_discard", "false"));
+ m_src_image_ctx->skip_partial_discard = false;
+
// scribble some data
interval_set<uint64_t> one;
scribble(m_src_image_ctx, 10, 102400, &one);
// trim the object
uint64_t trim_offset = rand() % one.range_end();
ASSERT_LE(0, m_src_image_ctx->io_work_queue->discard(
- trim_offset, one.range_end() - trim_offset, m_src_image_ctx->skip_partial_discard));
+ trim_offset, one.range_end() - trim_offset,
+ m_src_image_ctx->skip_partial_discard));
ASSERT_EQ(0, create_snap("copy"));
librbd::MockTestImageCtx mock_src_image_ctx(*m_src_image_ctx);
// remove the object
uint64_t object_size = 1 << m_src_image_ctx->order;
- ASSERT_LE(0, m_src_image_ctx->io_work_queue->discard(0, object_size, m_src_image_ctx->skip_partial_discard));
+ ASSERT_LE(0, m_src_image_ctx->io_work_queue->discard(
+ 0, object_size, m_src_image_ctx->skip_partial_discard));
ASSERT_EQ(0, create_snap("copy"));
librbd::MockTestImageCtx mock_src_image_ctx(*m_src_image_ctx);
librbd::MockTestImageCtx mock_dst_image_ctx(*m_dst_image_ctx);
m_ictxs.insert(*ictx);
ASSERT_EQ(0, (*ictx)->state->open(flags));
+ (*ictx)->skip_partial_discard = false;
}
void open_image(librados::IoCtx& io_ctx, const std::string &name,
librbd::ImageCtx **ictx) {
open_image(io_ctx, name, "", false, 0, ictx);
+ ASSERT_EQ(0, (*ictx)->state->open(0));
+ (*ictx)->skip_partial_discard = false;
}
void migration_prepare(librados::IoCtx& dst_io_ctx,