From 4ff409eee68689f265fccbcdebcf71a4aa85930f Mon Sep 17 00:00:00 2001 From: James H Date: Tue, 21 Oct 2025 17:04:55 +0100 Subject: [PATCH] SERVER-112103: Record start time only on start (#42346) GitOrigin-RevId: 9d290e656ae8b700fae52b5bdd1ce40e0e76a0d4 --- src/mongo/db/traffic_recorder.cpp | 14 +++++++------- src/mongo/db/traffic_recorder.h | 6 ++++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/mongo/db/traffic_recorder.cpp b/src/mongo/db/traffic_recorder.cpp index 4358d1964c5..373390a855f 100644 --- a/src/mongo/db/traffic_recorder.cpp +++ b/src/mongo/db/traffic_recorder.cpp @@ -92,22 +92,22 @@ void appendPacketHeader(DataBuilder& db, const TrafficRecordingPacket& packet) { TrafficRecorder::Recording::Recording(const StartTrafficRecording& options, TickSource* tickSource) : _path(_getPath(std::string{options.getDestination()})), - _maxLogSize(options.getMaxFileSize()) { + _maxLogSize(options.getMaxFileSize()), + _tickSource(tickSource) { MultiProducerSingleConsumerQueue::Options queueOptions; queueOptions.maxQueueDepth = options.getMaxMemUsage(); _pcqPipe = MultiProducerSingleConsumerQueue::Pipe(queueOptions); - _trafficStats.setRunning(true); _trafficStats.setBufferSize(options.getMaxMemUsage()); _trafficStats.setRecordingDir(_path); _trafficStats.setMaxFileSize(_maxLogSize); - - startTime.store(tickSource->ticksTo(tickSource->getTicks())); } -void TrafficRecorder::Recording::run() { +void TrafficRecorder::Recording::start() { + _trafficStats.setRunning(true); + startTime.store(_tickSource->ticksTo(_tickSource->getTicks())); _thread = stdx::thread([consumer = std::move(_pcqPipe.consumer), this] { if (!boost::filesystem::is_directory(boost::filesystem::absolute(_path))) { boost::filesystem::create_directory(boost::filesystem::absolute(_path)); @@ -302,7 +302,7 @@ void TrafficRecorder::start(const StartTrafficRecording& options, ServiceContext uassert(ErrorCodes::BadValue, "Traffic recording already active", !*rec); *rec = _makeRecording(options, svcCtx->getTickSource()); - (*rec)->run(); + (*rec)->start(); } _shouldRecord.store(true); @@ -436,7 +436,7 @@ TrafficRecorderForTest::RecordingForTest::getPcqPipe() { return _pcqPipe; } -void TrafficRecorderForTest::RecordingForTest::run() { +void TrafficRecorderForTest::RecordingForTest::start() { // No-op for tests } diff --git a/src/mongo/db/traffic_recorder.h b/src/mongo/db/traffic_recorder.h index 492db966f48..8bf0cb714aa 100644 --- a/src/mongo/db/traffic_recorder.h +++ b/src/mongo/db/traffic_recorder.h @@ -119,7 +119,7 @@ protected: Recording(const StartTrafficRecording& options, TickSource* tickSource); virtual ~Recording() = default; - virtual void run(); + virtual void start(); virtual Status shutdown(); /** @@ -154,6 +154,8 @@ protected: const std::string _path; const int64_t _maxLogSize; + TickSource* _tickSource; + stdx::thread _thread; stdx::mutex _mutex; @@ -189,7 +191,7 @@ public: TrafficRecorder::Recording::CostFunction>::Pipe& getPcqPipe(); - void run() override; + void start() override; Status shutdown() override; };