[Uludag-commits] r15314 - trunk/staj-projeleri/buildfarm/helpers
uludag-commits at pardus.org.tr
uludag-commits at pardus.org.tr
5 Eyl 2007 Çar 13:40:22 EEST
Author: ozan.caglayan
Date: Wed Sep 5 13:40:21 2007
New Revision: 15314
Modified:
trunk/staj-projeleri/buildfarm/helpers/qmanager.py
Log:
finished implementation of locks
Modified: trunk/staj-projeleri/buildfarm/helpers/qmanager.py
=================================================================
--- trunk/staj-projeleri/buildfarm/helpers/qmanager.py (original)
+++ trunk/staj-projeleri/buildfarm/helpers/qmanager.py Wed Sep 5 13:40:21 2007
@@ -98,24 +98,23 @@
self.__deserialize__(self.waitQueue, "waitQueue")
def __tryToLock__(self, depth):
- # find the caller of the caller
- # this method will always be called from these 6 methods:
- # transferToWaitQueue(),transferToWorkQueue()
- # appendToWaitQueue(),appendToWorkQueue()
- # removeFromWaitQueue(),removeFromWorkQueue()
+ # find the caller info
# if the request to this function from stack depth 'depth'
# is coming from the xmlrpc client, the method will try to acquire
# the lock and raise exception if unsuccessful.
+ #
+ # 0: Acquired the lock (Must release it in the caller)
+ # 1: Can't acquire the lock
+ # 2: Don't need to acquire the lock (Method is called from this module)
f = sys._getframe(depth)
methodName = f.f_code.co_name
if methodName == "_dispatch":
try:
self.locks["build"].lock(timeout=0)
- print "brdaim"
- return True
+ return 0
except:
- return False
- return True
+ return 1
+ return 2
# Getter functions can't brake the integrity of the queues.
def getWorkQueue(self):
@@ -127,26 +126,33 @@
return self.waitQueue
def removeFromWaitQueue(self, pspec):
- if not self.__tryToLock__(2):
+ lock = self.__tryToLock__(2)
+ if lock == 1:
return 1
self.__initWaitQueueFromFile__()
if self.waitQueue.__contains__(pspec):
self.waitQueue.remove(pspec)
self.__serialize__(self.waitQueue, "waitQueue")
+ if lock == 0:
+ self.locks['build'].unlock()
return 0
- self.locks['build'].unlock()
+ if lock == 0:
+ self.locks['build'].unlock()
return 2
def removeFromWorkQueue(self, pspec):
- if not self.__tryToLock__(2):
+ lock = self.__tryToLock__(2)
+ if lock == 1:
return 1
self.__initWorkQueueFromFile__()
if self.workQueue.__contains__(pspec):
self.workQueue.remove(pspec)
self.__serialize__(self.workQueue, "workQueue")
- #self.locks['build'].unlock()
+ if lock == 0:
+ self.locks['build'].unlock()
return 0
- #self.locks['build'].unlock()
+ if lock == 0:
+ self.locks['build'].unlock()
return 2
def appendToWorkQueue(self, pspec, checkIfExists=False):
@@ -154,7 +160,8 @@
# 1: Buildfarm is busy
# 2: Package doesn't exist
# 3: Package is already in the queue
- if not self.__tryToLock__(2):
+ lock = self.__tryToLock__(2)
+ if lock == 1:
return 1
if checkIfExists:
if not os.path.isfile(os.path.join(config.localPspecRepo, pspec)):
@@ -165,9 +172,11 @@
if not self.workQueue.__contains__(pspec):
self.workQueue.append(pspec)
self.__serialize__(self.workQueue, "workQueue")
- self.locks['build'].unlock()
+ if lock == 0:
+ self.locks['build'].unlock()
return 0
- self.locks['build'].unlock()
+ if lock == 0:
+ self.locks['build'].unlock()
return 3
# Can't be invoked from clients so doesn't need introspection.
@@ -180,7 +189,8 @@
return False
def transferToWorkQueue(self, pspec):
- if not self.__tryToLock__(2):
+ lock = self.__tryToLock__(2)
+ if lock == 1:
return 1
self.__initWaitQueueFromFile__()
if self.waitQueue.__contains__(pspec) and self.appendToWorkQueue(pspec):
@@ -189,12 +199,17 @@
return 2
def transferToWaitQueue(self, pspec):
- if not self.__tryToLock__(2):
+ lock = self.__tryToLock__(2)
+ if lock == 1:
return 1
self.__initWorkQueueFromFile__()
if self.workQueue.__contains__(pspec) and self.appendToWaitQueue(pspec):
self.removeFromWorkQueue(pspec)
+ if lock == 0:
+ self.locks['build'].unlock()
return 0
+ if lock == 0:
+ self.locks['build'].unlock()
return 2
def buildArchive(self, dirname, filename, d, username=""):
Uludag-commits mesaj listesiyle ilgili
daha fazla bilgi