// into reconnect, so that we don't wait for them.
objecter->enable_blocklist_events();
std::set<entity_addr_t> blocklist;
+ std::set<entity_addr_t> range;
epoch_t epoch = 0;
- objecter->with_osdmap([&blocklist, &epoch](const OSDMap& o) {
- o.get_blocklist(&blocklist);
+ objecter->with_osdmap([&blocklist, &range, &epoch](const OSDMap& o) {
+ o.get_blocklist(&blocklist, &range);
epoch = o.get_epoch();
});
prefix == "osd blacklist clear") {
pending_inc.new_blocklist.clear();
std::list<std::pair<entity_addr_t,utime_t > > blocklist;
- osdmap.get_blocklist(&blocklist);
+ std::list<std::pair<entity_addr_t,utime_t > > range_b;
+ osdmap.get_blocklist(&blocklist, &range_b);
for (const auto &entry : blocklist) {
pending_inc.old_blocklist.push_back(entry.first);
}
+ for (const auto &entry : range_b) {
+ pending_inc.old_range_blocklist.push_back(entry.first);
+ }
ss << " removed all blocklist entries";
getline(ss, rs);
wait_for_finished_proposal(op, new Monitor::C_Command(mon, op, 0, rs,
f->close_section();
} else if (prefix == "dump_blocklist") {
list<pair<entity_addr_t,utime_t> > bl;
+ list<pair<entity_addr_t,utime_t> > rbl;
OSDMapRef curmap = service.get_osdmap();
+ curmap->get_blocklist(&bl, &rbl);
f->open_array_section("blocklist");
- curmap->get_blocklist(&bl);
for (list<pair<entity_addr_t,utime_t> >::iterator it = bl.begin();
it != bl.end(); ++it) {
f->open_object_section("entry");
f->close_section(); //entry
}
f->close_section(); //blocklist
+ f->open_array_section("range_blocklist");
+ for (list<pair<entity_addr_t,utime_t> >::iterator it = rbl.begin();
+ it != rbl.end(); ++it) {
+ f->open_object_section("entry");
+ f->open_object_section("entity_addr_t");
+ it->first.dump(f);
+ f->close_section(); //entity_addr_t
+ it->second.localtime(f->dump_stream("expire_time"));
+ f->close_section(); //entry
+ }
+ f->close_section(); //blocklist
} else if (prefix == "dump_watchers") {
list<obj_watch_item_t> watchers;
// scan pg's
return false;
}
-void OSDMap::get_blocklist(list<pair<entity_addr_t,utime_t> > *bl) const
+void OSDMap::get_blocklist(list<pair<entity_addr_t,utime_t> > *bl,
+ std::list<std::pair<entity_addr_t,utime_t> > *rl) const
{
std::copy(blocklist.begin(), blocklist.end(), std::back_inserter(*bl));
+ std::copy(range_blocklist.begin(), range_blocklist.end(),
+ std::back_inserter(*rl));
}
-void OSDMap::get_blocklist(std::set<entity_addr_t> *bl) const
+void OSDMap::get_blocklist(std::set<entity_addr_t> *bl,
+ std::set<entity_addr_t> *rl) const
{
for (const auto &i : blocklist) {
bl->insert(i.first);
}
+ for (const auto &i : range_blocklist) {
+ rl->insert(i.first);
+ }
}
void OSDMap::set_max_osd(int m)
bool is_blocklisted(const entity_addr_t& a) const;
bool is_blocklisted(const entity_addrvec_t& a) const;
- void get_blocklist(std::list<std::pair<entity_addr_t,utime_t > > *bl) const;
- void get_blocklist(std::set<entity_addr_t> *bl) const;
+ void get_blocklist(std::list<std::pair<entity_addr_t,utime_t > > *bl,
+ std::list<std::pair<entity_addr_t,utime_t> > *rl) const;
+ void get_blocklist(std::set<entity_addr_t> *bl,
+ std::set<entity_addr_t> *rl) const;
std::string get_cluster_snapshot() const {
if (cluster_snapshot_epoch == epoch)
std::set<entity_addr_t> old_set;
std::set<entity_addr_t> new_set;
+ std::set<entity_addr_t> old_range_set;
+ std::set<entity_addr_t> new_range_set;
- old_osd_map.get_blocklist(&old_set);
- new_osd_map.get_blocklist(&new_set);
+ old_osd_map.get_blocklist(&old_set, &old_range_set);
+ new_osd_map.get_blocklist(&new_set, &new_range_set);
std::set<entity_addr_t> delta_set;
std::set_difference(
new_set.begin(), new_set.end(), old_set.begin(), old_set.end(),
std::inserter(delta_set, delta_set.begin()));
+ std::set_difference(
+ new_range_set.begin(), new_range_set.end(),
+ old_range_set.begin(), old_range_set.end(),
+ std::inserter(delta_set, delta_set.begin()));
blocklist_events.insert(delta_set.begin(), delta_set.end());
}