diff options
| author | Dan Engelbrecht <[email protected]> | 2025-12-10 10:49:38 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-12-10 10:49:38 +0100 |
| commit | 5b256bb1d3ab06581af2643b5472a1f9121d20ee (patch) | |
| tree | 05350f9e71ff089c1b9091d499eb492732dbca87 /src/zenstore/cache/cachedisklayer.cpp | |
| parent | fix buffer memory in builds cache (#682) (diff) | |
| download | zen-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.cpp | 129 |
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 |