[Uludag-commits] r15268 - trunk/staj-projeleri/buildfarm/helpers
uludag-commits at pardus.org.tr
uludag-commits at pardus.org.tr
3 Eyl 2007 Pzt 14:21:15 EEST
Author: ozan.caglayan
Date: Mon Sep 3 14:21:15 2007
New Revision: 15268
Modified:
trunk/staj-projeleri/buildfarm/helpers/qmanager.py
Log:
changed the method of locking. removed unnecessary parts. added well-defined return values for some import functions
Modified: trunk/staj-projeleri/buildfarm/helpers/qmanager.py
=================================================================
--- trunk/staj-projeleri/buildfarm/helpers/qmanager.py (original)
+++ trunk/staj-projeleri/buildfarm/helpers/qmanager.py Mon Sep 3 14:21:15 2007
@@ -17,8 +17,6 @@
from shutil import copy as shutilCopy
from copy import copy as shallowCopy
-from comar.utility import FileLock
-
""" BuildFarm Modules """
import config
import dependency
@@ -27,6 +25,7 @@
""" Helpers """
from helpers import pisiinterface
+from comar.utility import FileLock
""" Gettext Support """
import gettext
@@ -38,7 +37,8 @@
def __init__(self):
self.locks = {"waitQueue" : FileLock("%s/waitQueue.lock" % config.workDir),
- "workQueue" : FileLock("%s/workQueue.lock" % config.workDir)}
+ "workQueue" : FileLock("%s/workQueue.lock" % config.workDir),
+ "build" : FileLock("%s/build.lock" % config.workDir)}
self.workQueue = []
self.waitQueue = []
@@ -73,7 +73,7 @@
self.locks[fileName].unlock()
def __deserialize__(self, queueName, fileName):
- self.locks[fileName].lock(shared=True)
+ self.locks[fileName].lock()
try:
queue = open(os.path.join(config.workDir, fileName), "r")
except IOError:
@@ -104,11 +104,7 @@
def removeFromWaitQueue(self, pspec):
self.__initWaitQueueFromFile__()
- if pspec == "all" and self.waitQueue != []:
- self.waitQueue = []
- self.__serialize__(self.waitQueue, "waitQueue")
- return True
- elif self.waitQueue.__contains__(pspec):
+ if self.waitQueue.__contains__(pspec):
self.waitQueue.remove(pspec)
self.__serialize__(self.waitQueue, "waitQueue")
return True
@@ -116,28 +112,26 @@
def removeFromWorkQueue(self, pspec):
self.__initWorkQueueFromFile__()
- if pspec == "all" and self.workQueue != []:
- self.workQueue = []
- self.__serialize__(self.workQueue, "workQueue")
- return True
- elif self.workQueue.__contains__(pspec):
+ if self.workQueue.__contains__(pspec):
self.workQueue.remove(pspec)
- # serialize'da patliyor buildPackages()
self.__serialize__(self.workQueue, "workQueue")
return True
return False
def appendToWorkQueue(self, pspec, checkIfExists=False):
+ # 0: Successful
+ # 1: Package doesn't exist
+ # 2: Package is already in the queue
if checkIfExists:
if not os.path.isfile(os.path.join(config.localPspecRepo, pspec)):
- return False
+ return 1
self.__initWorkQueueFromFile__()
if not self.workQueue.__contains__(pspec):
self.workQueue.append(pspec)
self.__serialize__(self.workQueue, "workQueue")
- return True
- return False
+ return 0
+ return 2
def appendToWaitQueue(self, pspec):
self.__initWaitQueueFromFile__()
@@ -155,6 +149,10 @@
return False
def transferToWaitQueue(self, pspec):
+ f = sys._getframe(1)
+ methodName = f.f_code.co_name
+ print methodName
+
self.__initWorkQueueFromFile__()
if self.workQueue.__contains__(pspec) and self.appendToWaitQueue(pspec):
self.removeFromWorkQueue(pspec)
@@ -163,12 +161,6 @@
def buildArchive(self, dirname, filename, d, username=""):
- def getPspecList(dirname):
- # Searchs the dirname and returns a list of pspec.xml's
- root = os.path.normpath("%s/%s/%s" % (config.remoteWorkDir, username, dirname))
-
- # Search the root hierarchy
-
def extractArchive(filename, d):
from subprocess import call
dir = os.path.join(config.remoteWorkDir, username)
@@ -188,21 +180,29 @@
return True
def buildPackages(self):
-
+ # Return values are interpreted by the client
+ # 0: Successful
+ # 1: Buildfarm is busy
+ # 2: Empty work queue
+ # 3: Finished with errors
+
+ try:
+ self.locks["build"].lock(timeout=0)
+ except:
+ return 1
+
sys.excepthook = self.__handle_exception__
queue = shallowCopy(self.getWorkQueue())
if len(queue) == 0:
logger.info(_("Work queue is empty..."))
- return True
-
- self.locks["workQueue"].lock(shared=True)
- self.locks["waitQueue"].lock(shared=True)
+ self.locks["build"].unlock()
+ return 2
logger.raw(_("QUEUE"))
- logger.info(_("Work Queue: %s") % (self.getWorkQueue()))
- sortedQueue = self.getWorkQueue()[:]
+ logger.info(_("Work Queue: %s") % (queue))
+ sortedQueue = queue[:]
sortedQueue.sort()
# mailer.info(_("I'm starting to compile following packages:\n\n%s") % "\n".join(sortedQueue))
logger.raw()
@@ -226,8 +226,6 @@
try:
(newBinaryPackages, oldBinaryPackages) = pisi.build(pspec)
except Exception, e:
- self.locks["workQueue"].unlock()
- self.locks["waitQueue"].unlock()
self.transferToWaitQueue(pspec)
errmsg = _("Error occured for '%s' in BUILD process:\n %s") % (pspec, e)
logger.error(errmsg)
@@ -238,8 +236,6 @@
logger.info(_("Installing: %s" % os.path.join(config.workDir, p)))
pisi.install(os.path.join(config.workDir, p))
except Exception, e:
- self.locks["workQueue"].unlock()
- self.locks["waitQueue"].unlock()
self.transferToWaitQueue(pspec)
errmsg = _("Error occured for '%s' in INSTALL process: %s") % (os.path.join(config.workDir, p), e)
logger.error(errmsg)
@@ -247,9 +243,6 @@
newBinaryPackages.remove(p)
self.__removeBinaryPackageFromWorkDir__(p)
else:
- self.locks["workQueue"].unlock()
- self.locks["waitQueue"].unlock()
- print "hede"
self.removeFromWorkQueue(pspec)
self.__movePackages__(newBinaryPackages, oldBinaryPackages)
finally:
@@ -261,13 +254,25 @@
if self.getWaitQueue():
# mailer.info(_("Queue finished with problems and those packages couldn't be compiled:\n\n%s\n") % "\n".join(self.getWaitQueue()))
- return self.getWaitQueue()
+ self.workQueue += self.waitQueue
+ self.waitQueue = []
+ self.__del__()
+ self.locks["build"].unlock()
+ return 3
else:
# mailer.info(_("Queue finished without a problem!..."))
pass
- return True
+
+ self.locks["build"].unlock()
+ return 0
def buildIndex(self):
+
+ try:
+ self.locks["build"].lock(timeout=0)
+ except:
+ return 1
+
logger.raw()
logger.info(_("Generating PiSi Index..."))
@@ -286,7 +291,9 @@
os.chdir(current)
# FIXME: handle indexing errors
- return True
+
+ self.locks["build"].unlock()
+ return 0
def __movePackages__(self, newBinaryPackages, oldBinaryPackages):
# sanitaze input
Uludag-commits mesaj listesiyle ilgili
daha fazla bilgi