File detect-parallel-cobbler-sync.patch of Package cobbler

diff -urN cobbler-2.6.6.orig/cobbler/action_sync.py cobbler-2.6.6/cobbler/action_sync.py
--- cobbler-2.6.6.orig/cobbler/action_sync.py	2014-10-19 13:25:16.000000000 +0200
+++ cobbler-2.6.6/cobbler/action_sync.py	2018-05-08 14:10:19.556736071 +0200
@@ -94,6 +94,32 @@
         if not os.path.exists(self.bootloc):
             utils.die(self.logger,"cannot find directory: %s" % self.bootloc)
 
+        piddir = "/tmp/cobbler-sync"
+        pidfile = piddir + "/pid"
+        try:
+            os.mkdir(piddir)
+        except(OSError):
+            if os.path.exists(piddir):
+                if os.path.exists(pidfile):
+                    with open(pidfile, 'r') as f:
+                        pidstr = f.read()
+                        f.close()
+                        pid = int(pidstr)
+                        try:
+                            os.kill(pid, 0)
+                            self.logger.info("Another instance running!")
+                            return False
+                        except(OSError):
+                            self.logger.info("Stale lock file found! Removing...")
+                            os.remove(pidfile)
+            else:
+                self.logger.info("lockdir creation failed")
+                return False
+
+        pidfd = os.open(pidfile, os.O_CREAT|os.O_WRONLY)
+        os.write(pidfd, str(os.getpid()))
+        os.close(pidfd)
+
         self.logger.info("running pre-sync triggers")
 
         # run pre-triggers...
@@ -154,6 +180,9 @@
         utils.run_triggers(self.api, None, "/var/lib/cobbler/triggers/sync/post/*", logger=self.logger)
         utils.run_triggers(self.api, None, "/var/lib/cobbler/triggers/change/*", logger=self.logger)
 
+        os.remove(pidfile)
+        os.rmdir(piddir)
+
         return True
 
     def make_tftpboot(self):
openSUSE Build Service is sponsored by