aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Granberg <zorry@gentoo.org>2020-12-28 17:03:12 +0100
committerMagnus Granberg <zorry@gentoo.org>2020-12-28 17:15:59 +0100
commitf43ba834fa9a6ef83d81f6e5512078ac741a6ac6 (patch)
tree4acdd59f18d0d91ddac8582a2cba6cdf3fde06b1 /buildbot_gentoo_ci/scripts
parentWe move to buildbot instead of Openstack (diff)
downloadtinderbox-cluster-f43ba834fa9a6ef83d81f6e5512078ac741a6ac6.tar.gz
tinderbox-cluster-f43ba834fa9a6ef83d81f6e5512078ac741a6ac6.tar.bz2
tinderbox-cluster-f43ba834fa9a6ef83d81f6e5512078ac741a6ac6.zip
Make upgrade_master work
Signed-off-by: Magnus Granberg <zorry@gentoo.org>
Diffstat (limited to 'buildbot_gentoo_ci/scripts')
-rw-r--r--buildbot_gentoo_ci/scripts/update_db.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/buildbot_gentoo_ci/scripts/update_db.py b/buildbot_gentoo_ci/scripts/update_db.py
new file mode 100644
index 0000000..29e9072
--- /dev/null
+++ b/buildbot_gentoo_ci/scripts/update_db.py
@@ -0,0 +1,110 @@
+# This file has parts from Buildbot and is modifyed by Gentoo Authors.
+# Buildbot is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, version 2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Copyright Buildbot Team Members
+# Origins: buildbot.scripts.base.py
+# buildbot.scripts.upgrade_master.py
+# Modifyed by Gentoo Authors.
+# Copyright 2020 Gentoo Authors
+
+import os
+import signal
+import sys
+import traceback
+
+from twisted.internet import defer
+from buildbot.master import BuildMaster
+from buildbot.util import stripUrlPassword
+from buildbot.config import ConfigErrors
+
+from buildbot_gentoo_ci.db import connector
+from buildbot_gentoo_ci.config.config import FileLoader
+
+# Use FileLoader from Gentoo Ci
+def loadConfig(config, configFileName='master.cfg'):
+ if not config['quiet']:
+ print("checking {}".format(configFileName))
+
+ try:
+ master_cfg = FileLoader(
+ config['basedir'], configFileName).loadConfig()
+ except ConfigErrors as e:
+ print("Errors loading configuration:")
+
+ for msg in e.errors:
+ print(" " + msg)
+ return None
+ except Exception:
+ print("Errors loading configuration:")
+ traceback.print_exc(file=sys.stdout)
+ return None
+
+ return master_cfg
+
+#Use the db from Gentoo Ci
+@defer.inlineCallbacks
+def upgradeDatabase(config, master_cfg):
+ if not config['quiet']:
+ print("upgrading database ({})".format(stripUrlPassword(master_cfg.db['db_url'])))
+ print("Warning: Stopping this process might cause data loss")
+
+ def sighandler(signum, frame):
+ msg = " ".join("""
+ WARNING: ignoring signal {}.
+ This process should not be interrupted to avoid database corruption.
+ If you really need to terminate it, use SIGKILL.
+ """.split())
+ print(msg.format(signum))
+
+ prev_handlers = {}
+ try:
+ for signame in ("SIGTERM", "SIGINT", "SIGQUIT", "SIGHUP",
+ "SIGUSR1", "SIGUSR2", "SIGBREAK"):
+ if hasattr(signal, signame):
+ signum = getattr(signal, signame)
+ prev_handlers[signum] = signal.signal(signum, sighandler)
+
+ master = BuildMaster(config['basedir'])
+ master.config = master_cfg
+ master.db.disownServiceParent()
+ db = connector.DBConnector(basedir=config['basedir'])
+ yield db.setServiceParent(master)
+ yield db.setup(master_cfg, check_version=False, verbose=not config['quiet'])
+ yield db.model.upgrade()
+ yield db.masters.setAllMastersActiveLongTimeAgo()
+
+ finally:
+ # restore previous signal handlers
+ for signum, handler in prev_handlers.items():
+ signal.signal(signum, handler)
+
+# Use gentooci.cfg for config
+def upgradeGentooCi(config):
+ master_cfg = loadConfig(config, 'gentooci.cfg')
+ if not master_cfg:
+ return defer.succeed(1)
+ return _upgradeMaster(config, master_cfg)
+
+# No changes
+def _upgradeMaster(config, master_cfg):
+ try:
+ upgradeDatabase(config, master_cfg)
+ except Exception:
+ e = traceback.format_exc()
+ print("problem while upgrading!:\n" + e, file=sys.stderr)
+ return 1
+ else:
+ if not config['quiet']:
+ print("upgrade complete")
+ return 0