
This change will allow enabling multiple backends within a single Cinder Volume service on Windows. We cannot leverage the oslo_service process launcher as it has some Windows compatibility issues: - it forks - it uses eventlet GreenPipe (not available on Windows) - child processes receive the service objects that should be launched. Those are not serializable, for which reason we're not able to pass them without fork support. For this reason, we'll use the following alternate approach on Windows: - we're adding another cli argument called 'backend_name', which allows requesting a certain backend. - we're adding a Windows process launcher that will just use subprocess.Popen for each backend, using the above mentioned argument to request a specific backend. Thus, for each backend, we'll invoke a command such as the following: cinder-volume.exe --backend_name=<backend_name> --config-file=<conf> - the process launcher will wait for all the subprocesses to exit. In order to ensure that all subprocesses are killed when the parent dies unexpectedly, we're associating Win32 job objects to the child processes, requesting them to be killed when all the job handles are closed. Those handles are kept by the parent process, being closed when the process dies. Depends-On: #Icc2bbe9191e6db685c0fd294abc1d0eb24bc420c Closes-Bug: #1734334 Change-Id: I80fa111fabd46c7802b89fd6136edd8fa8652d47
Release notes
The release notes for a patch should be included in the patch. The intended audience for release notes include deployers, administrators and end-users.
A release note is required if the patch has upgrade or API impact. It is also required if the patch adds a feature or fixes a long-standing or security bug.
Please see https://docs.openstack.org/cinder/latest/contributor/releasenotes.html for more details.