MCPcopy Create free account
hub / github.com/ceph/ceph / create

Method create

src/msg/async/Stack.cc:63–107  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

61}
62
63std::shared_ptr<NetworkStack> NetworkStack::create(CephContext *c,
64 const std::string &t)
65{
66 std::shared_ptr<NetworkStack> stack = nullptr;
67
68 if (t == "posix")
69 stack.reset(new PosixNetworkStack(c, false));
70 else if (t == "smc")
71 stack.reset(new PosixNetworkStack(c, true));
72#ifdef HAVE_RDMA
73 else if (t == "rdma")
74 stack.reset(new RDMAStack(c));
75#endif
76#ifdef HAVE_DPDK
77 else if (t == "dpdk")
78 stack.reset(new DPDKStack(c));
79#endif
80
81 if (stack == nullptr) {
82 lderr(c) << __func__ << " ms_async_transport_type " << t <<
83 " is not supported! " << dendl;
84 ceph_abort();
85 return nullptr;
86 }
87
88 unsigned num_workers = c->_conf->ms_async_op_threads;
89 ceph_assert(num_workers > 0);
90 if (num_workers >= EventCenter::MAX_EVENTCENTER) {
91 ldout(c, 0) << __func__ << " max thread limit is "
92 << EventCenter::MAX_EVENTCENTER << ", switching to this now. "
93 << "Higher thread values are unnecessary and currently unsupported."
94 << dendl;
95 num_workers = EventCenter::MAX_EVENTCENTER;
96 }
97 const int InitEventNumber = 5000;
98 for (unsigned worker_id = 0; worker_id < num_workers; ++worker_id) {
99 Worker *w = stack->create_worker(c, worker_id);
100 int ret = w->center.init(InitEventNumber, worker_id, t);
101 if (ret)
102 throw std::system_error(-ret, std::generic_category());
103 stack->workers.push_back(w);
104 }
105
106 return stack;
107}
108
109NetworkStack::NetworkStack(CephContext *c)
110 : cct(c)

Callers

nothing calls this directly

Calls 4

resetMethod · 0.45
create_workerMethod · 0.45
initMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected