OPTION(mon_osd_allow_primary_temp, OPT_BOOL, false) // allow primary_temp to be set in the osdmap
OPTION(mon_osd_allow_primary_affinity, OPT_BOOL, false) // allow primary_affinity to be set in the osdmap
OPTION(mon_osd_prime_pg_temp, OPT_BOOL, false) // prime osdmap with pg mapping changes
+OPTION(mon_osd_prime_pg_temp_max_time, OPT_FLOAT, .5) // max time to spend priming
OPTION(mon_stat_smooth_intervals, OPT_INT, 2) // smooth stats over last N PGMap maps
OPTION(mon_lease, OPT_FLOAT, 5) // lease interval
OPTION(mon_lease_renew_interval, OPT_FLOAT, 3) // on leader, to renew the lease
OSDMap next;
next.deepish_copy_from(osdmap);
next.apply_incremental(pending_inc);
+ utime_t stop = ceph_clock_now(NULL);
+ stop += g_conf->mon_osd_prime_pg_temp_max_time;
for (set<int>::iterator p = osds.begin(); p != osds.end(); ++p) {
prime_pg_temp(next, &mon->pgmon()->pg_map, *p);
+ if (ceph_clock_now(NULL) > stop) {
+ dout(10) << __func__ << " consumed more than "
+ << g_conf->mon_osd_prime_pg_temp_max_time
+ << " seconds, stopping"
+ << dendl;
+ break;
+ }
}
}
}
void OSDMonitor::prime_pg_temp(OSDMap& next, PGMap *pg_map)
{
dout(10) << __func__ << dendl;
+ utime_t stop = ceph_clock_now(NULL);
+ stop += g_conf->mon_osd_prime_pg_temp_max_time;
+ int n = 0;
for (ceph::unordered_map<pg_t, pg_stat_t>::iterator pp = pg_map->pg_stat.begin();
pp != pg_map->pg_stat.end();
++pp) {
prime_pg_temp(next, pp);
+ if (++n == 1000) {
+ n = 0;
+ if (ceph_clock_now(NULL) > stop) {
+ dout(10) << __func__ << " consumed more than "
+ << g_conf->mon_osd_prime_pg_temp_max_time
+ << " seconds, stopping"
+ << dendl;
+ break;
+ }
+ }
}
}