diff options
| author | Per Larsson <[email protected]> | 2021-11-10 08:47:57 +0100 |
|---|---|---|
| committer | Per Larsson <[email protected]> | 2021-11-10 08:47:57 +0100 |
| commit | 424be141e88b04b4de7ab5def2c29b03f5f72d48 (patch) | |
| tree | 2feba55ce29e78f9449f46c7c511cc5446bc9624 /zenserver/cache/cachekey.cpp | |
| parent | Sort cache keys when resolving payload ID's. (diff) | |
| download | zen-424be141e88b04b4de7ab5def2c29b03f5f72d48.tar.xz zen-424be141e88b04b4de7ab5def2c29b03f5f72d48.zip | |
Handle cache record policy.
Diffstat (limited to 'zenserver/cache/cachekey.cpp')
| -rw-r--r-- | zenserver/cache/cachekey.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/zenserver/cache/cachekey.cpp b/zenserver/cache/cachekey.cpp index 57993d424..85d57745d 100644 --- a/zenserver/cache/cachekey.cpp +++ b/zenserver/cache/cachekey.cpp @@ -2,6 +2,7 @@ #include "cachekey.h" +#include <zencore/compactbinary.h> #include <zencore/string.h> namespace zen { @@ -100,6 +101,44 @@ ParseSkipCachePolicy(std::string_view SkipPolicy, CachePolicy Default) return Result; } +CachePolicy +CacheRecordPolicy::GetPayloadPolicy(const Oid& PayloadId) const +{ + if (const auto It = m_PayloadPolicies.find(PayloadId); It != m_PayloadPolicies.end()) + { + return It->second; + } + + return m_DefaultPayloadPolicy; +} + +bool +CacheRecordPolicy::FromCompactBinary(CbObjectView RecordPolicyObject, CacheRecordPolicy& OutRecordPolicy) +{ + using namespace std::literals; + + const uint32_t RecordPolicy = RecordPolicyObject["recordpolicy"sv].AsUInt32(static_cast<uint32_t>(CachePolicy::Default)); + const uint32_t DefaultPayloadPolicy = + RecordPolicyObject["defaultpayloadpolicy"sv].AsUInt32(static_cast<uint32_t>(CachePolicy::Default)); + + OutRecordPolicy.m_RecordPolicy = static_cast<CachePolicy>(RecordPolicy); + OutRecordPolicy.m_DefaultPayloadPolicy = static_cast<CachePolicy>(DefaultPayloadPolicy); + + for (CbFieldView PayloadPolicyView : RecordPolicyObject["payloadpolicies"sv]) + { + CbObjectView PayloadPolicyObject = PayloadPolicyView.AsObjectView(); + const Oid PayloadId = PayloadPolicyObject["payloadid"sv].AsObjectId(); + const uint32_t PayloadPolicy = PayloadPolicyObject["policy"sv].AsUInt32(); + + if (PayloadId != Oid::Zero && PayloadPolicy != 0) + { + OutRecordPolicy.m_PayloadPolicies.emplace(PayloadId, static_cast<CachePolicy>(PayloadPolicy)); + } + } + + return true; +} + const CacheKey CacheKey::Empty = CacheKey{.Bucket = std::string(), .Hash = IoHash()}; } // namespace zen |