OPTION(osd_deep_scrub_keys, OPT_INT)
OPTION(osd_deep_scrub_update_digest_min_age, OPT_INT) // objects must be this old (seconds) before we update the whole-object digest on scrub
OPTION(osd_skip_data_digest, OPT_BOOL)
+OPTION(osd_distrust_data_digest, OPT_BOOL)
OPTION(osd_deep_scrub_large_omap_object_key_threshold, OPT_U64)
OPTION(osd_deep_scrub_large_omap_object_value_sum_threshold, OPT_U64)
OPTION(osd_class_dir, OPT_STR) // where rados plugins are stored
.set_default(false)
.set_description("Do not store full-object checksums if the backend (bluestore) does its own checksums. Only usable with all BlueStore OSDs."),
+ Option("osd_distrust_data_digest", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
+ .set_default(false)
+ .set_description("Do not trust stored data_digest (due to previous bug or corruption)"),
+
Option("osd_op_queue", Option::TYPE_STR, Option::LEVEL_ADVANCED)
.set_default("wpq")
.set_enum_allowed( { "wpq", "prioritized", "mclock_opclass", "mclock_client", "debug_random" } )
bufferlist::iterator *bl_it)
{
dout(20) << __func__ << dendl;
- bool skip_data_digest = osd->store->has_builtin_csum() &&
- osd->osd_skip_data_digest;
+ bool skip_data_digest =
+ (osd->store->has_builtin_csum() && osd->osd_skip_data_digest) ||
+ g_conf->osd_distrust_data_digest;
auto& op = osd_op.op;
if (op.checksum.chunk_size > 0) {
{
dout(20) << __func__ << dendl;
ceph_osd_op& op = osd_op.op;
- bool skip_data_digest = osd->store->has_builtin_csum() &&
- osd->osd_skip_data_digest;
+ bool skip_data_digest =
+ (osd->store->has_builtin_csum() && osd->osd_skip_data_digest) ||
+ g_conf->osd_distrust_data_digest;
auto& oi = ctx->new_obs.oi;
uint64_t size = oi.size;
__u32 seq = oi.truncate_seq;
uint64_t size = oi.size;
bool trimmed_read = false;
- bool skip_data_digest = osd->store->has_builtin_csum() &&
- osd->osd_skip_data_digest;
+ bool skip_data_digest =
+ (osd->store->has_builtin_csum() && osd->osd_skip_data_digest) ||
+ g_conf->osd_distrust_data_digest;
// are we beyond truncate_size?
if ( (seq < op.extent.truncate_seq) &&
auto& op = osd_op.op;
auto& oi = ctx->new_obs.oi;
auto& soid = oi.soid;
- bool skip_data_digest = osd->store->has_builtin_csum() &&
- osd->osd_skip_data_digest;
+ bool skip_data_digest =
+ (osd->store->has_builtin_csum() && osd->osd_skip_data_digest) ||
+ g_conf->osd_distrust_data_digest;
if (op.extent.truncate_seq) {
dout(0) << "sparse_read does not support truncation sequence " << dendl;
ObjectState& obs = ctx->new_obs;
object_info_t& oi = obs.oi;
const hobject_t& soid = oi.soid;
- const bool skip_data_digest = osd->store->has_builtin_csum() &&
- osd->osd_skip_data_digest;
+ const bool skip_data_digest =
+ (osd->store->has_builtin_csum() && osd->osd_skip_data_digest) ||
+ g_conf->osd_distrust_data_digest;
PGTransaction* t = ctx->op_t.get();
int result = 0;
object_copy_cursor_t cursor;
uint64_t out_max;
- bool skip_data_digest = osd->store->has_builtin_csum() &&
- osd->osd_skip_data_digest;
+ bool skip_data_digest =
+ (osd->store->has_builtin_csum() && osd->osd_skip_data_digest) ||
+ g_conf->osd_distrust_data_digest;
try {
decode(cursor, bp);