aboutsummaryrefslogtreecommitdiff
path: root/zenserver/cache/kvcache.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-09-03 16:57:29 +0200
committerStefan Boberg <[email protected]>2021-09-03 16:57:29 +0200
commit298bbbecf5f5e9a1916279b725a1706f9b5ce3ef (patch)
tree7113fb36af0d3678371dc3033b152f297ba2ef42 /zenserver/cache/kvcache.cpp
parentMake sure build scripts fails if the devenv build fails (diff)
downloadzen-298bbbecf5f5e9a1916279b725a1706f9b5ce3ef.tar.xz
zen-298bbbecf5f5e9a1916279b725a1706f9b5ce3ef.zip
Removed legacy key-value cache (may be reinstated in another form in the future)
Diffstat (limited to 'zenserver/cache/kvcache.cpp')
-rw-r--r--zenserver/cache/kvcache.cpp212
1 files changed, 0 insertions, 212 deletions
diff --git a/zenserver/cache/kvcache.cpp b/zenserver/cache/kvcache.cpp
deleted file mode 100644
index d78329ee9..000000000
--- a/zenserver/cache/kvcache.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-// Copyright Epic Games, Inc. All Rights Reserved.
-
-#include "kvcache.h"
-
-#include <zencore/httpserver.h>
-#include <zencore/memory.h>
-#include <zencore/timer.h>
-#include "cachestore.h"
-#include "upstream/jupiter.h"
-
-#include <spdlog/spdlog.h>
-
-namespace zen {
-
-using namespace fmt::literals;
-using namespace std::literals;
-
-//////////////////////////////////////////////////////////////////////////
-
-struct HttpKvCacheService::AccessTracker
-{
- AccessTracker();
- ~AccessTracker();
-
- void TrackAccess(std::string_view Key);
- void Flush();
-
-private:
- RwLock m_Lock;
- ChunkingLinearAllocator m_AccessRecordAllocator{8192};
-};
-
-HttpKvCacheService::AccessTracker::AccessTracker()
-{
-}
-
-HttpKvCacheService::AccessTracker::~AccessTracker()
-{
- RwLock::ExclusiveLockScope _(m_Lock);
-}
-
-void
-HttpKvCacheService::AccessTracker::Flush()
-{
- RwLock::ExclusiveLockScope _(m_Lock);
-
- m_AccessRecordAllocator.Reset();
-}
-
-void
-HttpKvCacheService::AccessTracker::TrackAccess(std::string_view Key)
-{
- // Once it matters, this should use a thread-local means of updating this data,
- // like Concurrency::combinable or similar
-
- RwLock::ExclusiveLockScope _(m_Lock);
-
- const uint64_t KeySize = Key.size();
- void* Ptr = m_AccessRecordAllocator.Alloc(KeySize + 1);
- memcpy(Ptr, Key.data(), KeySize);
- reinterpret_cast<uint8_t*>(Ptr)[KeySize] = 0;
-}
-
-//////////////////////////////////////////////////////////////////////////
-
-HttpKvCacheService::HttpKvCacheService()
-{
- m_Cloud = new CloudCacheClient(CloudCacheClientOptions{
- .ServiceUrl = "https://jupiter.devtools.epicgames.com"sv,
- .DdcNamespace = "ue4.ddc"sv,
- .BlobStoreNamespace = "test.ddc"sv,
- .OAuthProvider = "https://epicgames.okta.com/oauth2/auso645ojjWVdRI3d0x7/v1/token"sv,
- .OAuthClientId = "0oao91lrhqPiAlaGD0x7"sv,
- .OAuthSecret = "-GBWjjenhCgOwhxL5yBKNJECVIoDPH0MK4RDuN7d"sv,
- });
- m_AccessTracker = std::make_unique<AccessTracker>();
-}
-
-HttpKvCacheService::~HttpKvCacheService()
-{
-}
-
-const char*
-HttpKvCacheService::BaseUri() const
-{
- return "/cache/";
-}
-
-void
-HttpKvCacheService::HandleRequest(zen::HttpServerRequest& Request)
-{
- using namespace std::literals;
-
- std::string_view Key = Request.RelativeUri();
-
- switch (auto Verb = Request.RequestVerb())
- {
- using enum zen::HttpVerb;
-
- case kHead:
- case kGet:
- {
- m_AccessTracker->TrackAccess(Key);
-
- CacheValue Value;
- bool Success = m_cache.Get(Key, Value);
-
- if (!Success)
- {
- Success = m_cache_.Get(Key, Value);
-
- if (!Success)
- {
- CloudCacheSession Session(m_Cloud);
-
- zen::Stopwatch Timer;
-
- if (CloudCacheResult Result = Session.GetDerivedData("default", Key); Result.Success)
- {
- Success = true;
-
- spdlog::debug("upstream HIT after {:5} {:6}! {}",
- zen::NiceTimeSpanMs(Timer.getElapsedTimeMs()),
- NiceBytes(Result.Value.Size()),
- Key);
-
- Value.Value = Result.Value;
- }
- else
- {
- spdlog::debug("upstream miss after {:5}! {}", zen::NiceTimeSpanMs(Timer.getElapsedTimeMs()), Key);
- }
- }
-
- if (Success && (Value.Value.Size() <= m_InMemoryBlobSizeThreshold))
- {
- m_cache.Put(Key, Value);
- }
- }
-
- if (!Success)
- {
- Request.WriteResponse(zen::HttpResponse::NotFound);
- }
- else
- {
- if (Verb == zen::HttpVerb::kHead)
- {
- Request.SetSuppressResponseBody();
- Request.WriteResponse(zen::HttpResponse::OK, zen::HttpContentType::kBinary, Value.Value);
- }
- else
- {
- Request.WriteResponse(zen::HttpResponse::OK, zen::HttpContentType::kBinary, Value.Value);
- }
- }
- }
- break;
-
- case kPut:
- {
- if (zen::IoBuffer Body = Request.ReadPayload())
- {
- CacheValue Value;
- Value.Value = Body;
-
- if (Value.Value.Size() <= m_InMemoryBlobSizeThreshold)
- {
- m_cache.Put(Key, Value);
- }
-
- // m_cache_.Put(Key, Value);
-
- CloudCacheSession Session(m_Cloud);
-
- zen::Stopwatch Timer;
-
- CloudCacheResult Result = Session.PutDerivedData("default", Key, Value.Value);
-
- spdlog::debug("upstream PUT '{}', took {:5} {:6}! {}",
- Result.Success ? "OK" : "FAILED",
- zen::NiceTimeSpanMs(Timer.getElapsedTimeMs()),
- NiceBytes(Value.Value.Size()),
- Key);
-
- Request.WriteResponse(zen::HttpResponse::Created);
- }
- else
- {
- return;
- }
- }
- break;
-
- case kDelete:
- // should this do anything?
- return Request.WriteResponse(zen::HttpResponse::OK);
-
- case kPost:
- break;
-
- default:
- break;
- }
-}
-
-void
-HttpKvCacheService::Flush()
-{
-}
-
-} // namespace zen