aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/compactcas.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2026-01-09 16:52:08 +0100
committerGitHub Enterprise <[email protected]>2026-01-09 16:52:08 +0100
commit4b25a0926ce5cc4336a58165ddfbb11e7fe97f6b (patch)
treedc278605bd7b1036a24701455ab6df80f7871e30 /src/zenstore/compactcas.cpp
parentCprHttpClient cleanup (#703) (diff)
downloadzen-4b25a0926ce5cc4336a58165ddfbb11e7fe97f6b.tar.xz
zen-4b25a0926ce5cc4336a58165ddfbb11e7fe97f6b.zip
various optimizations (#704)
- Improvement: Validate chunk hashes when dechunking files in oplog import - Improvement: Use stream decompression when dechunking files - Improvement: When assembling blocks for oplog export, make sure we keep under/at block size limit - Improvement: Make cancelling of oplog import more responsive - Improvement: Use decompress to composite to avoid allocating a new memory buffer for uncompressed chunks during oplog import - Improvement: Reduce memory buffer size and allocate it on demand when writing multiple chunks to block store - Improvement: Reduce lock contention when fetching/checking existence of chunks in block store
Diffstat (limited to 'src/zenstore/compactcas.cpp')
-rw-r--r--src/zenstore/compactcas.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/zenstore/compactcas.cpp b/src/zenstore/compactcas.cpp
index a5de5c448..37a8c36b8 100644
--- a/src/zenstore/compactcas.cpp
+++ b/src/zenstore/compactcas.cpp
@@ -301,13 +301,14 @@ CasContainerStrategy::FindChunk(const IoHash& ChunkHash)
{
ZEN_TRACE_CPU("CasContainer::FindChunk");
- RwLock::SharedLockScope _(m_LocationMapLock);
+ RwLock::SharedLockScope Lock(m_LocationMapLock);
auto KeyIt = m_LocationMap.find(ChunkHash);
if (KeyIt == m_LocationMap.end())
{
return IoBuffer();
}
- const BlockStoreLocation& Location = m_Locations[KeyIt->second].Get(m_PayloadAlignment);
+ const BlockStoreLocation Location = m_Locations[KeyIt->second].Get(m_PayloadAlignment);
+ Lock.ReleaseNow();
IoBuffer Chunk = m_BlockStore.TryGetChunk(Location);
return Chunk;
@@ -316,10 +317,11 @@ CasContainerStrategy::FindChunk(const IoHash& ChunkHash)
bool
CasContainerStrategy::HaveChunk(const IoHash& ChunkHash)
{
- RwLock::SharedLockScope _(m_LocationMapLock);
+ RwLock::SharedLockScope Lock(m_LocationMapLock);
if (auto KeyIt = m_LocationMap.find(ChunkHash); KeyIt != m_LocationMap.end())
{
- const BlockStoreLocation& Location = m_Locations[KeyIt->second].Get(m_PayloadAlignment);
+ const BlockStoreLocation Location = m_Locations[KeyIt->second].Get(m_PayloadAlignment);
+ Lock.ReleaseNow();
return m_BlockStore.HasChunk(Location);
}
return false;