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>
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]
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);
+ }
}
}
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");
+ }
}
}