diff --git a/receiver/src/receiver_data_server/net_server.h b/receiver/src/receiver_data_server/net_server.h index c07d06b4948a2aeb6df4897962861dcf84d77256..7275889211b14357da801b7eee1a7b5bcee02874 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 63b1db2d06e23eda12edb727deddbc1724b00e8f..2d911b111579bd7af6926c3fa5500d347fb58f82 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 34b0cd0b074d7a05b2e44740022a76df26ebc9af..7452d2e26ca2330b7a7d3eac6348fa953bf1d312 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 fa1d61afa01645adfe2b248c9946b9e623584f22..f8f52b507e237be2dd70213fed42715267a79d0f 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 4166f49ec43c555b2884b34a279da366f56a204c..337b8bdb15d3a8788bd29fa9c7b408f12e71712f 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 09c337123dca60650199d25460471f2a201289ae..49cb7539a3defd651c96e7bb503f1609bcfccebe 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);