#define DEPRECATED_CEPH_FEATURE_OSD_SET_ALLOC_HINT (1ULL<<45) // DEPRECATED: JEWEL
#define CEPH_FEATURE_OSD_FADVISE_FLAGS (1ULL<<46)
#define DEPRECATED_CEPH_FEATURE_OSD_REPOP (1ULL<<46) // DEPRECATED: JEWEL (can't remove until all 1<<46 are ready)
-#define CEPH_FEATURE_OSD_OBJECT_DIGEST (1ULL<<46) /* overlap with fadvise */
+#define DEPRECATED_CEPH_FEATURE_OSD_OBJECT_DIGEST (1ULL<<46) // DEPRECATED: JEWEL (can't remove until all 1<<46 are ready)
#define CEPH_FEATURE_OSD_TRANSACTION_MAY_LAYOUT (1ULL<<46) /* overlap w/ fadvise */
#define CEPH_FEATURE_MDS_QUOTA (1ULL<<47)
#define CEPH_FEATURE_CRUSH_V4 (1ULL<<48) /* straw2 buckets */
DEPRECATED_CEPH_FEATURE_OSD_SET_ALLOC_HINT | \
CEPH_FEATURE_OSD_FADVISE_FLAGS | \
DEPRECATED_CEPH_FEATURE_OSD_REPOP | \
- CEPH_FEATURE_OSD_OBJECT_DIGEST | \
+ DEPRECATED_CEPH_FEATURE_OSD_OBJECT_DIGEST | \
CEPH_FEATURE_OSD_TRANSACTION_MAY_LAYOUT | \
CEPH_FEATURE_MDS_QUOTA | \
CEPH_FEATURE_CRUSH_V4 | \
osd->clog->info(oss);
}
- if (get_min_acting_features() & CEPH_FEATURE_OSD_OBJECT_DIGEST)
- scrubber.seed = -1; // better, and enables oi digest checks
- else
- scrubber.seed = 0; // compat
+ scrubber.seed = -1;
break;
maps[*i] = &scrubber.received_maps[*i];
}
- // can we relate scrub digests to oi digests?
- bool okseed = (get_min_upacting_features() & CEPH_FEATURE_OSD_OBJECT_DIGEST);
- assert(okseed == (scrubber.seed == 0xffffffff));
-
get_pgbackend()->be_compare_scrubmaps(
maps,
- okseed,
state_test(PG_STATE_REPAIR),
scrubber.missing,
scrubber.inconsistent,
pg_shard_t auth_shard,
const ScrubMap::object &auth,
const object_info_t& auth_oi,
- bool okseed,
const ScrubMap::object &candidate,
shard_info_wrapper &result,
ostream &errorstream)
if (error != CLEAN)
errorstream << ", ";
error = DEEP_ERROR;
- bool known = okseed && auth_oi.is_data_digest() &&
+ bool known = auth_oi.is_data_digest() &&
auth.digest == auth_oi.data_digest;
errorstream << "data_digest 0x" << std::hex << candidate.digest
<< " != "
if (error != CLEAN)
errorstream << ", ";
error = DEEP_ERROR;
- bool known = okseed && auth_oi.is_omap_digest() &&
+ bool known = auth_oi.is_omap_digest() &&
auth.omap_digest == auth_oi.omap_digest;
errorstream << "omap_digest 0x" << std::hex << candidate.omap_digest
<< " != "
PGBackend::be_select_auth_object(
const hobject_t &obj,
const map<pg_shard_t,ScrubMap*> &maps,
- bool okseed,
object_info_t *auth_oi)
{
map<pg_shard_t, ScrubMap *>::const_iterator auth = maps.end();
continue;
}
if (parent->get_pool().is_replicated()) {
- if (okseed && oi.is_data_digest() && i->second.digest_present &&
+ if (oi.is_data_digest() && i->second.digest_present &&
oi.data_digest != i->second.digest) {
dout(10) << __func__ << ": rejecting osd " << j->first
<< " for obj " << obj
<< std::dec << dendl;
continue;
}
- if (okseed && oi.is_omap_digest() && i->second.omap_digest_present &&
+ if (oi.is_omap_digest() && i->second.omap_digest_present &&
oi.omap_digest != i->second.omap_digest) {
dout(10) << __func__ << ": rejecting osd " << j->first
<< " for obj " << obj
void PGBackend::be_compare_scrubmaps(
const map<pg_shard_t,ScrubMap*> &maps,
- bool okseed,
bool repair,
map<hobject_t, set<pg_shard_t>, hobject_t::BitwiseComparator> &missing,
map<hobject_t, set<pg_shard_t>, hobject_t::BitwiseComparator> &inconsistent,
++k) {
object_info_t auth_oi;
map<pg_shard_t, ScrubMap *>::const_iterator auth =
- be_select_auth_object(*k, maps, okseed, &auth_oi);
+ be_select_auth_object(*k, maps, &auth_oi);
inconsistent_obj_wrapper object_error{*k};
list<pg_shard_t> auth_list;
be_compare_scrub_objects(auth->first,
auth_object,
auth_oi,
- okseed,
j->second->objects[*k],
shard_info,
ss);
object_error.add_shard(auth->first, auth_shard);
}
- if (okseed &&
- clean &&
+ if (clean &&
parent->get_pool().is_replicated()) {
enum {
NO = 0,
pg_shard_t auth_shard,
const ScrubMap::object &auth,
const object_info_t& auth_oi,
- bool okseed,
const ScrubMap::object &candidate,
shard_info_wrapper& shard_error,
ostream &errorstream);
map<pg_shard_t, ScrubMap *>::const_iterator be_select_auth_object(
const hobject_t &obj,
const map<pg_shard_t,ScrubMap*> &maps,
- bool okseed,
object_info_t *auth_oi);
void be_compare_scrubmaps(
const map<pg_shard_t,ScrubMap*> &maps,
- bool okseed, ///< true if scrub digests have same seed our oi digests
bool repair,
map<hobject_t, set<pg_shard_t>, hobject_t::BitwiseComparator> &missing,
map<hobject_t, set<pg_shard_t>, hobject_t::BitwiseComparator> &inconsistent,
void object_copy_data_t::encode(bufferlist& bl, uint64_t features) const
{
- if ((features & CEPH_FEATURE_OSD_OBJECT_DIGEST) == 0) {
- ENCODE_START(4, 1, bl);
- ::encode(size, bl);
- ::encode(mtime, bl);
- ::encode((__u32)0, bl); // was category; no longer used
- ::encode(attrs, bl);
- ::encode(data, bl);
- if (omap_data.length())
- bl.append(omap_data);
- else
- ::encode((__u32)0, bl);
- ::encode(cursor, bl);
- ::encode(omap_header, bl);
- ::encode(snaps, bl);
- ::encode(snap_seq, bl);
- ::encode(flags, bl);
- ::encode(data_digest, bl);
- ::encode(omap_digest, bl);
- ENCODE_FINISH(bl);
- return;
- }
-
ENCODE_START(7, 5, bl);
::encode(size, bl);
::encode(mtime, bl);