aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-10-13 10:40:26 +0200
committerGitHub <[email protected]>2022-10-13 01:40:26 -0700
commit0c7fbe43ed582cd791191d6c0935cd8693e1208e (patch)
tree77757d193734f8927d474c5a072ffe4af8579513
parentdisable project store GC (#179) (diff)
downloadzen-0c7fbe43ed582cd791191d6c0935cd8693e1208e.tar.xz
zen-0c7fbe43ed582cd791191d6c0935cd8693e1208e.zip
Add "Accept" field in RPC request to gracefully handle requests from older instances (#180)
-rw-r--r--CHANGELOG.md3
-rw-r--r--zenserver-test/zenserver-test.cpp30
-rw-r--r--zenserver/cache/structuredcache.cpp118
-rw-r--r--zenserver/cache/structuredcache.h6
-rw-r--r--zenserver/upstream/upstreamcache.cpp4
-rw-r--r--zenutil/cache/cacherequests.cpp27
-rw-r--r--zenutil/include/zenutil/cache/cacherequests.h5
7 files changed, 160 insertions, 33 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index abe22c51b..73956912c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
##
-- Feature: Add GC to projects store. Checks path to project file in UE side to determine when a project may be GCd on the Zen side.
+- Change: Responding with new wire format for RPC requests requires the requestor to add a `Accept` field in the request. This is to allow compatability with older clients for shared instances.
+- Feature: [Disabled] Add GC to projects store. Checks path to project file in UE side to determine when a project may be GCd on the Zen side.
## v0.1.7
- Change: All RPC responses are now formatted using dedicated wire format, Zen server has fallback to enable compatability with legacy upstreams
diff --git a/zenserver-test/zenserver-test.cpp b/zenserver-test/zenserver-test.cpp
index 61c1e2df1..82b770e3c 100644
--- a/zenserver-test/zenserver-test.cpp
+++ b/zenserver-test/zenserver-test.cpp
@@ -1340,7 +1340,7 @@ TEST_CASE("zcache.rpc")
((uint32_t*)(KeyHash.Hash))[0] = Key;
const zen::CacheKey CacheKey = zen::CacheKey::Create(Bucket, KeyHash);
- cacherequests::PutCacheRecordsRequest Request = {.Namespace = std::string(Namespace)};
+ cacherequests::PutCacheRecordsRequest Request = {.AcceptMagic = kCbPkgMagic, .Namespace = std::string(Namespace)};
AppendCacheRecord(Request, CacheKey, PayloadSize, CachePolicy::Default);
OutKeys.push_back(CacheKey);
@@ -1369,7 +1369,9 @@ TEST_CASE("zcache.rpc")
std::string_view Namespace,
std::span<zen::CacheKey> Keys,
zen::CachePolicy Policy) -> GetCacheRecordResult {
- cacherequests::GetCacheRecordsRequest Request = {.DefaultPolicy = Policy, .Namespace = std::string(Namespace)};
+ cacherequests::GetCacheRecordsRequest Request = {.AcceptMagic = kCbPkgMagic,
+ .DefaultPolicy = Policy,
+ .Namespace = std::string(Namespace)};
for (const CacheKey& Key : Keys)
{
Request.Requests.push_back({.Key = Key});
@@ -1592,7 +1594,7 @@ TEST_CASE("zcache.failing.upstream")
size_t PayloadSize = 8192) -> std::vector<CacheKey> {
std::vector<zen::CacheKey> OutKeys;
- cacherequests::PutCacheRecordsRequest Request = {.Namespace = std::string(Namespace)};
+ cacherequests::PutCacheRecordsRequest Request = {.AcceptMagic = kCbPkgMagic, .Namespace = std::string(Namespace)};
for (size_t Key = 1; Key <= Num; ++Key)
{
zen::IoHash KeyHash;
@@ -1631,7 +1633,9 @@ TEST_CASE("zcache.failing.upstream")
std::string_view Namespace,
std::span<zen::CacheKey> Keys,
zen::CachePolicy Policy) -> GetCacheRecordResult {
- cacherequests::GetCacheRecordsRequest Request = {.DefaultPolicy = Policy, .Namespace = std::string(Namespace)};
+ cacherequests::GetCacheRecordsRequest Request = {.AcceptMagic = kCbPkgMagic,
+ .DefaultPolicy = Policy,
+ .Namespace = std::string(Namespace)};
for (const CacheKey& Key : Keys)
{
Request.Requests.push_back({.Key = Key});
@@ -2008,7 +2012,9 @@ TEST_CASE("zcache.rpc.allpolicies")
// PutCacheRecords
{
CachePolicy BatchDefaultPolicy = CachePolicy::Default;
- cacherequests::PutCacheRecordsRequest Request = {.DefaultPolicy = BatchDefaultPolicy, .Namespace = std::string(TestNamespace)};
+ cacherequests::PutCacheRecordsRequest Request = {.AcceptMagic = kCbPkgMagic,
+ .DefaultPolicy = BatchDefaultPolicy,
+ .Namespace = std::string(TestNamespace)};
Request.Requests.reserve(PutRequests.size());
for (CachePutRequest& PutRequest : PutRequests)
{
@@ -2036,7 +2042,9 @@ TEST_CASE("zcache.rpc.allpolicies")
{
CachePolicy BatchDefaultPolicy = CachePolicy::Default;
- cacherequests::PutCacheValuesRequest Request = {.DefaultPolicy = BatchDefaultPolicy, .Namespace = std::string(TestNamespace)};
+ cacherequests::PutCacheValuesRequest Request = {.AcceptMagic = kCbPkgMagic,
+ .DefaultPolicy = BatchDefaultPolicy,
+ .Namespace = std::string(TestNamespace)};
Request.Requests.reserve(PutValueRequests.size());
for (CachePutValueRequest& PutRequest : PutValueRequests)
{
@@ -2073,7 +2081,9 @@ TEST_CASE("zcache.rpc.allpolicies")
// GetCacheRecords
{
CachePolicy BatchDefaultPolicy = CachePolicy::Default;
- cacherequests::GetCacheRecordsRequest Request = {.DefaultPolicy = BatchDefaultPolicy, .Namespace = std::string(TestNamespace)};
+ cacherequests::GetCacheRecordsRequest Request = {.AcceptMagic = kCbPkgMagic,
+ .DefaultPolicy = BatchDefaultPolicy,
+ .Namespace = std::string(TestNamespace)};
Request.Requests.reserve(GetRequests.size());
for (CacheGetRequest& GetRequest : GetRequests)
{
@@ -2150,7 +2160,8 @@ TEST_CASE("zcache.rpc.allpolicies")
{
CachePolicy BatchDefaultPolicy = CachePolicy::Default;
- cacherequests::GetCacheValuesRequest GetCacheValuesRequest = {.DefaultPolicy = BatchDefaultPolicy,
+ cacherequests::GetCacheValuesRequest GetCacheValuesRequest = {.AcceptMagic = kCbPkgMagic,
+ .DefaultPolicy = BatchDefaultPolicy,
.Namespace = std::string(TestNamespace)};
GetCacheValuesRequest.Requests.reserve(GetValueRequests.size());
for (CacheGetValueRequest& GetRequest : GetValueRequests)
@@ -2215,7 +2226,8 @@ TEST_CASE("zcache.rpc.allpolicies")
return A.Key.Hash < B.Key.Hash;
});
CachePolicy BatchDefaultPolicy = CachePolicy::Default;
- cacherequests::GetCacheChunksRequest GetCacheChunksRequest = {.DefaultPolicy = BatchDefaultPolicy,
+ cacherequests::GetCacheChunksRequest GetCacheChunksRequest = {.AcceptMagic = kCbPkgMagic,
+ .DefaultPolicy = BatchDefaultPolicy,
.Namespace = std::string(TestNamespace)};
GetCacheChunksRequest.Requests.reserve(ChunkRequests.size());
for (CacheGetChunkRequest& ChunkRequest : ChunkRequests)
diff --git a/zenserver/cache/structuredcache.cpp b/zenserver/cache/structuredcache.cpp
index 75fb8ac41..0e2462a4a 100644
--- a/zenserver/cache/structuredcache.cpp
+++ b/zenserver/cache/structuredcache.cpp
@@ -1159,12 +1159,13 @@ HttpStructuredCacheService::HandleRpcPutCacheRecords(zen::HttpServerRequest& Req
{
ZEN_TRACE_CPU("Z$::RpcPutCacheRecords");
CbObjectView BatchObject = BatchRequest.GetObject();
+ ZEN_ASSERT(BatchObject["Method"sv].AsString() == "PutCacheRecords"sv);
+
+ uint32_t AcceptMagic = BatchObject["Accept"sv].AsUInt32();
CbObjectView Params = BatchObject["Params"sv].AsObjectView();
CachePolicy DefaultPolicy;
- ZEN_ASSERT(BatchObject["Method"sv].AsString() == "PutCacheRecords"sv);
-
std::string_view PolicyText = Params["DefaultPolicy"].AsString();
std::optional<std::string> Namespace = GetRpcRequestNamespace(Params);
if (!Namespace)
@@ -1211,9 +1212,20 @@ HttpStructuredCacheService::HandleRpcPutCacheRecords(zen::HttpServerRequest& Req
CbPackage RpcResponse;
RpcResponse.SetObject(ResponseObject.Save());
- CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ if (AcceptMagic == kCbPkgMagic)
+ {
+ CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ }
+ else
+ {
+ BinaryWriter MemStream;
+ RpcResponse.Save(MemStream);
- Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ Request.WriteResponse(HttpResponseCode::OK,
+ HttpContentType::kCbPackage,
+ IoBuffer(IoBuffer::Wrap, MemStream.GetData(), MemStream.GetSize()));
+ }
}
HttpStructuredCacheService::PutResult
@@ -1302,9 +1314,12 @@ HttpStructuredCacheService::HandleRpcGetCacheRecords(zen::HttpServerRequest& Htt
{
ZEN_TRACE_CPU("Z$::RpcGetCacheRecords");
- CbObjectView Params = RpcRequest["Params"sv].AsObjectView();
ZEN_ASSERT(RpcRequest["Method"sv].AsString() == "GetCacheRecords"sv);
+ uint32_t AcceptMagic = RpcRequest["Accept"sv].AsUInt32();
+
+ CbObjectView Params = RpcRequest["Params"sv].AsObjectView();
+
struct ValueRequestData
{
Oid ValueId;
@@ -1632,9 +1647,20 @@ HttpStructuredCacheService::HandleRpcGetCacheRecords(zen::HttpServerRequest& Htt
ResponseObject.EndArray();
ResponsePackage.SetObject(ResponseObject.Save());
- CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(ResponsePackage);
+ if (AcceptMagic == kCbPkgMagic)
+ {
+ CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(ResponsePackage);
+ HttpRequest.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ }
+ else
+ {
+ BinaryWriter MemStream;
+ ResponsePackage.Save(MemStream);
- HttpRequest.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ HttpRequest.WriteResponse(HttpResponseCode::OK,
+ HttpContentType::kCbPackage,
+ IoBuffer(IoBuffer::Wrap, MemStream.GetData(), MemStream.GetSize()));
+ }
}
void
@@ -1642,10 +1668,11 @@ HttpStructuredCacheService::HandleRpcPutCacheValues(zen::HttpServerRequest& Requ
{
ZEN_TRACE_CPU("Z$::RpcPutCacheValues");
CbObjectView BatchObject = BatchRequest.GetObject();
+ ZEN_ASSERT(BatchObject["Method"sv].AsString() == "PutCacheValues"sv);
- CbObjectView Params = BatchObject["Params"sv].AsObjectView();
+ uint32_t AcceptMagic = BatchObject["Accept"sv].AsUInt32();
- ZEN_ASSERT(BatchObject["Method"sv].AsString() == "PutCacheValues"sv);
+ CbObjectView Params = BatchObject["Params"sv].AsObjectView();
std::string_view PolicyText = Params["DefaultPolicy"].AsString();
CachePolicy DefaultPolicy = !PolicyText.empty() ? ParseCachePolicy(PolicyText) : CachePolicy::Default;
@@ -1742,9 +1769,20 @@ HttpStructuredCacheService::HandleRpcPutCacheValues(zen::HttpServerRequest& Requ
CbPackage RpcResponse;
RpcResponse.SetObject(ResponseObject.Save());
- CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ if (AcceptMagic == kCbPkgMagic)
+ {
+ CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ }
+ else
+ {
+ BinaryWriter MemStream;
+ RpcResponse.Save(MemStream);
- Request.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ Request.WriteResponse(HttpResponseCode::OK,
+ HttpContentType::kCbPackage,
+ IoBuffer(IoBuffer::Wrap, MemStream.GetData(), MemStream.GetSize()));
+ }
}
void
@@ -1752,6 +1790,10 @@ HttpStructuredCacheService::HandleRpcGetCacheValues(zen::HttpServerRequest& Http
{
ZEN_TRACE_CPU("Z$::RpcGetCacheValues");
+ ZEN_ASSERT(RpcRequest["Method"sv].AsString() == "GetCacheValues"sv);
+
+ uint32_t AcceptMagic = RpcRequest["Accept"sv].AsUInt32();
+
CbObjectView Params = RpcRequest["Params"sv].AsObjectView();
std::string_view PolicyText = Params["DefaultPolicy"sv].AsString();
CachePolicy DefaultPolicy = !PolicyText.empty() ? ParseCachePolicy(PolicyText) : CachePolicy::Default;
@@ -1771,8 +1813,6 @@ HttpStructuredCacheService::HandleRpcGetCacheValues(zen::HttpServerRequest& Http
};
std::vector<RequestData> Requests;
- ZEN_ASSERT(RpcRequest["Method"sv].AsString() == "GetCacheValues"sv);
-
std::vector<size_t> RemoteRequestIndexes;
for (CbFieldView RequestField : Params["Requests"sv])
@@ -1934,9 +1974,21 @@ HttpStructuredCacheService::HandleRpcGetCacheValues(zen::HttpServerRequest& Http
ResponseObject.EndArray();
RpcResponse.SetObject(ResponseObject.Save());
- CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
- HttpRequest.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ if (AcceptMagic == kCbPkgMagic)
+ {
+ CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ HttpRequest.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ }
+ else
+ {
+ BinaryWriter MemStream;
+ RpcResponse.Save(MemStream);
+
+ HttpRequest.WriteResponse(HttpResponseCode::OK,
+ HttpContentType::kCbPackage,
+ IoBuffer(IoBuffer::Wrap, MemStream.GetData(), MemStream.GetSize()));
+ }
}
namespace cache::detail {
@@ -1990,9 +2042,18 @@ HttpStructuredCacheService::HandleRpcGetCacheChunks(zen::HttpServerRequest& Http
std::vector<ChunkRequest*> RecordRequests; // The ChunkRequests that are requesting a subvalue from a Record Key
std::vector<ChunkRequest*> ValueRequests; // The ChunkRequests that are requesting a Value Key
std::vector<CacheChunkRequest*> UpstreamChunks; // ChunkRequests that we need to send to the upstream
+ uint32_t AcceptMagic = 0;
// Parse requests from the CompactBinary body of the RpcRequest and divide it into RecordRequests and ValueRequests
- if (!ParseGetCacheChunksRequest(Namespace, RecordKeys, Records, RequestKeys, Requests, RecordRequests, ValueRequests, RpcRequest))
+ if (!ParseGetCacheChunksRequest(AcceptMagic,
+ Namespace,
+ RecordKeys,
+ Records,
+ RequestKeys,
+ Requests,
+ RecordRequests,
+ ValueRequests,
+ RpcRequest))
{
return HttpRequest.WriteResponse(HttpResponseCode::BadRequest);
}
@@ -2008,11 +2069,12 @@ HttpStructuredCacheService::HandleRpcGetCacheChunks(zen::HttpServerRequest& Http
GetUpstreamCacheChunks(Namespace, UpstreamChunks, RequestKeys, Requests);
// Send the payload and descriptive data about each chunk to the client
- WriteGetCacheChunksResponse(Namespace, Requests, HttpRequest);
+ WriteGetCacheChunksResponse(AcceptMagic, Namespace, Requests, HttpRequest);
}
bool
-HttpStructuredCacheService::ParseGetCacheChunksRequest(std::string& Namespace,
+HttpStructuredCacheService::ParseGetCacheChunksRequest(uint32_t& AcceptMagic,
+ std::string& Namespace,
std::vector<CacheKeyRequest>& RecordKeys,
std::vector<cache::detail::RecordBody>& Records,
std::vector<CacheChunkRequest>& RequestKeys,
@@ -2025,6 +2087,8 @@ HttpStructuredCacheService::ParseGetCacheChunksRequest(std::string& Nam
ZEN_ASSERT(RpcRequest["Method"sv].AsString() == "GetCacheChunks"sv);
+ AcceptMagic = RpcRequest["Accept"sv].AsUInt32();
+
CbObjectView Params = RpcRequest["Params"sv].AsObjectView();
std::string_view DefaultPolicyText = Params["DefaultPolicy"sv].AsString();
CachePolicy DefaultPolicy = !DefaultPolicyText.empty() ? ParseCachePolicy(DefaultPolicyText) : CachePolicy::Default;
@@ -2375,7 +2439,8 @@ HttpStructuredCacheService::GetUpstreamCacheChunks(std::string_view Names
}
void
-HttpStructuredCacheService::WriteGetCacheChunksResponse(std::string_view Namespace,
+HttpStructuredCacheService::WriteGetCacheChunksResponse(uint32_t AcceptMagic,
+ std::string_view Namespace,
std::vector<cache::detail::ChunkRequest>& Requests,
zen::HttpServerRequest& HttpRequest)
{
@@ -2438,9 +2503,20 @@ HttpStructuredCacheService::WriteGetCacheChunksResponse(std::string_view
RpcResponse.SetObject(Writer.Save());
- CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ if (AcceptMagic == kCbPkgMagic)
+ {
+ CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(RpcResponse);
+ HttpRequest.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ }
+ else
+ {
+ BinaryWriter MemStream;
+ RpcResponse.Save(MemStream);
- HttpRequest.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ HttpRequest.WriteResponse(HttpResponseCode::OK,
+ HttpContentType::kCbPackage,
+ IoBuffer(IoBuffer::Wrap, MemStream.GetData(), MemStream.GetSize()));
+ }
}
void
diff --git a/zenserver/cache/structuredcache.h b/zenserver/cache/structuredcache.h
index 8eca17edc..bda838dbc 100644
--- a/zenserver/cache/structuredcache.h
+++ b/zenserver/cache/structuredcache.h
@@ -117,7 +117,8 @@ private:
PutResult PutCacheRecord(PutRequestData& Request, const CbPackage* Package);
/** HandleRpcGetCacheChunks Helper: Parse the Body object into RecordValue Requests and Value Requests. */
- bool ParseGetCacheChunksRequest(std::string& Namespace,
+ bool ParseGetCacheChunksRequest(uint32_t& AcceptMagic,
+ std::string& Namespace,
std::vector<CacheKeyRequest>& RecordKeys,
std::vector<cache::detail::RecordBody>& Records,
std::vector<CacheChunkRequest>& RequestKeys,
@@ -141,7 +142,8 @@ private:
std::vector<CacheChunkRequest>& RequestKeys,
std::vector<cache::detail::ChunkRequest>& Requests);
/** HandleRpcGetCacheChunks Helper: Send response message containing all chunk results. */
- void WriteGetCacheChunksResponse(std::string_view Namespace,
+ void WriteGetCacheChunksResponse(uint32_t AcceptMagic,
+ std::string_view Namespace,
std::vector<cache::detail::ChunkRequest>& Requests,
zen::HttpServerRequest& HttpRequest);
diff --git a/zenserver/upstream/upstreamcache.cpp b/zenserver/upstream/upstreamcache.cpp
index ac75285c7..f9673bcd6 100644
--- a/zenserver/upstream/upstreamcache.cpp
+++ b/zenserver/upstream/upstreamcache.cpp
@@ -860,6 +860,7 @@ namespace detail {
CbObjectWriter BatchRequest;
BatchRequest << "Method"sv
<< "GetCacheRecords"sv;
+ BatchRequest << "Accept"sv << kCbPkgMagic;
BatchRequest.BeginObject("Params"sv);
{
@@ -982,6 +983,7 @@ namespace detail {
CbObjectWriter BatchRequest;
BatchRequest << "Method"sv
<< "GetCacheValues"sv;
+ BatchRequest << "Accept"sv << kCbPkgMagic;
BatchRequest.BeginObject("Params"sv);
{
@@ -1101,6 +1103,7 @@ namespace detail {
CbObjectWriter BatchRequest;
BatchRequest << "Method"sv
<< "GetCacheChunks"sv;
+ BatchRequest << "Accept"sv << kCbPkgMagic;
BatchRequest.BeginObject("Params"sv);
{
@@ -1289,6 +1292,7 @@ namespace detail {
CbObjectWriter BatchWriter;
BatchWriter << "Method"sv
<< "PutCacheValues"sv;
+ BatchWriter << "Accept"sv << kCbPkgMagic;
BatchWriter.BeginObject("Params"sv);
{
diff --git a/zenutil/cache/cacherequests.cpp b/zenutil/cache/cacherequests.cpp
index 2c14ef35b..0ac6c35ed 100644
--- a/zenutil/cache/cacherequests.cpp
+++ b/zenutil/cache/cacherequests.cpp
@@ -175,6 +175,7 @@ namespace cacherequests {
{
CbObjectView BatchObject = Package.GetObject();
ZEN_ASSERT(BatchObject["Method"].AsString() == "PutCacheRecords");
+ AcceptMagic = BatchObject["AcceptType"].AsUInt32(0);
CbObjectView Params = BatchObject["Params"].AsObjectView();
std::optional<std::string> RequestNamespace = GetRequestNamespace(Params);
@@ -240,6 +241,11 @@ namespace cacherequests {
CbObjectWriter Writer;
Writer << "Method"
<< "PutCacheRecords";
+ if (AcceptMagic != 0)
+ {
+ Writer << "Accept" << AcceptMagic;
+ }
+
Writer.BeginObject("Params");
{
Writer << "DefaultPolicy" << WriteToString<128>(DefaultPolicy);
@@ -325,6 +331,7 @@ namespace cacherequests {
bool GetCacheRecordsRequest::Parse(const CbObjectView& RpcRequest)
{
ZEN_ASSERT(RpcRequest["Method"].AsString() == "GetCacheRecords");
+ AcceptMagic = RpcRequest["AcceptType"].AsUInt32(0);
CbObjectView Params = RpcRequest["Params"].AsObjectView();
std::optional<std::string> RequestNamespace = GetRequestNamespace(Params);
@@ -361,6 +368,11 @@ namespace cacherequests {
{
Writer << "Method"
<< "GetCacheRecords";
+ if (AcceptMagic != 0)
+ {
+ Writer << "Accept" << AcceptMagic;
+ }
+
Writer.BeginObject("Params");
{
Writer << "DefaultPolicy" << WriteToString<128>(DefaultPolicy);
@@ -513,6 +525,7 @@ namespace cacherequests {
{
CbObjectView BatchObject = Package.GetObject();
ZEN_ASSERT(BatchObject["Method"].AsString() == "PutCacheValues");
+ AcceptMagic = BatchObject["AcceptType"].AsUInt32(0);
CbObjectView Params = BatchObject["Params"].AsObjectView();
std::optional<std::string> RequestNamespace = cacherequests::GetRequestNamespace(Params);
@@ -558,6 +571,10 @@ namespace cacherequests {
CbObjectWriter Writer;
Writer << "Method"
<< "PutCacheValues";
+ if (AcceptMagic != 0)
+ {
+ Writer << "Accept" << AcceptMagic;
+ }
Writer.BeginObject("Params");
{
@@ -637,6 +654,7 @@ namespace cacherequests {
bool GetCacheValuesRequest::Parse(const CbObjectView& BatchObject)
{
ZEN_ASSERT(BatchObject["Method"].AsString() == "GetCacheValues");
+ AcceptMagic = BatchObject["AcceptType"].AsUInt32(0);
CbObjectView Params = BatchObject["Params"].AsObjectView();
std::optional<std::string> RequestNamespace = cacherequests::GetRequestNamespace(Params);
@@ -672,6 +690,10 @@ namespace cacherequests {
CbObjectWriter Writer;
Writer << "Method"
<< "GetCacheValues";
+ if (AcceptMagic != 0)
+ {
+ Writer << "Accept" << AcceptMagic;
+ }
Writer.BeginObject("Params");
{
@@ -793,6 +815,7 @@ namespace cacherequests {
bool GetCacheChunksRequest::Parse(const CbObjectView& BatchObject)
{
ZEN_ASSERT(BatchObject["Method"].AsString() == "GetCacheChunks");
+ AcceptMagic = BatchObject["AcceptType"].AsUInt32(0);
CbObjectView Params = BatchObject["Params"].AsObjectView();
std::optional<std::string> RequestNamespace = cacherequests::GetRequestNamespace(Params);
@@ -833,6 +856,10 @@ namespace cacherequests {
CbObjectWriter Writer;
Writer << "Method"
<< "GetCacheChunks";
+ if (AcceptMagic != 0)
+ {
+ Writer << "Accept" << AcceptMagic;
+ }
Writer.BeginObject("Params");
{
diff --git a/zenutil/include/zenutil/cache/cacherequests.h b/zenutil/include/zenutil/cache/cacherequests.h
index ffb0f8d5f..4eebd3121 100644
--- a/zenutil/include/zenutil/cache/cacherequests.h
+++ b/zenutil/include/zenutil/cache/cacherequests.h
@@ -74,6 +74,7 @@ namespace cacherequests {
struct PutCacheRecordsRequest
{
+ uint32_t AcceptMagic = 0;
CachePolicy DefaultPolicy = CachePolicy::Default;
std::string Namespace;
std::vector<PutCacheRecordRequest> Requests;
@@ -105,6 +106,7 @@ namespace cacherequests {
struct GetCacheRecordsRequest
{
+ uint32_t AcceptMagic = 0;
CachePolicy DefaultPolicy = CachePolicy::Default;
std::string Namespace;
std::vector<GetCacheRecordRequest> Requests;
@@ -150,6 +152,7 @@ namespace cacherequests {
struct PutCacheValuesRequest
{
+ uint32_t AcceptMagic = 0;
CachePolicy DefaultPolicy = CachePolicy::Default;
std::string Namespace;
std::vector<PutCacheValueRequest> Requests;
@@ -177,6 +180,7 @@ namespace cacherequests {
struct GetCacheValuesRequest
{
+ uint32_t AcceptMagic = 0;
CachePolicy DefaultPolicy = CachePolicy::Default;
std::string Namespace;
std::vector<GetCacheValueRequest> Requests;
@@ -217,6 +221,7 @@ namespace cacherequests {
struct GetCacheChunksRequest
{
+ uint32_t AcceptMagic = 0;
CachePolicy DefaultPolicy = CachePolicy::Default;
std::string Namespace;
std::vector<GetCacheChunkRequest> Requests;