Difference between revisions of "Cross-region-backup-availability"
(→Internal API) |
(→Guest Agent) |
||
Line 57: | Line 57: | ||
==Guest Agent== | ==Guest Agent== | ||
− | + | No changed in the guestagent will be needed as the bulk of the work will be performed by the taskmanager |
Revision as of 22:10, 1 April 2014
Contents
Description
This feature allows users to create a new backup from a different backup in a different region. The source backup must be stored in a globally accessible storage.
Justification/Benefits
By having this feature, the user can migrate backups from one region to another region. This will allow users to migrate their databases from one region to a different region by simply creating a backup, migrating it to another region and restoring it in that region.
Impacts
Configuration
Most of the configs needed would be credential to access the storage in the different region. If we use swift as the storage strategy and swift is accessible globally and cross-region, we can reuse the same credentials to verify accessibility.
We can also provide a flag to enable this feature. Although this might not be required as it may be handled by the new trove-capabilities feature.
Database
No schema change is required. This feature will simple create new records in the 'backups' table.
Public API
Currently, to create a backup, a POST is sent to /backups specifying the instance ID among other required fields. Trove then create a backup for that instance and stores it. With this feature, the backup is created by providing a location reference that points to the location of the source backup instead of the instance ID. Trove will then fetch the source backup, creates a record and push the backup to its storage.
Here how the API would look: Request:
{ "backup": { "description": "Backup from a different region", "location": "http://region1.trove.com:8080/v1/tenant/database_backups/cdb59309-7a07-44c4-9187-edf1f006546f.xbstream.gz.enc", "instance": null, "name": "backup-from-different-region" } }
Response:
{ "backup": { "created": "2013-05-01T00:00:00", "description": "Backup from a different region", "id": "aeb6fa4c-932d-4acc-a339-cccfb9f300b2", "instance_id": null, "locationRef": "http://region2.trove.com:8080/v1/tenant1/database_backups/aeb6fa4c-932d-4acc-a339-cccfb9f300b2.xbstream.gz.enc", "name": "backup-from-different-region", "status": "COMPLETED", "size": 2.0, "updated": "2013-05-01T00:00:00" } }
CLI interface
For CLI, the backup subcommand will have a new optional 'location' param that will take the location reference of the source backup. Also instance param will be optional.
Internal API
The create_backup RPC method in the taskmanager will be modified to take an optional locationRef value. The taskmanager will use this location to fetch the source backup from globally accessible storage (different region) and push it to the trove's storage.
The implementation will leverage the read()/save() function that we currently used to read and write backups from storage.
Guest Agent
No changed in the guestagent will be needed as the bulk of the work will be performed by the taskmanager