]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg: convert ms_inject_delay_type to SAFE_OPTION
authorliuchang0812 <liuchang0812@gmail.com>
Tue, 21 Mar 2017 14:59:39 +0000 (22:59 +0800)
committerliuchang0812 <liuchang0812@gmail.com>
Wed, 22 Mar 2017 12:39:51 +0000 (20:39 +0800)
We would like to eliminate `safe=false` parameter in opt.set_val. ms_inject_delay_type
is modified in runtime. We convert it to SAFE_OPTION to eliminate `safe=fales` and
guard thread safity.

Signed-off-by: liuchang0812 <liuchang0812@gmail.com>
src/common/config_opts.h
src/msg/async/AsyncConnection.cc
src/msg/simple/Pipe.cc

index fbd2a2d25e2e0cf423593f50bf5be1e8fec38c7c..d33421726b64a8de75846333aeb016500862feb7 100644 (file)
@@ -207,7 +207,7 @@ OPTION(ms_tcp_read_timeout, OPT_U64, 900)
 OPTION(ms_pq_max_tokens_per_priority, OPT_U64, 16777216)
 OPTION(ms_pq_min_cost, OPT_U64, 65536)
 OPTION(ms_inject_socket_failures, OPT_U64, 0)
-OPTION(ms_inject_delay_type, OPT_STR, "")          // "osd mds mon client" allowed
+SAFE_OPTION(ms_inject_delay_type, OPT_STR, "")          // "osd mds mon client" allowed
 OPTION(ms_inject_delay_msg_type, OPT_STR, "")      // the type of message to delay, as returned by Message::get_type_name(). This is an additional restriction on the general type filter ms_inject_delay_type.
 OPTION(ms_inject_delay_max, OPT_DOUBLE, 1)         // seconds
 OPTION(ms_inject_delay_probability, OPT_DOUBLE, 0) // range [0, 1]
index 824fd272d2c84b892a7d20107ad2da01b447da79..6347d0f7bdfc34a44c8d956b8b0f974afebe63f2 100644 (file)
@@ -158,10 +158,12 @@ AsyncConnection::~AsyncConnection()
 
 void AsyncConnection::maybe_start_delay_thread()
 {
-  if (!delay_state &&
-      async_msgr->cct->_conf->ms_inject_delay_type.find(ceph_entity_type_name(peer_type)) != string::npos) {
-    ldout(msgr->cct, 1) << __func__ << " setting up a delay queue" << dendl;
-    delay_state = new DelayedDelivery(async_msgr, center, dispatch_queue, conn_id);
+  if (!delay_state) {
+    auto pos = async_msgr->cct->_conf->get_val<std::string>("ms_inject_delay_type").find(ceph_entity_type_name(peer_type));
+    if (pos != string::npos) {
+      ldout(msgr->cct, 1) << __func__ << " setting up a delay queue" << dendl;
+      delay_state = new DelayedDelivery(async_msgr, center, dispatch_queue, conn_id);
+    }
   }
 }
 
index 36cbb145eff5535fb5ae5393adbb7ea70578f288..da0bcad69f2885647e4d1935a0360faffc569daf 100644 (file)
@@ -209,11 +209,13 @@ void Pipe::start_reader()
 
 void Pipe::maybe_start_delay_thread()
 {
-  if (!delay_thread &&
-      msgr->cct->_conf->ms_inject_delay_type.find(ceph_entity_type_name(connection_state->peer_type)) != string::npos) {
-    lsubdout(msgr->cct, ms, 1) << "setting up a delay queue on Pipe " << this << dendl;
-    delay_thread = new DelayedDelivery(this);
-    delay_thread->create("ms_pipe_delay");
+  if (!delay_thread) {
+    auto pos = msgr->cct->_conf->get_val<std::string>("ms_inject_delay_type").find(ceph_entity_type_name(connection_state->peer_type));
+    if (pos != string::npos) {
+      lsubdout(msgr->cct, ms, 1) << "setting up a delay queue on Pipe " << this << dendl;
+      delay_thread = new DelayedDelivery(this);
+      delay_thread->create("ms_pipe_delay");
+    }
   }
 }