Spec: Add checkpoint verification API for Karbor
Change-Id: I6c4bb170fe2fe351cdb5e53a8c5d4f384a653540 Implements: blueprint support-verify-the-checkpoint-api
This commit is contained in:
parent
2b22d5698c
commit
2f037cc34b
|
@ -0,0 +1,288 @@
|
|||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
==========================================================
|
||||
Add checkpoint verification API about protection to Karbor
|
||||
==========================================================
|
||||
|
||||
https://blueprints.launchpad.net/karbor/+spec/support-verify-the-checkpoint-api
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
User want to verify the backup copies in one checkpoint before he restoring new
|
||||
resources from this checkpoint. If the verification about the backup copies in one
|
||||
checkpoint fails, it means that the backup data is corrupted and invalid for recovering.
|
||||
User can not restore the resource from this backup data of the checkpoint.
|
||||
All backup softwares support verify the backup data copes[1] [2]. The verification
|
||||
work can be done in the verification operation of the vendors protection plugins.
|
||||
|
||||
The verification operation for the plugin is optional, most of the plugins should
|
||||
implement a verification operation.
|
||||
For example, in the cinder backup volume plugin, the backup being still in place and
|
||||
the status of backup can be checked in the verification operation of this plugin.
|
||||
Some plugins can and should make sure metadata is accessible from the bank in the
|
||||
verification operation of the plugins.
|
||||
|
||||
|
||||
Use Cases
|
||||
=========
|
||||
|
||||
User want to verify the backup copies in one checkpoint via a new RESTful API before
|
||||
he restoring new resources form this checkpoint.
|
||||
The backup softwares vendors also need karbor protection plugins to support a verification
|
||||
operation, so that they can expose the verification of backup data to users from Karbor
|
||||
protection service.
|
||||
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
1. Add the verification API controller for the Karbor API.
|
||||
Implement the 'create' method of verification API controller.
|
||||
Implement the 'show' method of verification API controller.
|
||||
Implement the 'index' method of verification API controller.
|
||||
|
||||
2. The status of verification resources.
|
||||
VERIFICATION_STATUS_VERIFYING = 'verifying'
|
||||
VERIFICATION_STATUS_SUCCESS = 'success'
|
||||
VERIFICATION_STATUS_ERROR = 'error'
|
||||
|
||||
3. Add a new verification operation for protection plugins
|
||||
|
||||
Add a new VerificationOperation for protection plugins. The verification operation for
|
||||
the plugin is optional, most of the plugins should implement a verification operation.
|
||||
For example, the VerificationOperation of image protection plugin, the backup data in
|
||||
swift bank can be verified by checking the etag of objects in the swift.
|
||||
|
||||
The VerificationOperation of cinder protection plugin, default cinder volume plugin don't
|
||||
support volume backup data verification, cinder has not expose the api about backup
|
||||
data verification. So we can check the backup being still in place and the status of
|
||||
backup resources in Cinder.
|
||||
Some plugins can and should make sure metadata is accessible from the bank in the
|
||||
verification operation of the plugins.
|
||||
|
||||
|
||||
4. Add operation_log for verification API.
|
||||
Add a new verification flow in the protection service of Karbor.
|
||||
If the VerificationOperation about the checkpoint has not run successfully in the
|
||||
verification flow, the status of operation_log object will be set to 'error' in the
|
||||
'revert' method of InitiateVerificationTask. The status of operation_log object will
|
||||
be set to 'success' in the CompleteVerificationTask.
|
||||
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
None
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| id | varchar(36) | NO | PRI | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| project_id | varchar(255) | NO | | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| provider_id | varchar(36) | NO | | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| checkpoint_id | varchar(36) | NO | | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| status | varchar(64) | YES | | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| parameters | Text | YES | | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| resources_status | Text | YES | | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| resources_reason | Text | YES | | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| created_at | Datetime | YES | | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| updated_at | Datetime | YES | | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
| deleted_at | Datetime | YES | | NULL | |
|
||||
+-------------------------+--------------+------+-----+---------+-------+
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
1. Create verification API
|
||||
The request JSON when creating a verification::
|
||||
|
||||
**post** : /v1/{project_id}/verifications
|
||||
```json
|
||||
{
|
||||
"verification": [
|
||||
{
|
||||
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
|
||||
"checkpoint_id": "dcb20606-ad71-40a3-80e4-ef0fafdad0c3",
|
||||
"parameters": {
|
||||
"OS::Cinder::Volume": {
|
||||
},
|
||||
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": {
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
The response JSON when Creating a verification::
|
||||
|
||||
```json
|
||||
{
|
||||
"verification":{
|
||||
"id": "22b82aa7-9179-4c71-bba2-caf5c0e68db7",
|
||||
"project_id": "e486a2f49695423ca9c47e589b948108",
|
||||
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
|
||||
"checkpoint_id": "dcb20606-ad71-40a3-80e4-ef0fafdad0c3",
|
||||
"parameters": {
|
||||
"OS::Cinder::Volume": {
|
||||
},
|
||||
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": {
|
||||
}
|
||||
},
|
||||
"resource_status": {
|
||||
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": "verifying",
|
||||
"OS::Cinder::Volume#98eb847f-9f59-4d54-8b7b-5047bd2fa4c7": "error"
|
||||
},
|
||||
"resource_reason": {
|
||||
"OS::Cinder::Volume#98eb847f-9f59-4d54-8b7b-5047bd2fa4c7": "Backup not found"
|
||||
},
|
||||
"status": "error"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
2. List verifications API
|
||||
The response JSON when listing verifications::
|
||||
|
||||
**get** : /v1/{project_id}/verifications
|
||||
```json
|
||||
{
|
||||
"verifications": [
|
||||
{
|
||||
"id": "22b82aa7-9179-4c71-bba2-caf5c0e68db7",
|
||||
"project_id": "e486a2f49695423ca9c47e589b948108",
|
||||
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
|
||||
"checkpoint_id": "dcb20606-ad71-40a3-80e4-ef0fafdad0c3",
|
||||
"parameters": {
|
||||
"OS::Cinder::Volume": {
|
||||
},
|
||||
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": {
|
||||
}
|
||||
},
|
||||
"resource_status": {
|
||||
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": "verifying",
|
||||
"OS::Cinder::Volume#98eb847f-9f59-4d54-8b7b-5047bd2fa4c7": "error"
|
||||
},
|
||||
"resource_reason": {
|
||||
"OS::Cinder::Volume#98eb847f-9f59-4d54-8b7b-5047bd2fa4c7": "Backup not found"
|
||||
},
|
||||
"status": "error"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
3. Show verifications API
|
||||
The response JSON when showing a verification::
|
||||
|
||||
**get** : /v1/{project_id}/verifications/{verification_id}
|
||||
```json
|
||||
{
|
||||
"verification":{
|
||||
"id": "22b82aa7-9179-4c71-bba2-caf5c0e68db7",
|
||||
"project_id": "e486a2f49695423ca9c47e589b948108",
|
||||
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
|
||||
"checkpoint_id": "dcb20606-ad71-40a3-80e4-ef0fafdad0c3",
|
||||
"parameters": {
|
||||
"OS::Cinder::Volume": {
|
||||
},
|
||||
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": {
|
||||
}
|
||||
},
|
||||
"resource_status": {
|
||||
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": "verifying",
|
||||
"OS::Cinder::Volume#98eb847f-9f59-4d54-8b7b-5047bd2fa4c7": "error"
|
||||
},
|
||||
"resource_reason": {
|
||||
"OS::Cinder::Volume#98eb847f-9f59-4d54-8b7b-5047bd2fa4c7": "Backup not found"
|
||||
},
|
||||
"status": "error"
|
||||
}
|
||||
}
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Add a new RESTful API about verification
|
||||
* Add database data module of verification
|
||||
* Add verification to karbor client
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
Unit tests in Karbor.
|
||||
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
None
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
[1] http://documentation.commvault.com/commvault/v10/article?p=features/data_verification/data_verification.htm
|
||||
|
||||
[2] https://www.veritas.com/content/support/en_US/doc-viewer.123533878-127136857-0.v123545982-127136857.html
|
||||
|
|
@ -33,6 +33,7 @@ Approved Specs
|
|||
policy-in-code
|
||||
freezer-protection-plugin
|
||||
kubernetes-pods-protection-plugin
|
||||
checkpoint-verify-api
|
||||
|
||||
Spec Template
|
||||
-------------
|
||||
|
|
Loading…
Reference in New Issue