Support metadata for backup

https://blueprints.launchpad.net/cinder/+spec/metadata-for-backup

Add a new “metadata” property for backup resource.

Problem description

Backup resource lost the ability for getting/setting metadata property.

Use Cases

The metadata here for backup is the descriptive metadata. It’s used for discovery and identification. Users could add key-value pairs for the backups to describe them. And users can also filter backups with specified metadata.

Proposed change

  1. The “metadata” property will be added to backup object.

2. A new DB table “backup_metadata” will be created.

-----------------------------------------------------------------------
| created_at | updated_at | deleted_at | id | backup_id | key | value |
-----------------------------------------------------------------------
|            |            |            |    |           |     |       |
-----------------------------------------------------------------------

The primary key is “id”.

3. The backup create/update API will be updated to support “metadata”.

POST /v3/{project_id}/backups
PUT  /v3/{project_id}/backups/{backup_id}

the request body can contain "metadata".
{
    "metadata":{
        "key1": "value1",
        "key2": "value2"
    }
}

4. A set of new APIs will be created. It’s used for backup metadata’s CRUD.

GET    /v3/{project_id}/backups/{backup_id}/metadata
show a backup's metadata

POST   /v3/{project_id}/backups/{backup_id}/metadata
create or replaces metadata for a backup

PUT    /v3/{project_id}/backups/{backup_id}/metadata
replace all the backup's metadata

GET    /v3/{project_id}/backups/{backup_id}/metadata/{key}
show a backup's metadata for a specific key

DELETE /v3/{project_id}/backups/{backup_id}/metadata/{key}
delete a specified metadata

PUT    /v3/{project_id}/backups/{backup_id}/metadata/{key}
update a specified metadata

Alternatives

Leave as it is.

Data model impact

Backup model will be updated with new property “metadata”.

REST API impact

  • The backup create/update API’s request body will be updated.

  • A set of new APIs related to backup metadata will be created.

Security impact

None

Notifications impact

The new APIs will send new notifications as well.

Other end user impact

None

Performance Impact

A new “backup_metadata” table will be created so that the DB conjunction action may let the search performance reduce a little.

Other deployer impact

None

Developer impact

None

Implementation

Assignee(s)

Primary assignee:

wangxiyuan(wxy)

Work Items

  • Add metadata property to backup object and bump its version.

  • Create a new DB table “backup_metadata” and add db upgrade script.

  • Update backup create/update API.

  • Add a tuple of new APIs for backup metadata.

Dependencies

None

Testing

  • Unit tests

Documentation Impact

  • Api-ref need update.

References

None