diff options
| author | Stefan Boberg <[email protected]> | 2023-12-14 13:09:22 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-12-14 13:09:22 +0100 |
| commit | ff0e3b4fbef6a981a74a3d3e75b80ce208714dc3 (patch) | |
| tree | 565bf05898eccd74c8381d79d902c29ba72abe41 /src/zenutil/cache | |
| parent | 0.2.37 (diff) | |
| download | zen-ff0e3b4fbef6a981a74a3d3e75b80ce208714dc3.tar.xz zen-ff0e3b4fbef6a981a74a3d3e75b80ce208714dc3.zip | |
implement cache recording segment split by age (#611)
- also fixes weird DateTime/TimeSpan comparison operator
Diffstat (limited to 'src/zenutil/cache')
| -rw-r--r-- | src/zenutil/cache/rpcrecording.cpp | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/src/zenutil/cache/rpcrecording.cpp b/src/zenutil/cache/rpcrecording.cpp index 054ac0e56..00cecb8f7 100644 --- a/src/zenutil/cache/rpcrecording.cpp +++ b/src/zenutil/cache/rpcrecording.cpp @@ -2,6 +2,7 @@ #include <zencore/compactbinarybuilder.h> #include <zencore/filesystem.h> +#include <zencore/fmtutils.h> #include <zencore/logging.h> #include <zencore/system.h> #include <zenutil/basicfile.h> @@ -264,7 +265,7 @@ struct RecordedRequest static_assert(sizeof(RecordedRequest) == 24); const uint64_t RecordedRequestBlockSize = 1 * 1024 * 1024 * 1024; // 1GiB -const uint64_t StandaloneFileSizeThreshold = 1 * 1024 * 1024ull; // 1MiB +const uint64_t StandaloneFileSizeThreshold = 16 * 1024 * 1024ull; // 16MiB const uint64_t SegmentRequestCount = 10 * 1000 * 1000; const uint64_t LooseFileThreshold = 5000; // Somewhat arbitrary, but we try to keep the // number of files in a directory below this level @@ -321,6 +322,7 @@ struct RecordedRequestsWriter RecordedRequestsSegmentWriter& EnsureCurrentSegment(); void CommitCurrentSegment(RwLock::ExclusiveLockScope&); void EndWrite(); + void WriteRecordingMetadata(); uint64_t WriteRequest(const RecordedRequestInfo& RequestInfo, const IoBuffer& RequestBuffer); private: @@ -547,6 +549,7 @@ RecordedRequestsSegmentReader::BeginRead(const std::filesystem::path& BasePath, } return m_Entries.size(); } + void RecordedRequestsSegmentReader::EndRead() { @@ -600,6 +603,8 @@ RecordedRequestsWriter::EnsureCurrentSegment() { bool StartNewSegment = false; + TimeSpan SegmentAge(DateTime::NowTicks() - m_CurrentWriter->GetStartTime().GetTicks()); + if (m_CurrentWriter->GetRequestCount() >= SegmentRequestCount) { ZEN_DEBUG("starting new RPC recording segment due to request count >= {}", SegmentRequestCount); @@ -615,6 +620,12 @@ RecordedRequestsWriter::EnsureCurrentSegment() ZEN_DEBUG("starting new RPC recording segment due to footprint >= {} bytes", SegmentByteThreshold); StartNewSegment = true; } + else if (SegmentAge >= SegmentTimeThreshold) + { + ZEN_DEBUG("starting new RPC recording segment due to age >= {}", + NiceTimeSpanMs(SegmentTimeThreshold.GetTicks() / TimeSpan::TicksPerMillisecond)); + StartNewSegment = true; + } if (StartNewSegment) { @@ -654,8 +665,22 @@ RecordedRequestsWriter::EndWrite() CommitCurrentSegment(_); - // Emit some metadata alongside the recording + WriteRecordingMetadata(); +} +uint64_t +RecordedRequestsWriter::WriteRequest(const RecordedRequestInfo& RequestInfo, const IoBuffer& RequestBuffer) +{ + RecordedRequestsSegmentWriter& Writer = EnsureCurrentSegment(); + + const uint64_t SegmentLocalIndex = Writer.WriteRequest(RequestInfo, RequestBuffer); + + return Writer.GetBaseRequestIndex() + SegmentLocalIndex; +} + +void +RecordedRequestsWriter::WriteRecordingMetadata() +{ try { DateTime EndTime = DateTime::Now(); @@ -702,16 +727,6 @@ RecordedRequestsWriter::EndWrite() } } -uint64_t -RecordedRequestsWriter::WriteRequest(const RecordedRequestInfo& RequestInfo, const IoBuffer& RequestBuffer) -{ - RecordedRequestsSegmentWriter& Writer = EnsureCurrentSegment(); - - const uint64_t SegmentLocalIndex = Writer.WriteRequest(RequestInfo, RequestBuffer); - - return Writer.GetBaseRequestIndex() + SegmentLocalIndex; -} - ////////////////////////////////////////////////////////////////////////// uint64_t |