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