from __future__ import annotations import re from dataclasses import dataclass, field from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from lava.utils import LogFollower from lava.exceptions import MesaCIKnownIssueException from lava.utils.console_format import CONSOLE_LOG from lava.utils.log_section import LogSectionType @dataclass class LAVALogHints: log_follower: LogFollower has_r8152_issue_history: bool = field(default=False, init=False) def detect_failure(self, new_lines: list[dict[str, Any]]): for line in new_lines: self.detect_r8152_issue(line) def detect_r8152_issue(self, line): if ( self.log_follower.phase == LogSectionType.TEST_CASE and line["lvl"] == "target" ): if re.search(r"r8152 \S+ eth0: Tx status -71", line["msg"]): self.has_r8152_issue_history = True return if self.has_r8152_issue_history and re.search( r"nfs: server \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} not responding, still trying", line["msg"], ): raise MesaCIKnownIssueException( f"{CONSOLE_LOG['FG_MAGENTA']}" "Probable network issue failure encountered, retrying the job" f"{CONSOLE_LOG['RESET']}" ) self.has_r8152_issue_history = False