Skip to content

Commit 63086df

Browse files
committed
[FIX] more attempts to detect oom in mafft
1 parent a960048 commit 63086df

1 file changed

Lines changed: 17 additions & 1 deletion

File tree

FastOMA/zoo/wrappers/aligners/mafft.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,13 +146,15 @@ def _call(self, filename, *args, **kwargs):
146146
ret = self.cli.process.returncode
147147
if ret != 0:
148148
logger.error('Mafft returned non-zero exit status: {}'.format(ret))
149-
logger.error('Output of Mafft:\n\n%s\nstdout=\n%s\n{}\n\n%s\nstderr=\n%s\n{}\n\n',
149+
logger.error('Output of Mafft:\n\n%s\nstdout=\n%s\n%s\n\n%s\nstderr=\n%s\n%s\n\n',
150150
"=" * 30, "=" * 30, summarize_long_message(self.cli.get_stdout()),
151151
"=" * 30, "=" * 30, summarize_long_message(self.cli.get_stderr()))
152152
if ret < 0:
153153
sig = -ret
154154
raise WrapperError(f'Mafft was terminated by signal {sig}', exit_code=128 + sig)
155155
else:
156+
if ret == 1 and (was_oom_killed() or "Killed" in self.cli.get_stderr()):
157+
raise WrapperError(f'Mafft was killed by the kernel due to running out of memory', exit_code=137)
156158
raise WrapperError(f'Mafft exited with code {ret}', exit_code=ret)
157159
return self.cli.get_stdout(), self.cli.get_stderr()
158160

@@ -348,3 +350,17 @@ def get_default_options():
348350
StringOption('--merge', '', active=False),
349351
IntegerOption('--thread', -1, active=False),
350352
])
353+
354+
355+
def was_oom_killed():
356+
"""
357+
Check if the process was killed by the kernel due to running out of memory.
358+
"""
359+
try:
360+
with open("/sys/fs/cgroup/memory.events") as f:
361+
for line in f:
362+
if line.startswith("oom_kill"):
363+
return int(line.split()[1]) > 0
364+
except FileNotFoundError:
365+
return False
366+
return False

0 commit comments

Comments
 (0)