Remove result file where deleting an archived job
authorJean-Michel Nirgal Vourgère <jmv@nirgal.com>
Sat, 13 Nov 2010 00:50:47 +0000 (00:50 +0000)
committerJean-Michel Nirgal Vourgère <jmv@nirgal.com>
Sat, 13 Nov 2010 00:50:47 +0000 (00:50 +0000)
bin/jobrunner.py

index 697750a4fe651a8e2037947c6da508078cd7cd7e..ab78eb93b3ee89ff4a3ed3ed8711e96918cdf753 100755 (executable)
@@ -16,6 +16,8 @@ __all__ = [ \
     ]
 
 SOCK_FILENAME = '/var/run/ais/jobrunner.wakeup'
+RESULT_DIR = '/var/lib/ais/jobs/'
+ARCHIVE_EXPIRE = '1 day' # postgres format
 
 def wakeup_daemon():
     client = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
@@ -31,6 +33,10 @@ Your job has been queued, but there was an error contacting the task
 scheduler. Please repport the error.
 """
 
+def jobid_ext_to_filename(jobid, friendly_filename):
+    extension = os.path.splitext(friendly_filename)[-1]
+    return RESULT_DIR + jobid + extension
+    
 def startup_clean():
     sqlexec(u'SELECT id, pid, start_time, finish_time FROM job WHERE pid IS NOT NULL OR (start_time IS NOT NULL AND finish_time IS NULL)')
     while True:
@@ -43,13 +49,27 @@ def startup_clean():
     sqlexec(u'UPDATE job SET pid=NULL, start_time=NULL WHERE pid IS NOT NULL OR (start_time IS NOT NULL AND finish_time IS NULL)')
     dbcommit()
 
+
 def runjob():
     """
     returns True is a job was waiting and has been processed
     """
     # remove jobs archived for more than 1 day
-    # TODO: delete kmz/csv files too
-    sqlexec(u"DELETE FROM job WHERE archive_time < now() - '1 day'::interval")
+    deleted_jobs = []
+    sqlexec(u"SELECT id, friendly_filename FROM job WHERE archive_time < now() - '%s'::interval" % ARCHIVE_EXPIRE)
+    while True:
+        row = get_common_cursor().fetchone()
+        if row is None:
+            break
+        filename = jobid_ext_to_filename(*row)
+        try:
+            os.unlink(filename)
+        except OSError, err:
+            logging.error('unlinking %s: %s', filename, err)
+        deleted_jobs.append(row[0])
+
+    for jobid in deleted_jobs:
+        sqlexec(u'DELETE FROM job WHERE id=%(id)s', {'id':jobid})
     dbcommit()
 
     sqlexec(u'SELECT id, command, friendly_filename, user_id FROM job WHERE start_time IS NULL ORDER BY queue_time LIMIT 1')
@@ -65,8 +85,9 @@ def runjob():
     sqlexec(u'UPDATE job SET start_time=now() WHERE id=%(jobid)s', {'jobid': jobid})
     dbcommit()
 
-    extension = os.path.splitext(friendly_filename)[-1]
-    output = file('/var/lib/ais/jobs/'+unicode(jobid)+extension, 'wb')
+    filename = jobid_ext_to_filename(jobid, friendly_filename)
+    output = file(filename, 'wb')
+
     p = subprocess.Popen(command, stdout=output, shell=True)
     logging.debug('System process id = %s', p.pid)
     sqlexec(u'UPDATE job SET pid=' + unicode(p.pid) + ' WHERE id=%(jobid)s', {'jobid': jobid})