Skip to content

Commit acca514

Browse files
bill-scalesaainscow
authored andcommitted
osd: Optimized EC backfill interval has wrong versions
Bug in the optimized EC code creating the backfill interval on the primary. It is creating a map with the object version for each backfilling shard. When there are multiple backfill targets the code was overwriting oi.version with the version for a shard that has had partial writes which can result in the object not being backfilled. Can manifest as a data integirty issue, scrub error or snapshot corruption. Signed-off-by: Bill Scales <[email protected]>
1 parent f3f45c2 commit acca514

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

src/crimson/osd/recovery_backend.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,9 @@ RecoveryBackend::scan_for_backfill_primary(
270270
bool added_default = false;
271271
for (auto & shard: backfill_targets) {
272272
if (shard_versions.contains(shard.shard)) {
273-
version = shard_versions.at(shard.shard);
274-
version_map->emplace(object, std::make_pair(shard.shard, version));
273+
auto shard_version = shard_versions.at(shard.shard);
274+
version_map->emplace(object, std::make_pair(shard.shard,
275+
shard_version));
275276
} else if (!added_default) {
276277
version_map->emplace(object, std::make_pair(shard_id_t::NO_SHARD,
277278
version));

src/osd/PrimaryLogPG.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14491,9 +14491,9 @@ void PrimaryLogPG::scan_range_primary(
1449114491
bool added_default = false;
1449214492
for (auto & shard: backfill_targets) {
1449314493
if (shard_versions.contains(shard.shard)) {
14494-
version = shard_versions.at(shard.shard);
14494+
auto shard_version = shard_versions.at(shard.shard);
1449514495
bi->objects.insert(make_pair(*p, std::make_pair(shard.shard,
14496-
version)));
14496+
shard_version)));
1449714497
} else if (!added_default) {
1449814498
bi->objects.insert(make_pair(*p, std::make_pair(shard_id_t::NO_SHARD,
1449914499
version)));

0 commit comments

Comments
 (0)