From 931decce0d015293e4e1f74922af7bbe1be159f1 Mon Sep 17 00:00:00 2001
From: Manuel Guenther <manuel.guenther@idiap.ch>
Date: Fri, 28 Mar 2014 14:16:19 +0100
Subject: [PATCH] Improved behavior when multiple jobs are re-submitted at the
 same time.

---
 gridtk/models.py      |  4 ++--
 gridtk/script/jman.py | 12 ++++++++++--
 gridtk/sge.py         |  3 ++-
 setup.py              |  2 +-
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/gridtk/models.py b/gridtk/models.py
index 67a3017..1b1d104 100644
--- a/gridtk/models.py
+++ b/gridtk/models.py
@@ -292,9 +292,9 @@ class Job(Base):
       deps = str(sorted(list(set([dep.unique for dep in self.get_jobs_we_wait_for()]))))
       if dependencies < len(deps):
         deps = deps[:dependencies-3] + '...'
-      return format.format(self.unique, job_id, queue, status, self.name, deps, command_line)
+      return format.format(self.unique, job_id, queue[:12], status, self.name, deps, command_line)
     else:
-      return format.format(self.unique, job_id, queue, status, self.name, command_line)
+      return format.format(self.unique, job_id, queue[:12], status, self.name, command_line)
 
 
 
diff --git a/gridtk/script/jman.py b/gridtk/script/jman.py
index dc5b172..c483646 100644
--- a/gridtk/script/jman.py
+++ b/gridtk/script/jman.py
@@ -90,6 +90,14 @@ def get_ids(jobs):
   return indexes
 
 
+def get_memfree(memory, parallel):
+  """Computes the memory required for the memfree field."""
+  number = int(memory.rstrip(string.ascii_letters))
+  memtype = memory.lstrip(string.digits)
+  if not memtype:
+    memtype = "G"
+  return "%d%s" % (number*parallel, memtype)
+
 def submit(args):
   """Submission command"""
 
@@ -115,7 +123,7 @@ def submit(args):
   if args.qname != 'all.q':          kwargs['hvmem'] = args.memory
   if args.parallel is not None:
     kwargs['pe_opt'] = "pe_mth %d" % args.parallel
-    kwargs['memfree'] = "%d%s" % (int(args.memory.rstrip(string.ascii_letters)) * args.parallel, args.memory.lstrip(string.digits))
+    kwargs['memfree'] = get_memfree(args.memory, args.parallel)
   kwargs['dry_run'] = args.dry_run
   kwargs['stop_on_failure'] = args.stop_on_failure
 
@@ -140,7 +148,7 @@ def resubmit(args):
       kwargs['hvmem'] = args.memory
   if args.parallel is not None:
     kwargs['pe_opt'] = "pe_mth %d" % args.parallel
-    kwargs['memfree'] = "%d%s" % (int(args.memory.rstrip(string.ascii_letters)) * args.parallel, args.memory.lstrip(string.digits))
+    kwargs['memfree'] = get_memfree(args.memory, args.parallel)
   if args.io_big:
     kwargs['io_big'] = True
   if args.no_io_big:
diff --git a/gridtk/sge.py b/gridtk/sge.py
index 426973e..59bb8c2 100644
--- a/gridtk/sge.py
+++ b/gridtk/sge.py
@@ -154,7 +154,8 @@ class JobManagerSGE(JobManager):
           logger.debug("Re-submitting job '%s' with dependencies '%s' to the grid." % (job, deps))
           self._submit_to_grid(job, job.name, job.get_array(), deps, job.log_dir, **arguments)
 
-    self.session.commit()
+        # commit after each job to avoid failures of not finding the job during execution in the grid
+        self.session.commit()
     self.unlock()
 
 
diff --git a/setup.py b/setup.py
index 6399394..78b4ac7 100644
--- a/setup.py
+++ b/setup.py
@@ -9,7 +9,7 @@ if sys.version_info[:2] < (2, 7) or ((3,0) <= sys.version_info[:2] < (3,2)):
 
 setup(
     name='gridtk',
-    version='1.1.3a0',
+    version='1.1.4a0',
     description='SGE Grid and Local Submission and Monitoring Tools for Idiap',
 
     url='http://github.com/idiap/gridtk',
-- 
GitLab