diff options
| author | Dan Engelbrecht <[email protected]> | 2025-06-16 13:18:30 +0200 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2025-06-16 13:18:41 +0200 |
| commit | fab4681a45be906abadf049c4793d5864f7195a9 (patch) | |
| tree | b2eac8c83a90b5b26f854095e0c5f02c9421fb85 | |
| parent | buildstore reference checker (diff) | |
| download | zen-de/zenserver-full-build-storage.tar.xz zen-de/zenserver-full-build-storage.zip | |
Add accesstime test functionsde/zenserver-full-build-storage
| -rw-r--r-- | src/zenstore/buildstore/buildstore.cpp | 79 | ||||
| -rw-r--r-- | src/zenstore/include/zenstore/buildstore/buildstore.h | 16 |
2 files changed, 94 insertions, 1 deletions
diff --git a/src/zenstore/buildstore/buildstore.cpp b/src/zenstore/buildstore/buildstore.cpp index ad737749c..19e4ce93b 100644 --- a/src/zenstore/buildstore/buildstore.cpp +++ b/src/zenstore/buildstore/buildstore.cpp @@ -2798,6 +2798,85 @@ BuildStore::LockState(GcCtx& Ctx) return Locks; } +#if ZEN_WITH_TESTS + +std::optional<AccessTime> +BuildStore::GetBuildLastAccessTime(std::string_view Namespace, std::string_view Bucket, const Oid& BuildId) const +{ + const IoHash BuildHashId = buildstore::impl::MakeBuildHashId(Namespace, Bucket, BuildId); + + RwLock::SharedLockScope Lock(m_Lock); + if (auto It = m_BuildLookup.find(BuildHashId); It != m_BuildLookup.end()) + { + const BuildEntryIndex Index = It->second; + ZEN_ASSERT_SLOW(Index.Index < m_BuildEntries.size()); + const BuildEntry& Entry = m_BuildEntries[Index]; + return Entry.LastAccessTime; + } + return {}; +} + +std::optional<AccessTime> +BuildStore::GetBuildPartLastAccessTime(std::string_view Namespace, + std::string_view Bucket, + const Oid& BuildId, + const Oid& BuildPartId) const +{ + const IoHash BuildHashId = buildstore::impl::MakeBuildHashId(Namespace, Bucket, BuildId); + const IoHash BuildPartHashId = buildstore::impl::MakeBuildPartHashId(BuildHashId, BuildPartId); + + RwLock::SharedLockScope Lock(m_Lock); + if (auto It = m_BuildPartLookup.find(BuildHashId); It != m_BuildPartLookup.end()) + { + const BuildPartEntryIndex Index = It->second; + ZEN_ASSERT_SLOW(Index.Index < m_BuildPartEntries.size()); + const BuildPartEntry& Entry = m_BuildPartEntries[Index]; + return Entry.LastAccessTime; + } + return {}; +} + +bool +BuildStore::SetBuildLastAccessTime(std::string_view Namespace, std::string_view Bucket, const Oid& BuildId, const AccessTime& Time) +{ + const IoHash BuildHashId = buildstore::impl::MakeBuildHashId(Namespace, Bucket, BuildId); + + RwLock::SharedLockScope Lock(m_Lock); + if (auto It = m_BuildLookup.find(BuildHashId); It != m_BuildLookup.end()) + { + const BuildEntryIndex Index = It->second; + ZEN_ASSERT_SLOW(Index.Index < m_BuildEntries.size()); + BuildEntry& Entry = m_BuildEntries[Index]; + Entry.LastAccessTime = Time; + return true; + } + return false; +} + +bool +BuildStore::SetBuildPartLastAccessTime(std::string_view Namespace, + std::string_view Bucket, + const Oid& BuildId, + const Oid& BuildPartId, + const AccessTime& Time) +{ + const IoHash BuildHashId = buildstore::impl::MakeBuildHashId(Namespace, Bucket, BuildId); + const IoHash BuildPartHashId = buildstore::impl::MakeBuildPartHashId(BuildHashId, BuildPartId); + + RwLock::SharedLockScope Lock(m_Lock); + if (auto It = m_BuildPartLookup.find(BuildHashId); It != m_BuildPartLookup.end()) + { + const BuildPartEntryIndex Index = It->second; + ZEN_ASSERT_SLOW(Index.Index < m_BuildPartEntries.size()); + BuildPartEntry& Entry = m_BuildPartEntries[Index]; + Entry.LastAccessTime = Time; + return true; + } + return false; +} + +#endif // ZEN_WITH_TESTS + uint64_t BuildStore::ReadLog(const RwLock::ExclusiveLockScope&, const std::filesystem::path& LogPath, uint64_t SkipEntryCount) { diff --git a/src/zenstore/include/zenstore/buildstore/buildstore.h b/src/zenstore/include/zenstore/buildstore/buildstore.h index 5872cd3ea..59e42ef35 100644 --- a/src/zenstore/include/zenstore/buildstore/buildstore.h +++ b/src/zenstore/include/zenstore/buildstore/buildstore.h @@ -284,6 +284,20 @@ public: //////// GcReferenceLocker virtual std::vector<RwLock::SharedLockScope> LockState(GcCtx& Ctx) override; +#if ZEN_WITH_TESTS + std::optional<AccessTime> GetBuildLastAccessTime(std::string_view Namespace, std::string_view Bucket, const Oid& BuildId) const; + std::optional<AccessTime> GetBuildPartLastAccessTime(std::string_view Namespace, + std::string_view Bucket, + const Oid& BuildId, + const Oid& BuildPartId) const; + bool SetBuildLastAccessTime(std::string_view Namespace, std::string_view Bucket, const Oid& BuildId, const AccessTime& Time); + bool SetBuildPartLastAccessTime(std::string_view Namespace, + std::string_view Bucket, + const Oid& BuildId, + const Oid& BuildPartId, + const AccessTime& Time); +#endif // ZEN_WITH_TESTS + private: uint64_t ReadLog(const RwLock::ExclusiveLockScope&, const std::filesystem::path& LogPath, uint64_t SkipEntryCount); void WriteAccessTimes(const RwLock::ExclusiveLockScope&, const std::filesystem::path& AccessTimesPath); @@ -354,7 +368,7 @@ private: GcManager& m_Gc; - RwLock m_Lock; + mutable RwLock m_Lock; tsl::robin_map<IoHash, BuildEntryIndex, IoHash::Hasher> m_BuildLookup; tsl::robin_map<IoHash, BuildPartEntryIndex, IoHash::Hasher> m_BuildPartLookup; |