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 | |
| 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')
| -rw-r--r-- | src/zenstore/cache/cachedisklayer.cpp | 129 | ||||
| -rw-r--r-- | src/zenstore/cache/structuredcachestore.cpp | 33 |
2 files changed, 61 insertions, 101 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 diff --git a/src/zenstore/cache/structuredcachestore.cpp b/src/zenstore/cache/structuredcachestore.cpp index f1cf6e4a4..54c9674de 100644 --- a/src/zenstore/cache/structuredcachestore.cpp +++ b/src/zenstore/cache/structuredcachestore.cpp @@ -159,16 +159,9 @@ ZenCacheNamespace::CommitPutBatch(PutBatchHandle* Batch) void ZenCacheNamespace::DeletePutBatch(PutBatchHandle* Batch) noexcept { - try - { - ZEN_ASSERT(Batch); - m_DiskLayer.DeletePutBatch(Batch->DiskLayerHandle); - delete Batch; - } - catch (const std::exception& Ex) - { - ZEN_ERROR("Exception in ZenCacheNamespace::DeletePutBatch: '{}'", Ex.what()); - } + ZEN_ASSERT(Batch); + m_DiskLayer.DeletePutBatch(Batch->DiskLayerHandle); + delete Batch; } struct ZenCacheNamespace::GetBatchHandle @@ -210,16 +203,9 @@ ZenCacheNamespace::CommitGetBatch(GetBatchHandle* Batch) void ZenCacheNamespace::DeleteGetBatch(GetBatchHandle* Batch) noexcept { - try - { - ZEN_ASSERT(Batch); - m_DiskLayer.DeleteGetBatch(Batch->DiskLayerHandle); - delete Batch; - } - catch (const std::exception& Ex) - { - ZEN_ERROR("Exception in ZenCacheNamespace::DeleteGetBatch: '{}'", Ex.what()); - } + ZEN_ASSERT(Batch); + m_DiskLayer.DeleteGetBatch(Batch->DiskLayerHandle); + delete Batch; } bool @@ -582,8 +568,11 @@ ZenCacheStore::PutBatch::~PutBatch() { try { - ZEN_ASSERT(m_NamespaceBatchHandle); - m_Store->DeletePutBatch(m_NamespaceBatchHandle); + if (m_Store) + { + ZEN_ASSERT(m_NamespaceBatchHandle); + m_Store->DeletePutBatch(m_NamespaceBatchHandle); + } } catch (const std::exception& Ex) { |