Cinder Volume cannot use multiple backends on Windows

Bug #1734334 reported by Lucian Petrut
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Cinder
Fix Released
Low
Lucian Petrut

Bug Description

Attempting to enable multiple Cinder Volume backends on Windows will fail with the following exception: http://paste.openstack.org/raw/627321/

The reason is that we've bypassed the oslo_service process launcher, which cannot be used on Windows because of the following reasons:
- 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.

The current approach only allows enabling a single backend on Windows.

Changed in cinder:
assignee: nobody → Lucian Petrut (petrutlucian94)
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to cinder (master)

Fix proposed to branch: master
Review: https://review.openstack.org/522806

Changed in cinder:
status: New → In Progress
Eric Harney (eharney)
Changed in cinder:
importance: Undecided → Low
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to cinder (master)

Reviewed: https://review.openstack.org/522806
Committed: https://git.openstack.org/cgit/openstack/cinder/commit/?id=3510f3860481482b2311ef3eef8b5fd6cabb2337
Submitter: Zuul
Branch: master

commit 3510f3860481482b2311ef3eef8b5fd6cabb2337
Author: Lucian Petrut <email address hidden>
Date: Fri Dec 16 17:12:07 2016 +0200

    Windows: allow multiple c-vol backends per service

    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

Changed in cinder:
status: In Progress → Fix Released
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/cinder 12.0.0.0b3

This issue was fixed in the openstack/cinder 12.0.0.0b3 development milestone.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.