aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/cache/cachedisklayer.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-12-10 10:49:38 +0100
committerGitHub Enterprise <[email protected]>2025-12-10 10:49:38 +0100
commit5b256bb1d3ab06581af2643b5472a1f9121d20ee (patch)
tree05350f9e71ff089c1b9091d499eb492732dbca87 /src/zenstore/cache/cachedisklayer.cpp
parentfix buffer memory in builds cache (#682) (diff)
downloadzen-5b256bb1d3ab06581af2643b5472a1f9121d20ee.tar.xz
zen-5b256bb1d3ab06581af2643b5472a1f9121d20ee.zip
remove catching of exceptions in batch operations now that they are not executed in the destructor (#683)
don't call WriteChunks in batch operation if no chunks needs to be written
Diffstat (limited to 'src/zenstore/cache/cachedisklayer.cpp')
-rw-r--r--src/zenstore/cache/cachedisklayer.cpp129
1 files changed, 50 insertions, 79 deletions
diff --git a/src/zenstore/cache/cachedisklayer.cpp b/src/zenstore/cache/cachedisklayer.cpp
index 57712a706..b2e045632 100644
--- a/src/zenstore/cache/cachedisklayer.cpp
+++ b/src/zenstore/cache/cachedisklayer.cpp
@@ -1379,51 +1379,53 @@ ZenCacheDiskLayer::CacheBucket::CreatePutBatch(ZenCachePutResultVec_t& OutResult
void
ZenCacheDiskLayer::CacheBucket::DeletePutBatch(PutBatchHandle* Batch) noexcept
{
+ ZEN_TRACE_CPU("Z$::Bucket::DeletePutBatch");
+
delete Batch;
}
void
ZenCacheDiskLayer::CacheBucket::CommitPutBatch(PutBatchHandle* Batch)
{
- ZEN_TRACE_CPU("Z$::Bucket::EndPutBatch");
+ ZEN_TRACE_CPU("Z$::Bucket::CommitPutBatch");
- try
- {
- ZEN_ASSERT(Batch);
- if (!Batch->Buffers.empty())
- {
- ZEN_ASSERT(Batch->Buffers.size() == Batch->Entries.size());
- std::vector<uint8_t> EntryFlags;
- std::vector<size_t> BufferToEntryIndexes;
- std::vector<IoBuffer> BuffersToCommit;
- BuffersToCommit.reserve(Batch->Buffers.size());
- for (size_t Index = 0; Index < Batch->Entries.size(); Index++)
+ ZEN_ASSERT(Batch);
+ if (!Batch->Buffers.empty())
+ {
+ ZEN_ASSERT(Batch->Buffers.size() == Batch->Entries.size());
+ std::vector<uint8_t> EntryFlags;
+ std::vector<size_t> BufferToEntryIndexes;
+ std::vector<IoBuffer> BuffersToCommit;
+ BuffersToCommit.reserve(Batch->Buffers.size());
+ for (size_t Index = 0; Index < Batch->Entries.size(); Index++)
+ {
+ const eastl::fixed_vector<IoHash, 8>& HashKeyAndReferences = Batch->Entries[Index].HashKeyAndReferences;
+ ZEN_ASSERT(HashKeyAndReferences.size() >= 1);
+
+ ZenCacheValue& Value = Batch->Buffers[Index];
+ std::span<const IoHash> ReferenceSpan(HashKeyAndReferences.begin() + 1, HashKeyAndReferences.end());
+ PutResult& OutResult = Batch->OutResults[Batch->EntryResultIndexes[Index]];
+ OutResult = PutResult{zen::PutStatus::Success};
+ if (!ShouldRejectPut(HashKeyAndReferences[0], Value, Batch->Entries[Index].Overwrite, OutResult))
{
- const eastl::fixed_vector<IoHash, 8>& HashKeyAndReferences = Batch->Entries[Index].HashKeyAndReferences;
- ZEN_ASSERT(HashKeyAndReferences.size() >= 1);
-
- ZenCacheValue& Value = Batch->Buffers[Index];
- std::span<const IoHash> ReferenceSpan(HashKeyAndReferences.begin() + 1, HashKeyAndReferences.end());
- PutResult& OutResult = Batch->OutResults[Batch->EntryResultIndexes[Index]];
- OutResult = PutResult{zen::PutStatus::Success};
- if (!ShouldRejectPut(HashKeyAndReferences[0], Value, Batch->Entries[Index].Overwrite, OutResult))
- {
- BufferToEntryIndexes.push_back(Index);
- BuffersToCommit.push_back(Value.Value);
+ BufferToEntryIndexes.push_back(Index);
+ BuffersToCommit.push_back(Value.Value);
- uint8_t Flags = 0;
- if (Value.Value.GetContentType() == ZenContentType::kCbObject)
- {
- Flags |= DiskLocation::kStructured;
- }
- else if (Value.Value.GetContentType() == ZenContentType::kCompressedBinary)
- {
- Flags |= DiskLocation::kCompressed;
- }
- EntryFlags.push_back(Flags);
+ uint8_t Flags = 0;
+ if (Value.Value.GetContentType() == ZenContentType::kCbObject)
+ {
+ Flags |= DiskLocation::kStructured;
+ }
+ else if (Value.Value.GetContentType() == ZenContentType::kCompressedBinary)
+ {
+ Flags |= DiskLocation::kCompressed;
}
+ EntryFlags.push_back(Flags);
}
+ }
+ if (!BuffersToCommit.empty())
+ {
size_t IndexOffset = 0;
m_BlockStore.WriteChunks(BuffersToCommit, m_Configuration.PayloadAlignment, [&](std::span<BlockStoreLocation> Locations) {
ZEN_MEMSCOPE(GetCacheDiskTag());
@@ -1474,10 +1476,6 @@ ZenCacheDiskLayer::CacheBucket::CommitPutBatch(PutBatchHandle* Batch)
});
}
}
- catch (const std::exception& Ex)
- {
- ZEN_ERROR("Exception in ZenCacheDiskLayer::CacheBucket::EndPutBatch: '{}'", Ex.what());
- }
}
struct ZenCacheDiskLayer::CacheBucket::GetBatchHandle
@@ -1831,14 +1829,7 @@ ZenCacheDiskLayer::CacheBucket::DeleteGetBatch(GetBatchHandle* Batch) noexcept
{
ZEN_TRACE_CPU("Z$::Bucket::DeleteGetBatch");
- try
- {
- delete Batch;
- }
- catch (const std::exception& Ex)
- {
- ZEN_ERROR("Exception in ZenCacheDiskLayer::CacheBucket::DeleteGetBatch: '{}'", Ex.what());
- }
+ delete Batch;
}
void
@@ -3990,19 +3981,12 @@ struct ZenCacheDiskLayer::PutBatchHandle
void ForEach(const std::function<void(CacheBucket* Bucket, CacheBucket::PutBatchHandle* Handle)>& CB) noexcept
{
- try
+ RwLock::SharedLockScope _(Lock);
+ for (ZenCacheDiskLayer::PutBatchHandle::BucketHandle& BucketHandle : BucketHandles)
{
- RwLock::SharedLockScope _(Lock);
- for (ZenCacheDiskLayer::PutBatchHandle::BucketHandle& BucketHandle : BucketHandles)
- {
- ZEN_ASSERT(BucketHandle.Bucket);
- ZEN_ASSERT(BucketHandle.Handle);
- CB(BucketHandle.Bucket, BucketHandle.Handle);
- }
- }
- catch (const std::exception& Ex)
- {
- ZEN_ERROR("Exception in ZenCacheDiskLayer::PutBatchHandle::ForEach: '{}'", Ex.what());
+ ZEN_ASSERT(BucketHandle.Bucket);
+ ZEN_ASSERT(BucketHandle.Handle);
+ CB(BucketHandle.Bucket, BucketHandle.Handle);
}
}
@@ -4082,19 +4066,12 @@ struct ZenCacheDiskLayer::GetBatchHandle
void ForEach(const std::function<void(CacheBucket* Bucket, CacheBucket::GetBatchHandle* Handle)>& CB) noexcept
{
- try
+ RwLock::SharedLockScope _(Lock);
+ for (ZenCacheDiskLayer::GetBatchHandle::BucketHandle& BucketHandle : BucketHandles)
{
- RwLock::SharedLockScope _(Lock);
- for (ZenCacheDiskLayer::GetBatchHandle::BucketHandle& BucketHandle : BucketHandles)
- {
- ZEN_ASSERT(BucketHandle.Bucket);
- ZEN_ASSERT(BucketHandle.Handle);
- CB(BucketHandle.Bucket, BucketHandle.Handle);
- }
- }
- catch (const std::exception& Ex)
- {
- ZEN_ERROR("Exception in ZenCacheDiskLayer::GetBatchHandle::ForEach: '{}'", Ex.what());
+ ZEN_ASSERT(BucketHandle.Bucket);
+ ZEN_ASSERT(BucketHandle.Handle);
+ CB(BucketHandle.Bucket, BucketHandle.Handle);
}
}
@@ -4159,16 +4136,10 @@ void
ZenCacheDiskLayer::DeleteGetBatch(GetBatchHandle* Batch) noexcept
{
ZEN_TRACE_CPU("Z$::DeleteGetBatch");
- try
- {
- ZEN_ASSERT(Batch);
- Batch->ForEach([&](CacheBucket* Bucket, CacheBucket::GetBatchHandle* Handle) { Bucket->DeleteGetBatch(Handle); });
- delete Batch;
- }
- catch (const std::exception& Ex)
- {
- ZEN_ERROR("Exception in ZenCacheDiskLayer::DeleteGetBatch: '{}'", Ex.what());
- }
+
+ ZEN_ASSERT(Batch);
+ Batch->ForEach([&](CacheBucket* Bucket, CacheBucket::GetBatchHandle* Handle) { Bucket->DeleteGetBatch(Handle); });
+ delete Batch;
}
bool