]> git.decadent.org.uk Git - dak.git/commitdiff
Updated update_db.py to use a lockfile properly and to properly wait.
authorMichael Casadevall <sonicmctails@gmail.com>
Tue, 30 Dec 2008 12:47:06 +0000 (07:47 -0500)
committerMichael Casadevall <sonicmctails@gmail.com>
Tue, 30 Dec 2008 12:49:14 +0000 (07:49 -0500)
Signed-off-by: Michael Casadevall <sonicmctails@gmail.com>
ChangeLog
dak/update_db.py

index 1f5e33c3dbfbe0fe0fadb7bab8d1c5d88c87068a..ec9bdc0f73ed2df442ddeb89016ed5148a915f1e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-12-29  Michael Casadevall  <sonicmctails@gmail.com>
+
+       * dak/update_db.py         - Modified to use the lockfile and uncommented sleep() call
+
 2008-12-28  Michael Casadevall  <sonicmctails@gmail.com>
 
         * dak/process_unchecked.py - Modified DM to comply strictly with the DM GR
index 33d3ebb9e64a2d94239f6ba5e37da75bc52a35fd..665724e9520c32895a78f9e26f0ceb1ce51dcbe1 100755 (executable)
@@ -26,7 +26,7 @@
 
 ################################################################################
 
-import psycopg2, sys
+import psycopg2, sys, fcntl, os
 import apt_pkg
 import time
 from daklib import database
@@ -156,8 +156,17 @@ Updates dak's database schema to the lastest version. You should disable crontab
             utils.warn("dak update-db takes no arguments.")
             usage(exit_code=1)
 
+
         self.update_db()
 
+        try:
+            lock_fd = os.open(Cnf["Dinstall::LockFile"], os.O_RDWR | os.O_CREAT)
+            fcntl.lockf(lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
+        except IOError, e:
+            if errno.errorcode[e.errno] == 'EACCES' or errno.errorcode[e.errno] == 'EAGAIN':
+                utils.fubar("Couldn't obtain lock; assuming another 'dak process-unchecked' is already running.")
+
+
 ################################################################################
 
 if __name__ == '__main__':