aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2025-06-11 16:33:43 +0200
committerStefan Boberg <[email protected]>2025-06-11 16:33:43 +0200
commit975484f66f809388953569893f51173e2b461ae8 (patch)
treef7fb5c88356abf6802c41c9e08b67affc9a120dd /src/zenutil
parentremove support for v1 recording (diff)
downloadzen-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.cpp68
-rw-r--r--src/zenutil/include/zenutil/cache/rpcrecording.h8
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();