Jump to: navigation, search

Trove/volume-data-snapshot-design

< Trove
Revision as of 13:46, 7 March 2014 by Denis M. (talk | contribs) (Created page with "Allow user to perform volume snapshot Description ----------------------------------------------------------------------------------------------------------------------------...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Allow user to perform volume snapshot

Description


Volumes Snapshots

This introduction provides a high level overview of the two basic resources offered by the OpenStack Block Storage service. The first is Volumes and the second is Snapshots which are derived from Volumes.

Volumes

Volumes are allocated block storage resources that can be attached to instances as secondary storage or they can be used as the root store to boot instances. Volumes are persistent R/W Block Storage devices most commonly attached to the Compute node via iSCSI.

Snapshots

A Snapshot in OpenStack Block Storage is a read-only point in time copy of a Volume. The Snapshot can be created from a Volume that is currently in use (via the use of '--force True') or in an available state. The Snapshot can then be used to create a new volume via create from snapshot.


Justification/Benefits:


Data could be backued in two ways: 1. Standart backup strategies (innobackupex, nodetoolsnapshot) + Swift container (already implemented). 2. Snapshot of the attached block storage (not implemented).

Basically, its the another way of backupin' data through standard OpenStack capabilities.


Impacts

Configuration


None, yet.


Database


Volume snapshot table:

  - id: UUID (string)
  - instance_id: UUID (string) (i guess it could be optional)
  - volume_id: UUID (string)
  - datastore: UUID (string)
  - datastore_version: UUID (string)
  - created: Time
  - deleted: Time

Public API


______________________

Create data snapshot ______________________

CLI interface:

trove data-snapshot-create <instance>

HTTP POST: /{tenant_id}/instances/{instance_id}/create_snapshot

Request body:

"body": {}

Response object:

"volume_snapshot": {

    "instance_id": "UUID"
    "volume_id": "UUID",
    "size": "100Mb"
    "datastore": "UUID" or "name",
    "datastore_version": "UUID"
    "created": "2011-01-22T13:25:27-06:00"

} ____________________

Apply data snapshot ____________________

CLI interface:

trove data-snapshot-apply <instance>

HTTP POST: /{tenant_id}/instances/{instance_id}/apply_snapshot

Request body:

"body": {

    "data_snapshot": "UUID"

}

Response object:

None

__________________

List data snapshot __________________

CLI interface:

trove data-snapshot-list

HTTP GET: /{tenant_id}/instances/snapshot

Request body:

"body": {

    "data_snapshot": "UUID"

}

Response object:

[

    "data_snapshot_1": {
         "id": "UUID"
         "instance_id": "UUID"
         "volume_id": "UUID",
    },
    "data_snapshot_2": {
         "id": "UUID"
         "instance_id": "UUID"
         "volume_id": "UUID",
    }

]

_____________________

Show data snapshot _____________________

CLI interface:

trove data-snapshot-show <data_snapshot>

HTTP GET: /{tenant_id}/instances/snapshot/{id}

Request body:

"body": {}

Response object:

    "data_snapshot_1": {
         "id": "UUID"
         "instance_id": "UUID"
         "volume_id": "UUID",
         "size": "100Mb"
         "datastore": "UUID" or "name",
         "datastore_version": "UUID"
         "created": "2011-01-22T13:25:27-06:00"
    },

_____________________

Delete data snapshot _____________________

CLI interface:

trove data-snapshot-delete <data_snapshot>

HTTP POST: /{tenant_id}/instances/snapshot/{id}

Request body:

"body": {}

Response object:

None


Internal API


From trove-api to trove-taskamanger:

Message: create_data_snapshot Parameters: instance_id, volume_id Message type: cast

Message: apply_data_snapshot Parameters: instance_id, volume_id Message type: cast

Message: delete_data_snapshot Parameters: instance_id, volume_id Message type: cast


Guest Agent


From trove-taskamanger to trove-guestagent:

Message: apply_data_snapshot Parameters: device_path (where the volume mounted) Message type: cast