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