diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
commit | 19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch) | |
tree | 42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/tools/immutable_object_cache/CacheServer.cc | |
parent | Initial commit. (diff) | |
download | ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.tar.xz ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.zip |
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/tools/immutable_object_cache/CacheServer.cc')
-rw-r--r-- | src/tools/immutable_object_cache/CacheServer.cc | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/tools/immutable_object_cache/CacheServer.cc b/src/tools/immutable_object_cache/CacheServer.cc new file mode 100644 index 000000000..e94a47c7a --- /dev/null +++ b/src/tools/immutable_object_cache/CacheServer.cc @@ -0,0 +1,106 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#include <boost/bind/bind.hpp> +#include "common/debug.h" +#include "common/ceph_context.h" +#include "CacheServer.h" + +#define dout_context g_ceph_context +#define dout_subsys ceph_subsys_immutable_obj_cache +#undef dout_prefix +#define dout_prefix *_dout << "ceph::cache::CacheServer: " << this << " " \ + << __func__ << ": " + + +namespace ceph { +namespace immutable_obj_cache { + +CacheServer::CacheServer(CephContext* cct, const std::string& file, + ProcessMsg processmsg) + : cct(cct), m_server_process_msg(processmsg), + m_local_path(file), m_acceptor(m_io_service) {} + +CacheServer::~CacheServer() { + stop(); +} + +int CacheServer::run() { + ldout(cct, 20) << dendl; + + int ret = start_accept(); + if (ret != 0) { + return ret; + } + + boost::system::error_code ec; + ret = m_io_service.run(ec); + if (ec) { + ldout(cct, 1) << "m_io_service run fails: " << ec.message() << dendl; + return -1; + } + return 0; +} + +int CacheServer::stop() { + m_io_service.stop(); + return 0; +} + +int CacheServer::start_accept() { + ldout(cct, 20) << dendl; + + boost::system::error_code ec; + m_acceptor.open(m_local_path.protocol(), ec); + if (ec) { + lderr(cct) << "failed to open domain socket: " << ec.message() << dendl; + return -ec.value(); + } + + m_acceptor.bind(m_local_path, ec); + if (ec) { + lderr(cct) << "failed to bind to domain socket '" + << m_local_path << "': " << ec.message() << dendl; + return -ec.value(); + } + + m_acceptor.listen(boost::asio::socket_base::max_connections, ec); + if (ec) { + lderr(cct) << "failed to listen on domain socket: " << ec.message() + << dendl; + return -ec.value(); + } + + accept(); + return 0; +} + +void CacheServer::accept() { + CacheSessionPtr new_session = nullptr; + + new_session.reset(new CacheSession(m_io_service, + m_server_process_msg, cct)); + + m_acceptor.async_accept(new_session->socket(), + boost::bind(&CacheServer::handle_accept, this, new_session, + boost::asio::placeholders::error)); +} + +void CacheServer::handle_accept(CacheSessionPtr new_session, + const boost::system::error_code& error) { + ldout(cct, 20) << dendl; + if (error) { + // operation_absort + lderr(cct) << "async accept fails : " << error.message() << dendl; + return; + } + + // TODO(dehao) : session setting + new_session->start(); + + // lanuch next accept + accept(); +} + +} // namespace immutable_obj_cache +} // namespace ceph |