services:
- mon
with_legacy: true
+- name: mon_use_min_delay_socket
+ type: bool
+ level: advanced
+ default: false
+ desc: priority packets between mons
+ with_legacy: true
+ see_also:
+ - osd_heartbeat_use_min_delay_socket
SocketOptions opts;
opts.priority = async_msgr->get_socket_priority();
+ if (async_msgr->cct->_conf->mon_use_min_delay_socket) {
+ if (async_msgr->get_mytype() == CEPH_ENTITY_TYPE_MON &&
+ peer_is_mon()) {
+ opts.priority = SOCKET_PRIORITY_MIN_DELAY;
+ }
+ }
opts.connect_bind_addr = msgr->get_myaddrs().front();
ssize_t r = worker->connect(target_addr, opts, &cs);
if (r < 0) {
case STATE_ACCEPTING: {
center->create_file_event(cs.fd(), EVENT_READABLE, read_handler);
state = STATE_CONNECTION_ESTABLISHED;
-
+ if (async_msgr->cct->_conf->mon_use_min_delay_socket) {
+ if (async_msgr->get_mytype() == CEPH_ENTITY_TYPE_MON &&
+ peer_is_mon()) {
+ cs.set_priority(cs.fd(), SOCKET_PRIORITY_MIN_DELAY,
+ target_addr.get_family());
+ }
+ }
break;
}
void close() override {
compat_closesocket(_fd);
}
+ void set_priority(int sd, int prio, int domain) override {
+ handler.set_priority(sd, prio, domain);
+ }
int fd() const override {
return _fd;
}
virtual void shutdown() = 0;
virtual void close() = 0;
virtual int fd() const = 0;
+ virtual void set_priority(int sd, int prio, int domain) = 0;
};
class ConnectedSocket;
return _csi->fd();
}
+ void set_priority(int sd, int prio, int domain) {
+ _csi->set_priority(sd, prio, domain);
+ }
+
explicit operator bool() const {
return _csi.get();
}
virtual int fd() const override {
return _listener.fd();
}
+ virtual void set_priority(int sd, int prio, int domain) override {}
};
// NativeConnectedSocketImpl
active = false;
}
+void RDMAConnectedSocketImpl::set_priority(int sd, int prio, int domain) {
+ ceph::NetHandler net(cct);
+ net.set_priority(sd, prio, domain);
+}
+
void RDMAConnectedSocketImpl::fault()
{
ldout(cct, 1) << __func__ << " tcp fd " << tcp_fd << dendl;
virtual void shutdown() override;
virtual void close() override;
virtual int fd() const override { return notify_fd; }
+ virtual void set_priority(int sd, int prio, int domain) override;
void fault();
const char* get_qp_state() { return Infiniband::qp_state_string(qp->get_state()); }
uint32_t get_peer_qpn () const { return peer_qpn; }