OPTION(osd_mon_report_interval_min, OPT_INT, 5) // pg stats, failures, up_thru, boot.
OPTION(osd_min_down_reporters, OPT_INT, 1) // number of OSDs who need to report a down OSD for it to count
OPTION(osd_min_down_reports, OPT_INT, 3) // number of times a down OSD must be reported for it to count
-OPTION(osd_replay_window, OPT_INT, 45)
+OPTION(osd_default_data_pool_replay_window, OPT_INT, 45)
OPTION(osd_preserve_trimmed_log, OPT_BOOL, true)
OPTION(osd_auto_mark_unfound_lost, OPT_BOOL, false)
OPTION(osd_recovery_delay_start, OPT_FLOAT, 15)
pools[pool].lpg_num = lpg_bits ? (1 << (lpg_bits-1)) : 0;
pools[pool].lpgp_num = lpg_bits ? (1 << (lpg_bits-1)) : 0;
pools[pool].last_change = epoch;
+ if (p->first == CEPH_DATA_RULE)
+ pools[pool].crash_replay_interval = cct->_conf->osd_default_data_pool_replay_window;
pool_name[pool] = p->second;
}
assert(!is_active());
// -- crash recovery?
- if (may_need_replay(osd->osdmap)) {
- if (g_conf->osd_replay_window > 0) {
- replay_until = ceph_clock_now(g_ceph_context);
- replay_until += g_conf->osd_replay_window;
- dout(10) << "crashed, allowing op replay for " << g_conf->osd_replay_window
- << " until " << replay_until << dendl;
- state_set(PG_STATE_REPLAY);
- osd->replay_queue_lock.Lock();
- osd->replay_queue.push_back(pair<pg_t,utime_t>(info.pgid, replay_until));
- osd->replay_queue_lock.Unlock();
- } else {
- dout(10) << "crashed, but osd_replay_window=0. skipping replay." << dendl;
- state_clear(PG_STATE_REPLAY);
- }
+ if (pool->info.crash_replay_interval > 0 &&
+ may_need_replay(osd->osdmap)) {
+ replay_until = ceph_clock_now(g_ceph_context);
+ replay_until += pool->info.crash_replay_interval;
+ dout(10) << "activate starting replay interval for " << pool->info.crash_replay_interval
+ << " until " << replay_until << dendl;
+ state_set(PG_STATE_REPLAY);
+ osd->replay_queue_lock.Lock();
+ osd->replay_queue.push_back(pair<pg_t,utime_t>(info.pgid, replay_until));
+ osd->replay_queue_lock.Unlock();
}
// twiddle pg state