]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Add admin socket feature set_recovery_delay
authorDavid Zafman <dzafman@redhat.com>
Thu, 30 Apr 2015 17:20:24 +0000 (10:20 -0700)
committerDavid Zafman <dzafman@redhat.com>
Wed, 13 May 2015 20:09:14 +0000 (13:09 -0700)
Set the value of osd_recovery_delay_start to specified seconds

Signed-off-by: David Zafman <dzafman@redhat.com>
src/osd/OSD.cc

index 88b08e556055b97dd00bdc6a2e676a55750be13e..f15bf07f2ea28e66d204e4041608efdc85b276bd 100644 (file)
@@ -2019,6 +2019,13 @@ void OSD::final_init()
     test_ops_hook,
     "inject metadata error");
   assert(r == 0);
+  r = admin_socket->register_command(
+    "set_recovery_delay",
+    "set_recovery_delay " \
+    "name=utime,type=CephInt,req=false",
+    test_ops_hook,
+     "Delay osd recovery by specified seconds");
+  assert(r == 0);
 }
 
 void OSD::create_logger()
@@ -2276,6 +2283,7 @@ int OSD::shutdown()
   cct->get_admin_socket()->unregister_command("truncobj");
   cct->get_admin_socket()->unregister_command("injectdataerr");
   cct->get_admin_socket()->unregister_command("injectmdataerr");
+  cct->get_admin_socket()->unregister_command("set_recovery_delay");
   delete test_ops_hook;
   test_ops_hook = NULL;
 
@@ -3963,6 +3971,8 @@ void OSD::check_ops_in_flight()
 //   truncobj <pool-id> [namespace/]<obj-name> <newlen>
 //   injectmdataerr [namespace/]<obj-name> [shardid]
 //   injectdataerr [namespace/]<obj-name> [shardid]
+//
+//   set_recovery_delay [utime]
 void TestOpsSocketHook::test_ops(OSDService *service, ObjectStore *store,
      std::string command, cmdmap_t& cmdmap, ostream &ss)
 {
@@ -4091,6 +4101,24 @@ void TestOpsSocketHook::test_ops(OSDService *service, ObjectStore *store,
     }
     return;
   }
+  if (command == "set_recovery_delay") {
+    int64_t delay;
+    cmd_getval(service->cct, cmdmap, "utime", delay, (int64_t)0);
+    ostringstream oss;
+    oss << delay;
+    int r = service->cct->_conf->set_val("osd_recovery_delay_start",
+                                        oss.str().c_str());
+    if (r != 0) {
+      ss << "set_recovery_delay: error setting "
+        << "osd_recovery_delay_start to '" << delay << "': error "
+        << r;
+      return;
+    }
+    service->cct->_conf->apply_changes(NULL);
+    ss << "set_recovery_delay: set osd_recovery_delay_start "
+       << "to " << service->cct->_conf->osd_recovery_delay_start;
+    return;
+  }
   ss << "Internal error - command=" << command;
   return;
 }