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:
Julien Danjou
2014-01-31 14:11:31 +01:00
parent e09863b4de
commit 20c75fff2d
2 changed files with 14 additions and 11 deletions

View File

@@ -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)

View File

@@ -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)