From 192668485aa1f4e9f3e1394b438e58e4c9a98927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Nowak?= <luke@nexedi.com> Date: Fri, 11 Mar 2011 16:55:18 +0000 Subject: [PATCH] - implement upgrade of mysql - change how arguments are passed to be explicit and give responsilibty to runner - provide more useful messages git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@44207 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../erp5/src/slapos/recipe/erp5/__init__.py | 12 +++---- .../erp5/src/slapos/recipe/erp5/mysql.py | 36 ++++++++++++------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/slapos/recipe/erp5/src/slapos/recipe/erp5/__init__.py b/slapos/recipe/erp5/src/slapos/recipe/erp5/__init__.py index 6cefd55bf9..5484d05f6d 100644 --- a/slapos/recipe/erp5/src/slapos/recipe/erp5/__init__.py +++ b/slapos/recipe/erp5/src/slapos/recipe/erp5/__init__.py @@ -522,16 +522,16 @@ SSLRandomSeed connect builtin self.substituteTemplate(self.getTemplateFilename('my.cnf.in'), mysql_conf)) - mysql_command_list = [self.options['mysql_binary'].strip(), - '--no-defaults', '-B', '--user=root', - '--socket=%s' % mysql_conf['socket'], - ] mysql_script = pkg_resources.resource_string(__name__, 'template/initmysql.sql.in') % mysql_conf self.path_list.extend(zc.buildout.easy_install.scripts([('mysql_update', __name__ + '.mysql', 'updateMysql')], self.ws, - sys.executable, self.wrapper_directory, arguments=[mysql_command_list, - mysql_script])) + sys.executable, self.wrapper_directory, arguments=[dict( + mysql_script=mysql_script, + mysql_binary=self.options['mysql_binary'].strip(), + mysql_upgrade_binary=self.options['mysql_upgrade_binary'].strip(), + socket=mysql_conf['socket'], + )])) self.path_list.extend(zc.buildout.easy_install.scripts([('mysqld', __name__ + '.mysql', 'runMysql')], self.ws, sys.executable, self.wrapper_directory, arguments=[dict( diff --git a/slapos/recipe/erp5/src/slapos/recipe/erp5/mysql.py b/slapos/recipe/erp5/src/slapos/recipe/erp5/mysql.py index 412c09bc9c..58e454a7a6 100644 --- a/slapos/recipe/erp5/src/slapos/recipe/erp5/mysql.py +++ b/slapos/recipe/erp5/src/slapos/recipe/erp5/mysql.py @@ -1,6 +1,5 @@ import os import subprocess -import sys import time @@ -33,21 +32,34 @@ def runMysql(args): def updateMysql(args): - mysql_command_list = args[0] - mysql_script = args[1] + conf = args[0] sleep = 30 is_succeed = False while True: if not is_succeed: - mysql = subprocess.Popen(mysql_command_list, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - result = mysql.communicate(mysql_script)[0] - if mysql.returncode is None: - mysql.kill() - if mysql.returncode != 0: - print 'Script failed with: %s' % result + mysql_upgrade_list = [conf['mysql_upgrade_binary'], '--no-defaults', '--user=root', '--socket=%s' % conf['socket']] + mysql_upgrade = subprocess.Popen(mysql_upgrade_list, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + result = mysql_upgrade.communicate()[0] + if mysql_upgrade.returncode is None: + mysql_upgrade.kill() + if mysql_upgrade.returncode != 0 and not 'is already upgraded' in result: + print "Command %r failed with result:\n%s" % (mysql_upgrade_list, result) print 'Sleeping for %ss and retrying' % sleep else: - is_succeed = True - print 'Script succesfully run on database, exiting' + if mysql_upgrade.returncode == 0: + print "MySQL database upgraded with result:\n%s" % result + else: + print "No need to upgrade MySQL database" + mysql_list = [conf['mysql_binary'].strip(), '--no-defaults', '-B', '--user=root', '--socket=%s' % conf['socket']] + mysql = subprocess.Popen(mysql_list, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + result = mysql.communicate(conf['mysql_script'])[0] + if mysql.returncode is None: + mysql.kill() + if mysql.returncode != 0: + print 'Command %r failed with:\n%s' % (mysql_list, result) + print 'Sleeping for %ss and retrying' % sleep + else: + is_succeed = True + print 'SlapOS initialisation script succesfully applied on database.' time.sleep(sleep) -- 2.30.9