From 52bc1ab9c89cdca7c2556edb373ce3b59ace0295 Mon Sep 17 00:00:00 2001 From: Petr Malik Date: Tue, 12 Apr 2016 14:55:39 -0400 Subject: [PATCH] Do not remove root user on disable The existence of the root user (with remote access) is used to determine whether root was ever enabled on a restored instance. Do not remove it, just generate a new random password for it. Change-Id: I8a4321ac062b1ec565945b49dbb7c619b6da867f Closes-Bug: 1549600 --- .../notes/mysql-root-fix-35079552e25170ca.yaml | 4 ++++ .../guestagent/datastore/mysql_common/service.py | 5 ++--- trove/tests/unittests/guestagent/test_dbaas.py | 15 ++++++--------- 3 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 releasenotes/notes/mysql-root-fix-35079552e25170ca.yaml diff --git a/releasenotes/notes/mysql-root-fix-35079552e25170ca.yaml b/releasenotes/notes/mysql-root-fix-35079552e25170ca.yaml new file mode 100644 index 0000000000..0033696d0b --- /dev/null +++ b/releasenotes/notes/mysql-root-fix-35079552e25170ca.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - Do not remove MySQL root user on root-disable so that the + proper status can be reported on restore. Bug 1549600 diff --git a/trove/guestagent/datastore/mysql_common/service.py b/trove/guestagent/datastore/mysql_common/service.py index 90a83ee26c..e438116a26 100644 --- a/trove/guestagent/datastore/mysql_common/service.py +++ b/trove/guestagent/datastore/mysql_common/service.py @@ -1062,7 +1062,6 @@ class BaseMySqlRootAccess(object): return user.serialize() def disable_root(self): - """Disable the root user global access + """Reset the root password to an unknown value. """ - with self.local_sql_client(self.mysql_app.get_engine()) as client: - client.execute(text(sql_query.REMOVE_ROOT)) + self.enable_root(root_password=None) diff --git a/trove/tests/unittests/guestagent/test_dbaas.py b/trove/tests/unittests/guestagent/test_dbaas.py index 8d0c45ee0a..87e260bdd1 100644 --- a/trove/tests/unittests/guestagent/test_dbaas.py +++ b/trove/tests/unittests/guestagent/test_dbaas.py @@ -42,7 +42,6 @@ from trove.conductor import api as conductor_api from trove.guestagent.common.configuration import ConfigurationManager from trove.guestagent.common.configuration import ImportOverrideStrategy from trove.guestagent.common import operating_system -from trove.guestagent.common import sql_query from trove.guestagent.datastore.experimental.cassandra import ( service as cass_service) from trove.guestagent.datastore.experimental.couchbase import ( @@ -1669,14 +1668,12 @@ class MySqlRootStatusTest(trove_testtools.TestCase): mock_execute.assert_any_call(TextClauseMatcher( 'UPDATE mysql.user')) - def test_root_disable(self): - with patch.object(self.mock_client, - 'execute', return_value=None) as mock_execute: - # invocation - MySqlRootAccess().disable_root() - # verification - mock_execute.assert_any_call(TextClauseMatcher( - sql_query.REMOVE_ROOT)) + @patch.object(MySqlRootAccess, 'enable_root') + def test_root_disable(self, enable_root_mock): + # invocation + MySqlRootAccess().disable_root() + # verification + enable_root_mock.assert_called_once_with(root_password=None) class MockStats: