[yocto] [AB PATCH 13/27] yocto-start/stop-autobuilder: start buildslave-janitor

Elizabeth Flanagan elizabeth.flanagan at intel.com
Wed Mar 5 10:23:04 PST 2014


From: Beth Flanagan <elizabeth.flanagan at intel.com>

This adds starting and stopping the buildslave janitor
automatically.

Signed-off-by: Beth Flanagan <elizabeth.flanagan at intel.com>
---
 yocto-start-autobuilder | 24 ++++++++++++++----------
 yocto-stop-autobuilder  | 41 +++++++++++++++++++++++++++++++----------
 2 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/yocto-start-autobuilder b/yocto-start-autobuilder
index 0998ee3..b34a60d 100755
--- a/yocto-start-autobuilder
+++ b/yocto-start-autobuilder
@@ -51,14 +51,14 @@ if os.path.isfile(os.path.join(AB_BASE, ".setupdone")):
     parser = SafeConfigParser()
     parser.read('config/autobuilder.conf')
     print
-    print "Reading " + os.path.join(AB_BASE, "conf/autobuilder.conf")
+    print "Reading " + os.path.join(AB_BASE, "config/autobuilder.conf")
     print 
     os.environ["SLAVEBASEDIR"] = AB_BASE.strip('"') + "/yocto-slave"
     print ' Setting %s to %s' % ("SLAVEBASEDIR", AB_BASE + "/yocto-slave")
     for section_name in parser.sections():
         for name, value in parser.items(section_name):
             print ' Setting %s to %s' % (name.upper(), value)
-            os.environ[name.upper()] = value.strip('"')
+            os.environ[name.upper()] = value.strip('"').strip("'")
             if os.environ[name.upper()].endswith("_DIR"):
                 if not os.path.exists(value):
                     try:
@@ -69,16 +69,20 @@ if os.path.isfile(os.path.join(AB_BASE, ".setupdone")):
     print
 
     if sys.argv[1] == "master" or sys.argv[1] == "both":
-
-       os.chdir(os.path.join(AB_BASE, "yocto-master"))
-       subprocess.call(["make", "start"])
-       os.chdir(AB_BASE)
+        os.chdir(os.path.join(AB_BASE, "yocto-master"))
+        subprocess.call(["make", "start"])
+        os.chdir(AB_BASE)
 
     if sys.argv[1] == "slave" or sys.argv[1] == "both":
-
-       os.chdir(os.path.join(AB_BASE, "yocto-slave"))
-       subprocess.call(["make", "start"])
-       os.chdir(AB_BASE)
+        os.chdir(os.path.join(AB_BASE, "yocto-slave"))
+        subprocess.call(["make", "start"])
+        os.chdir(AB_BASE)
+        if os.environ["OPTIMIZED_GIT_CLONE"] == "True":
+            os.chdir(AB_BASE)
+            subprocess.Popen("python bin/buildslave-janitor " + os.path.join(AB_BASE, "config/autobuilder.conf"), 
+                           shell=True, stdin=None, 
+                           stdout=None, stderr=None, 
+                           close_fds=True)
 else:
     print "You have not sourced ./yocto-autobuilder-setup. Please do so first!"
     print ""
diff --git a/yocto-stop-autobuilder b/yocto-stop-autobuilder
index da53c02..5118ed4 100755
--- a/yocto-stop-autobuilder
+++ b/yocto-stop-autobuilder
@@ -20,7 +20,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-import os, sys, optparse, subprocess
+import os, sys, optparse, subprocess, signal, time
 from socket import gethostname
 
 usage  = """%prog [options] master|slave|both   
@@ -40,15 +40,36 @@ if len(args) != 2 or (sys.argv[1] != "both" and sys.argv[1] != "master" and sys.
 AB_BASE=os.path.dirname(os.path.abspath(sys.argv[0]))
 
 if sys.argv[1] == "master" or sys.argv[1] == "both":
-
-   os.chdir(os.path.join(AB_BASE, "yocto-master"))
-   subprocess.call(["make", "stop"])
-   os.chdir(AB_BASE)
+    os.chdir(os.path.join(AB_BASE, "yocto-master"))
+    subprocess.call(["make", "stop"])
+    os.chdir(AB_BASE)
 
 if sys.argv[1] == "slave" or sys.argv[1] == "both":
-
-   os.chdir(os.path.join(AB_BASE, "yocto-slave"))
-   subprocess.call(["make", "stop"])
-   os.chdir(AB_BASE)
-
+    os.chdir(os.path.join(AB_BASE, "yocto-slave"))
+    subprocess.call(["make", "stop"])
+    os.chdir(AB_BASE)
+    if os.path.exists('/tmp/.buildslave-janitor') and os.path.isfile('/tmp/.buildslave-janitor'):
+        print("A prior PID file exists. Attempting to kill.")
+        with open('/tmp/.buildslave-janitor', 'r') as f:
+            pid=f.readline()
+        try: 
+            os.kill(int(pid), signal.SIGKILL)
+            # We need to sleep for a second or two just to give the SIGKILL time
+            time.sleep(2)
+        except OSError as ex:
+            print("""We weren't able to kill the prior buildslave-janitor. Trying again.""")
+            pass
+        # Check if the process that we killed is alive.
+        try: 
+           os.kill(int(pid), 0)
+           raise Exception("""wasn't able to kill the process 
+                              HINT:use signal.SIGKILL or signal.SIGABORT""")
+        except OSError as ex:
+           pass
+    elif os.path.exists('/tmp/.buildslave-janitor') and not os.path.isfile('/tmp/.buildslave-janitor'):
+        raise Exception("""/tmp/.buildslave-janitor is a director. remove it to continue.""")
+    try:
+        os.unlink('/tmp/.buildslave-janitor')
+    except:
+        pass
 
-- 
1.8.1.2




More information about the yocto mailing list