mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 18:48:20 +00:00
Merge remote-tracking branch 'origin/topic/awelzel/2514-expire-all-timers-special-case'
* origin/topic/awelzel/2514-expire-all-timers-special-case: TimerMgr: Add back max_timer_expires=0 special case Add btest for expiration of all pending timers.
This commit is contained in:
commit
f4527ee4db
7 changed files with 60 additions and 4 deletions
|
@ -2116,8 +2116,8 @@ global discarder_check_icmp: function(p: pkt_hdr): bool;
|
||||||
## Zeek's watchdog interval.
|
## Zeek's watchdog interval.
|
||||||
const watchdog_interval = 10 sec &redef;
|
const watchdog_interval = 10 sec &redef;
|
||||||
|
|
||||||
## The maximum number of timers to expire after processing each new
|
## The maximum number of expired timers to process after processing each new
|
||||||
## packet. The value trades off spreading out the timer expiration load
|
## packet. The value trades off spreading out the timer expiration load
|
||||||
## with possibly having to hold state longer. A value of 0 means
|
## with possibly having to hold state longer. A value of 0 means
|
||||||
## "process all expired timers with each new packet".
|
## "process all expired timers with each new packet".
|
||||||
const max_timer_expires = 300 &redef;
|
const max_timer_expires = 300 &redef;
|
||||||
|
|
|
@ -111,6 +111,8 @@ void TimerMgr::InitPostScript()
|
||||||
{
|
{
|
||||||
if ( iosource_mgr )
|
if ( iosource_mgr )
|
||||||
iosource_mgr->Register(this, true);
|
iosource_mgr->Register(this, true);
|
||||||
|
|
||||||
|
dispatch_all_expired = zeek::detail::max_timer_expires == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TimerMgr::Add(Timer* timer)
|
void TimerMgr::Add(Timer* timer)
|
||||||
|
@ -142,7 +144,8 @@ void TimerMgr::Expire()
|
||||||
int TimerMgr::DoAdvance(double new_t, int max_expire)
|
int TimerMgr::DoAdvance(double new_t, int max_expire)
|
||||||
{
|
{
|
||||||
Timer* timer = Top();
|
Timer* timer = Top();
|
||||||
for ( num_expired = 0; (num_expired < max_expire) && timer && timer->Time() <= new_t;
|
for ( num_expired = 0;
|
||||||
|
(num_expired < max_expire || dispatch_all_expired) && timer && timer->Time() <= new_t;
|
||||||
++num_expired )
|
++num_expired )
|
||||||
{
|
{
|
||||||
last_timestamp = timer->Time();
|
last_timestamp = timer->Time();
|
||||||
|
|
|
@ -84,7 +84,8 @@ public:
|
||||||
void Add(Timer* timer);
|
void Add(Timer* timer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Advance the clock to time t, expiring at most max_expire timers.
|
* Advance the clock to time t, dispatching at most max_expire expired
|
||||||
|
* timers, or all expired timers if dispatch_all_expired is set.
|
||||||
*
|
*
|
||||||
* @param t the new time.
|
* @param t the new time.
|
||||||
* @param max_expire the maximum number of timers to expire.
|
* @param max_expire the maximum number of timers to expire.
|
||||||
|
@ -152,6 +153,9 @@ private:
|
||||||
double last_advance;
|
double last_advance;
|
||||||
|
|
||||||
int num_expired;
|
int num_expired;
|
||||||
|
// Flag to indicate if Advance() should dispatch all expired timers
|
||||||
|
// for the max_timer_expires=0 case.
|
||||||
|
bool dispatch_all_expired = false;
|
||||||
|
|
||||||
size_t peak_size = 0;
|
size_t peak_size = 0;
|
||||||
size_t cumulative_num = 0;
|
size_t cumulative_num = 0;
|
||||||
|
|
12
testing/btest/Baseline/core.expire-all-timers/conn-all.log
Normal file
12
testing/btest/Baseline/core.expire-all-timers/conn-all.log
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
#separator \x09
|
||||||
|
#set_separator ,
|
||||||
|
#empty_field (empty)
|
||||||
|
#unset_field -
|
||||||
|
#path conn
|
||||||
|
#open XXXX-XX-XX-XX-XX-XX
|
||||||
|
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents
|
||||||
|
#types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string]
|
||||||
|
XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 10.0.0.1 51889 192.168.0.1 80 tcp - 0.000010 18 0 OTH - - 0 Da 1 58 1 40 -
|
||||||
|
XXXXXXXXXX.XXXXXX ClEkJM2Vm5giqnMf4h 10.0.0.1 51889 192.168.0.1 80 tcp - - - - OTH - - 0 D 1 58 0 0 -
|
||||||
|
#close XXXX-XX-XX-XX-XX-XX
|
|
@ -0,0 +1,11 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
#separator \x09
|
||||||
|
#set_separator ,
|
||||||
|
#empty_field (empty)
|
||||||
|
#unset_field -
|
||||||
|
#path conn
|
||||||
|
#open XXXX-XX-XX-XX-XX-XX
|
||||||
|
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents
|
||||||
|
#types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string]
|
||||||
|
XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 10.0.0.1 51889 192.168.0.1 80 tcp - 300.000010 18 0 OTH - - 0 DaT 2 116 1 40 -
|
||||||
|
#close XXXX-XX-XX-XX-XX-XX
|
BIN
testing/btest/Traces/tcp/retransmit-timeout.pcap
Normal file
BIN
testing/btest/Traces/tcp/retransmit-timeout.pcap
Normal file
Binary file not shown.
26
testing/btest/core/expire-all-timers.zeek
Normal file
26
testing/btest/core/expire-all-timers.zeek
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# @TEST-EXEC: zeek -b -C -r $TRACES/tcp/retransmit-timeout.pcap %INPUT
|
||||||
|
# @TEST-EXEC: mv conn.log conn-limited.log
|
||||||
|
|
||||||
|
# @TEST-EXEC: zeek -b -C -r $TRACES/tcp/retransmit-timeout.pcap %INPUT max_timer_expires=0
|
||||||
|
# @TEST-EXEC: mv conn.log conn-all.log
|
||||||
|
|
||||||
|
|
||||||
|
# @TEST-EXEC: btest-diff conn-limited.log
|
||||||
|
# @TEST-EXEC: btest-diff conn-all.log
|
||||||
|
|
||||||
|
@load base/protocols/conn
|
||||||
|
|
||||||
|
const max_timer_expires_default = max_timer_expires;
|
||||||
|
|
||||||
|
event dummy()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
event network_time_init()
|
||||||
|
{
|
||||||
|
# Suppress connection timeout by scheduling more timers than
|
||||||
|
# can be handled in the context of a single packet, by default.
|
||||||
|
local i = 0;
|
||||||
|
while ( ++i <= max_timer_expires_default )
|
||||||
|
schedule 4 min { dummy() };
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue