Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

teuthology/scrape: Fix bad backtrace parsing in Teuthology.log #1884

Merged
merged 1 commit into from
Aug 30, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 15 additions & 10 deletions teuthology/scrape.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,29 +303,34 @@ def _search_backtrace(self, file_obj):
for line in file_obj:
# Log prefix from teuthology.log
if ".stderr:" in line:
# Only captures the error and disregard what ever comes before
line = line.split(".stderr:")[1]

if "FAILED assert" in line:
if "FAILED assert" in line or "__ceph_assert_fail" in line:
assertion = line.strip()

if line.startswith(" ceph version"):
# The start of a backtrace!
bt_lines = [line]
elif line.startswith(" NOTE: a copy of the executable"):
# The backtrace terminated, if we have a buffer return it
if len(bt_lines):
return ("".join(bt_lines)).strip(), assertion
else:
log.warning("Saw end of BT but not start")
elif line.startswith(" NOTE: a copy of the executable") or \
line.strip().endswith("clone()") or \
"clone()+0x" in line:
# The backtrace terminated, if we have a buffer return it
if len(bt_lines):
return ("".join(bt_lines)).strip(), assertion
else:
log.warning("Saw end of BT but not start")
elif bt_lines:
# We're in a backtrace, push the line onto the list
if len(bt_lines) > MAX_BT_LINES:
# Something wrong with our parsing, drop it
log.warning("Ignoring malparsed backtrace: {0}".format(
# We exceeded MAX_BT_LINES, drop it
log.warning("Ignoring backtrace that exceeds MAX_BACKTRACE_LINES: {0}".format(
", ".join(bt_lines[0:3])
))
log.warning("Either the backtrace is too long or we did a bad job of checking for end of backtrace!")
bt_lines = []
bt_lines.append(line)
else:
bt_lines.append(line)

return None, assertion

Expand Down
Loading