ss << "pool '" << data_name << "' does not exist";
return true;
}
-
- // Warn if crash_replay_interval is not set on the data pool
- // (on creation should have done pools[pool].crash_replay_interval =
- // cct->_conf->osd_default_data_pool_replay_window;)
- pg_pool_t const *data_pool = mon->osdmon()->osdmap.get_pg_pool(data);
- if (data_pool->get_crash_replay_interval() == 0) {
- ss << "warning: crash_replay_interval not set on data pool '" << data << "', ";
- }
-
+
string fs_name;
cmd_getval(g_ceph_context, cmdmap, "fs_name", fs_name);
if (fs_name.empty()) {
r = -EINVAL;
}
+ // Automatically set crash_replay_interval on data pool if it
+ // isn't already set.
+ pg_pool_t const *data_pool = mon->osdmon()->osdmap.get_pg_pool(data);
+ assert(data_pool != NULL); // Checked it existed above
+ if (data_pool->get_crash_replay_interval() == 0) {
+ r = mon->osdmon()->set_crash_replay_interval(data, g_conf->osd_default_data_pool_replay_window);
+ assert(r == 0); // We just did get_pg_pool so it must exist and be settable
+ request_proposal(mon->osdmon());
+ }
+
// All checks passed, go ahead and create.
MDSMap newmap;
newmap.inc = pending_mdsmap.inc;
return id;
}
+
+/**
+ * Special setter for crash_replay_interval on a pool. Equivalent to
+ * using prepare_command_pool_set, but in a form convenient for use
+ * from MDSMonitor rather than from an administrative command.
+ */
+int OSDMonitor::set_crash_replay_interval(const int64_t pool_id, const uint32_t cri)
+{
+ pg_pool_t p;
+ if (pending_inc.new_pools.count(pool_id)) {
+ p = pending_inc.new_pools[pool_id];
+ } else {
+ const pg_pool_t *p_ptr = osdmap.get_pg_pool(pool_id);
+ if (p_ptr == NULL) {
+ return -ENOENT;
+ } else {
+ p = *p_ptr;
+ }
+ }
+
+ dout(10) << "Set pool " << pool_id << " crash_replay_interval=" << cri << dendl;
+ p.crash_replay_interval = cri;
+ p.last_change = pending_inc.epoch;
+ pending_inc.new_pools[pool_id] = p;
+
+ return 0;
+}
+
+
int OSDMonitor::prepare_command_pool_set(map<string,cmd_vartype> &cmdmap,
stringstream& ss)
{
bool prepare_command(MMonCommand *m);
bool prepare_command_impl(MMonCommand *m, map<string,cmd_vartype> &cmdmap);
+ int set_crash_replay_interval(const int64_t pool_id, const uint32_t cri);
int prepare_command_pool_set(map<string,cmd_vartype> &cmdmap,
stringstream& ss);