dout(10) << " peer osd." << from << " now " << oinfo << " " << omissing << dendl;
might_have_unfound.insert(from);
- for (map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::iterator i = omissing.missing.begin();
+ for (map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator i = omissing.missing.begin();
i != omissing.missing.end();
++i) {
dout(20) << " after missing " << i->first << " need " << i->second.need
const set<pg_shard_t> &sources)
{
dout(10) << __func__ << ": adding sources in batch " << sources.size() << dendl;
- for (map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator i = needs_recovery_map.begin();
+ for (map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator i = needs_recovery_map.begin();
i != needs_recovery_map.end();
++i) {
missing_loc[i->first].insert(sources.begin(), sources.end());
missing_loc_sources.insert(sources.begin(), sources.end());
- }
+ }
}
bool PG::MissingLoc::add_source_info(
{
bool found_missing = false;
// found items?
- for (map<hobject_t,pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator p = needs_recovery_map.begin();
+ for (map<hobject_t,pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator p = needs_recovery_map.begin();
p != needs_recovery_map.end();
++p) {
const hobject_t &soid(p->first);
//////////////////// get or set missing ////////////////////
const pg_missing_t& get_missing() const { return missing; }
+ void resort_missing(bool sort_bitwise) {
+ missing.resort(sort_bitwise);
+ }
- void missing_got(map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator m) {
- map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::iterator p = missing.missing.find(m->first);
+ void missing_got(map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator m) {
+ map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator p = missing.missing.find(m->first);
missing.got(p);
}
missing.add(oid, need, have);
}
- void missing_rm(map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator m) {
- map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::iterator p = missing.missing.find(m->first);
+ void missing_rm(map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator m) {
+ map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator p = missing.missing.find(m->first);
missing.rm(p);
}
}
f->dump_int("num_missing", missing.num_missing());
f->dump_int("num_unfound", get_num_unfound());
- map<hobject_t,pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator p = missing.missing.upper_bound(offset);
+ map<hobject_t,pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator p = missing.missing.upper_bound(offset);
{
f->open_array_section("objects");
int32_t num = 0;
}
assert(snapid == CEPH_NOSNAP || pg_log.get_missing().missing.empty());
- map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator missing_iter =
+ map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator missing_iter =
pg_log.get_missing().missing.lower_bound(current);
vector<hobject_t>::iterator ls_iter = sentries.begin();
hobject_t _max = hobject_t::get_max();
}
assert(snapid == CEPH_NOSNAP || pg_log.get_missing().missing.empty());
- map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator missing_iter =
+ map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator missing_iter =
pg_log.get_missing().missing.lower_bound(current);
vector<hobject_t>::iterator ls_iter = sentries.begin();
hobject_t _max = hobject_t::get_max();
utime_t mtime = ceph_clock_now(cct);
info.last_update.epoch = get_osdmap()->get_epoch();
const pg_missing_t &missing = pg_log.get_missing();
- map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator m =
+ map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator m =
missing_loc.get_needs_recovery().begin();
- map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator mend =
+ map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator mend =
missing_loc.get_needs_recovery().end();
while (m != mend) {
const hobject_t &oid(m->first);
}
dout(10) << __func__ << ": recover_object_replicas(" << soid << ")" << dendl;
- map<hobject_t,pg_missing_t::item, hobject_t::BitwiseComparator>::const_iterator r = m.missing.find(soid);
+ map<hobject_t,pg_missing_t::item, hobject_t::ComparatorWithDefault>::const_iterator r = m.missing.find(soid);
started += prep_object_replica_pushes(soid, r->second.need,
h);
}
if (struct_v < 3) {
// Handle hobject_t upgrade
- map<hobject_t, item, hobject_t::BitwiseComparator> tmp;
- for (map<hobject_t, item, hobject_t::BitwiseComparator>::iterator i = missing.begin();
+ map<hobject_t, item, hobject_t::ComparatorWithDefault> tmp;
+ for (map<hobject_t, item, hobject_t::ComparatorWithDefault>::iterator i = missing.begin();
i != missing.end();
) {
if (!i->first.is_max() && i->first.pool == -1) {
missing.insert(tmp.begin(), tmp.end());
}
- for (map<hobject_t,item, hobject_t::BitwiseComparator>::iterator it = missing.begin();
+ for (map<hobject_t,item, hobject_t::ComparatorWithDefault>::iterator it = missing.begin();
it != missing.end();
++it)
rmissing[it->second.need.version] = it->first;
void pg_missing_t::dump(Formatter *f) const
{
f->open_array_section("missing");
- for (map<hobject_t,item, hobject_t::BitwiseComparator>::const_iterator p = missing.begin(); p != missing.end(); ++p) {
+ for (map<hobject_t,item, hobject_t::ComparatorWithDefault>::const_iterator p = missing.begin(); p != missing.end(); ++p) {
f->open_object_section("item");
f->dump_stream("object") << p->first;
p->second.dump(f);
bool pg_missing_t::is_missing(const hobject_t& oid, eversion_t v) const
{
- map<hobject_t, item, hobject_t::BitwiseComparator>::const_iterator m = missing.find(oid);
+ map<hobject_t, item, hobject_t::ComparatorWithDefault>::const_iterator m = missing.find(oid);
if (m == missing.end())
return false;
const pg_missing_t::item &item(m->second);
eversion_t pg_missing_t::have_old(const hobject_t& oid) const
{
- map<hobject_t, item, hobject_t::BitwiseComparator>::const_iterator m = missing.find(oid);
+ map<hobject_t, item, hobject_t::ComparatorWithDefault>::const_iterator m = missing.find(oid);
if (m == missing.end())
return eversion_t();
const pg_missing_t::item &item(m->second);
void pg_missing_t::add_next_event(const pg_log_entry_t& e)
{
if (e.is_update()) {
- map<hobject_t, item, hobject_t::BitwiseComparator>::iterator missing_it;
+ map<hobject_t, item, hobject_t::ComparatorWithDefault>::iterator missing_it;
missing_it = missing.find(e.soid);
bool is_missing_divergent_item = missing_it != missing.end();
if (e.prior_version == eversion_t() || e.is_clone()) {
void pg_missing_t::rm(const hobject_t& oid, eversion_t v)
{
- std::map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::iterator p = missing.find(oid);
+ std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator p = missing.find(oid);
if (p != missing.end() && p->second.need <= v)
rm(p);
}
-void pg_missing_t::rm(const std::map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::iterator &m)
+void pg_missing_t::rm(const std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator &m)
{
rmissing.erase(m->second.need.version);
missing.erase(m);
void pg_missing_t::got(const hobject_t& oid, eversion_t v)
{
- std::map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::iterator p = missing.find(oid);
+ std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator p = missing.find(oid);
assert(p != missing.end());
assert(p->second.need <= v);
got(p);
}
-void pg_missing_t::got(const std::map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::iterator &m)
+void pg_missing_t::got(const std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator &m)
{
rmissing.erase(m->second.need.version);
missing.erase(m);
pg_missing_t *omissing)
{
unsigned mask = ~((~0)<<split_bits);
- for (map<hobject_t, item, hobject_t::BitwiseComparator>::iterator i = missing.begin();
+ for (map<hobject_t, item, hobject_t::ComparatorWithDefault>::iterator i = missing.begin();
i != missing.end();
) {
if ((i->first.get_hash() & mask) == child_pgid.m_seed) {
};
WRITE_CLASS_ENCODER(item)
- map<hobject_t, item, hobject_t::BitwiseComparator> missing; // oid -> (need v, have v)
+ map<hobject_t, item, hobject_t::ComparatorWithDefault> missing; // oid -> (need v, have v)
map<version_t, hobject_t> rmissing; // v -> oid
unsigned int num_missing() const;
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::BitwiseComparator>::iterator &m);
+ void rm(const std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator &m);
void got(const hobject_t& oid, eversion_t v);
- void got(const std::map<hobject_t, pg_missing_t::item, hobject_t::BitwiseComparator>::iterator &m);
+ void got(const std::map<hobject_t, pg_missing_t::item, hobject_t::ComparatorWithDefault>::iterator &m);
void split_into(pg_t child_pgid, unsigned split_bits, pg_missing_t *omissing);
void clear() {