Driver reinitialization after failure¶
This spec proposes support for reintialization of volume drivers after it fails during startup.
During Cinder initialization, for many reasons, the storage backend might not be ready and responding. In this case, the driver will not be loaded even if the array becomes available right after.
As there is no retry in Cinder volume service, even later the backend storage is ready, Cinder volume service can’t recover by itself. It needs users to restart the volume service manually.
When a Cinder volume service starts, sometimes its corresponding storage services are not ready. But later the storage services become ready. As a result the volume service can’t work properly and can’t recover by itself. But the administrators probably prefer Cinder to automatically recover from the temporary failures without manual intervention of restarting the service.
The proposal is to
Allow reinitialization of a volume driver when it failed to initialize.
Provide a configuration to set the maximum retry numbers.
The interval of retry will exponentially backoff. Every interval is the exponentiation of retry count. The first interval is 1s, second interval is 2s, third interval is 4s, and so on.
Retry will be handled in init_host.
For this, the following additional config option would be needed:
- ‘reinit_driver_count’ (default: 3)
Set the maximum times to reintialize the driver if volume initialization fails. Default number is 3.
We also can differentiate whether it should retry with an exception. Like import error, config error, it may not retry. But the benefit is not very impressive, and implementing the differentiation needs work in every driver. As drivers don’t differentiate such errors from backend storage errors.
Data model impact¶
REST API impact¶
Other end user impact¶
Users don’t need to restart volume service when the initialization of drivers fail on recoverable errors.
Other deployer impact¶
- Primary assignee:
Lisa Li (email@example.com)
Add the option ‘reinit_driver_count’.
Retry to initialize volume drivers when it fails.
Add related unit test cases.
Add unit tests to cover this change.
Add administrator documentation to advertise the option of ‘reinit_driver_count’ for driver reinitialization and explain how this should be used.