Revert "service: replace eventlet event by threading"
This reverts commit f08f6ba7e80729fb6028b24568da0f651a75fcd6. This was a terrible idea: as soon as you don't monkey patch threading, this does not work as expected in the end. So it's better to say that it's explicitly eventlet mechanisms that are required, at least for now. Conflicts: tests/unit/test_service.py Partial-Bug: #1274044 Change-Id: I4d4f112d4550d912c4f81e62bc9a4714cf117384
This commit is contained in:
@@ -23,7 +23,6 @@ import os
|
|||||||
import random
|
import random
|
||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
import threading
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -35,6 +34,7 @@ except ImportError:
|
|||||||
UnsupportedOperation = None
|
UnsupportedOperation = None
|
||||||
|
|
||||||
import eventlet
|
import eventlet
|
||||||
|
from eventlet import event
|
||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
|
|
||||||
from openstack.common import eventlet_backdoor
|
from openstack.common import eventlet_backdoor
|
||||||
@@ -419,10 +419,11 @@ class Service(object):
|
|||||||
self.tg = threadgroup.ThreadGroup(threads)
|
self.tg = threadgroup.ThreadGroup(threads)
|
||||||
|
|
||||||
# signal that the service is done shutting itself down:
|
# signal that the service is done shutting itself down:
|
||||||
self._done = threading.Event()
|
self._done = event.Event()
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self._done = threading.Event()
|
# NOTE(Fengqian): docs for Event.reset() recommend against using it
|
||||||
|
self._done = event.Event()
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
pass
|
pass
|
||||||
@@ -431,7 +432,8 @@ class Service(object):
|
|||||||
self.tg.stop()
|
self.tg.stop()
|
||||||
self.tg.wait()
|
self.tg.wait()
|
||||||
# Signal that service cleanup is done:
|
# Signal that service cleanup is done:
|
||||||
self._done.set()
|
if not self._done.ready():
|
||||||
|
self._done.send()
|
||||||
|
|
||||||
def wait(self):
|
def wait(self):
|
||||||
self._done.wait()
|
self._done.wait()
|
||||||
@@ -442,7 +444,7 @@ class Services(object):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.services = []
|
self.services = []
|
||||||
self.tg = threadgroup.ThreadGroup()
|
self.tg = threadgroup.ThreadGroup()
|
||||||
self.done = threading.Event()
|
self.done = event.Event()
|
||||||
|
|
||||||
def add(self, service):
|
def add(self, service):
|
||||||
self.services.append(service)
|
self.services.append(service)
|
||||||
@@ -456,7 +458,8 @@ class Services(object):
|
|||||||
|
|
||||||
# Each service has performed cleanup, now signal that the run_service
|
# Each service has performed cleanup, now signal that the run_service
|
||||||
# wrapper threads can now die:
|
# wrapper threads can now die:
|
||||||
self.done.set()
|
if not self.done.ready():
|
||||||
|
self.done.send()
|
||||||
|
|
||||||
# reap threads:
|
# reap threads:
|
||||||
self.tg.stop()
|
self.tg.stop()
|
||||||
@@ -466,7 +469,7 @@ class Services(object):
|
|||||||
|
|
||||||
def restart(self):
|
def restart(self):
|
||||||
self.stop()
|
self.stop()
|
||||||
self.done = threading.Event()
|
self.done = event.Event()
|
||||||
for restart_service in self.services:
|
for restart_service in self.services:
|
||||||
restart_service.reset()
|
restart_service.reset()
|
||||||
self.tg.add_thread(self.run_service, restart_service, self.done)
|
self.tg.add_thread(self.run_service, restart_service, self.done)
|
||||||
|
|||||||
@@ -25,11 +25,11 @@ import multiprocessing
|
|||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
import socket
|
import socket
|
||||||
import threading
|
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
import eventlet
|
import eventlet
|
||||||
|
from eventlet import event
|
||||||
import mock
|
import mock
|
||||||
import mox
|
import mox
|
||||||
|
|
||||||
@@ -274,11 +274,11 @@ class ServiceRestartTest(ServiceTestBase):
|
|||||||
class _Service(service.Service):
|
class _Service(service.Service):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(_Service, self).__init__()
|
super(_Service, self).__init__()
|
||||||
self.init = threading.Event()
|
self.init = event.Event()
|
||||||
self.cleaned_up = False
|
self.cleaned_up = False
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self.init.set()
|
self.init.send()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self.cleaned_up = True
|
self.cleaned_up = True
|
||||||
@@ -358,7 +358,7 @@ class LauncherTest(test.BaseTestCase):
|
|||||||
|
|
||||||
launcher.stop()
|
launcher.stop()
|
||||||
self.assertTrue(svc.cleaned_up)
|
self.assertTrue(svc.cleaned_up)
|
||||||
self.assertTrue(svc._done.is_set())
|
self.assertTrue(svc._done.ready())
|
||||||
|
|
||||||
# make sure stop can be called more than once. (i.e. play nice with
|
# make sure stop can be called more than once. (i.e. play nice with
|
||||||
# unit test fixtures in nova bug #1199315)
|
# unit test fixtures in nova bug #1199315)
|
||||||
|
|||||||
Reference in New Issue
Block a user