mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 22:31:28 +02:00
BUG/MINOR: trace: automatically start in waiting mode with "start <evt>"
The doc clearly says that "start <evt>" should leave the trace in pause mode until the indicated event appears. However it's not what's happening, the state is not changed until one command uses "now", so it's typically needed to configure the events with "start <evt>" then enable the waiting mode using "pause now". This is counter-intuitive and does not match the doc, so let's fix it so that "start <evt>" switches from stopped to waiting as long as at least one event is enabled. This can be backported to all versions.
This commit is contained in:
parent
b5df6b5a31
commit
0406efe9ad
19
src/trace.c
19
src/trace.c
@ -508,6 +508,13 @@ static int trace_parse_statement(char **args, char **msg)
|
||||
return LOG_WARNING;
|
||||
}
|
||||
|
||||
/* state transitions:
|
||||
* - "start now" => TRACE_STATE_RUNNING
|
||||
* - "stop now" => TRACE_STATE_STOPPED
|
||||
* - "pause now" => TRACE_STATE_WAITING
|
||||
* - "start <evt>" && STATE_STOPPED => TRACE_STATE_WAITING
|
||||
*/
|
||||
|
||||
if (strcmp(name, "now") == 0 && ev_ptr != &src->report_events) {
|
||||
HA_ATOMIC_STORE(ev_ptr, 0);
|
||||
if (ev_ptr == &src->pause_events) {
|
||||
@ -526,9 +533,16 @@ static int trace_parse_statement(char **args, char **msg)
|
||||
|
||||
if (strcmp(name, "none") == 0)
|
||||
HA_ATOMIC_STORE(ev_ptr, 0);
|
||||
else if (strcmp(name, "any") == 0)
|
||||
else if (strcmp(name, "any") == 0) {
|
||||
enum trace_state old = TRACE_STATE_STOPPED;
|
||||
|
||||
HA_ATOMIC_STORE(ev_ptr, ~0);
|
||||
if (ev_ptr == &src->start_events)
|
||||
HA_ATOMIC_CAS(&src->state, &old, TRACE_STATE_WAITING);
|
||||
}
|
||||
else {
|
||||
enum trace_state old = TRACE_STATE_STOPPED;
|
||||
|
||||
ev = trace_find_event(src->known_events, name);
|
||||
if (!ev) {
|
||||
memprintf(msg, "No such trace event '%s'", name);
|
||||
@ -539,6 +553,9 @@ static int trace_parse_statement(char **args, char **msg)
|
||||
HA_ATOMIC_OR(ev_ptr, ev->mask);
|
||||
else
|
||||
HA_ATOMIC_AND(ev_ptr, ~ev->mask);
|
||||
|
||||
if (ev_ptr == &src->start_events && HA_ATOMIC_LOAD(ev_ptr) != 0)
|
||||
HA_ATOMIC_CAS(&src->state, &old, TRACE_STATE_WAITING);
|
||||
}
|
||||
}
|
||||
else if (strcmp(args[2], "sink") == 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user