aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/cache/cachedisklayer.cpp
diff options
context:
space:
mode:
authorzousar <[email protected]>2025-08-05 14:58:08 -0600
committerzousar <[email protected]>2025-08-05 14:58:08 -0600
commit7ddededb31c9b3415d4d85f0b284e5bf45c723b9 (patch)
treee908f97766720550b7d3d4e8553b3c83132c0735 /src/zenstore/cache/cachedisklayer.cpp
parentxmake precommit (diff)
parentde/stringbuilder safety (#456) (diff)
downloadzen-7ddededb31c9b3415d4d85f0b284e5bf45c723b9.tar.xz
zen-7ddededb31c9b3415d4d85f0b284e5bf45c723b9.zip
Merge branch 'main' into zs/put-overwrite-policy
Diffstat (limited to 'src/zenstore/cache/cachedisklayer.cpp')
-rw-r--r--src/zenstore/cache/cachedisklayer.cpp51
1 files changed, 40 insertions, 11 deletions
diff --git a/src/zenstore/cache/cachedisklayer.cpp b/src/zenstore/cache/cachedisklayer.cpp
index 1ebb8f144..60475e30c 100644
--- a/src/zenstore/cache/cachedisklayer.cpp
+++ b/src/zenstore/cache/cachedisklayer.cpp
@@ -403,11 +403,20 @@ BucketManifestSerializer::ParseManifest(RwLock::ExclusiveLockScope& Buck
Stopwatch Timer;
const auto _ = MakeGuard([&] { ZEN_INFO("parsed store manifest '{}' in {}", ManifestPath, NiceTimeSpanMs(Timer.GetElapsedTimeMs())); });
- const uint64_t Count = Manifest["Count"sv].AsUInt64(0);
+ const uint64_t Count = Manifest["Count"sv].AsUInt64(0);
+ CbArrayView KeyArray = Manifest["Keys"sv].AsArrayView();
+ if (KeyArray.Num() != Count)
+ {
+ ZEN_WARN("Mismatch in size between 'Keys' ({}) array size and 'Count' ({}) in {}, skipping metadata",
+ KeyArray.Num(),
+ Count,
+ ManifestPath);
+ return;
+ }
+
std::vector<PayloadIndex> KeysIndexes;
KeysIndexes.reserve(Count);
- CbArrayView KeyArray = Manifest["Keys"sv].AsArrayView();
for (CbFieldView& KeyView : KeyArray)
{
if (auto It = Index.find(KeyView.AsHash()); It != Index.end())
@@ -422,19 +431,43 @@ BucketManifestSerializer::ParseManifest(RwLock::ExclusiveLockScope& Buck
size_t KeyIndexOffset = 0;
CbArrayView TimeStampArray = Manifest["Timestamps"].AsArrayView();
- for (CbFieldView& TimeStampView : TimeStampArray)
+ if (KeysIndexes.size() != TimeStampArray.Num())
{
- const PayloadIndex KeyIndex = KeysIndexes[KeyIndexOffset++];
- if (KeyIndex)
+ ZEN_WARN("Mismatch in size between 'Keys' ({}) and 'Timestamps' ({}) arrays in {}, skipping timestamps",
+ KeysIndexes.size(),
+ TimeStampArray.Num(),
+ ManifestPath);
+ }
+ else
+ {
+ for (CbFieldView& TimeStampView : TimeStampArray)
{
- AccessTimes[KeyIndex] = TimeStampView.AsInt64();
+ const PayloadIndex KeyIndex = KeysIndexes[KeyIndexOffset++];
+ if (KeyIndex)
+ {
+ AccessTimes[KeyIndex] = TimeStampView.AsInt64();
+ }
}
}
KeyIndexOffset = 0;
CbArrayView RawHashArray = Manifest["RawHash"].AsArrayView();
CbArrayView RawSizeArray = Manifest["RawSize"].AsArrayView();
- if (RawHashArray.Num() == RawSizeArray.Num())
+ if (RawHashArray.Num() != KeysIndexes.size())
+ {
+ ZEN_WARN("Mismatch in size between 'Keys' ({}) and 'RawHash' ({}) arrays in {}, skipping meta data",
+ KeysIndexes.size(),
+ RawHashArray.Num(),
+ ManifestPath);
+ }
+ else if (RawSizeArray.Num() != KeysIndexes.size())
+ {
+ ZEN_WARN("Mismatch in size between 'Keys' ({}) and 'RawSize' ({}) arrays in {}, skipping meta data",
+ KeysIndexes.size(),
+ RawSizeArray.Num(),
+ ManifestPath);
+ }
+ else
{
auto RawHashIt = RawHashArray.CreateViewIterator();
auto RawSizeIt = RawSizeArray.CreateViewIterator();
@@ -459,10 +492,6 @@ BucketManifestSerializer::ParseManifest(RwLock::ExclusiveLockScope& Buck
RawSizeIt++;
}
}
- else
- {
- ZEN_WARN("Mismatch in size between 'RawHash' and 'RawSize' arrays in {}, skipping meta data", ManifestPath);
- }
}
Oid