diff options
author | Zuul <zuul@review.opendev.org> | 2020-11-10 22:13:52 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2020-11-10 22:13:52 +0000 |
commit | 91cd181b63ec8daa5a80118160198bd93818a29f (patch) | |
tree | defc38f19a0f4b4dc65f5371941e0f3a4b75dcac | |
parent | 8d73aee9ee8f30c48a3d6c605f0eabf938df0165 (diff) | |
parent | 29c336c6751dcc6a9080a8b13d6e7c9f7ff92a53 (diff) | |
download | trove-91cd181b63ec8daa5a80118160198bd93818a29f.tar.gz |
Merge "Fix upgrading instance datastore version" into stable/victoria
-rw-r--r-- | trove/guestagent/datastore/mysql_common/service.py | 5 | ||||
-rw-r--r-- | trove/guestagent/utils/docker.py | 8 | ||||
-rw-r--r-- | trove/instance/service.py | 9 |
3 files changed, 22 insertions, 0 deletions
diff --git a/trove/guestagent/datastore/mysql_common/service.py b/trove/guestagent/datastore/mysql_common/service.py index a20aa574..339170bb 100644 --- a/trove/guestagent/datastore/mysql_common/service.py +++ b/trove/guestagent/datastore/mysql_common/service.py @@ -800,6 +800,8 @@ class BaseMySqlApp(service.BaseDbApp): def upgrade(self, upgrade_info): """Upgrade the database.""" new_version = upgrade_info.get('datastore_version') + if new_version == CONF.datastore_version: + return LOG.info('Stopping db container for upgrade') self.stop_db() @@ -807,6 +809,9 @@ class BaseMySqlApp(service.BaseDbApp): LOG.info('Deleting db container for upgrade') docker_util.remove_container(self.docker_client) + LOG.info('Remove unused images before starting new db container') + docker_util.prune_images(self.docker_client) + LOG.info('Starting new db container with version %s for upgrade', new_version) self.start_db(update_db=True, ds_version=new_version) diff --git a/trove/guestagent/utils/docker.py b/trove/guestagent/utils/docker.py index da3ad412..0fdda049 100644 --- a/trove/guestagent/utils/docker.py +++ b/trove/guestagent/utils/docker.py @@ -151,3 +151,11 @@ def get_container_logs(client, name='database', tail=50): container = client.containers.get(name) output = container.logs(tail=tail) return _decode_output(output) + + +def prune_images(client): + """Remove unused images.""" + try: + client.images.prune(filters={'dangling': False}) + except Exception as e: + LOG.warning(f"Prune image failed, error: {str(e)}") diff --git a/trove/instance/service.py b/trove/instance/service.py index e29b3929..848c29c5 100644 --- a/trove/instance/service.py +++ b/trove/instance/service.py @@ -521,6 +521,12 @@ class InstanceController(wsgi.Controller): elif 'datastore_version' in kwargs: datastore_version = ds_models.DatastoreVersion.load( instance.datastore, kwargs['datastore_version']) + + if datastore_version.name == instance.ds_version.name: + LOG.warning(f"Same datastore version {datastore_version.name} " + f"for upgrading") + return + context.notification = ( notification.DBaaSInstanceUpgrade(context, request=req)) with StartNotification(context, instance_id=instance.id, @@ -568,6 +574,9 @@ class InstanceController(wsgi.Controller): if 'access' in body['instance']: args['access'] = body['instance']['access'] + if 'datastore_version' in body['instance']: + args['datastore_version'] = body['instance']['datastore_version'] + self._modify_instance(context, req, instance, **args) return wsgi.Result(None, 202) |