extras-buildsys/server BuildMaster.py, 1.24, 1.25 BuilderManager.py, 1.8, 1.9 UserInterface.py, 1.32, 1.33
Daniel Williams (dcbw)
fedora-extras-commits at redhat.com
Fri Jul 29 06:05:39 UTC 2005
Author: dcbw
Update of /cvs/fedora/extras-buildsys/server
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv17587/server
Modified Files:
BuildMaster.py BuilderManager.py UserInterface.py
Log Message:
2005-07-29 Dan Williams <dcbw at redhat.com>
* server/BuilderManager.py
server/BuildMaster.py
server/UserInterface.py
client/client.py
- Add admin-only pause/unpause commands to the server
Index: BuildMaster.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/BuildMaster.py,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- BuildMaster.py 26 Jul 2005 17:47:24 -0000 1.24
+++ BuildMaster.py 29 Jul 2005 06:05:37 -0000 1.25
@@ -104,6 +104,7 @@
self.builder_manager = builder_manager
self.hostname = hostname
self.should_stop = False
+ self._paused = False
self.repos = {}
for target in config_opts['targets'].keys():
repo = Repo.Repo(target, builder_manager)
@@ -403,23 +404,24 @@
def _have_work(self):
have_work = False
- if not have_work:
- self._new_queue_lock.acquire()
- if len(self._new_queue) > 0:
- have_work = True
- self._new_queue_lock.release()
-
- if not have_work:
- self._restart_queue_lock.acquire()
- if len(self._restart_queue) > 0:
- have_work = True
- self._restart_queue_lock.release()
-
- if not have_work:
- self._checkout_wait_queue_lock.acquire()
- if (self._checkout_num < self.MAX_CHECKOUT_JOBS) and len(self._checkout_wait_queue) > 0:
- have_work = True
- self._checkout_wait_queue_lock.release()
+ if not self._paused:
+ if not have_work:
+ self._new_queue_lock.acquire()
+ if len(self._new_queue) > 0:
+ have_work = True
+ self._new_queue_lock.release()
+
+ if not have_work:
+ self._restart_queue_lock.acquire()
+ if len(self._restart_queue) > 0:
+ have_work = True
+ self._restart_queue_lock.release()
+
+ if not have_work:
+ self._checkout_wait_queue_lock.acquire()
+ if (self._checkout_num < self.MAX_CHECKOUT_JOBS) and len(self._checkout_wait_queue) > 0:
+ have_work = True
+ self._checkout_wait_queue_lock.release()
if not have_work:
self._status_updates_lock.acquire()
@@ -433,8 +435,8 @@
have_work = True
self._archjob_status_updates_lock.release()
- if not have_work and self.builder_manager.have_work():
- have_work = True
+ if not have_work and self.builder_manager.have_work(self._paused):
+ have_work = True
return have_work
@@ -447,23 +449,30 @@
self._building_jobs_lock.release()
return ret_job
+ def pause(self, paused):
+ self._paused = paused
+
+ def is_paused(self):
+ return self._paused
+
def run(self):
while self.should_stop == False:
# Write update status for jobs to the database
self._save_job_status()
- if self.builder_manager.have_work():
- self.builder_manager.process()
+ if self.builder_manager.have_work(self._paused):
+ self.builder_manager.process(self._paused)
# Clean up jobs that have finished
self._process_finished_jobs()
- # Let a few jobs through the checkout_wait gate if needed
- self._process_checkout_wait_jobs()
-
- # Start any new jobs
- self._start_new_jobs()
- self._start_requeued_jobs()
+ if not self._paused:
+ # Let a few jobs through the checkout_wait gate if needed
+ self._process_checkout_wait_jobs()
+
+ # Start any new jobs
+ self._start_new_jobs()
+ self._start_requeued_jobs()
last_time = time.time()
while not self._have_work() and time.time() <= last_time + 5:
Index: BuilderManager.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/BuilderManager.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- BuilderManager.py 25 Jul 2005 19:47:15 -0000 1.8
+++ BuilderManager.py 29 Jul 2005 06:05:37 -0000 1.9
@@ -129,19 +129,19 @@
return builder_list
- def have_work(self):
+ def have_work(self, paused):
avail = False
for builder in self.running_builders:
if builder.available():
avail = True
- if len(self._queue) > 0 and avail:
+ if not paused and len(self._queue) > 0 and avail:
return True
return self._have_work
def builder_gone(self):
self._have_work = True
- def process(self):
+ def process(self, paused):
self._have_work = False
# Deal with dead/unreachable builders
@@ -159,6 +159,10 @@
builder.stop()
self.running_builders.remove(builder)
+ # Don't queue any new jobs if we are paused
+ if paused:
+ return
+
# Deal with new arch jobs
self._queue_lock.acquire()
new_jobs = {}
Index: UserInterface.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/UserInterface.py,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- UserInterface.py 29 Jul 2005 05:14:31 -0000 1.32
+++ UserInterface.py 29 Jul 2005 06:05:37 -0000 1.33
@@ -404,6 +404,16 @@
target_dict = config_opts['targets']
return target_dict.keys()
+ def pause(self, paused):
+ s = "paused"
+ if not paused:
+ s = "unpaused"
+ if paused == self._bm.is_paused():
+ return (-1, "Error: system is already %s." % s)
+ else:
+ self._bm.pause(paused)
+ return (0, "Success, system %s." % s)
+
class UserInterfaceSSLAuth(UserInterface):
"""
@@ -469,6 +479,13 @@
return UserInterface.targets(self)
+ def pause(self, paused):
+ user = AuthedXMLRPCServer.get_authinfo()
+ if not user or not user.server_admin:
+ return (-1, "Insufficient privileges.")
+ return UserInterface.pause(self, paused)
+
+
class UserInterfaceNoAuth(UserInterface):
"""
Allow all operations, NULL authentication
More information about the fedora-extras-commits
mailing list