mirror of
https://github.com/ceph/ceph
synced 2025-02-24 11:37:37 +00:00
PG: Extract query map generation from recover_master_log
PgPriorSet::gen_query_map now generates the initial info query map.
This commit is contained in:
parent
1477c06826
commit
21d8e72ad2
@ -1222,7 +1222,19 @@ bool PG::recover_master_log(map< int, map<pg_t,Query> >& query_map,
|
||||
{
|
||||
dout(10) << "recover_master_log" << dendl;
|
||||
|
||||
// -- query info from everyone in prior_set.
|
||||
if (is_down())
|
||||
return false;
|
||||
|
||||
if (peer_info_requested.empty()) {
|
||||
stringstream out;
|
||||
prior_set->gen_query_map(*osd->osdmap, info, query_map);
|
||||
dout(10) << out << dendl;
|
||||
for (map< int, map<pg_t, Query> >::const_iterator i = query_map.begin();
|
||||
i != query_map.end(); ++i) {
|
||||
peer_info_requested.insert(i->first);
|
||||
}
|
||||
}
|
||||
|
||||
bool lack_info = false;
|
||||
for (set<int>::const_iterator it = prior_set->cur.begin();
|
||||
it != prior_set->cur.end();
|
||||
@ -1239,19 +1251,10 @@ bool PG::recover_master_log(map< int, map<pg_t,Query> >& query_map,
|
||||
dout(10) << " waiting for osd" << *it << dendl;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (osd->osdmap->is_up(*it)) {
|
||||
dout(10) << " querying info from osd" << *it << dendl;
|
||||
query_map[*it][info.pgid] = Query(Query::INFO, info.history);
|
||||
peer_info_requested.insert(*it);
|
||||
} else {
|
||||
dout(10) << " not querying info from down osd" << *it << dendl;
|
||||
}
|
||||
}
|
||||
if (lack_info)
|
||||
return false;
|
||||
|
||||
|
||||
// -- ok, we have all (prior_set) info. (and maybe others.)
|
||||
dout(10) << " have prior_set info. min_last_complete_ondisk " << min_last_complete_ondisk << dendl;
|
||||
|
||||
@ -1345,11 +1348,6 @@ bool PG::recover_master_log(map< int, map<pg_t,Query> >& query_map,
|
||||
|
||||
dout(10) << " oldest_update " << oldest_update << " (osd" << oldest_who << ")" << dendl;
|
||||
|
||||
if (is_down()) {
|
||||
dout(10) << " down. we wait." << dendl;
|
||||
return false;
|
||||
}
|
||||
|
||||
have_master_log = true;
|
||||
|
||||
return true;
|
||||
@ -3906,3 +3904,20 @@ PG::PgPriorSet::PgPriorSet(int whoami,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void PG::PgPriorSet::gen_query_map(const OSDMap &osdmap,
|
||||
const PG::Info &info,
|
||||
map< int, map<pg_t,Query> >& query_map)
|
||||
{
|
||||
for (set<int>::const_iterator it = cur.begin();
|
||||
it != cur.end();
|
||||
++it) {
|
||||
// -- query info from everyone in prior_set.
|
||||
if (osdmap.is_up(*it)) {
|
||||
dout(10) << " querying info from osd" << *it << dendl;
|
||||
query_map[*it][info.pgid] = Query(Query::INFO, info.history);
|
||||
} else {
|
||||
dout(10) << " not querying info from down osd" << *it << dendl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -243,9 +243,9 @@ public:
|
||||
Info::History history;
|
||||
|
||||
Query() : type(-1) {}
|
||||
Query(int t, Info::History& h) :
|
||||
Query(int t, const Info::History& h) :
|
||||
type(t), history(h) { assert(t != LOG); }
|
||||
Query(int t, eversion_t s, Info::History& h) :
|
||||
Query(int t, eversion_t s, const Info::History& h) :
|
||||
type(t), since(s), history(h) { assert(t == LOG); }
|
||||
|
||||
void encode(bufferlist &bl) const {
|
||||
@ -757,6 +757,10 @@ public:
|
||||
const vector<int> &acting,
|
||||
const Info &info,
|
||||
const PG *pg);
|
||||
|
||||
void gen_query_map(const OSDMap &osdmap,
|
||||
const Info &info,
|
||||
map< int, map<pg_t,Query> >& query_map);
|
||||
};
|
||||
|
||||
friend std::ostream& operator<<(std::ostream& oss,
|
||||
|
Loading…
Reference in New Issue
Block a user