snapclient->sync(new C_MDSInternalNoop);
}
+void MDSRank::apply_blocklist(const std::set<entity_addr_t> &addrs, epoch_t epoch) {
+ auto victims = server->apply_blocklist(addrs);
+ dout(4) << __func__ << ": killed " << victims << " blocklisted sessions ("
+ << addrs.size() << " blocklist entries, "
+ << sessionmap.get_sessions().size() << ")" << dendl;
+ if (victims) {
+ set_osd_epoch_barrier(epoch);
+ }
+}
+
+
void MDSRank::reconnect_start()
{
dout(1) << "reconnect_start" << dendl;
o.get_blocklist(&blocklist);
epoch = o.get_epoch();
});
- auto killed = server->apply_blocklist(blocklist);
- dout(4) << "reconnect_start: killed " << killed << " blocklisted sessions ("
- << blocklist.size() << " blocklist entries, "
- << sessionmap.get_sessions().size() << ")" << dendl;
- if (killed) {
- set_osd_epoch_barrier(epoch);
- }
+
+ apply_blocklist(blocklist, epoch);
server->reconnect_clients(new C_MDS_VoidFn(this, &MDSRank::reconnect_done));
finish_contexts(g_ceph_context, waiting_for_reconnect);
purge_queue.update_op_limit(*mdsmap);
- std::set<entity_addr_t> newly_blocklisted;
- objecter->consume_blocklist_events(&newly_blocklisted);
- auto epoch = objecter->with_osdmap([](const OSDMap &o){return o.get_epoch();});
- dout(4) << "handle_osd_map epoch " << epoch << ", "
- << newly_blocklisted.size() << " new blocklist entries" << dendl;
- auto victims = server->apply_blocklist(newly_blocklisted);
- if (victims) {
- set_osd_epoch_barrier(epoch);
+ // it's ok if replay state is reached via standby-replay, the
+ // reconnect state will journal blocklisted clients (journal
+ // is opened for writing in `replay_done` before moving to
+ // up:resolve).
+ if (!is_replay()) {
+ std::set<entity_addr_t> newly_blocklisted;
+ objecter->consume_blocklist_events(&newly_blocklisted);
+ auto epoch = objecter->with_osdmap([](const OSDMap &o){return o.get_epoch();});
+ apply_blocklist(newly_blocklisted, epoch);
}
-
// By default the objecter only requests OSDMap updates on use,
// we would like to always receive the latest maps in order to
// apply policy based on the FULL flag.