diff options
Diffstat (limited to 'src/zenserver/cache/cachedisklayer.cpp')
| -rw-r--r-- | src/zenserver/cache/cachedisklayer.cpp | 33 |
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 |