| Index: scripts/launch_master.py
|
| diff --git a/scripts/launch_master.py b/scripts/launch_master.py
|
| deleted file mode 100644
|
| index 4506b19cb1243df0790fc00511537ed6dc1c4224..0000000000000000000000000000000000000000
|
| --- a/scripts/launch_master.py
|
| +++ /dev/null
|
| @@ -1,127 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -
|
| -""" Repeatedly launch the build master in an infinite loop, updating the source
|
| -between launches. This script is intended to be run at boot time. """
|
| -
|
| -
|
| -import os
|
| -import socket
|
| -import subprocess
|
| -import sys
|
| -import time
|
| -
|
| -BUILDBOT_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__),
|
| - os.pardir))
|
| -sys.path.append(os.path.join(BUILDBOT_PATH, 'site_config'))
|
| -sys.path.append(os.path.join(BUILDBOT_PATH, 'third_party', 'chromium_buildbot',
|
| - 'site_config'))
|
| -
|
| -import config_private
|
| -
|
| -
|
| -# File where the PID of the running master is stored
|
| -PID_FILE = 'twistd.pid'
|
| -
|
| -# Maximum time (in seconds) to wait for PID_FILE to be written after the master
|
| -# is launched. If PID_FILE is not written by then, we assume an error occurred.
|
| -PID_TIMEOUT = 10.0
|
| -
|
| -
|
| -def _SyncSources():
|
| - """ Run 'gclient sync' on the buildbot sources. """
|
| - path_to_gclient = os.path.join(BUILDBOT_PATH, 'third_party', 'depot_tools',
|
| - 'gclient.py')
|
| - cmd = ['python', path_to_gclient, 'sync']
|
| - if not subprocess.call(cmd) == 0:
|
| - # Don't throw an exception or quit, since we want to keep the master running
|
| - print 'WARNING: Failed to update sources.'
|
| -
|
| -
|
| -def _LaunchMaster():
|
| - """ Launch the build master and return its PID. """
|
| - # Make sure the master is stopped.
|
| - subprocess.call(['make', 'stop'])
|
| -
|
| - # Launch the master
|
| - cmd = ['make', 'start']
|
| - if not os.environ.get('TESTING_MASTER'):
|
| - for master in config_private.Master.valid_masters:
|
| - if socket.getfqdn() == master.master_fqdn:
|
| - master_name = master.__name__
|
| - print 'Using master %s' % master_name
|
| - os.environ['TESTING_MASTER'] = master_name
|
| - break
|
| - else:
|
| - print 'Could not find a matching production master. Using default.'
|
| - subprocess.call(cmd)
|
| -
|
| - # Wait for the pid file to be written, then use it to obtain the master's pid
|
| - pid_file = None
|
| - start_time = time.time()
|
| - while not pid_file:
|
| - try:
|
| - pid_file = open(PID_FILE)
|
| - except Exception:
|
| - if time.time() - start_time > PID_TIMEOUT:
|
| - raise Exception('Failed to launch master.')
|
| - time.sleep(1)
|
| - pid = str(pid_file.read()).rstrip()
|
| - pid_file.close()
|
| - return pid
|
| -
|
| -
|
| -# TODO(borenet): Share this code with launch_slaves.py.
|
| -def IsRunning(pid):
|
| - """ Determine whether a process with the given PID is running.
|
| -
|
| - pid: string; the PID to test. If pid is None, return False.
|
| - """
|
| - if pid is None:
|
| - return False
|
| - if os.name == 'nt':
|
| - cmd = ['tasklist', '/FI', '"PID eq %s"' % pid]
|
| - output = subprocess.check_output(cmd, stdout=subprocess.PIPE,
|
| - stderr=subprocess.STDOUT)
|
| - is_running = pid in output
|
| - else:
|
| - cmd = ['cat', '/proc/%s/stat' % pid]
|
| - is_running = subprocess.call(cmd, stdout=subprocess.PIPE,
|
| - stderr=subprocess.STDOUT) == 0
|
| - return is_running
|
| -
|
| -
|
| -def _BlockUntilFinished(pid):
|
| - """ Blocks until the given process has finished.
|
| -
|
| - pid: PID of the process to wait for
|
| - """
|
| - while IsRunning(pid):
|
| - time.sleep(1)
|
| -
|
| -
|
| -def _UpdateAndRunMaster():
|
| - """ Update the buildbot sources and run the build master, blocking until it
|
| - finishes. """
|
| - _SyncSources()
|
| - pid = _LaunchMaster()
|
| - print 'Launched build master with PID: %s' % pid
|
| - _BlockUntilFinished(pid)
|
| - print 'Master process has finished.'
|
| -
|
| -
|
| -def main():
|
| - """ Alternately sync the buildbot source and launch the build master. """
|
| - loop = '--noloop' not in sys.argv
|
| - master_path = os.path.join(BUILDBOT_PATH, 'master')
|
| - os.chdir(master_path)
|
| - _UpdateAndRunMaster()
|
| - while loop:
|
| - print 'Restarting the build master.'
|
| - _UpdateAndRunMaster()
|
| -
|
| -if '__main__' == __name__:
|
| - sys.exit(main())
|
|
|