Cluster Upgrade

Trove currently has support for upgrading since instances from one datastore version to another, but that functionality is lacking for clusters. This blueprint outlines a framework and API for implementing upgrades for clusters.

Launchpad Blueprint: https://blueprints.launchpad.net/trove/+spec/cluster-upgrade

Problem Description

Trove does not currently support upgrading clusters to new datastore versions.

Proposed Change

Implement a new cluster-upgrade API for upgrading a cluster to a new datastore version.

This blueprint will outline only the framework and API for implementing cluster upgrades. It will not detail the implementation of upgrade for any specific datastore as the implementation for each datastore may be different.

If your specification proposes any changes to the Trove REST API such as changing parameters which can be returned or accepted, or even the semantics of what happens when a client calls into the API, then you should add the APIImpact flag to the commit message. Specifications with the APIImpact flag can be found with the following query:

https://review.openstack.org/#/q/status:open+project:openstack/trove-specs+message:apiimpact,n,z

Code snippets, etc. should be placed in appropriately marked blocks:

# This is a bash command
ls -lf
# sample code
for count in range(1, 10):
    print count

Configuration

No datastore agnostic configuration settings are envisioned. Setting for specific datastores will be detailed in the specifications for each datastore implementation.

Database

No database changes are envisioned.

Public API

A new REST API will be implemented for cluster-upgrade:

Request:

PATCH v1/{tenant_id}/cluster/{cluster_id}
{
    "cluster":
    {
        "datastore_version": "<datastore_version_uuid>"
    }
}

Response:

{
}

REST return codes:

202 - Accepted.
400 - BadRequest. Server could not understand request.
404 - Not Found. <datastore_version_id> not found.

Public API Security

No security implications.

Python API

A new method will be implemented in the trove API. This method will upgrade a cluster to the image specified by the provided datastore_version.

upgrade(cluster, datastore_version)
cluster

the cluster to upgrade

datastore_version

the datastore version, or its id, to which the trove cluster will be upgraded

CLI (python-troveclient)

A new CLI call will be implemented. This new call will upgrade a cluster to the image specified by the provided datastore_version.

trove cluster-upgrade <cluster> <datastore_version>
cluster

the cluster to upgrade

datastore_version

the datastore version to which the instance will be upgraded

Internal API

The implementation of upgrade for single instances will be used to upgrade the guest agent on an instance.

Guest Agent

For the initial implementation it is expected that the existing pre and post upgrade methods will suffice.

Alternatives

Dashboard Impact (UX)

A new cluster action will be implemented to allow a cluster to be upgraded. Said functionality will be similar to the functionality for a single instance.

Implementation

Assignee(s)

Primary assignee:

6-morgan

Dashboard assignee:

<launchpad-id or None>

Milestones

Target Milestone for completion:

eg. Liberty-1

Work Items

The implementation of this has been posted and is ready for review subject to this spec being approved.

Upgrade Implications

No upgrade implications.

Dependencies

Testing

No int tests will be included with this change as this is only a framework without implementations for specific datastores.

Documentation Impact

What is the impact on the docs team of this change? Some changes might require donating resources to the docs team to have the documentation updated. Don’t repeat details discussed above, but please reference them here.

References

None.

Appendix

None.