From b0e81cd90b705c27bc94f0aa9bdf73eeadccc164 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Tue, 12 Apr 2022 14:19:05 +0200 Subject: Make sure we generate unique chunks --- zenserver/cache/structuredcachestore.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'zenserver/cache/structuredcachestore.cpp') diff --git a/zenserver/cache/structuredcachestore.cpp b/zenserver/cache/structuredcachestore.cpp index 0ce473e89..9ae01c5df 100644 --- a/zenserver/cache/structuredcachestore.cpp +++ b/zenserver/cache/structuredcachestore.cpp @@ -270,9 +270,9 @@ SaveCompactBinaryObject(const fs::path& Path, const CbObject& Object) } ZenCacheStore::ZenCacheStore(CasGc& Gc, const std::filesystem::path& RootDir) -: m_RootDir(RootDir) -, GcStorage(Gc) +: GcStorage(Gc) , GcContributor(Gc) +, m_RootDir(RootDir) , m_DiskLayer(RootDir) { ZEN_INFO("initializing structured cache at '{}'", RootDir); @@ -2104,7 +2104,7 @@ ZenCacheDiskLayer::CacheBucket::CollectGarbage(GcContext& GcCtx) if (!NewBlockFile || (WriteOffset + Chunk.size() > MaxBlockSize)) { - uint32_t NextBlockIndex = m_WriteBlockIndex.load(std::memory_order::memory_order_relaxed); + uint32_t NextBlockIndex = m_WriteBlockIndex.load(std::memory_order_relaxed); std::vector LogEntries = MakeDiskIndexEntries(MovedBlockChunks, {}); m_SlogFile.Append(LogEntries); m_SlogFile.Flush(); @@ -3127,15 +3127,28 @@ TEST_CASE("z$.threadedinsert") // * doctest::skip(true)) for (int32_t Idx = 0; Idx < kChunkCount; ++Idx) { + + while(true) { IoBuffer Chunk = testutils::CreateBinaryCacheValue(kChunkSize); IoHash Hash = HashBuffer(Chunk); + if (Chunks.contains(Hash)) + { + continue; + } Chunks[Hash] = {.Bucket = Bucket1, .Buffer = Chunk}; + break; } + while(true) { IoBuffer Chunk = testutils::CreateBinaryCacheValue(kChunkSize); IoHash Hash = HashBuffer(Chunk); + if (Chunks.contains(Hash)) + { + continue; + } Chunks[Hash] = {.Bucket = Bucket2, .Buffer = Chunk}; + break; } } @@ -3144,7 +3157,6 @@ TEST_CASE("z$.threadedinsert") // * doctest::skip(true)) WorkerThreadPool ThreadPool(4); CasGc Gc; ZenCacheStore Zcs(Gc, TempDir.Path()); - const GcClock::TimePoint CurrentTime = GcClock::Now(); { for (const auto& Chunk : Chunks) @@ -3160,7 +3172,7 @@ TEST_CASE("z$.threadedinsert") // * doctest::skip(true)) const uint64_t TotalSize = Zcs.StorageSize().DiskSize; CHECK_EQ(kChunkSize * Chunks.size(), TotalSize); - { + { for (const auto& Chunk : Chunks) { ThreadPool.ScheduleWork([&Zcs, &Chunk]() { -- cgit v1.2.3