diff options
author | Lingxian Kong <anlin.kong@gmail.com> | 2020-11-05 09:44:57 +1300 |
---|---|---|
committer | Lingxian Kong <anlin.kong@gmail.com> | 2020-11-10 12:08:51 +1300 |
commit | 29c336c6751dcc6a9080a8b13d6e7c9f7ff92a53 (patch) | |
tree | 412382b9abb7b442b8f8530caadc6a2c3e1a710a | |
parent | 679cc3adbdba120f25b7cf43ee238d79a0d8147b (diff) | |
download | trove-29c336c6751dcc6a9080a8b13d6e7c9f7ff92a53.tar.gz |
Fix upgrading instance datastore version
Change-Id: I0456688c2e6c72b0312f1f79bb3e68f13fd2cb6e
(cherry picked from commit 59a972b312c8d25ffb46b4a994374490731747ea)
-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 883c1cd3..536d2136 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) |