aboutsummaryrefslogtreecommitdiff
path: root/zenserver/cache/structuredcache.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-08-17 15:18:37 +0200
committerStefan Boberg <[email protected]>2021-08-17 15:18:51 +0200
commit9deb4d7904deff765e034c2528dfca93b6cdb714 (patch)
tree531616ce61b0cf062d38e1a5421183639d22344f /zenserver/cache/structuredcache.cpp
parentMerge branch 'main' of https://github.com/EpicGames/zen into main (diff)
downloadzen-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.cpp48
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);