logging/Manager: Make LogDelayExpiredTimer an implementation detail

The only reason this was a private component of Manager was to access
the Stream's function. Use a generic callback and a lambda to avoid
that exposure.
This commit is contained in:
Arne Welzel 2023-11-30 12:22:33 +01:00
parent dfa8bac273
commit ee65623600
2 changed files with 17 additions and 16 deletions

View file

@ -3,6 +3,7 @@
#include "zeek/logging/Manager.h" #include "zeek/logging/Manager.h"
#include <broker/endpoint_info.hh> #include <broker/endpoint_info.hh>
#include <functional>
#include <optional> #include <optional>
#include <utility> #include <utility>
@ -153,6 +154,19 @@ private:
const DelayInfoPtr DelayInfo::nil = nullptr; const DelayInfoPtr DelayInfo::nil = nullptr;
// Timer for the head of the per stream delay queue using an opaque
// callback based approach to hide the Stream implementation details.
class LogDelayExpiredTimer : public zeek::detail::Timer {
public:
LogDelayExpiredTimer(std::function<void(double, bool)> dispatch_callback, double t)
: Timer(t, zeek::detail::TIMER_LOG_DELAY_EXPIRE), dispatch_callback(dispatch_callback) {}
void Dispatch(double t, bool is_expire) override { dispatch_callback(t, is_expire); }
private:
std::function<void(double, bool)> dispatch_callback;
};
// Helper class for dealing with nested Write() calls. // Helper class for dealing with nested Write() calls.
class ActiveWriteScope { class ActiveWriteScope {
public: public:
@ -240,7 +254,7 @@ struct Manager::Stream {
detail::DelayWriteMap delayed_writes; detail::DelayWriteMap delayed_writes;
detail::WriteIdx write_idx = 0; detail::WriteIdx write_idx = 0;
Manager::LogDelayExpiredTimer* delay_timer = nullptr; detail::LogDelayExpiredTimer* delay_timer = nullptr;
double max_delay_interval = 0.0; double max_delay_interval = 0.0;
zeek_uint_t max_delay_queue_size = 1; zeek_uint_t max_delay_queue_size = 1;
bool evicting = false; bool evicting = false;
@ -257,19 +271,6 @@ struct Manager::Stream {
void DispatchDelayExpiredTimer(double t, bool is_expire); void DispatchDelayExpiredTimer(double t, bool is_expire);
}; };
// Timer for the head of the per stream delay queue.
class Manager::LogDelayExpiredTimer : public zeek::detail::Timer {
public:
LogDelayExpiredTimer(Manager::Stream* const stream, double t)
: Timer(t, zeek::detail::TIMER_LOG_DELAY_EXPIRE), stream(stream) {}
void Dispatch(double t, bool is_expire) override { stream->DispatchDelayExpiredTimer(t, is_expire); }
private:
Manager::Stream* const stream;
};
Manager::Filter::~Filter() { Manager::Filter::~Filter() {
Unref(fval); Unref(fval);
Unref(field_name_map); Unref(field_name_map);
@ -389,7 +390,8 @@ void Manager::Stream::ScheduleLogDelayExpiredTimer(double t) {
return; return;
} }
delay_timer = new LogDelayExpiredTimer(this, t); auto cb = [this](double ts, bool is_expire) { this->DispatchDelayExpiredTimer(ts, is_expire); };
delay_timer = new detail::LogDelayExpiredTimer(cb, t);
zeek::detail::timer_mgr->Add(delay_timer); zeek::detail::timer_mgr->Add(delay_timer);
} }

View file

@ -372,7 +372,6 @@ private:
struct Filter; struct Filter;
struct Stream; struct Stream;
struct WriterInfo; struct WriterInfo;
class LogDelayExpiredTimer;
bool TraverseRecord(Stream* stream, Filter* filter, RecordType* rt, TableVal* include, TableVal* exclude, bool TraverseRecord(Stream* stream, Filter* filter, RecordType* rt, TableVal* include, TableVal* exclude,
const std::string& path, const std::list<int>& indices); const std::string& path, const std::list<int>& indices);