From 61c4f24ed6b644640079b5c2250cdc15226beec1 Mon Sep 17 00:00:00 2001 From: Douglas Raillard Date: Tue, 13 Jun 2023 16:18:17 +0100 Subject: [PATCH] lisa.trace: Fix TraceEventCheckerBase.check_events() with namespaces FIX Ensure that we take into account the trace namespace when checking if an event is in Trace.available_events. This object is not a regular set and membership test will return True if the event is found in any of the trace namespaces. This is consistent with predicting the success or failure of Trace.df_event(). --- lisa/trace.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/lisa/trace.py b/lisa/trace.py index 441b5c301..e52a51855 100644 --- a/lisa/trace.py +++ b/lisa/trace.py @@ -3705,7 +3705,7 @@ class Trace(Loggable, TraceBase): preload_events = AndTraceEventChecker.from_events( event_ for event in events - for event_ in self._expand_namespaces(event) + for event_ in self._expand_namespaces(event, events_namespaces) ) df_map = self._load_cache_raw_df(preload_events, write_swap=True, allow_missing_events=True) @@ -3728,11 +3728,15 @@ class Trace(Loggable, TraceBase): self.plat_info = plat_info.add_trace_src(self) @bothmethod - def _expand_namespaces(self_or_cls, event, namespaces=None): + def _resolve_namespaces(self_or_cls, namespaces=None): if not isinstance(self_or_cls, type): namespaces = self_or_cls.events_namespaces if namespaces is None else namespaces + return namespaces or (None,) + + @bothmethod + def _expand_namespaces(self_or_cls, event, namespaces=None): + namespaces = self_or_cls._resolve_namespaces(namespaces) - namespaces = namespaces or (None,) def expand(event, namespace): if self_or_cls._is_meta_event(event): prefix, _ = event.split('@', 1) @@ -5050,23 +5054,25 @@ class TraceEventCheckerBase(abc.ABC, Loggable, Sequence): if check_optional: def rewrite(checker): if isinstance(checker, OptionalTraceEventChecker): - checker = AndTraceEventChecker(checker.checkers) - return checker + return AndTraceEventChecker(checker.checkers) + else: + return checker checker = self.map(rewrite) else: checker = self - if namespaces is not None: - checker = checker.expand_namespaces(namespaces=namespaces) - - def check(event): - if isinstance(event_set, _AvailableTraceEventsSet): + if isinstance(event_set, _AvailableTraceEventsSet): + namespaces = event_set._trace._resolve_namespaces(namespaces) + def check(event): # We already expanded namespaces, so we don't want the # inclusion check to apply the default trace's namespace. return event_set.contains(event, namespaces=[]) - else: + else: + def check(event): return event in event_set + checker = checker.expand_namespaces(namespaces=namespaces) + return checker._select_events(check=check, event_set=event_set) @abc.abstractmethod -- GitLab