From: liuchang0812 Date: Tue, 21 Mar 2017 14:59:39 +0000 (+0800) Subject: msg: convert ms_inject_delay_type to SAFE_OPTION X-Git-Tag: v12.0.2~281^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4c4beccedf60512bf0a6142521ffde6ad9098160;p=ceph.git msg: convert ms_inject_delay_type to SAFE_OPTION 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 --- diff --git a/src/common/config_opts.h b/src/common/config_opts.h index fbd2a2d25e2e..d33421726b64 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -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] diff --git a/src/msg/async/AsyncConnection.cc b/src/msg/async/AsyncConnection.cc index 824fd272d2c8..6347d0f7bdfc 100644 --- a/src/msg/async/AsyncConnection.cc +++ b/src/msg/async/AsyncConnection.cc @@ -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("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); + } } } diff --git a/src/msg/simple/Pipe.cc b/src/msg/simple/Pipe.cc index 36cbb145eff5..da0bcad69f28 100644 --- a/src/msg/simple/Pipe.cc +++ b/src/msg/simple/Pipe.cc @@ -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("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"); + } } }