aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-10-05 13:53:42 +0200
committerStefan Boberg <[email protected]>2023-10-05 13:53:42 +0200
commitaa202f615a42373f5116859f0ff4e8b7123ed3d5 (patch)
tree08ce61481cab02f1f47ae39a652001b8c5992f00
parenttrivial: log output typo in GC (diff)
parent0.2.26-pre3 (diff)
downloadzen-aa202f615a42373f5116859f0ff4e8b7123ed3d5.tar.xz
zen-aa202f615a42373f5116859f0ff4e8b7123ed3d5.zip
Merge branch 'main' of https://github.com/EpicGames/zen
-rw-r--r--CHANGELOG.md1
-rw-r--r--VERSION.txt2
-rw-r--r--src/zenserver/cache/cachedisklayer.cpp32
3 files changed, 24 insertions, 11 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1badacf21..1ce5c9dc6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,6 +20,7 @@
- Garbage collect references to currently writing block but keep the block as new data may be added
- Fix BlockStore::Prune used disk space calculation
- Don't materialize data in filecas when we just need the size
+ - Don't lock entire disk cache layer when doing GatherReferences/CollectGarbage
- Improvement: Catch Out Of Memory and Out Of Disk exceptions and report back to requester without reporting an error to Sentry
- Improvement: If creating bucket fails when storing an item in the structured cache, log a warning and propagate error to requester without reporting an error to Sentry
- Improvement: Make an explicit flush of the active block written to in blockstore flush
diff --git a/VERSION.txt b/VERSION.txt
index fe1dba026..e7980dd97 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-0.2.26-pre2 \ No newline at end of file
+0.2.26-pre3 \ No newline at end of file
diff --git a/src/zenserver/cache/cachedisklayer.cpp b/src/zenserver/cache/cachedisklayer.cpp
index 7ce713de9..fafc6bbee 100644
--- a/src/zenserver/cache/cachedisklayer.cpp
+++ b/src/zenserver/cache/cachedisklayer.cpp
@@ -1805,12 +1805,18 @@ ZenCacheDiskLayer::CollectGarbage(GcContext& GcCtx)
{
ZEN_TRACE_CPU("Z$::Disk::CollectGarbage");
- RwLock::SharedLockScope _(m_Lock);
-
- for (auto& Kv : m_Buckets)
+ std::vector<CacheBucket*> Buckets;
+ {
+ RwLock::SharedLockScope _(m_Lock);
+ Buckets.reserve(m_Buckets.size());
+ for (auto& Kv : m_Buckets)
+ {
+ Buckets.push_back(Kv.second.get());
+ }
+ }
+ for (CacheBucket* Bucket : Buckets)
{
- CacheBucket& Bucket = *Kv.second;
- Bucket.CollectGarbage(GcCtx);
+ Bucket->CollectGarbage(GcCtx);
}
}
@@ -2261,12 +2267,18 @@ ZenCacheDiskLayer::GatherReferences(GcContext& GcCtx)
{
ZEN_TRACE_CPU("Z$::Disk::GatherReferences");
- RwLock::SharedLockScope _(m_Lock);
-
- for (auto& Kv : m_Buckets)
+ std::vector<CacheBucket*> Buckets;
+ {
+ RwLock::SharedLockScope _(m_Lock);
+ Buckets.reserve(m_Buckets.size());
+ for (auto& Kv : m_Buckets)
+ {
+ Buckets.push_back(Kv.second.get());
+ }
+ }
+ for (CacheBucket* Bucket : Buckets)
{
- CacheBucket& Bucket = *Kv.second;
- Bucket.GatherReferences(GcCtx);
+ Bucket->GatherReferences(GcCtx);
}
}