aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/cache/cachedisklayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenserver/cache/cachedisklayer.cpp')
-rw-r--r--src/zenserver/cache/cachedisklayer.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/zenserver/cache/cachedisklayer.cpp b/src/zenserver/cache/cachedisklayer.cpp
index 894676d6a..177d37aa9 100644
--- a/src/zenserver/cache/cachedisklayer.cpp
+++ b/src/zenserver/cache/cachedisklayer.cpp
@@ -2145,17 +2145,26 @@ ZenCacheDiskLayer::DiscoverBuckets()
// Initialize buckets
+ std::vector<std::filesystem::path> BadBucketDirectories;
+
RwLock::ExclusiveLockScope _(m_Lock);
for (const std::filesystem::path& BucketPath : DirContent.Directories)
{
const std::string BucketName = PathToUtf8(BucketPath.stem());
- // New bucket needs to be created
+
if (auto It = m_Buckets.find(BucketName); It != m_Buckets.end())
{
continue;
}
+ if (IsKnownBadBucketName(BucketName))
+ {
+ BadBucketDirectories.push_back(BucketPath);
+
+ continue;
+ }
+
auto InsertResult = m_Buckets.emplace(BucketName, std::make_unique<CacheBucket>(BucketName));
CacheBucket& Bucket = *InsertResult.first->second;
@@ -2176,6 +2185,28 @@ ZenCacheDiskLayer::DiscoverBuckets()
}
ZEN_INFO("Discovered bucket '{}'", BucketName);
}
+
+ for (const std::filesystem::path& BadBucketPath : BadBucketDirectories)
+ {
+ bool IsOk = false;
+
+ try
+ {
+ IsOk = DeleteDirectories(BadBucketPath);
+ }
+ catch (std::exception&)
+ {
+ }
+
+ if (IsOk)
+ {
+ ZEN_INFO("found bad bucket at '{}', deleted contents", BadBucketPath);
+ }
+ else
+ {
+ ZEN_WARN("bad bucket delete failed for '{}'", BadBucketPath);
+ }
+ }
}
bool