aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/cache/cachedisklayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenstore/cache/cachedisklayer.cpp')
-rw-r--r--src/zenstore/cache/cachedisklayer.cpp79
1 files changed, 39 insertions, 40 deletions
diff --git a/src/zenstore/cache/cachedisklayer.cpp b/src/zenstore/cache/cachedisklayer.cpp
index 7c9b56b1b..d103c32b0 100644
--- a/src/zenstore/cache/cachedisklayer.cpp
+++ b/src/zenstore/cache/cachedisklayer.cpp
@@ -1373,7 +1373,10 @@ ZenCacheDiskLayer::CacheBucket::EndGetBatch(GetBatchHandle* Batch) noexcept
if (Payload.MemCached)
{
OutValue.Value = m_MemCachedPayloads[Payload.MemCached].Payload;
- MemCachedKeyIndexes.push_back(KeyIndex);
+ if (FillRawHashAndRawSize[KeyIndex])
+ {
+ MemCachedKeyIndexes.push_back(KeyIndex);
+ }
m_MemoryHitCount++;
}
else
@@ -1429,7 +1432,7 @@ ZenCacheDiskLayer::CacheBucket::EndGetBatch(GetBatchHandle* Batch) noexcept
if (SetMetaInfo)
{
// See ZenCacheDiskLayer::CacheBucket::Get - it sets the memcache part first and then if it needs to it set the
- // metadata sparately, check if it had time to set the metdata
+ // metadata separately, check if it had time to set the metdata
RwLock::SharedLockScope UpdateIndexLock(m_IndexLock);
if (auto UpdateIt = m_Index.find(Key); UpdateIt != m_Index.end())
{
@@ -1537,57 +1540,53 @@ ZenCacheDiskLayer::CacheBucket::EndGetBatch(GetBatchHandle* Batch) noexcept
{
const IoHash& Key = Batch->Keys[KeyIndex];
bool SetMetaInfo = FillRawHashAndRawSize[KeyIndex];
- if (SetMetaInfo)
+ ZEN_ASSERT(SetMetaInfo);
+ ZEN_TRACE_CPU("Z$::Bucket::EndGetBatch::MetaData");
+ size_t ResultIndex = Batch->ResultIndexes[KeyIndex];
+ ZenCacheValue& OutValue = Batch->OutResults[ResultIndex];
{
- ZEN_TRACE_CPU("Z$::Bucket::EndGetBatch::MetaData");
- size_t ResultIndex = Batch->ResultIndexes[KeyIndex];
- ZenCacheValue& OutValue = Batch->OutResults[ResultIndex];
+ // See ZenCacheDiskLayer::CacheBucket::Get - it sets the memcache part first and then if it needs to it set the
+ // metadata separately, check if it had time to set the metdata
+ RwLock::SharedLockScope UpdateIndexLock(m_IndexLock);
+ if (auto UpdateIt = m_Index.find(Key); UpdateIt != m_Index.end())
{
- // See ZenCacheDiskLayer::CacheBucket::Get - it sets the memcache part first and then if it needs to it set the
- // metadata sparately, check if it had time to set the metdata
- RwLock::SharedLockScope UpdateIndexLock(m_IndexLock);
- if (auto UpdateIt = m_Index.find(Key); UpdateIt != m_Index.end())
+ BucketPayload& Payload = m_Payloads[UpdateIt->second];
+ if (Payload.MetaData)
{
- BucketPayload& Payload = m_Payloads[UpdateIt->second];
- if (Payload.MetaData)
- {
- const BucketMetaData& MetaData = m_MetaDatas[Payload.MetaData];
- OutValue.RawHash = MetaData.RawHash;
- OutValue.RawSize = MetaData.RawSize;
- SetMetaInfo = false;
- }
+ const BucketMetaData& MetaData = m_MetaDatas[Payload.MetaData];
+ OutValue.RawHash = MetaData.RawHash;
+ OutValue.RawSize = MetaData.RawSize;
+ SetMetaInfo = false;
}
}
+ }
- if (SetMetaInfo)
+ if (SetMetaInfo)
+ {
+ if (OutValue.Value.GetContentType() == ZenContentType::kCompressedBinary)
{
- if (OutValue.Value.GetContentType() == ZenContentType::kCompressedBinary)
- {
- if (!CompressedBuffer::ValidateCompressedHeader(OutValue.Value, OutValue.RawHash, OutValue.RawSize))
- {
- OutValue = ZenCacheValue{};
- }
- }
- else
+ if (!CompressedBuffer::ValidateCompressedHeader(OutValue.Value, OutValue.RawHash, OutValue.RawSize))
{
- OutValue.RawHash = IoHash::HashBuffer(OutValue.Value);
- OutValue.RawSize = OutValue.Value.GetSize();
+ OutValue = ZenCacheValue{};
}
+ }
+ else
+ {
+ OutValue.RawHash = IoHash::HashBuffer(OutValue.Value);
+ OutValue.RawSize = OutValue.Value.GetSize();
+ }
+ {
+ RwLock::ExclusiveLockScope UpdateIndexLock(m_IndexLock);
{
- RwLock::ExclusiveLockScope UpdateIndexLock(m_IndexLock);
+ if (auto UpdateIt = m_Index.find(Key); UpdateIt != m_Index.end())
{
- if (auto UpdateIt = m_Index.find(Key); UpdateIt != m_Index.end())
+ BucketPayload& Payload = m_Payloads[UpdateIt->second];
+
+ // Only update if it has not already been updated by other thread
+ if (!Payload.MetaData)
{
- BucketPayload& Payload = m_Payloads[UpdateIt->second];
-
- // Only update if it has not already been updated by other thread
- if (!Payload.MetaData)
- {
- SetMetaData(UpdateIndexLock,
- Payload,
- {.RawSize = OutValue.RawSize, .RawHash = OutValue.RawHash});
- }
+ SetMetaData(UpdateIndexLock, Payload, {.RawSize = OutValue.RawSize, .RawHash = OutValue.RawHash});
}
}
}