mempool::osd_pglog::list<pg_log_entry_t> entries;
eversion_t last;
bool seen_non_error = false;
+ std::optional<eversion_t> prior_version_opt;
for (auto i = orig_entries.begin();
i != orig_entries.end();
++i) {
}
}
if (i->is_error()) {
- ldpp_dout(dpp, 20) << __func__ << ": ignoring " << *i << dendl;
+ ldpp_dout(dpp, 20) << __func__ << ": ignoring " << *i << dendl;
} else if (!i->written_shards.empty() && !i->written_shards.contains(orig_shard)) {
ldpp_dout(dpp, 20) << __func__ << ": ignoring partial write " << *i << dendl;
- last = i->version;
+ last = i->version;
+ if (!prior_version_opt) {
+ prior_version_opt = i->prior_version;
+ }
} else {
- ldpp_dout(dpp, 20) << __func__ << ": keeping " << *i << dendl;
- entries.push_back(*i);
- last = i->version;
+ ldpp_dout(dpp, 20) << __func__ << ": keeping " << *i << dendl;
+ if (!prior_version_opt) {
+ prior_version_opt = i->prior_version;
+ }
+ entries.push_back(*i);
+ last = i->version;
}
}
if (entries.empty()) {
return;
}
- const eversion_t prior_version = entries.begin()->prior_version;
+ ceph_assert(prior_version_opt);
+ const eversion_t prior_version = *prior_version_opt;
const eversion_t first_divergent_update = entries.begin()->version;
const eversion_t last_divergent_update = entries.rbegin()->version;
const bool object_not_in_store =
*/
TEST_P(
TestECFailoverWithPeering,
- DISABLED_RollbackAfterMixedBlockedWritesWithOSDFailure
+ RollbackAfterMixedBlockedWritesWithOSDFailure
) {
if (m < 2) {
GTEST_SKIP() << "RollbackAfterMixedBlockedWritesWithOSDFailure requires m >= 2";
*/
TEST_P(
TestECFailoverWithPeering,
- DISABLED_RollbackAfterMixedBlockedWritesWithOSDFailure2
+ RollbackAfterMixedBlockedWritesWithOSDFailure2
) {
if (m < 2) {
GTEST_SKIP() << "RollbackAfterMixedBlockedWritesWithOSDFailure requires m >= 2";