diff options
| author | mattpetersepic <[email protected]> | 2022-02-09 09:03:37 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-02-09 09:03:37 -0700 |
| commit | adc7927757c1f917a00032268ba1fa1e26562d4f (patch) | |
| tree | 2747a0ceec1b92913d06db2740774f2d0e016b6a /zenserver/cache/structuredcache.h | |
| parent | Remove the backwards compatibility for the Zen CachePolicy changes no… (#49) (diff) | |
| download | zen-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.h | 37 |
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; |