diff options
| author | Dan Engelbrecht <[email protected]> | 2022-06-29 07:09:58 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-06-29 16:09:58 +0200 |
| commit | a90f80422242796476d46aadc29a1b3fa8ed25af (patch) | |
| tree | c7bf32a620bca0a54a9dd7b91a1f357f510348b4 /zenutil/cache/cacherequests.cpp | |
| parent | disable macos github agent (diff) | |
| download | zen-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.cpp | 80 |
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)); |