diff options
| author | Stefan Boberg <[email protected]> | 2025-06-11 16:33:43 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2025-06-11 16:33:43 +0200 |
| commit | 975484f66f809388953569893f51173e2b461ae8 (patch) | |
| tree | f7fb5c88356abf6802c41c9e08b67affc9a120dd /src/zenutil | |
| parent | remove support for v1 recording (diff) | |
| download | zen-975484f66f809388953569893f51173e2b461ae8.tar.xz zen-975484f66f809388953569893f51173e2b461ae8.zip | |
added IRpcRequestAnalyzer
we'll want a different API for analysis so better to create a distinct interface rather than complicating the replay code
Diffstat (limited to 'src/zenutil')
| -rw-r--r-- | src/zenutil/cache/rpcrecording.cpp | 68 | ||||
| -rw-r--r-- | src/zenutil/include/zenutil/cache/rpcrecording.h | 8 |
2 files changed, 55 insertions, 21 deletions
diff --git a/src/zenutil/cache/rpcrecording.cpp b/src/zenutil/cache/rpcrecording.cpp index 8e6728578..f7a733597 100644 --- a/src/zenutil/cache/rpcrecording.cpp +++ b/src/zenutil/cache/rpcrecording.cpp @@ -891,6 +891,19 @@ private: RecordedRequestsWriter m_RecordedRequests; }; +class DiskRequestAnalyzer : public IRpcRequestAnalyzer +{ +public: + DiskRequestAnalyzer(const std::filesystem::path& BasePath) { m_RequestCount = m_RequestReader.BeginRead(BasePath, false); } + virtual ~DiskRequestAnalyzer() { m_RequestReader.EndRead(); } + + virtual uint64_t GetRequestCount() const override { return m_RequestCount; } + +private: + std::uint64_t m_RequestCount; + RecordedRequestsReader m_RequestReader; +}; + class DiskRequestReplayer : public IRpcRequestReplayer { public: @@ -900,6 +913,27 @@ public: } virtual ~DiskRequestReplayer() { m_RequestReader.EndRead(); } + virtual uint64_t GetRequestCount() const override { return m_RequestCount; } + + virtual RecordedRequestInfo GetRequest(uint64_t RequestIndex, IoBuffer& OutBuffer) override + { + return m_RequestReader.ReadRequest(RequestIndex, OutBuffer); + } + + static bool IsCompatible(const std::filesystem::path& BasePath) + { + if (IsFile(BasePath / "rpc_recording_info.zcb")) + { + return true; + } + + return HasSegments(BasePath); + } + +private: + std::uint64_t m_RequestCount; + RecordedRequestsReader m_RequestReader; + static bool HasSegments(const std::filesystem::path& RootPath) { std::error_code Ec; @@ -920,27 +954,6 @@ public: return false; }; - - static bool IsCompatible(const std::filesystem::path& BasePath) - { - if (IsFile(BasePath / "rpc_recording_info.zcb")) - { - return true; - } - - return HasSegments(BasePath); - } - - virtual uint64_t GetRequestCount() const override { return m_RequestCount; } - - virtual RecordedRequestInfo GetRequest(uint64_t RequestIndex, IoBuffer& OutBuffer) override - { - return m_RequestReader.ReadRequest(RequestIndex, OutBuffer); - } - -private: - std::uint64_t m_RequestCount; - RecordedRequestsReader m_RequestReader; }; } // namespace zen::cache::v2 @@ -968,6 +981,19 @@ MakeDiskRequestReplayer(const std::filesystem::path& BasePath, bool InMemory) } } +std::unique_ptr<cache::IRpcRequestAnalyzer> +MakeDiskRequestAnalyzer(const std::filesystem::path& BasePath) +{ + if (v2::DiskRequestReplayer::IsCompatible(BasePath)) + { + return std::make_unique<v2::DiskRequestAnalyzer>(BasePath); + } + else + { + return nullptr; + } +} + #if ZEN_WITH_TESTS void diff --git a/src/zenutil/include/zenutil/cache/rpcrecording.h b/src/zenutil/include/zenutil/cache/rpcrecording.h index f1ad35413..c63024141 100644 --- a/src/zenutil/include/zenutil/cache/rpcrecording.h +++ b/src/zenutil/include/zenutil/cache/rpcrecording.h @@ -35,8 +35,16 @@ public: virtual RecordedRequestInfo GetRequest(uint64_t RequestIndex, IoBuffer& OutBuffer) = 0; }; +class IRpcRequestAnalyzer +{ +public: + virtual ~IRpcRequestAnalyzer() {} + virtual uint64_t GetRequestCount() const = 0; +}; + std::unique_ptr<cache::IRpcRequestRecorder> MakeDiskRequestRecorder(const std::filesystem::path& BasePath); std::unique_ptr<cache::IRpcRequestReplayer> MakeDiskRequestReplayer(const std::filesystem::path& BasePath, bool InMemory); +std::unique_ptr<cache::IRpcRequestAnalyzer> MakeDiskRequestAnalyzer(const std::filesystem::path& BasePath); void rpcrecord_forcelink(); |