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 signal
import sys
import threading
import time
try:
@@ -35,6 +34,7 @@ except ImportError:
UnsupportedOperation = None
import eventlet
from eventlet import event
from oslo.config import cfg
from openstack.common import eventlet_backdoor
@@ -419,10 +419,11 @@ class Service(object):
self.tg = threadgroup.ThreadGroup(threads)
# signal that the service is done shutting itself down:
self._done = threading.Event()
self._done = event.Event()
def reset(self):
self._done = threading.Event()
# NOTE(Fengqian): docs for Event.reset() recommend against using it
self._done = event.Event()
def start(self):
pass
@@ -431,7 +432,8 @@ class Service(object):
self.tg.stop()
self.tg.wait()
# Signal that service cleanup is done:
self._done.set()
if not self._done.ready():
self._done.send()
def wait(self):
self._done.wait()
@@ -442,7 +444,7 @@ class Services(object):
def __init__(self):
self.services = []
self.tg = threadgroup.ThreadGroup()
self.done = threading.Event()
self.done = event.Event()
def add(self, service):
self.services.append(service)
@@ -456,7 +458,8 @@ class Services(object):
# Each service has performed cleanup, now signal that the run_service
# wrapper threads can now die:
self.done.set()
if not self.done.ready():
self.done.send()
# reap threads:
self.tg.stop()
@@ -466,7 +469,7 @@ class Services(object):
def restart(self):
self.stop()
self.done = threading.Event()
self.done = event.Event()
for restart_service in self.services:
restart_service.reset()
self.tg.add_thread(self.run_service, restart_service, self.done)

View File

@@ -25,11 +25,11 @@ import multiprocessing
import os
import signal
import socket
import threading
import time
import traceback
import eventlet
from eventlet import event
import mock
import mox
@@ -274,11 +274,11 @@ class ServiceRestartTest(ServiceTestBase):
class _Service(service.Service):
def __init__(self):
super(_Service, self).__init__()
self.init = threading.Event()
self.init = event.Event()
self.cleaned_up = False
def start(self):
self.init.set()
self.init.send()
def stop(self):
self.cleaned_up = True
@@ -358,7 +358,7 @@ class LauncherTest(test.BaseTestCase):
launcher.stop()
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
# unit test fixtures in nova bug #1199315)