aboutsummaryrefslogtreecommitdiff
path: root/zenserver/cache/structuredcache.h
diff options
context:
space:
mode:
authormattpetersepic <[email protected]>2022-02-09 09:03:37 -0700
committerGitHub <[email protected]>2022-02-09 09:03:37 -0700
commitadc7927757c1f917a00032268ba1fa1e26562d4f (patch)
tree2747a0ceec1b92913d06db2740774f2d0e016b6a /zenserver/cache/structuredcache.h
parentRemove the backwards compatibility for the Zen CachePolicy changes no… (#49) (diff)
downloadzen-adc7927757c1f917a00032268ba1fa1e26562d4f.tar.xz
zen-adc7927757c1f917a00032268ba1fa1e26562d4f.zip
Simplify HandleRpcGetCacheChunks (#53)
Refactor HandleRpcGetCacheChunks to reduce complexity. Port CacheStore tests from Unreal.
Diffstat (limited to 'zenserver/cache/structuredcache.h')
-rw-r--r--zenserver/cache/structuredcache.h37
1 files changed, 27 insertions, 10 deletions
diff --git a/zenserver/cache/structuredcache.h b/zenserver/cache/structuredcache.h
index 9d60c5bf4..3477e6c4f 100644
--- a/zenserver/cache/structuredcache.h
+++ b/zenserver/cache/structuredcache.h
@@ -17,6 +17,8 @@ class logger;
namespace zen {
+struct CacheChunkRequest;
+struct CacheKeyRequest;
class CasStore;
class CidStore;
class CbObjectView;
@@ -26,10 +28,10 @@ class UpstreamCache;
class ZenCacheStore;
enum class CachePolicy : uint32_t;
-namespace GetCacheChunks::detail {
- struct KeyRequestData;
- struct ChunkRequestData;
-} // namespace GetCacheChunks::detail
+namespace cache::detail {
+ struct Record;
+ struct ChunkRequest;
+} // namespace cache::detail
/**
* Structured cache service. Imposes constraints on keys, supports blobs and
@@ -114,12 +116,27 @@ private:
virtual void HandleStatusRequest(zen::HttpServerRequest& Request) override;
PutResult PutCacheRecord(PutRequestData& Request, const CbPackage* Package);
- bool TryGetCacheChunks_Parse(std::vector<GetCacheChunks::detail::KeyRequestData>& KeyRequests,
- std::vector<GetCacheChunks::detail::ChunkRequestData>& Chunks,
- CbObjectView RpcRequest);
- void GetCacheChunks_LoadKeys(std::vector<GetCacheChunks::detail::KeyRequestData>& KeyRequests);
- void GetCacheChunks_LoadChunks(std::vector<GetCacheChunks::detail::ChunkRequestData>& Chunks);
- void GetCacheChunks_SendResults(std::vector<GetCacheChunks::detail::ChunkRequestData>& Chunks, zen::HttpServerRequest& HttpRequest);
+ /** HandleRpcGetCacheChunks Helper: Parse the Body object into RecordValue Requests and Value Requests. */
+ bool ParseGetCacheChunksRequest(std::vector<CacheKeyRequest>& RecordKeys,
+ std::vector<cache::detail::Record>& Records,
+ std::vector<CacheChunkRequest>& RequestKeys,
+ std::vector<cache::detail::ChunkRequest>& Requests,
+ std::vector<cache::detail::ChunkRequest*>& RecordRequests,
+ std::vector<cache::detail::ChunkRequest*>& ValueRequests,
+ CbObjectView RpcRequest);
+ /** HandleRpcGetCacheChunks Helper: Load records to get ContentId for RecordRequests, and load their payloads if they exist locally. */
+ void GetLocalCacheRecords(std::vector<CacheKeyRequest>& RecordKeys,
+ std::vector<cache::detail::Record>& Records,
+ std::vector<cache::detail::ChunkRequest*>& RecordRequests,
+ std::vector<CacheChunkRequest*>& OutUpstreamChunks);
+ /** HandleRpcGetCacheChunks Helper: For ValueRequests, load their payloads if they exist locally. */
+ void GetLocalCacheValues(std::vector<cache::detail::ChunkRequest*>& ValueRequests, std::vector<CacheChunkRequest*>& OutUpstreamChunks);
+ /** HandleRpcGetCacheChunks Helper: Load payloads from upstream that did not exist locally. */
+ void GetUpstreamCacheChunks(std::vector<CacheChunkRequest*>& UpstreamChunks,
+ std::vector<CacheChunkRequest>& RequestKeys,
+ std::vector<cache::detail::ChunkRequest>& Requests);
+ /** HandleRpcGetCacheChunks Helper: Send response message containing all chunk results. */
+ void WriteGetCacheChunksResponse(std::vector<cache::detail::ChunkRequest>& Requests, zen::HttpServerRequest& HttpRequest);
spdlog::logger& Log() { return m_Log; }
spdlog::logger& m_Log;