void PGMonitor::post_paxos_update()
{
dout(10) << __func__ << dendl;
- if (mon->osdmon()->osdmap.get_epoch()) {
- send_pg_creates();
+ OSDMap& osdmap = mon->osdmon()->osdmap;
+ if (osdmap.get_epoch()) {
+ if (osdmap.get_num_up_osds() > 0) {
+ assert(osdmap.get_up_osd_features() & CEPH_FEATURE_MON_STATEFUL_SUB);
+ check_subs();
+ }
}
}
propose_pending();
}
-void PGMonitor::send_pg_creates()
-{
- // We only need to do this old, spammy way of broadcasting create messages
- // to every osd (even those that aren't connected) if there are old OSDs in
- // the cluster. As soon as everybody has upgraded we can flipt to the new
- // behavior instead
- OSDMap& osdmap = mon->osdmon()->osdmap;
- if (osdmap.get_num_up_osds() == 0)
- return;
-
- if (osdmap.get_up_osd_features() & CEPH_FEATURE_MON_STATEFUL_SUB) {
- check_subs();
- return;
- }
-
- dout(10) << "send_pg_creates to " << pg_map.creating_pgs.size()
- << " pgs" << dendl;
-
- utime_t now = ceph_clock_now(g_ceph_context);
- for (map<int, map<epoch_t, set<pg_t> > >::iterator p =
- pg_map.creating_pgs_by_osd_epoch.begin();
- p != pg_map.creating_pgs_by_osd_epoch.end();
- ++p) {
- int osd = p->first;
-
- // throttle?
- if (last_sent_pg_create.count(osd) &&
- now - g_conf->mon_pg_create_interval < last_sent_pg_create[osd])
- continue;
-
- if (osdmap.is_up(osd))
- send_pg_creates(osd, NULL, 0);
- }
-}
-
epoch_t PGMonitor::send_pg_creates(int osd, Connection *con, epoch_t next)
{
dout(30) << __func__ << " " << pg_map.creating_pgs_by_osd_epoch << dendl;
return next;
}
- if (con) {
- con->send_message(m);
- } else {
- assert(mon->osdmon()->osdmap.is_up(osd));
- mon->messenger->send_message(m, mon->osdmon()->osdmap.get_inst(osd));
- }
- last_sent_pg_create[osd] = ceph_clock_now(g_ceph_context);
+ con->send_message(m);
+ last_sent_pg_create[osd] = ceph_clock_now();
// sub is current through last + 1
return last + 1;