Skip to content
Snippets Groups Projects
Commit 434f2579 authored by Carsten Patzke's avatar Carsten Patzke
Browse files

[RDS] Splitted ProcessRequestUnlocked

parent 68e17660
No related branches found
No related tags found
No related merge requests found
......@@ -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;
};
......
......@@ -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);
}
}
}
......@@ -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);
};
}
......
......@@ -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);
......
......@@ -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__;
......
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment