SERVER-112103: Record start time only on start (#42346)

GitOrigin-RevId: 9d290e656ae8b700fae52b5bdd1ce40e0e76a0d4
This commit is contained in:
James H 2025-10-21 17:04:55 +01:00 committed by MongoDB Bot
parent 99c7a90c36
commit 4ff409eee6
2 changed files with 11 additions and 9 deletions

View File

@ -92,22 +92,22 @@ void appendPacketHeader(DataBuilder& db, const TrafficRecordingPacket& packet) {
TrafficRecorder::Recording::Recording(const StartTrafficRecording& options, TickSource* tickSource) TrafficRecorder::Recording::Recording(const StartTrafficRecording& options, TickSource* tickSource)
: _path(_getPath(std::string{options.getDestination()})), : _path(_getPath(std::string{options.getDestination()})),
_maxLogSize(options.getMaxFileSize()) { _maxLogSize(options.getMaxFileSize()),
_tickSource(tickSource) {
MultiProducerSingleConsumerQueue<TrafficRecordingPacket, CostFunction>::Options queueOptions; MultiProducerSingleConsumerQueue<TrafficRecordingPacket, CostFunction>::Options queueOptions;
queueOptions.maxQueueDepth = options.getMaxMemUsage(); queueOptions.maxQueueDepth = options.getMaxMemUsage();
_pcqPipe = _pcqPipe =
MultiProducerSingleConsumerQueue<TrafficRecordingPacket, CostFunction>::Pipe(queueOptions); MultiProducerSingleConsumerQueue<TrafficRecordingPacket, CostFunction>::Pipe(queueOptions);
_trafficStats.setRunning(true);
_trafficStats.setBufferSize(options.getMaxMemUsage()); _trafficStats.setBufferSize(options.getMaxMemUsage());
_trafficStats.setRecordingDir(_path); _trafficStats.setRecordingDir(_path);
_trafficStats.setMaxFileSize(_maxLogSize); _trafficStats.setMaxFileSize(_maxLogSize);
startTime.store(tickSource->ticksTo<Microseconds>(tickSource->getTicks()));
} }
void TrafficRecorder::Recording::run() { void TrafficRecorder::Recording::start() {
_trafficStats.setRunning(true);
startTime.store(_tickSource->ticksTo<Microseconds>(_tickSource->getTicks()));
_thread = stdx::thread([consumer = std::move(_pcqPipe.consumer), this] { _thread = stdx::thread([consumer = std::move(_pcqPipe.consumer), this] {
if (!boost::filesystem::is_directory(boost::filesystem::absolute(_path))) { if (!boost::filesystem::is_directory(boost::filesystem::absolute(_path))) {
boost::filesystem::create_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); uassert(ErrorCodes::BadValue, "Traffic recording already active", !*rec);
*rec = _makeRecording(options, svcCtx->getTickSource()); *rec = _makeRecording(options, svcCtx->getTickSource());
(*rec)->run(); (*rec)->start();
} }
_shouldRecord.store(true); _shouldRecord.store(true);
@ -436,7 +436,7 @@ TrafficRecorderForTest::RecordingForTest::getPcqPipe() {
return _pcqPipe; return _pcqPipe;
} }
void TrafficRecorderForTest::RecordingForTest::run() { void TrafficRecorderForTest::RecordingForTest::start() {
// No-op for tests // No-op for tests
} }

View File

@ -119,7 +119,7 @@ protected:
Recording(const StartTrafficRecording& options, TickSource* tickSource); Recording(const StartTrafficRecording& options, TickSource* tickSource);
virtual ~Recording() = default; virtual ~Recording() = default;
virtual void run(); virtual void start();
virtual Status shutdown(); virtual Status shutdown();
/** /**
@ -154,6 +154,8 @@ protected:
const std::string _path; const std::string _path;
const int64_t _maxLogSize; const int64_t _maxLogSize;
TickSource* _tickSource;
stdx::thread _thread; stdx::thread _thread;
stdx::mutex _mutex; stdx::mutex _mutex;
@ -189,7 +191,7 @@ public:
TrafficRecorder::Recording::CostFunction>::Pipe& TrafficRecorder::Recording::CostFunction>::Pipe&
getPcqPipe(); getPcqPipe();
void run() override; void start() override;
Status shutdown() override; Status shutdown() override;
}; };