fout << *pg << std::endl;
std::map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator mend =
- pg->pg_log.get_missing().missing.end();
+ pg->pg_log.get_missing().get_items().end();
std::map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator mi =
- pg->pg_log.get_missing().missing.begin();
+ pg->pg_log.get_missing().get_items().begin();
for (; mi != mend; ++mi) {
fout << mi->first << " -> " << mi->second << std::endl;
if (!pg->missing_loc.needs_recovery(mi->first))
dout(10) << " peer osd." << from << " now " << oinfo << " " << omissing << dendl;
might_have_unfound.insert(from);
- for (map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator i = omissing.missing.begin();
- i != omissing.missing.end();
+ for (map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator i =
+ omissing.get_items().begin();
+ i != omissing.get_items().end();
++i) {
dout(20) << " after missing " << i->first << " need " << i->second.need
<< " have " << i->second.have << dendl;
}
void add_active_missing(const pg_missing_t &missing) {
for (map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator i =
- missing.missing.begin();
- i != missing.missing.end();
+ missing.get_items().begin();
+ i != missing.get_items().end();
++i) {
map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator j =
needs_recovery_map.find(i->first);
const map<pg_shard_t, pg_info_t> &pinfo) {
recovered(hoid);
boost::optional<pg_missing_t::item> item;
- auto miter = missing.missing.find(hoid);
- if (miter != missing.missing.end()) {
+ auto miter = missing.get_items().find(hoid);
+ if (miter != missing.get_items().end()) {
item = miter->second;
} else {
for (auto &&i: to_recover) {
continue;
auto pmiter = pmissing.find(i);
assert(pmiter != pmissing.end());
- miter = pmiter->second.missing.find(hoid);
- if (miter != pmiter->second.missing.end()) {
+ miter = pmiter->second.get_items().find(hoid);
+ if (miter != pmiter->second.get_items().end()) {
item = miter->second;
break;
}
we will send the peer enough log to arrive at the same state.
*/
- for (map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::iterator i = omissing.missing.begin();
- i != omissing.missing.end();
+ for (map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator i = omissing.get_items().begin();
+ i != omissing.get_items().end();
++i) {
dout(20) << " before missing " << i->first << " need " << i->second.need
<< " have " << i->second.have << dendl;
if (omissing.have_missing()) {
eversion_t first_missing =
- omissing.missing[omissing.rmissing.begin()->second].need;
+ omissing.get_items().at(omissing.get_rmissing().begin()->second).need;
oinfo.last_complete = eversion_t();
list<pg_log_entry_t>::const_iterator i = olog.log.begin();
for (;
// ensure missing has been updated appropriately
if (objiter->second->is_update()) {
assert(missing.is_missing(hoid) &&
- missing.missing[hoid].need == objiter->second->version);
+ missing.get_items().at(hoid).need == objiter->second->version);
} else {
assert(!missing.is_missing(hoid));
}
<< " deleting"
<< dendl;
if (missing.is_missing(hoid))
- missing.rm(missing.missing.find(hoid));
+ missing.rm(missing.get_items().find(hoid));
if (rollbacker && !object_not_in_store)
rollbacker->remove(hoid);
return;
if (missing.is_missing(hoid)) {
/// Case 3)
ldpp_dout(dpp, 10) << __func__ << ": hoid " << hoid
- << " missing, " << missing.missing[hoid]
+ << " missing, " << missing.get_items().at(hoid)
<< " adjusting" << dendl;
- if (missing.missing[hoid].have == prior_version) {
+ if (missing.get_items().at(hoid).have == prior_version) {
ldpp_dout(dpp, 10) << __func__ << ": hoid " << hoid
<< " missing.have is prior_version " << prior_version
<< " removing from missing" << dendl;
- missing.rm(missing.missing.find(hoid));
+ missing.rm(missing.get_items().find(hoid));
} else {
ldpp_dout(dpp, 10) << __func__ << ": hoid " << hoid
- << " missing.have is " << missing.missing[hoid].have
+ << " missing.have is " << missing.get_items().at(hoid).have
<< ", adjusting" << dendl;
missing.revise_need(hoid, prior_version);
if (prior_version <= info.log_tail) {
// The logs must overlap.
assert(log.head >= olog.tail && olog.head >= log.tail);
- for (map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::iterator i = missing.missing.begin();
- i != missing.missing.end();
+ for (map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator i = missing.get_items().begin();
+ i != missing.get_items().end();
++i) {
dout(20) << "pg_missing_t sobject: " << i->first << dendl;
}
missing.got(oid, v);
// raise last_complete?
- if (missing.missing.empty()) {
+ if (missing.get_items().empty()) {
log.complete_to = log.log.end();
info.last_complete = info.last_update;
}
while (log.complete_to != log.log.end()) {
- if (missing.missing[missing.rmissing.begin()->second].need <=
- log.complete_to->version)
+ if (missing.get_items().at(
+ missing.get_rmissing().begin()->second
+ ).need <= log.complete_to->version)
break;
if (info.last_complete < log.complete_to->version)
info.last_complete = log.complete_to->version;
void activate_not_complete(pg_info_t &info) {
log.complete_to = log.log.begin();
while (log.complete_to->version <
- missing.missing[missing.rmissing.begin()->second].need)
+ missing.get_items().at(
+ missing.get_rmissing().begin()->second
+ ).need)
++log.complete_to;
assert(log.complete_to != log.log.end());
if (log.complete_to == log.log.begin()) {
ObjectContextRef headctx,
RPGHandle *h)
{
- assert(get_parent()->get_local_missing().missing.count(soid));
- eversion_t _v = get_parent()->get_local_missing().missing.find(
+ assert(get_parent()->get_local_missing().get_items().count(soid));
+ eversion_t _v = get_parent()->get_local_missing().get_items().find(
soid)->second.need;
assert(_v == v);
const map<hobject_t, set<pg_shard_t>, hobject_t::BitwiseComparator> &missing_loc(
assert(peer_missing.count(fromshard));
const pg_missing_t &pmissing = peer_missing.find(fromshard)->second;
if (pmissing.is_missing(soid, v)) {
- assert(pmissing.missing.find(soid)->second.have != v);
+ assert(pmissing.get_items().find(soid)->second.have != v);
dout(10) << "pulling soid " << soid << " from osd " << fromshard
- << " at version " << pmissing.missing.find(soid)->second.have
+ << " at version " << pmissing.get_items().find(soid)->second.have
<< " rather than at version " << v << dendl;
- v = pmissing.missing.find(soid)->second.have;
+ v = pmissing.get_items().find(soid)->second.have;
assert(get_parent()->get_log().get_log().objects.count(soid) &&
(get_parent()->get_log().get_log().objects.find(soid)->second->op ==
pg_log_entry_t::LOST_REVERT) &&
}
if (pg_log.get_missing().is_missing(recovery_info.soid) &&
- pg_log.get_missing().missing.find(recovery_info.soid)->second.need > recovery_info.version) {
+ pg_log.get_missing().get_items().find(recovery_info.soid)->second.need > recovery_info.version) {
assert(is_primary());
const pg_log_entry_t *latest = pg_log.get_log().objects.find(recovery_info.soid)->second;
if (latest->op == pg_log_entry_t::LOST_REVERT &&
requeue_ops(waiting_for_unreadable_object[hoid]);
waiting_for_unreadable_object.erase(hoid);
}
- if (pg_log.get_missing().missing.size() == 0) {
+ if (pg_log.get_missing().get_items().size() == 0) {
requeue_ops(waiting_for_all_missing);
waiting_for_all_missing.clear();
}
bool ReplicatedPG::is_missing_object(const hobject_t& soid) const
{
- return pg_log.get_missing().missing.count(soid);
+ return pg_log.get_missing().get_items().count(soid);
}
void ReplicatedPG::maybe_kick_recovery(
*/
if (waiting_for_degraded_object.count(soid))
return true;
- if (pg_log.get_missing().missing.count(soid))
+ if (pg_log.get_missing().get_items().count(soid))
return true;
assert(!actingbackfill.empty());
for (set<pg_shard_t>::iterator i = actingbackfill.begin();
if (*i == get_primary()) continue;
pg_shard_t peer = *i;
if (peer_missing.count(peer) &&
- peer_missing[peer].missing.count(soid))
+ peer_missing[peer].get_items().count(soid))
return true;
// Object is degraded if after last_backfill AND
bool ReplicatedPG::pg_op_must_wait(MOSDOp *op)
{
- if (pg_log.get_missing().missing.empty())
+ if (pg_log.get_missing().get_items().empty())
return false;
for (vector<OSDOp>::iterator p = op->ops.begin(); p != op->ops.end(); ++p) {
if (p->op.op == CEPH_OSD_OP_PGLS || p->op.op == CEPH_OSD_OP_PGNLS ||
break;
}
- assert(snapid == CEPH_NOSNAP || pg_log.get_missing().missing.empty());
+ assert(snapid == CEPH_NOSNAP || pg_log.get_missing().get_items().empty());
// ensure sort order is correct
pg_log.resort_missing(get_sort_bitwise());
map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator missing_iter =
- pg_log.get_missing().missing.lower_bound(current);
+ pg_log.get_missing().get_items().lower_bound(current);
vector<hobject_t>::iterator ls_iter = sentries.begin();
hobject_t _max = hobject_t::get_max();
while (1) {
const hobject_t &mcand =
- missing_iter == pg_log.get_missing().missing.end() ?
+ missing_iter == pg_log.get_missing().get_items().end() ?
_max :
missing_iter->first;
const hobject_t &lcand =
}
if (next.is_max() &&
- missing_iter == pg_log.get_missing().missing.end() &&
+ missing_iter == pg_log.get_missing().get_items().end() &&
ls_iter == sentries.end()) {
result = 1;
break;
}
- assert(snapid == CEPH_NOSNAP || pg_log.get_missing().missing.empty());
+ assert(snapid == CEPH_NOSNAP || pg_log.get_missing().get_items().empty());
// ensure sort order is correct
pg_log.resort_missing(get_sort_bitwise());
map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator missing_iter =
- pg_log.get_missing().missing.lower_bound(current);
+ pg_log.get_missing().get_items().lower_bound(current);
vector<hobject_t>::iterator ls_iter = sentries.begin();
hobject_t _max = hobject_t::get_max();
while (1) {
const hobject_t &mcand =
- missing_iter == pg_log.get_missing().missing.end() ?
+ missing_iter == pg_log.get_missing().get_items().end() ?
_max :
missing_iter->first;
const hobject_t &lcand =
candidate.get_key()));
}
if (next.is_max() &&
- missing_iter == pg_log.get_missing().missing.end() &&
+ missing_iter == pg_log.get_missing().get_items().end() &&
ls_iter == sentries.end()) {
result = 1;
}
return PULL_NONE;
} else {
int r = recover_missing(
- head, pg_log.get_missing().missing.find(head)->second.need, priority,
+ head, pg_log.get_missing().get_items().find(head)->second.need, priority,
h);
if (r != PULL_NONE)
return PULL_OTHER;
return PULL_NONE;
} else {
int r = recover_missing(
- head, pg_log.get_missing().missing.find(head)->second.need, priority,
+ head, pg_log.get_missing().get_items().find(head)->second.need, priority,
h);
if (r != PULL_NONE)
return PULL_OTHER;
eversion_t v;
assert(pg_log.get_missing().is_missing(oid));
- v = pg_log.get_missing().missing.find(oid)->second.have;
+ v = pg_log.get_missing().get_items().find(oid)->second.have;
dout(10) << "pick_newest_available " << oid << " " << v << " on osd." << osd->whoami << " (local)" << dendl;
assert(!actingbackfill.empty());
assert(is_backfill_targets(peer));
continue;
}
- eversion_t h = peer_missing[peer].missing[oid].have;
+ eversion_t h = peer_missing[peer].get_items().at(oid).have;
dout(10) << "pick_newest_available " << oid << " " << h << " on osd." << peer << dendl;
if (h > v)
v = h;
if (missing.num_missing() > 0) {
// this shouldn't happen!
osd->clog->error() << info.pgid << " recovery ending with " << missing.num_missing()
- << ": " << missing.missing << "\n";
+ << ": " << missing.get_items() << "\n";
return work_in_progress;
}
dout(10) << "recover_primary recovering " << recovering.size()
<< " in pg" << dendl;
dout(10) << "recover_primary " << missing << dendl;
- dout(25) << "recover_primary " << missing.missing << dendl;
+ dout(25) << "recover_primary " << missing.get_items() << dendl;
// look at log!
pg_log_entry_t *latest = 0;
PGBackend::RecoveryHandle *h = pgbackend->open_recovery_op();
map<version_t, hobject_t>::const_iterator p =
- missing.rmissing.lower_bound(pg_log.get_log().last_requested);
- while (p != missing.rmissing.end()) {
+ missing.get_rmissing().lower_bound(pg_log.get_log().last_requested);
+ while (p != missing.get_rmissing().end()) {
handle.reset_tp_timeout();
hobject_t soid;
version_t v = p->first;
latest = 0;
soid = p->second;
}
- const pg_missing_t::item& item = missing.missing.find(p->second)->second;
+ const pg_missing_t::item& item = missing.get_items().find(p->second)->second;
++p;
hobject_t head = soid;
p != peer_missing.end();
++p)
if (p->second.is_missing(soid, need) &&
- p->second.missing[soid].have == alternate_need) {
+ p->second.get_items().at(soid).have == alternate_need) {
missing_loc.add_location(soid, p->first);
}
dout(10) << " will pull " << alternate_need << " or " << need
size_t m_sz = pm->second.num_missing();
dout(10) << " peer osd." << peer << " missing " << m_sz << " objects." << dendl;
- dout(20) << " peer osd." << peer << " missing " << pm->second.missing << dendl;
+ dout(20) << " peer osd." << peer << " missing " << pm->second.get_items() << dendl;
// oldest first!
const pg_missing_t &m(pm->second);
- for (map<version_t, hobject_t>::const_iterator p = m.rmissing.begin();
- p != m.rmissing.end() && started < max;
+ for (map<version_t, hobject_t>::const_iterator p = m.get_rmissing().begin();
+ p != m.get_rmissing().end() && started < max;
++p) {
handle.reset_tp_timeout();
const hobject_t soid(p->second);
}
dout(10) << __func__ << ": recover_object_replicas(" << soid << ")" << dendl;
- map<hobject_t,pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator r = m.missing.find(soid);
+ map<hobject_t,pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator r = m.get_items().find(soid);
started += prep_object_replica_pushes(soid, r->second.need,
h);
}
rm(p);
}
-void pg_missing_t::rm(const std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator &m)
+void pg_missing_t::rm(std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator m)
{
rmissing.erase(m->second.need.version);
missing.erase(m);
got(p);
}
-void pg_missing_t::got(const std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator &m)
+void pg_missing_t::got(std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator m)
{
rmissing.erase(m->second.need.version);
missing.erase(m);
* kept in memory, as a supplement to pg_log_t
* also used to pass missing info in messages.
*/
-struct pg_missing_t {
+class pg_missing_t {
+public:
struct item {
eversion_t need, have;
item() {}
};
WRITE_CLASS_ENCODER(item)
+private:
map<hobject_t, item, hobject_t::ComparatorWithDefault> missing; // oid -> (need v, have v)
map<version_t, hobject_t> rmissing; // v -> oid
+public:
+ const map<hobject_t, item, hobject_t::ComparatorWithDefault> &get_items() const {
+ return missing;
+ }
+ const map<version_t, hobject_t> &get_rmissing() const {
+ return rmissing;
+ }
unsigned int num_missing() const;
bool have_missing() const;
- void swap(pg_missing_t& o);
bool is_missing(const hobject_t& oid) const;
bool is_missing(const hobject_t& oid, eversion_t v) const;
eversion_t have_old(const hobject_t& oid) const;
+
+ void swap(pg_missing_t& o);
void add_next_event(const pg_log_entry_t& e);
void revise_need(hobject_t oid, eversion_t need);
void revise_have(hobject_t oid, eversion_t have);
void add(const hobject_t& oid, eversion_t need, eversion_t have);
void rm(const hobject_t& oid, eversion_t v);
- void rm(const std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator &m);
+ void rm(std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator m);
void got(const hobject_t& oid, eversion_t v);
- void got(const std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator &m);
+ void got(std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator m);
void split_into(pg_t child_pgid, unsigned split_bits, pg_missing_t *omissing);
void clear() {
fulldiv.tail = divinfo.log_tail;
divinfo.last_backfill = hobject_t::get_max();
- if (init.missing.empty()) {
+ if (init.get_items().empty()) {
divinfo.last_complete = divinfo.last_update;
} else {
- eversion_t fmissing = init.missing[init.rmissing.begin()->second].need;
+ eversion_t fmissing = init.get_items().at(init.get_rmissing().begin()->second).need;
for (list<pg_log_entry_t>::const_iterator i = fulldiv.log.begin();
i != fulldiv.log.end();
++i) {
void verify_missing(
const TestCase &tcase,
const pg_missing_t &missing) {
- ASSERT_EQ(tcase.final.missing.size(), missing.missing.size());
- for (map<hobject_t, pg_missing_t::item>::const_iterator i =
- missing.missing.begin();
- i != missing.missing.end();
+ ASSERT_EQ(tcase.final.get_items().size(), missing.get_items().size());
+ for (auto i = missing.get_items().begin();
+ i != missing.get_items().end();
++i) {
- EXPECT_TRUE(tcase.final.missing.count(i->first));
- EXPECT_EQ(tcase.final.missing.find(i->first)->second.need, i->second.need);
- EXPECT_EQ(tcase.final.missing.find(i->first)->second.have, i->second.have);
+ EXPECT_TRUE(tcase.final.get_items().count(i->first));
+ EXPECT_EQ(tcase.final.get_items().find(i->first)->second.need, i->second.need);
+ EXPECT_EQ(tcase.final.get_items().find(i->first)->second.have, i->second.have);
}
}
EXPECT_TRUE(t.empty());
EXPECT_TRUE(omissing.have_missing());
EXPECT_TRUE(omissing.is_missing(divergent_object));
- EXPECT_EQ(eversion_t(1, 2), omissing.missing[divergent_object].need);
+ EXPECT_EQ(eversion_t(1, 2), omissing.get_items().at(divergent_object).need);
EXPECT_EQ(eversion_t(1, 6), oinfo.last_update);
EXPECT_EQ(eversion_t(1, 1), oinfo.last_complete);
}
EXPECT_TRUE(t.empty());
EXPECT_TRUE(omissing.have_missing());
EXPECT_TRUE(omissing.is_missing(divergent_object));
- EXPECT_EQ(omissing.missing[divergent_object].have, eversion_t(0, 0));
- EXPECT_EQ(omissing.missing[divergent_object].need, eversion_t(1, 1));
+ EXPECT_EQ(omissing.get_items().at(divergent_object).have, eversion_t(0, 0));
+ EXPECT_EQ(omissing.get_items().at(divergent_object).need, eversion_t(1, 1));
EXPECT_EQ(last_update, oinfo.last_update);
}
EXPECT_TRUE(t.empty());
EXPECT_TRUE(omissing.have_missing());
EXPECT_TRUE(omissing.is_missing(divergent_object));
- EXPECT_EQ(eversion_t(1, 3), omissing.missing[divergent_object].need);
+ EXPECT_EQ(eversion_t(1, 3), omissing.get_items().at(divergent_object).need);
EXPECT_EQ(olog.head, oinfo.last_update);
EXPECT_EQ(olog.head, oinfo.last_complete);
EXPECT_TRUE(t.empty());
EXPECT_TRUE(omissing.have_missing());
EXPECT_TRUE(omissing.is_missing(divergent_object));
- EXPECT_EQ(omissing.missing[divergent_object].have, eversion_t(0, 0));
- EXPECT_EQ(omissing.missing[divergent_object].need, eversion_t(1, 1));
+ EXPECT_EQ(omissing.get_items().at(divergent_object).have, eversion_t(0, 0));
+ EXPECT_EQ(omissing.get_items().at(divergent_object).need, eversion_t(1, 1));
EXPECT_EQ(last_update, oinfo.last_update);
}
EXPECT_TRUE(t.empty());
EXPECT_TRUE(omissing.have_missing());
EXPECT_TRUE(omissing.is_missing(divergent_object));
- EXPECT_EQ(divergent_version, omissing.missing[divergent_object].need);
+ EXPECT_EQ(divergent_version, omissing.get_items().at(divergent_object).need);
EXPECT_EQ(olog.head, oinfo.last_update);
EXPECT_EQ(olog.head, oinfo.last_complete);
EXPECT_TRUE(t.empty());
EXPECT_TRUE(omissing.have_missing());
- EXPECT_TRUE(omissing.missing.begin()->second.need == eversion_t(1, 1));
+ EXPECT_TRUE(omissing.get_items().begin()->second.need == eversion_t(1, 1));
EXPECT_EQ(last_update, oinfo.last_update);
EXPECT_EQ(eversion_t(0, 0), oinfo.last_complete);
}
EXPECT_FALSE(missing.is_missing(oid));
missing.add_next_event(e);
EXPECT_TRUE(missing.is_missing(oid));
- EXPECT_EQ(eversion_t(), missing.missing[oid].have);
- EXPECT_EQ(oid, missing.rmissing[e.version.version]);
+ EXPECT_EQ(eversion_t(), missing.get_items().at(oid).have);
+ EXPECT_EQ(oid, missing.get_rmissing().at(e.version.version));
EXPECT_EQ(1U, missing.num_missing());
- EXPECT_EQ(1U, missing.rmissing.size());
+ EXPECT_EQ(1U, missing.get_rmissing().size());
// adding the same object replaces the previous one
missing.add_next_event(e);
EXPECT_TRUE(missing.is_missing(oid));
EXPECT_EQ(1U, missing.num_missing());
- EXPECT_EQ(1U, missing.rmissing.size());
+ EXPECT_EQ(1U, missing.get_rmissing().size());
}
// new object (CLONE)
EXPECT_FALSE(missing.is_missing(oid));
missing.add_next_event(e);
EXPECT_TRUE(missing.is_missing(oid));
- EXPECT_EQ(eversion_t(), missing.missing[oid].have);
- EXPECT_EQ(oid, missing.rmissing[e.version.version]);
+ EXPECT_EQ(eversion_t(), missing.get_items().at(oid).have);
+ EXPECT_EQ(oid, missing.get_rmissing().at(e.version.version));
EXPECT_EQ(1U, missing.num_missing());
- EXPECT_EQ(1U, missing.rmissing.size());
+ EXPECT_EQ(1U, missing.get_rmissing().size());
// adding the same object replaces the previous one
missing.add_next_event(e);
EXPECT_TRUE(missing.is_missing(oid));
EXPECT_EQ(1U, missing.num_missing());
- EXPECT_EQ(1U, missing.rmissing.size());
+ EXPECT_EQ(1U, missing.get_rmissing().size());
}
// existing object (MODIFY)
EXPECT_FALSE(missing.is_missing(oid));
missing.add_next_event(e);
EXPECT_TRUE(missing.is_missing(oid));
- EXPECT_EQ(eversion_t(), missing.missing[oid].have);
- EXPECT_EQ(oid, missing.rmissing[e.version.version]);
+ EXPECT_EQ(eversion_t(), missing.get_items().at(oid).have);
+ EXPECT_EQ(oid, missing.get_rmissing().at(e.version.version));
EXPECT_EQ(1U, missing.num_missing());
- EXPECT_EQ(1U, missing.rmissing.size());
+ EXPECT_EQ(1U, missing.get_rmissing().size());
// adding the same object with a different version
e.prior_version = prior_version;
missing.add_next_event(e);
- EXPECT_EQ(eversion_t(), missing.missing[oid].have);
+ EXPECT_EQ(eversion_t(), missing.get_items().at(oid).have);
EXPECT_TRUE(missing.is_missing(oid));
EXPECT_EQ(1U, missing.num_missing());
- EXPECT_EQ(1U, missing.rmissing.size());
+ EXPECT_EQ(1U, missing.get_rmissing().size());
}
// object with prior version (MODIFY)
EXPECT_FALSE(missing.is_missing(oid));
missing.add_next_event(e);
EXPECT_TRUE(missing.is_missing(oid));
- EXPECT_EQ(prior_version, missing.missing[oid].have);
- EXPECT_EQ(version, missing.missing[oid].need);
- EXPECT_EQ(oid, missing.rmissing[e.version.version]);
+ EXPECT_EQ(prior_version, missing.get_items().at(oid).have);
+ EXPECT_EQ(version, missing.get_items().at(oid).need);
+ EXPECT_EQ(oid, missing.get_rmissing().at(e.version.version));
EXPECT_EQ(1U, missing.num_missing());
- EXPECT_EQ(1U, missing.rmissing.size());
+ EXPECT_EQ(1U, missing.get_rmissing().size());
}
// obsolete (BACKLOG)
EXPECT_FALSE(missing.is_missing(oid));
missing.add_next_event(modify);
EXPECT_TRUE(missing.is_missing(oid));
- EXPECT_EQ(missing.missing[oid].need, version);
+ EXPECT_EQ(missing.get_items().at(oid).need, version);
pg_log_entry_t error = sample_e;
error.op = pg_log_entry_t::ERROR;
error.version = eversion_t(11, 5);
missing.add_next_event(error);
EXPECT_TRUE(missing.is_missing(oid));
- EXPECT_EQ(missing.missing[oid].need, version);
+ EXPECT_EQ(missing.get_items().at(oid).need, version);
}
}
eversion_t need(10,10);
missing.revise_need(oid, need);
EXPECT_TRUE(missing.is_missing(oid));
- EXPECT_EQ(eversion_t(), missing.missing[oid].have);
- EXPECT_EQ(need, missing.missing[oid].need);
+ EXPECT_EQ(eversion_t(), missing.get_items().at(oid).have);
+ EXPECT_EQ(need, missing.get_items().at(oid).need);
// update an existing entry and preserve have
eversion_t have(1,1);
missing.revise_have(oid, have);
eversion_t new_need(10,12);
- EXPECT_EQ(have, missing.missing[oid].have);
+ EXPECT_EQ(have, missing.get_items().at(oid).have);
missing.revise_need(oid, new_need);
- EXPECT_EQ(have, missing.missing[oid].have);
- EXPECT_EQ(new_need, missing.missing[oid].need);
+ EXPECT_EQ(have, missing.get_items().at(oid).have);
+ EXPECT_EQ(new_need, missing.get_items().at(oid).need);
}
TEST(pg_missing_t, revise_have)
missing.add(oid, need, have);
EXPECT_TRUE(missing.is_missing(oid));
eversion_t new_have(2,2);
- EXPECT_EQ(have, missing.missing[oid].have);
+ EXPECT_EQ(have, missing.get_items().at(oid).have);
missing.revise_have(oid, new_have);
- EXPECT_EQ(new_have, missing.missing[oid].have);
- EXPECT_EQ(need, missing.missing[oid].need);
+ EXPECT_EQ(new_have, missing.get_items().at(oid).have);
+ EXPECT_EQ(need, missing.get_items().at(oid).need);
}
TEST(pg_missing_t, add)
eversion_t need(10,10);
missing.add(oid, need, have);
EXPECT_TRUE(missing.is_missing(oid));
- EXPECT_EQ(have, missing.missing[oid].have);
- EXPECT_EQ(need, missing.missing[oid].need);
+ EXPECT_EQ(have, missing.get_items().at(oid).have);
+ EXPECT_EQ(need, missing.get_items().at(oid).need);
}
TEST(pg_missing_t, rm)
EXPECT_FALSE(missing.is_missing(oid));
missing.add(oid, eversion_t(), eversion_t());
EXPECT_TRUE(missing.is_missing(oid));
- const std::map<hobject_t, pg_missing_t::item>::iterator m = missing.missing.find(oid);
+ auto m = missing.get_items().find(oid);
missing.rm(m);
EXPECT_FALSE(missing.is_missing(oid));
}
EXPECT_FALSE(missing.is_missing(oid));
missing.add(oid, eversion_t(), eversion_t());
EXPECT_TRUE(missing.is_missing(oid));
- const std::map<hobject_t, pg_missing_t::item>::iterator m = missing.missing.find(oid);
+ auto m = missing.get_items().find(oid);
missing.got(m);
EXPECT_FALSE(missing.is_missing(oid));
}