From 7cb527ac595591c99401436757168b366f86a526 Mon Sep 17 00:00:00 2001 From: Nicola Soranzo Date: Thu, 2 Jun 2016 15:00:10 +0100 Subject: [PATCH] Overwrite the correct part of stderr - Skip partial line - Seek back to the correct position after readlines() - Use the same approach in __check_memory_limit() --- lib/galaxy/jobs/runners/slurm.py | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/lib/galaxy/jobs/runners/slurm.py b/lib/galaxy/jobs/runners/slurm.py index 834e289b43b..a7addb0412b 100644 --- a/lib/galaxy/jobs/runners/slurm.py +++ b/lib/galaxy/jobs/runners/slurm.py @@ -92,8 +92,10 @@ class SlurmJobRunner( DRMAAJobRunner ): with open(ajs.error_file, 'r+') as f: if os.path.getsize(ajs.error_file) > SLURM_MEMORY_LIMIT_SCAN_SIZE: f.seek(-SLURM_MEMORY_LIMIT_SCAN_SIZE, os.SEEK_END) + f.readline() + pos = f.tell() lines = f.readlines() - f.seek(0) + f.seek(pos) for line in lines: stripped_line = line.strip() if any([_ in stripped_line for _ in SLURM_MEMORY_LIMIT_EXCEEDED_PARTIAL_WARNINGS]): @@ -114,21 +116,12 @@ class SlurmJobRunner( DRMAAJobRunner ): try: log.debug( 'Checking %s for exceeded memory message from slurm', efile_path ) with open( efile_path ) as f: - pos = 2 - bof = False - while pos < 2048: - try: - f.seek(-pos, 2) - pos += 1 - except: - f.seek(-pos + 1, 2) - bof = True - - if (bof or f.read(1) == '\n') and f.readline().strip() == SLURM_MEMORY_LIMIT_EXCEEDED_MSG: + if os.path.getsize(efile_path) > 2048: + f.seek(-2048, os.SEEK_END) + f.readline() + for line in f.readlines(): + if line.strip() == SLURM_MEMORY_LIMIT_EXCEEDED_MSG: return True - - if bof: - break except: log.exception('Error reading end of %s:', efile_path)