aboutsummaryrefslogtreecommitdiff
path: root/zenserver/cache/structuredcachestore.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-11-01 18:37:29 +0100
committerStefan Boberg <[email protected]>2021-11-01 18:37:29 +0100
commitb4c6c459dbb7acb0d50b617750a706d9eb07f3eb (patch)
tree6edb679ca494e6f4639bea3f9ad6f5d71a761aaa /zenserver/cache/structuredcachestore.cpp
parentcidstore: implemented validation of data during index initialization (diff)
downloadzen-b4c6c459dbb7acb0d50b617750a706d9eb07f3eb.tar.xz
zen-b4c6c459dbb7acb0d50b617750a706d9eb07f3eb.zip
projectstore: added validation of oplog data during initialization
also added validation during writing
Diffstat (limited to 'zenserver/cache/structuredcachestore.cpp')
-rw-r--r--zenserver/cache/structuredcachestore.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/zenserver/cache/structuredcachestore.cpp b/zenserver/cache/structuredcachestore.cpp
index b120f3955..1b6c30cbd 100644
--- a/zenserver/cache/structuredcachestore.cpp
+++ b/zenserver/cache/structuredcachestore.cpp
@@ -529,15 +529,28 @@ ZenCacheDiskLayer::CacheBucket::OpenOrCreate(std::filesystem::path BucketDir, bo
m_SlogFile.Open(SlogPath, IsNew);
uint64_t MaxFileOffset = 0;
+ uint64_t InvalidEntryCount = 0;
if (RwLock::ExclusiveLockScope _(m_IndexLock); m_Index.empty())
{
m_SlogFile.Replay([&](const DiskIndexEntry& Record) {
- m_Index[Record.Key] = Record.Location;
+ if (Record.Key == IoHash::Zero)
+ {
+ ++InvalidEntryCount;
+ }
+ else
+ {
+ m_Index[Record.Key] = Record.Location;
- MaxFileOffset = std::max<uint64_t>(MaxFileOffset, Record.Location.Offset() + Record.Location.Size());
+ MaxFileOffset = std::max<uint64_t>(MaxFileOffset, Record.Location.Offset() + Record.Location.Size());
+ }
});
+ if (InvalidEntryCount)
+ {
+ ZEN_WARN("found {} invalid entries in '{}'", InvalidEntryCount, SlogPath);
+ }
+
m_WriteCursor = (MaxFileOffset + 15) & ~15;
}
@@ -998,7 +1011,7 @@ ZenCacheDiskLayer::DiscoverBuckets()
{
// New bucket needs to be created
- std::string BucketName8 = WideToUtf8(BucketName);
+ const std::string BucketName8 = ToUtf8(BucketName);
if (auto It = m_Buckets.find(BucketName8); It != m_Buckets.end())
{
@@ -1014,7 +1027,11 @@ ZenCacheDiskLayer::DiscoverBuckets()
Bucket.OpenOrCreate(BucketPath, /* AllowCreate */ false);
- if (!Bucket.IsOk())
+ if (Bucket.IsOk())
+ {
+ ZEN_INFO("Discovered bucket '{}'", BucketName8);
+ }
+ else
{
ZEN_WARN("Found directory '{}' in our base directory '{}' but it is not a valid bucket", BucketName8, m_RootDir);