aboutsummaryrefslogtreecommitdiff
path: root/zenutil/cache/cacherequests.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-06-29 07:09:58 -0700
committerGitHub <[email protected]>2022-06-29 16:09:58 +0200
commita90f80422242796476d46aadc29a1b3fa8ed25af (patch)
treec7bf32a620bca0a54a9dd7b91a1f357f510348b4 /zenutil/cache/cacherequests.cpp
parentdisable macos github agent (diff)
downloadzen-a90f80422242796476d46aadc29a1b3fa8ed25af.tar.xz
zen-a90f80422242796476d46aadc29a1b3fa8ed25af.zip
add optional filter when writing GetCacheRecordsRequest and GetCacheValuesRequest (#137)
Diffstat (limited to 'zenutil/cache/cacherequests.cpp')
-rw-r--r--zenutil/cache/cacherequests.cpp80
1 files changed, 64 insertions, 16 deletions
diff --git a/zenutil/cache/cacherequests.cpp b/zenutil/cache/cacherequests.cpp
index fe3b63dc1..3f8a89b6f 100644
--- a/zenutil/cache/cacherequests.cpp
+++ b/zenutil/cache/cacherequests.cpp
@@ -363,7 +363,7 @@ namespace cacherequests {
bool GetCacheRecordsRequest::Parse(const CbPackage& RpcRequest) { return Parse(RpcRequest.GetObject()); }
- bool GetCacheRecordsRequest::Format(CbObjectWriter& Writer) const
+ bool GetCacheRecordsRequest::Format(CbObjectWriter& Writer, const std::span<const size_t> OptionalRecordFilter) const
{
Writer << "Method"
<< "GetCacheRecords";
@@ -372,14 +372,30 @@ namespace cacherequests {
Writer << "DefaultPolicy" << WriteToString<128>(DefaultPolicy);
Writer << "Namespace" << Namespace;
Writer.BeginArray("Requests");
- for (const GetCacheRecordRequest& RecordRequest : Requests)
+ if (OptionalRecordFilter.empty())
{
- Writer.BeginObject();
+ for (const GetCacheRecordRequest& RecordRequest : Requests)
{
- WriteCacheRequestKey(Writer, RecordRequest.Key);
- WriteOptionalCacheRequestPolicy(Writer, "Policy", RecordRequest.Policy);
+ Writer.BeginObject();
+ {
+ WriteCacheRequestKey(Writer, RecordRequest.Key);
+ WriteOptionalCacheRequestPolicy(Writer, "Policy", RecordRequest.Policy);
+ }
+ Writer.EndObject();
+ }
+ }
+ else
+ {
+ for (size_t Index : OptionalRecordFilter)
+ {
+ const GetCacheRecordRequest& RecordRequest = Requests[Index];
+ Writer.BeginObject();
+ {
+ WriteCacheRequestKey(Writer, RecordRequest.Key);
+ WriteOptionalCacheRequestPolicy(Writer, "Policy", RecordRequest.Policy);
+ }
+ Writer.EndObject();
}
- Writer.EndObject();
}
Writer.EndArray();
}
@@ -388,10 +404,10 @@ namespace cacherequests {
return true;
}
- bool GetCacheRecordsRequest::Format(CbPackage& OutPackage) const
+ bool GetCacheRecordsRequest::Format(CbPackage& OutPackage, const std::span<const size_t> OptionalRecordFilter) const
{
CbObjectWriter Writer;
- if (!Format(Writer))
+ if (!Format(Writer, OptionalRecordFilter))
{
return false;
}
@@ -646,7 +662,7 @@ namespace cacherequests {
return true;
}
- bool GetCacheValuesRequest::Format(CbPackage& OutPackage) const
+ bool GetCacheValuesRequest::Format(CbPackage& OutPackage, const std::span<const size_t> OptionalValueFilter) const
{
CbObjectWriter Writer;
Writer << "Method"
@@ -658,14 +674,30 @@ namespace cacherequests {
Writer << "Namespace" << Namespace;
Writer.BeginArray("Requests");
- for (const GetCacheValueRequest& ValueRequest : Requests)
+ if (OptionalValueFilter.empty())
{
- Writer.BeginObject();
+ for (const GetCacheValueRequest& ValueRequest : Requests)
{
- WriteCacheRequestKey(Writer, ValueRequest.Key);
- WriteCachePolicy(Writer, "Policy", ValueRequest.Policy);
+ Writer.BeginObject();
+ {
+ WriteCacheRequestKey(Writer, ValueRequest.Key);
+ WriteCachePolicy(Writer, "Policy", ValueRequest.Policy);
+ }
+ Writer.EndObject();
+ }
+ }
+ else
+ {
+ for (size_t Index : OptionalValueFilter)
+ {
+ const GetCacheValueRequest& ValueRequest = Requests[Index];
+ Writer.BeginObject();
+ {
+ WriteCacheRequestKey(Writer, ValueRequest.Key);
+ WriteCachePolicy(Writer, "Policy", ValueRequest.Policy);
+ }
+ Writer.EndObject();
}
- Writer.EndObject();
}
Writer.EndArray();
}
@@ -757,7 +789,7 @@ namespace cacherequests {
Namespace = *RequestNamespace;
DefaultPolicy = GetCachePolicy(Params, "DefaultPolicy").value_or(CachePolicy::Default);
- CbArrayView RequestsArray = Params["Requests"].AsArrayView();
+ CbArrayView RequestsArray = Params["ChunkRequests"].AsArrayView();
Requests.reserve(RequestsArray.Num());
for (CbFieldView RequestField : RequestsArray)
{
@@ -792,7 +824,7 @@ namespace cacherequests {
Writer << "DefaultPolicy" << WriteToString<128>(DefaultPolicy);
Writer << "Namespace" << Namespace;
- Writer.BeginArray("Requests");
+ Writer.BeginArray("ChunkRequests");
for (const GetCacheChunkRequest& ValueRequest : Requests)
{
Writer.BeginObject();
@@ -1186,6 +1218,14 @@ namespace cacherequests {
CHECK(FullRequestCopy.Parse(FullRequestPackage));
CHECK(FullRequest == FullRequestCopy);
+ CbPackage PartialRequestPackage;
+ CHECK(FullRequest.Format(PartialRequestPackage, std::initializer_list<size_t>{0, 2}));
+ GetCacheRecordsRequest PartialRequest = FullRequest;
+ PartialRequest.Requests.erase(PartialRequest.Requests.begin() + 1);
+ GetCacheRecordsRequest PartialRequestCopy;
+ CHECK(PartialRequestCopy.Parse(PartialRequestPackage));
+ CHECK(PartialRequest == PartialRequestCopy);
+
GetCacheRecordsResult EmptyResult;
CbPackage EmptyResponsePackage;
CHECK(EmptyResult.Format(EmptyResponsePackage));
@@ -1321,6 +1361,14 @@ namespace cacherequests {
CHECK(FullRequestCopy.Parse(FullRequestPackage.GetObject()));
CHECK(FullRequest == FullRequestCopy);
+ CbPackage PartialRequestPackage;
+ CHECK(FullRequest.Format(PartialRequestPackage, std::initializer_list<size_t>{0, 2}));
+ GetCacheValuesRequest PartialRequest = FullRequest;
+ PartialRequest.Requests.erase(PartialRequest.Requests.begin() + 1);
+ GetCacheValuesRequest PartialRequestCopy;
+ CHECK(PartialRequestCopy.Parse(PartialRequestPackage.GetObject()));
+ CHECK(PartialRequest == PartialRequestCopy);
+
CacheValuesResult EmptyResult;
CbPackage EmptyResponsePackage;
CHECK(EmptyResult.Format(EmptyResponsePackage));