[Erp5-report] r44200 luke - /erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Mar 11 17:29:37 CET 2011
Author: luke
Date: Fri Mar 11 17:29:37 2011
New Revision: 44200
URL: http://svn.erp5.org?rev=44200&view=rev
Log:
- change behavoiour and do *NOT* call mysql_install unconditionally
Unfortunately mysql_install dies in case if there is software upgrade.
And from current knowledge the only "portable" way to know that mysql
database was initialised is to check for existence of mysql directory in
datadir, which contains system tables.
Such check assumes that installation went fine and then tries to start
mysql. If installation was not correct mysqld will die, which is
acceptable, as wrapper will exit.
Modified:
erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py
erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/mysql.py
Modified: erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py
URL: http://svn.erp5.org/erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py?rev=44200&r1=44199&r2=44200&view=diff
==============================================================================
--- erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py [utf8] (original)
+++ erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/__init__.py [utf8] Fri Mar 11 17:29:37 2011
@@ -522,9 +522,6 @@ SSLRandomSeed connect builtin
self.substituteTemplate(self.getTemplateFilename('my.cnf.in'),
mysql_conf))
- initialise_command_list = [self.options['mysql_install_binary'],
- '--skip-name-resolve', '--no-defaults',
- '--datadir=%s' % mysql_conf['data_directory']]
mysql_command_list = [self.options['mysql_binary'].strip(),
'--no-defaults', '-B', '--user=root',
'--socket=%s' % mysql_conf['socket'],
@@ -537,11 +534,14 @@ SSLRandomSeed connect builtin
mysql_script]))
self.path_list.extend(zc.buildout.easy_install.scripts([('mysqld',
__name__ + '.mysql', 'runMysql')], self.ws,
- sys.executable, self.wrapper_directory, arguments=[
- initialise_command_list, {
- 'mysqld_binary':self.options['mysqld_binary'],
- 'configuration_file':mysql_conf_path,
- }]))
+ sys.executable, self.wrapper_directory, arguments=[dict(
+ mysql_install_binary=self.options['mysql_install_binary'].strip(),
+ mysqld_binary=self.options['mysqld_binary'].strip(),
+ data_directory=mysql_conf['data_directory'].strip(),
+ mysql_binary=self.options['mysql_binary'].strip(),
+ socket=mysql_conf['socket'].strip(),
+ configuration_file=mysql_conf_path,
+ )]))
self.path_list.extend([mysql_conf_path])
# The return could be more explicit database, user ...
return mysql_conf
Modified: erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/mysql.py
URL: http://svn.erp5.org/erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/mysql.py?rev=44200&r1=44199&r2=44200&view=diff
==============================================================================
--- erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/mysql.py [utf8] (original)
+++ erp5/trunk/utils/slapos.recipe.erp5/src/slapos/recipe/erp5/mysql.py [utf8] Fri Mar 11 17:29:37 2011
@@ -6,25 +6,29 @@ import time
def runMysql(args):
sleep = 60
- initialise_command_list = args[0]
- mysql_conf = args[1]
- mysql_wrapper_list = [mysql_conf['mysqld_binary'],
- '--defaults-file=%s' % mysql_conf['configuration_file']]
- while True:
- # XXX: Protect with proper root password
- popen = subprocess.Popen(initialise_command_list,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- result = popen.communicate()[0]
- if popen.returncode is None or popen.returncode != 0:
- print "Failed to initialise server.\nThe error was: %s" % result
- print "Waiting for %ss and retrying" % sleep
- time.sleep(sleep)
- else:
- print "Mysql properly initialised"
- break
- sys.stdout.flush()
- sys.stderr.flush()
- os.execl(mysql_wrapper_list[0], *mysql_wrapper_list)
+ conf = args[0]
+ mysqld_wrapper_list = [conf['mysqld_binary'], '--defaults-file=%s' %
+ conf['configuration_file']]
+ # we trust mysql_install that if mysql directory is available mysql was
+ # correctly initalised
+ if not os.path.isdir(os.path.join(conf['data_directory'], 'mysql')):
+ while True:
+ # XXX: Protect with proper root password
+ popen = subprocess.Popen([conf['mysql_install_binary'],
+ '--skip-name-resolve', '--no-defaults', '--datadir=%s' %
+ conf['data_directory']],
+ stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ result = popen.communicate()[0]
+ if popen.returncode is None or popen.returncode != 0:
+ print "Failed to initialise server.\nThe error was: %s" % result
+ print "Waiting for %ss and retrying" % sleep
+ time.sleep(sleep)
+ else:
+ print "Mysql properly initialised"
+ break
+ else:
+ print "MySQL already initalised, starting"
+ os.execl(mysqld_wrapper_list[0], *mysqld_wrapper_list)
def updateMysql(args):
More information about the Erp5-report
mailing list