diff options
| author | Stefan Boberg <[email protected]> | 2021-08-17 15:18:37 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-08-17 15:18:51 +0200 |
| commit | 9deb4d7904deff765e034c2528dfca93b6cdb714 (patch) | |
| tree | 531616ce61b0cf062d38e1a5421183639d22344f /zenserver/cache/structuredcache.cpp | |
| parent | Merge branch 'main' of https://github.com/EpicGames/zen into main (diff) | |
| download | zen-9deb4d7904deff765e034c2528dfca93b6cdb714.tar.xz zen-9deb4d7904deff765e034c2528dfca93b6cdb714.zip | |
Implemented support for dropping z$ buckets while online
Diffstat (limited to 'zenserver/cache/structuredcache.cpp')
| -rw-r--r-- | zenserver/cache/structuredcache.cpp | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/zenserver/cache/structuredcache.cpp b/zenserver/cache/structuredcache.cpp index 7f6f49e06..f744ae131 100644 --- a/zenserver/cache/structuredcache.cpp +++ b/zenserver/cache/structuredcache.cpp @@ -94,6 +94,15 @@ HttpStructuredCacheService::HandleRequest(zen::HttpServerRequest& Request) if (!ValidateUri(Request, /* out */ Ref)) { + std::string_view Key = Request.RelativeUri(); + + if (std::all_of(begin(Key), end(Key), [](const char c) { return std::isalnum(c); })) + { + // Bucket reference + + return HandleCacheBucketRequest(Request, Key); + } + return Request.WriteResponse(zen::HttpResponse::BadRequest); // invalid URL } @@ -110,6 +119,30 @@ HttpStructuredCacheService::HandleRequest(zen::HttpServerRequest& Request) } void +HttpStructuredCacheService::HandleCacheBucketRequest(zen::HttpServerRequest& Request, std::string_view Bucket) +{ + ZEN_UNUSED(Request, Bucket); + switch (auto Verb = Request.RequestVerb()) + { + using enum zen::HttpVerb; + + case kHead: + case kGet: + { + } + break; + case kDelete: + // Drop bucket + + if (m_CacheStore.DropBucket(Bucket)) + { + return Request.WriteResponse(zen::HttpResponse::OK); // invalid URL + } + break; + } +} + +void HttpStructuredCacheService::HandleCacheRecordRequest(zen::HttpServerRequest& Request, CacheRef& Ref) { switch (auto Verb = Request.RequestVerb()) @@ -278,7 +311,12 @@ HttpStructuredCacheService::HandleCacheRecordRequest(zen::HttpServerRequest& Req m_CacheStore.Put(Ref.BucketSegment, Ref.HashKey, Value); - // This is currently synchronous for simplicity and debuggability but should + m_Log.debug("PUT - '{}/{}' ({} bytes, {})", + Ref.BucketSegment, + Ref.HashKey, + Value.Value.Size(), + Value.Value.GetContentType()); + // absolutely be made asynchronous. By default these should be deferred // because the client should not care if the data has propagated upstream or // not @@ -428,6 +466,14 @@ HttpStructuredCacheService::HandleCachePayloadRequest(zen::HttpServerRequest& Re m_CidStore.AddCompressedCid(Ref.PayloadId, ChunkHash); + m_Log.debug("PUT ({}) - '{}/{}/{}' ({} bytes, {})", + Result.New ? "NEW" : "OLD", + Ref.BucketSegment, + Ref.HashKey, + Ref.PayloadId, + Body.Size(), + Body.GetContentType()); + if (Result.New) { return Request.WriteResponse(zen::HttpResponse::Created); |