From 434f25795ff74c889835b125cb6829d84c0f52a8 Mon Sep 17 00:00:00 2001 From: Carsten Patzke <carsten.patzke@desy.de> Date: Wed, 8 Apr 2020 11:21:22 +0200 Subject: [PATCH] [RDS] Splitted ProcessRequestUnlocked --- .../src/receiver_data_server/net_server.h | 2 +- .../receiver_data_server_request_handler.cpp | 36 +++++++++++-------- .../receiver_data_server_request_handler.h | 6 +++- .../src/receiver_data_server/tcp_server.cpp | 2 +- .../src/receiver_data_server/tcp_server.h | 2 +- .../receiver_dataserver_mocking.h | 4 +-- 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/receiver/src/receiver_data_server/net_server.h b/receiver/src/receiver_data_server/net_server.h index c07d06b49..727588921 100644 --- a/receiver/src/receiver_data_server/net_server.h +++ b/receiver/src/receiver_data_server/net_server.h @@ -13,7 +13,7 @@ class NetServer { virtual GenericRequests GetNewRequests(Error* err) const noexcept = 0; virtual Error SendResponse(uint64_t source_id, GenericNetworkResponse* response) const noexcept = 0; virtual Error SendResponseAndSlotData(uint64_t source_id, GenericNetworkResponse* response, - GenericRequestHeader* request, CacheMeta* cache_slot) const noexcept = 0; + GenericRequestHeader* request, const CacheMeta* cache_slot) const noexcept = 0; virtual void HandleAfterError(uint64_t source_id) const noexcept = 0; virtual ~NetServer() = default; }; diff --git a/receiver/src/receiver_data_server/receiver_data_server_request_handler.cpp b/receiver/src/receiver_data_server/receiver_data_server_request_handler.cpp index 63b1db2d0..2d911b111 100644 --- a/receiver/src/receiver_data_server/receiver_data_server_request_handler.cpp +++ b/receiver/src/receiver_data_server/receiver_data_server_request_handler.cpp @@ -23,7 +23,7 @@ Error ReceiverDataServerRequestHandler::SendResponse(const ReceiverDataServerReq } Error ReceiverDataServerRequestHandler::SendResponseAndSlotData(const ReceiverDataServerRequest* request, - CacheMeta* meta) { + const CacheMeta* meta) { GenericNetworkResponse response{}; response.op_code = kOpcodeGetBufferData; response.error_code = kNetErrorNoError; @@ -41,14 +41,11 @@ CacheMeta* ReceiverDataServerRequestHandler::GetSlotAndLock(const ReceiverDataSe return meta; } - bool ReceiverDataServerRequestHandler::ProcessRequestUnlocked(GenericRequest* request, bool* retry) { *retry = false; auto receiver_request = dynamic_cast<ReceiverDataServerRequest*>(request); if (!CheckRequest(receiver_request)) { - SendResponse(receiver_request, kNetErrorWrongRequest); - server_->HandleAfterError(receiver_request->source_id); - log__->Error("wrong request, code:" + std::to_string(receiver_request->header.op_code)); + HandleInvalidRequest(receiver_request); return true; } @@ -58,19 +55,12 @@ bool ReceiverDataServerRequestHandler::ProcessRequestUnlocked(GenericRequest* re return true; } - auto err = SendResponseAndSlotData(receiver_request, meta); + HandleValidRequest(receiver_request, meta); data_cache_->UnlockSlot(meta); - if (err) { - log__->Error("failed to send slot:" + err->Explain()); - server_->HandleAfterError(receiver_request->source_id); - return true; - } - - statistics__->IncreaseRequestCounter(); - statistics__->IncreaseRequestDataVolume(receiver_request->header.data_size); return true; } + bool ReceiverDataServerRequestHandler::ReadyProcessRequest() { return true; // always ready } @@ -87,4 +77,22 @@ void ReceiverDataServerRequestHandler::ProcessRequestTimeout(GenericRequest* /*r // do nothing } +void ReceiverDataServerRequestHandler::HandleInvalidRequest(const ReceiverDataServerRequest* receiver_request) { + SendResponse(receiver_request, kNetErrorWrongRequest); + server_->HandleAfterError(receiver_request->source_id); + log__->Error("wrong request, code:" + std::to_string(receiver_request->header.op_code)); +} + +void ReceiverDataServerRequestHandler::HandleValidRequest(const ReceiverDataServerRequest* receiver_request, + const CacheMeta* meta) { + auto err = SendResponseAndSlotData(receiver_request, meta); + if (err) { + log__->Error("failed to send slot:" + err->Explain()); + server_->HandleAfterError(receiver_request->source_id); + } else { + statistics__->IncreaseRequestCounter(); + statistics__->IncreaseRequestDataVolume(receiver_request->header.data_size); + } +} + } diff --git a/receiver/src/receiver_data_server/receiver_data_server_request_handler.h b/receiver/src/receiver_data_server/receiver_data_server_request_handler.h index 34b0cd0b0..7452d2e26 100644 --- a/receiver/src/receiver_data_server/receiver_data_server_request_handler.h +++ b/receiver/src/receiver_data_server/receiver_data_server_request_handler.h @@ -26,8 +26,12 @@ class ReceiverDataServerRequestHandler: public RequestHandler { DataCache* data_cache_; bool CheckRequest(const ReceiverDataServerRequest* request); Error SendResponse(const ReceiverDataServerRequest* request, NetworkErrorCode code); - Error SendResponseAndSlotData(const ReceiverDataServerRequest* request, CacheMeta* meta); + Error SendResponseAndSlotData(const ReceiverDataServerRequest* request, const CacheMeta* meta); CacheMeta* GetSlotAndLock(const ReceiverDataServerRequest* request); + + void HandleInvalidRequest(const ReceiverDataServerRequest* receiver_request); + + void HandleValidRequest(const ReceiverDataServerRequest* receiver_request, const CacheMeta* meta); }; } diff --git a/receiver/src/receiver_data_server/tcp_server.cpp b/receiver/src/receiver_data_server/tcp_server.cpp index fa1d61afa..f8f52b507 100644 --- a/receiver/src/receiver_data_server/tcp_server.cpp +++ b/receiver/src/receiver_data_server/tcp_server.cpp @@ -104,7 +104,7 @@ Error TcpServer::SendResponse(uint64_t source_id, GenericNetworkResponse* respon } Error TcpServer::SendResponseAndSlotData(uint64_t source_id, GenericNetworkResponse* response, - GenericRequestHeader* /*request*/, CacheMeta* cache_slot) const noexcept { + GenericRequestHeader* /*request*/, const CacheMeta* cache_slot) const noexcept { Error err; err = SendResponse(source_id, response); diff --git a/receiver/src/receiver_data_server/tcp_server.h b/receiver/src/receiver_data_server/tcp_server.h index 4166f49ec..337b8bdb1 100644 --- a/receiver/src/receiver_data_server/tcp_server.h +++ b/receiver/src/receiver_data_server/tcp_server.h @@ -16,7 +16,7 @@ class TcpServer : public NetServer { GenericRequests GetNewRequests(Error* err) const noexcept override ; Error SendResponse(uint64_t source_id, GenericNetworkResponse* response) const noexcept override; Error SendResponseAndSlotData(uint64_t source_id, GenericNetworkResponse* response, - GenericRequestHeader* request, CacheMeta* cache_slot) const noexcept override; + GenericRequestHeader* request, const CacheMeta* cache_slot) const noexcept override; void HandleAfterError(uint64_t source_id) const noexcept override; std::unique_ptr<IO> io__; const AbstractLogger* log__; diff --git a/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h b/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h index 09c337123..49cb7539a 100644 --- a/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h +++ b/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h @@ -33,11 +33,11 @@ class MockNetServer : public NetServer { MOCK_CONST_METHOD2(SendResponse_t, ErrorInterface * (uint64_t source_id, GenericNetworkResponse* response)); Error SendResponseAndSlotData(uint64_t source_id, GenericNetworkResponse* response, GenericRequestHeader* request, - CacheMeta* cache_slot) const noexcept override { + const CacheMeta* cache_slot) const noexcept override { return Error{SendResponseAndSlotData_t(source_id, response, request, cache_slot)}; }; MOCK_CONST_METHOD4(SendResponseAndSlotData_t, ErrorInterface * (uint64_t source_id, GenericNetworkResponse* response, - GenericRequestHeader* request, CacheMeta* cache_slot)); + GenericRequestHeader* request, const CacheMeta* cache_slot)); void HandleAfterError(uint64_t source_id) const noexcept override { HandleAfterError_t(source_id); -- GitLab