aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/cache/httpstructuredcache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenserver/cache/httpstructuredcache.cpp')
-rw-r--r--src/zenserver/cache/httpstructuredcache.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/zenserver/cache/httpstructuredcache.cpp b/src/zenserver/cache/httpstructuredcache.cpp
index 11ac81dcb..4a2fdd96b 100644
--- a/src/zenserver/cache/httpstructuredcache.cpp
+++ b/src/zenserver/cache/httpstructuredcache.cpp
@@ -1729,6 +1729,9 @@ void
HttpStructuredCacheService::HandleRpcRequest(HttpServerRequest& Request)
{
ZEN_TRACE_CPU("z$::Http::HandleRpcRequest");
+
+ const bool HasUpstream = m_UpstreamCache.IsActive();
+
switch (Request.RequestVerb())
{
case HttpVerb::kPost:
@@ -1745,7 +1748,7 @@ HttpStructuredCacheService::HandleRpcRequest(HttpServerRequest& Request)
return Request.WriteResponse(HttpResponseCode::BadRequest);
}
- Request.WriteResponseAsync(
+ auto HandleRpc =
[this, RequestContext, Body = Request.ReadPayload(), ContentType, AcceptType](HttpServerRequest& AsyncRequest) mutable {
ZEN_TRACE_CPU("z$::Http::HandleRpcRequest::WriteResponseAsync");
std::uint64_t RequestIndex =
@@ -1764,9 +1767,9 @@ HttpStructuredCacheService::HandleRpcRequest(HttpServerRequest& Request)
RpcResult);
if (!IsHttpSuccessCode(ResultCode))
{
- AsyncRequest.WriteResponse(ResultCode);
- return;
+ return AsyncRequest.WriteResponse(ResultCode);
}
+
if (AcceptMagic == kCbPkgMagic)
{
void* TargetProcessHandle = nullptr;
@@ -1804,9 +1807,19 @@ HttpStructuredCacheService::HandleRpcRequest(HttpServerRequest& Request)
HttpContentType::kCbPackage,
IoBuffer(IoBuffer::Wrap, MemStream.GetData(), MemStream.GetSize()));
}
- });
+ };
+
+ if (HasUpstream)
+ {
+ Request.WriteResponseAsync(std::move(HandleRpc));
+ }
+ else
+ {
+ HandleRpc(Request);
+ }
}
break;
+
default:
m_CacheStats.BadRequestCount++;
Request.WriteResponse(HttpResponseCode::BadRequest);