]> git.proxmox.com Git - ceph.git/blob - ceph/src/crimson/net/chained_dispatchers.cc
b13d40c8f7318d720ed0445ac37ab4e1ee8f7657
[ceph.git] / ceph / src / crimson / net / chained_dispatchers.cc
1 #include "crimson/common/log.h"
2 #include "crimson/net/chained_dispatchers.h"
3 #include "crimson/net/Connection.h"
4 #include "crimson/net/Dispatcher.h"
5 #include "msg/Message.h"
6
7 namespace {
8 seastar::logger& logger() {
9 return crimson::get_logger(ceph_subsys_ms);
10 }
11 }
12
13 namespace crimson::net {
14
15 seastar::future<>
16 ChainedDispatchers::ms_dispatch(crimson::net::ConnectionRef conn,
17 MessageRef m) {
18 try {
19 for (auto& dispatcher : dispatchers) {
20 auto dispatched = dispatcher->ms_dispatch(conn, m);
21 if (dispatched.has_value()) {
22 return std::move(*dispatched
23 ).handle_exception([conn] (std::exception_ptr eptr) {
24 logger().error("{} got unexpected exception in ms_dispatch() throttling {}",
25 *conn, eptr);
26 ceph_abort();
27 });
28 }
29 }
30 } catch (...) {
31 logger().error("{} got unexpected exception in ms_dispatch() {}",
32 *conn, std::current_exception());
33 ceph_abort();
34 }
35 if (!dispatchers.empty()) {
36 logger().error("ms_dispatch unhandled message {}", *m);
37 }
38 return seastar::now();
39 }
40
41 void
42 ChainedDispatchers::ms_handle_accept(crimson::net::ConnectionRef conn) {
43 try {
44 for (auto& dispatcher : dispatchers) {
45 dispatcher->ms_handle_accept(conn);
46 }
47 } catch (...) {
48 logger().error("{} got unexpected exception in ms_handle_accept() {}",
49 *conn, std::current_exception());
50 ceph_abort();
51 }
52 }
53
54 void
55 ChainedDispatchers::ms_handle_connect(crimson::net::ConnectionRef conn) {
56 try {
57 for(auto& dispatcher : dispatchers) {
58 dispatcher->ms_handle_connect(conn);
59 }
60 } catch (...) {
61 logger().error("{} got unexpected exception in ms_handle_connect() {}",
62 *conn, std::current_exception());
63 ceph_abort();
64 }
65 }
66
67 void
68 ChainedDispatchers::ms_handle_reset(crimson::net::ConnectionRef conn, bool is_replace) {
69 try {
70 for (auto& dispatcher : dispatchers) {
71 dispatcher->ms_handle_reset(conn, is_replace);
72 }
73 } catch (...) {
74 logger().error("{} got unexpected exception in ms_handle_reset() {}",
75 *conn, std::current_exception());
76 ceph_abort();
77 }
78 }
79
80 void
81 ChainedDispatchers::ms_handle_remote_reset(crimson::net::ConnectionRef conn) {
82 try {
83 for (auto& dispatcher : dispatchers) {
84 dispatcher->ms_handle_remote_reset(conn);
85 }
86 } catch (...) {
87 logger().error("{} got unexpected exception in ms_handle_remote_reset() {}",
88 *conn, std::current_exception());
89 ceph_abort();
90 }
91 }
92
93 }