From 01051f84d9c4bf6c3d3fcea7b5fd56e535fb60fc Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Wed, 30 Jan 2019 13:27:18 +0100 Subject: [PATCH] finished net server --- common/cpp/src/system_io/system_io_linux.cpp | 3 ++- receiver/src/main.cpp | 2 +- .../src/receiver_data_server/receiver_data_server.cpp | 3 ++- .../src/receiver_data_server/receiver_data_server.h | 2 +- receiver/src/receiver_data_server/tcp_server.cpp | 10 +++------- .../receiver_data_server/test_receiver_data_server.cpp | 4 ++-- .../unittests/receiver_data_server/test_tcp_server.cpp | 4 +++- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/common/cpp/src/system_io/system_io_linux.cpp b/common/cpp/src/system_io/system_io_linux.cpp index 2d36ce58a..be6393f3f 100644 --- a/common/cpp/src/system_io/system_io_linux.cpp +++ b/common/cpp/src/system_io/system_io_linux.cpp @@ -210,7 +210,8 @@ void SystemIO::ApplyNetworkOptions(SocketDescriptor socket_fd, Error* err) const ||*/ setsockopt(socket_fd, SOL_SOCKET, SO_SNDBUF, (char*)&kNetBufferSize, sizeof(kNetBufferSize)) != 0 || - setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(int)) != 0 + setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(int)) != 0 || + setsockopt(socket_fd, SOL_SOCKET, SO_REUSEPORT, &flag, sizeof(int)) != 0 ) { *err = GetLastError(); } diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp index 6c80cec86..c709542ed 100644 --- a/receiver/src/main.cpp +++ b/receiver/src/main.cpp @@ -33,7 +33,7 @@ int main (int argc, char* argv[]) { logger->SetLogLevel(config->log_level); static const std::string dataserver_address = "0.0.0.0:" + std::to_string(config->dataserver_listen_port); - asapo::ReceiverDataServer data_server{dataserver_address}; + asapo::ReceiverDataServer data_server{dataserver_address, config->log_level}; std::thread server_thread (&asapo::ReceiverDataServer::Run, &data_server); static const std::string address = "0.0.0.0:" + std::to_string(config->listen_port); diff --git a/receiver/src/receiver_data_server/receiver_data_server.cpp b/receiver/src/receiver_data_server/receiver_data_server.cpp index 65a6b0ee8..cbc55c3fb 100644 --- a/receiver/src/receiver_data_server/receiver_data_server.cpp +++ b/receiver/src/receiver_data_server/receiver_data_server.cpp @@ -4,8 +4,9 @@ namespace asapo { -ReceiverDataServer::ReceiverDataServer(std::string address) : request_pool__{new RequestPool}, net__{new TcpServer(address)}, +ReceiverDataServer::ReceiverDataServer(std::string address, LogLevel log_level) : request_pool__{new RequestPool}, net__{new TcpServer(address)}, log__{GetDefaultReceiverDataServerLogger()} { + GetDefaultReceiverDataServerLogger()->SetLogLevel(log_level); } void ReceiverDataServer::Run() { diff --git a/receiver/src/receiver_data_server/receiver_data_server.h b/receiver/src/receiver_data_server/receiver_data_server.h index 74a3ce97b..8366bb048 100644 --- a/receiver/src/receiver_data_server/receiver_data_server.h +++ b/receiver/src/receiver_data_server/receiver_data_server.h @@ -11,7 +11,7 @@ namespace asapo { class ReceiverDataServer { public: - explicit ReceiverDataServer(std::string address); + explicit ReceiverDataServer(std::string address, LogLevel log_level); std::unique_ptr<RequestPool> request_pool__; std::unique_ptr<NetServer> net__; const AbstractLogger* log__; diff --git a/receiver/src/receiver_data_server/tcp_server.cpp b/receiver/src/receiver_data_server/tcp_server.cpp index 61923e006..3dcaf0bb7 100644 --- a/receiver/src/receiver_data_server/tcp_server.cpp +++ b/receiver/src/receiver_data_server/tcp_server.cpp @@ -10,8 +10,7 @@ TcpServer::TcpServer(std::string address) : io__{GenerateDefaultIO()}, log__{Get address_{std::move(address)} {} Error TcpServer::InitializeMasterSocketIfNeeded() const noexcept { - Error - err; + Error err; if (master_socket_ == kDisconnectedSocketDescriptor) { master_socket_ = io__->CreateAndBindIPTCPSocketListener(address_, kMaxPendingConnections, &err); if (!err) { @@ -26,10 +25,6 @@ Error TcpServer::InitializeMasterSocketIfNeeded() const noexcept { ListSocketDescriptors TcpServer::GetActiveSockets(Error* err) const noexcept { std::vector<std::string> new_connections; auto sockets = io__->WaitSocketsActivity(master_socket_, &sockets_to_listen_, &new_connections, err); - if (*err) { - return {}; - } - for (auto& connection : new_connections) { log__->Debug("new connection from " + connection); } @@ -39,8 +34,8 @@ ListSocketDescriptors TcpServer::GetActiveSockets(Error* err) const noexcept { void TcpServer::CloseSocket(SocketDescriptor socket) const noexcept { sockets_to_listen_.erase(std::remove(sockets_to_listen_.begin(), sockets_to_listen_.end(), socket), sockets_to_listen_.end()); - io__->CloseSocket(socket, nullptr); log__->Debug("connection " + io__->AddressFromSocket(socket) + " closed"); + io__->CloseSocket(socket, nullptr); } Request TcpServer::ReadRequest(SocketDescriptor socket, Error* err) const noexcept { @@ -66,6 +61,7 @@ Requests TcpServer::ReadRequests(const ListSocketDescriptors& sockets) const noe if (err) { continue; } + log__->Debug("received request opcode: " + std::to_string(request.header.op_code)+" id: "+std::to_string(request.header.data_id)); requests.emplace_back(std::move(request)); } return requests; diff --git a/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp b/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp index 5cb9bf681..c3875026e 100644 --- a/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp +++ b/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp @@ -35,7 +35,7 @@ using asapo::Error; namespace { TEST(ReceiverDataServer, Constructor) { - ReceiverDataServer data_server{""}; + ReceiverDataServer data_server{"", asapo::LogLevel::Debug}; ASSERT_THAT(dynamic_cast<const asapo::TcpServer*>(data_server.net__.get()), Ne(nullptr)); ASSERT_THAT(dynamic_cast<asapo::RequestPool*>(data_server.request_pool__.get()), Ne(nullptr)); ASSERT_THAT(dynamic_cast<const asapo::AbstractLogger*>(data_server.log__), Ne(nullptr)); @@ -45,7 +45,7 @@ TEST(ReceiverDataServer, Constructor) { class ReceiverDataServerTests : public Test { public: std::string expected_address = "somehost:123"; - ReceiverDataServer data_server{expected_address}; + ReceiverDataServer data_server{expected_address, asapo::LogLevel::Debug}; asapo::MockNetServer mock_net; asapo::MockPool mock_pool; NiceMock<asapo::MockLogger> mock_logger; diff --git a/receiver/unittests/receiver_data_server/test_tcp_server.cpp b/receiver/unittests/receiver_data_server/test_tcp_server.cpp index 9dca74ee9..4ba807b49 100644 --- a/receiver/unittests/receiver_data_server/test_tcp_server.cpp +++ b/receiver/unittests/receiver_data_server/test_tcp_server.cpp @@ -77,7 +77,7 @@ void TCPServerTests::ExpectListenMaster(bool ok) { void TCPServerTests::WaitSockets(bool ok, ListSocketDescriptors clients) { EXPECT_CALL(mock_io, WaitSocketsActivity_t(expected_master_socket, testing::Pointee(clients), _, _)).WillOnce(DoAll( - SetArgPointee<2>(expected_new_connections), + SetArgPointee<2>(ok ? expected_new_connections:std::vector<std::string>{}), SetArgPointee<1>(expected_client_sockets), SetArgPointee<3>(ok ? nullptr : asapo::IOErrorTemplates::kUnknownIOError.Generate().release()), Return(ok ? expected_client_sockets : asapo::ListSocketDescriptors{}) @@ -158,6 +158,8 @@ void TCPServerTests::ExpectReceiveOk() { A_ReceiveData(asapo::kOpcodeGetBufferData, conn), testing::ReturnArg<2>() )); + EXPECT_CALL(mock_logger, Debug(AllOf(HasSubstr("request"), HasSubstr("id: "+std::to_string(conn)), + HasSubstr("opcode: "+std::to_string(asapo::kOpcodeGetBufferData))))); } } -- GitLab