Reset generic volume group and group snapshot statuses

https://blueprints.launchpad.net/cinder/+spec/reset-cg-and-cgs-status

Problem description

Currently we support the administrator to reset the status of volume, snapshot, backup and so on, but both of the generic volume group and group snapshot could also run into error status, the administrator could only modify the status in database. This is inconvenient for administrator.

Use Cases

The primary use case is for the manual recovery of some sort of issue with generic volume group’s status(snapshot’s inclusive). This is helpful for recovering the two resources from a bad status due to real issues with the system or crashed from bugs.

Proposed change

Take the generic volume group for example, The change can add a new admin generic group action on the resource. The logic could be the same as volume’s action reset_status which already exists, for example, to reset the status of generic group to error, it would be:

POST /v3/{tenant_id}/groups/{group_id}/action
{
    'reset_status': {
       'status': 'error'
    }
}

The ‘status’ should be one of the generic group status,the api will validate the input status and then update the status in database.

Alternatives

We could just leave it as a manual db operation, but that leaves it up to an admin to go manually update the db to achieve the same goal.

Data model impact

None

REST API impact

The API microversion will have to be bumped for the new APIs below.

New GroupAdminController:

POST /v3/{tenant_id}/groups/{group_id}/action

And new admin action for it:

reset_status

New GroupSnapshotAdminController:

POST /v3/{tenant_id}/group_snapshots/{group_snapshot_id}/action

And new admin action for it:

reset_status

They both required the identical request body, and ‘status’ should be passed in as a string:

{
    'reset_status': {
       'status': 'error'
    }
}

For the return codes if the status is not valid we will return a 400 Bad Request, if the resource is not found it will be a 404 Not Found, and will otherwise return a 202.

Cinder-client impact

The cinder-client will add commands to expose these new APIs(use ‘state’ instead of ‘status’ to keep consistency with existed reset commands):

New command to reset generic group status:

group-reset-state <group> –state <state>

the ‘group’ should be name or ID of the specified group.

New command to reset group snapshot status:

group-snapshot-reset-state <group-snapshot> –state <state>

the ‘group-snapshot’ should be name or ID of the specified group snapshot.

Security impact

None

Notifications impact

We will add reset_group_status and reset_group_snapshot_status notifications that will behave the same way as the reset_status notifications. There will be a start and end notification.

Other end user impact

The new API will be exposed to users via the python-cinderclient.

Performance Impact

While it is doing a db operation it should be a very low impact.

Other deployer impact

None

Developer impact

None

Implementation

Assignee(s)

Primary assignee:

tommylikehu(TommyLikeHu@gmail.com)

Work Items

  • Implement new admin action and tests in Cinder.

  • Add support in python-cinderclient.

Dependencies

None

Testing

  • Unit tests in Cinder.

  • Tempest tests in Cinder.

  • Functional tests in Cinder.

  • Unit tests in python-cinderclient.

Documentation Impact

New admin docs to explain how to use the API.

References

None