Oslo Service Workers for Windows¶
The goal of this blueprint is implement a way which will allow OpenStack services to run under Windows.
Currently, oslo_service project has a couple of Linux specific implementations, which makes it impossible to use under Windows. A few examples would be service.ProcessLauncher, which uses:
eventlet.greenio.GreenPipe, which it cannot be used, as it tries to set the pipe as non-blocking, mechanism that does not exist in Windows. 
os.fork, which does not exist in Windows. 
An alternative option for forking would be spawning subprocesses by using the multiprocessing module, which avoids the GIL problem. 
Multiprocessing module still forks the process on Linux systems, which means that the behaviour will remain consistent with the current implementation.
The proposed change is that service.ProcessLauncher to spawn mutliprocessing.Process objects as service workers instead.
Cygwin can be used under Windows , which is a collection of tools providing similar functionality to a “Linux distribution on Windows”.
The problem is, forking in Cygwin is known to be problematic and inefficient, as it does not map well on top of the WIN32 API. 
Impact on Existing APIs¶
None, functionality and performance should not change for Linux.
CI testing will be performed by Jenkins for Linux and Hyper-V CI for Windows.
Testing should be done for both Python 2.7 and 3.4, as the implementation of the multiprocessing module differs greatly. Needed in order not to introduce regressions for a certain Python version.
- Primary assignee:
Claudiu Belu <firstname.lastname@example.org>
Target Milestone for completion:
As per Proposed Change.
The current services that use the oslo_services module.
Anticipated API Stabilization¶
Version might be different for Python 2.7 and 3.4.
-  GreenIO exception
-  os.fork available only on Unix.
-  multiprocessing module
-  Cygwin
-  Cygwin fork issues:
This work is licensed under a Creative Commons Attribution 3.0 Unported License. http://creativecommons.org/licenses/by/3.0/legalcode