Jump to: navigation, search

Difference between revisions of "Trove/volume-data-snapshot-design"

(Public API)
(Public API)
Line 39: Line 39:
 
=== Public API ===
 
=== Public API ===
  
 +
 +
==== Core API extension====
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 66: Line 68:
  
 
===== URL =====
 
===== URL =====
''/{tenant_id}/instances/{instance_id}/create_snapshot''
+
''/{tenant_id}/instances/{instance_id}/snapshot'/create'
  
 
===== Request body =====
 
===== Request body =====
Line 96: Line 98:
  
 
===== URL =====
 
===== URL =====
''/{tenant_id}/instances/{instance_id}/apply_snapshot''
+
''/{tenant_id}/instances/{instance_id}/snapshot/apply''
  
 
===== Request body =====
 
===== Request body =====
Line 150: Line 152:
  
 
===== URL =====
 
===== URL =====
''/{tenant_id}/instances/snapshot/{id}''
+
''/{tenant_id}/instances/snapshots/{id}''
  
 
===== Request body =====
 
===== Request body =====
Line 180: Line 182:
  
 
===== URL =====
 
===== URL =====
''/{tenant_id}/instances/snapshot/{id}''
+
''/{tenant_id}/instances/snapshots/{id}''
  
 
===== Request body =====
 
===== Request body =====

Revision as of 14:22, 7 March 2014

Data 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

Core API extension

API call HTTP method Route
Create data snapshot POST /{tenant_id}/instances/{instance_id}/snapshots/create
Apply data snapshot POST /{tenant_id}/instances/{instance_id}/snapshots/apply
List data snapshot GET /{tenant_id}/instances/snapshots
Show data snapshots GET /{tenant_id}/instances/snapshots/{id}
Delete data snapshot POST /{tenant_id}/instances/snapshot/{id}

Create data snapshot


CLI interface
trove data-snapshot-create <instance>
HTTP Method
POST
URL

/{tenant_id}/instances/{instance_id}/snapshot'/create'

Request body
None
Response object
    "data_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 Method
POST
URL

/{tenant_id}/instances/{instance_id}/snapshot/apply

Request body
    "data_snapshot": {
        "data_snapshot": "UUID"
    }
Response object

None


List data snapshot


CLI interface
trove data-snapshot-list
HTTP Method
GET

/{tenant_id}/instances/snapshots

Request body
None
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 Method
GET
URL

/{tenant_id}/instances/snapshots/{id}

Request body
None
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 Method
POST
URL

/{tenant_id}/instances/snapshots/{id}

Request body
None
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