From b0b92bf171b3f3c1c58beeb8434753380a30c2cf Mon Sep 17 00:00:00 2001 From: SushilKM Date: Wed, 28 May 2014 15:03:45 +0000 Subject: [PATCH] Reports enabled-root for restored instance Reasons: - This condition got missed in one of the earlier patchsets. - When a root-enabled instance's backup is restored, it does not reports to service database that root was enabled for restored instance. Changes: - report_root method added in conductor. - Reports, if root is enabled for restored instance, through conductor. Change-Id: I186398e6651421cecb7169e4eec1d6a8a166ee97 Closes-Bug: #1277745 --- trove/conductor/api.py | 7 +++++++ trove/conductor/manager.py | 4 ++++ trove/guestagent/datastore/mysql/manager.py | 1 + trove/guestagent/datastore/service.py | 9 +++++++++ 4 files changed, 21 insertions(+) diff --git a/trove/conductor/api.py b/trove/conductor/api.py index 1d3fdc64e7..72b5a9e909 100644 --- a/trove/conductor/api.py +++ b/trove/conductor/api.py @@ -51,3 +51,10 @@ class API(proxy.RpcProxy): backup_id=backup_id, sent=sent, **backup_fields)) + + def report_root(self, instance_id, user): + LOG.debug("Making async call to cast report_root for instance: %s" + % instance_id) + self.cast(self.context, self.make_msg("report_root", + instance_id=instance_id, + user=user)) diff --git a/trove/conductor/manager.py b/trove/conductor/manager.py index 136a7623e3..c4a19abf20 100644 --- a/trove/conductor/manager.py +++ b/trove/conductor/manager.py @@ -17,6 +17,7 @@ from trove.common import cfg from trove.common import exception from trove.common.instance import ServiceStatus from trove.conductor.models import LastSeen +from trove.extensions.mysql import models as mysql_models from trove.instance import models as t_models from trove.openstack.common import log as logging from trove.openstack.common import periodic_task @@ -128,3 +129,6 @@ class Manager(periodic_task.PeriodicTasks): LOG.debug("Backup %(key)s: %(value)s" % fields) setattr(backup, k, v) backup.save() + + def report_root(self, context, instance_id, user): + mysql_models.RootHistory.create(context, instance_id, user) diff --git a/trove/guestagent/datastore/mysql/manager.py b/trove/guestagent/datastore/mysql/manager.py index db29c80d62..b48022517d 100644 --- a/trove/guestagent/datastore/mysql/manager.py +++ b/trove/guestagent/datastore/mysql/manager.py @@ -138,6 +138,7 @@ class Manager(periodic_task.PeriodicTasks): MySqlAdmin().enable_root(root_password) elif enable_root_on_restore: app.secure_root(secure_remote_root=False) + MySqlAppStatus.get().report_root('root') else: app.secure_root(secure_remote_root=True) diff --git a/trove/guestagent/datastore/service.py b/trove/guestagent/datastore/service.py index 81dae9a7ae..83fbaf6afb 100644 --- a/trove/guestagent/datastore/service.py +++ b/trove/guestagent/datastore/service.py @@ -154,3 +154,12 @@ class BaseDbStatus(object): return True LOG.error("Time out while waiting for DB status to change!") return False + + def report_root(self, user): + """Use conductor to update the root-enable status.""" + LOG.debug("Casting report_root message to conductor.") + ctxt = context.TroveContext(user=CONF.nova_proxy_admin_user, + auth_token=CONF.nova_proxy_admin_pass) + + conductor_api.API(ctxt).report_root(CONF.guest_id, user) + LOG.debug("Successfully cast report_root.")