> De : Ikaheimonen, JP [mailto:jp_ikaheimo...@mentor.com] 
> Envoyé : 10 septembre 2013 07:41
>
> As you can see, things easily get too complicated.
>
> Currently in LTTng you can only disable events that are enabled in the first 
> place. In other words, an event is born disabled, as if 'lttng disable-event 
> "*"' had been issued whenever a > channel is created. We already have a 
> mechanism to un-disable events - this is the enable-event command. I do not 
> see any reason to add another command to do exactly what
> enable-event already does. If we want to 'disable all events except 'a'' we 
> can call lttng enable-event 'a'. Symmetrically, I would like to have 'enable 
> all events except 'a'', but
> currently this is impossible.

   I disagree with the perception that "an event is born disabled".  I perceive 
quite the opposite, in fact.  The problem, as I've mentioned elsewhere before, 
is that enable-events is a double-duty command, which serves to both *create* 
(i.e define) events and to toggle their enablement.  I would much rather have a 
separate define-event command.  Right now you can define, enable, disable until 
the trace is started, and once that has happened you can only enable and 
disable.  With separate define-event and enable-event commands the code would 
be simpler (and thus less bug-prone), and so would the user experience.

   Getting back to event birth, events are initially non-existent, then they 
transition to defined (and enabled), and can later toggle between enabled and 
disabled (but cannot be undefined).  It is in that sense that they are born 
enabled.

> I still propose keeping the disable-event and enable-event commands 
> asymmetrical. Based on your thoughts below, I also suggest keeping two lists 
> for the enabled events: one for > the enablements, and one for the exceptions 
> to the enablements. The items in the latter list would point to specific 
> items in the former list, so that the exceptions would be tied to > certain 
> enablements.
>
> So for instance,
>
> $ lttng enable-event -u 'x'
> $ lttng list session
> Events:
>   x [enabled]
> $ lttng enable-event -u "x*" --except "xa*"
> $ lttng list session
> Events:
>   x [enabled]
>   x* [enabled, exception xa*]

   I think the exception should be in the event_name string (recall that 
enable-event accepts a *list* of event_names), something like:
$ lttng enable-event -u "x*!xa*"
$ lttng enable-event -u "x*!xa*","y*!yy*"
   (Presumably, if an '!' appears in an actual event name, it would need to be 
escaped in the event_name argument of enable-event)

> $ lttng enable-event -u "x*" --except "xb*"
> $ lttng list session
>   x [enabled]
>   x* [enabled, exception xa*]
>   x* [enabled, exception xb*]
>
> Again, all the enablements would be checked, and the event would be enabled 
> if any of the enablements match.

   What if the user types lttng enable-event -u "xa*!x*"?  Clearly the argument 
collapses to an empty string (it does not enable anything), so the interface 
should leave the current list of enablements and disablements alone, and issue 
a warning to the user.

> If an event enablement has an exception, it must be used in the disable-event 
> command also:
> $ lttng disable-event -u "x*" --except "xb*"
> $ lttng list session
>   x [enabled]
>   x* [enabled, exception xa*]
>   x* [disabled, exception xb*]

   I don't like that restriction at all.  You should be able to use any 
argument for either enable-event or disable-event.

> Comments are very welcome.
>
> JP Ikaheimonen | SW Development Engineer http://go.mentor.com/sourceryanalyzer

   I still say the lttng daemon should process the resulting 
enablement/disablement sets to simplify them whenever possible.  Thus:

$ lttng enable-event -u 'x'
$ lttng list session
Events:
   x [enabled]
$ lttng enable-event -u "x*!xa*"
$ lttng list session
Events:
   x* [enabled, exception xa*]

   The 'x [enabled]' rule is removed because it is subsumed by the 'x* 
[enabled, exception xa*]' rule.

$ lttng enable-event -u "x*!xb*"
$ lttng list session
  x* [enabled]

   In this case the union of "x*!xa*" and "x*!xb*" results in "x*".

   If the user wants to do "all events beginning with x except for those 
beginning with xa or xb", we would have to accept the '[]' regular expression 
operator (e.g. enable-event "x*!x[ab]*) (but note that the '*' is a wildcard 
here, not the regular expression repetition operator).  It may be easier to go 
to full-blown regular expressions.

Daniel U. Thibault
Protection des systèmes et contremesures (PSC) | Systems Protection & 
Countermeasures (SPC)
Cyber sécurité pour les missions essentielles (CME) | Mission Critical Cyber 
Security (MCCS)
R & D pour la défense Canada - Valcartier (RDDC Valcartier) | Defence R&D 
Canada - Valcartier (DRDC Valcartier)
2459 route de la Bravoure
Québec QC  G3J 1X5
CANADA
Vox : (418) 844-4000 x4245
Fax : (418) 844-4538
NAC : 918V QSDJ <http://www.travelgis.com/map.asp?addr=918V%20QSDJ>
Gouvernement du Canada | Government of Canada
<http://www.valcartier.drdc-rddc.gc.ca/>

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to