Replace eventlet usage in pxe_filter
Drop the last eventlet usage in pxe filter script for the native threading equivalent. Behavior "should" be identical. Change-Id: I2b490a78288ad477131dbe60ea64d7ea905953ec
This commit is contained in:
@@ -13,9 +13,8 @@
|
|||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import eventlet
|
|
||||||
from eventlet import event
|
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
|
import threading
|
||||||
|
|
||||||
from ironic.common.i18n import _
|
from ironic.common.i18n import _
|
||||||
from ironic.common import metrics_utils
|
from ironic.common import metrics_utils
|
||||||
@@ -52,14 +51,25 @@ class PXEFilterManager:
|
|||||||
raise RuntimeError(_('Attempt to start an already running '
|
raise RuntimeError(_('Attempt to start an already running '
|
||||||
'PXE filter manager'))
|
'PXE filter manager'))
|
||||||
|
|
||||||
self._shutdown = event.Event()
|
self._shutdown = threading.Event()
|
||||||
self._thread = eventlet.spawn_after(_START_DELAY, self._periodic_sync)
|
|
||||||
|
# Delay startup by ``_START_DELAY`` seconds to mimic the former
|
||||||
|
# ``eventlet.spawn_after`` behaviour.
|
||||||
|
def _delayed_start():
|
||||||
|
time.sleep(_START_DELAY)
|
||||||
|
self._periodic_sync()
|
||||||
|
|
||||||
|
self._thread = threading.Thread(
|
||||||
|
target=_delayed_start, name="pxe-sync",
|
||||||
|
daemon=True)
|
||||||
|
|
||||||
|
self._thread.start()
|
||||||
self._started = True
|
self._started = True
|
||||||
|
|
||||||
def del_host(self):
|
def del_host(self):
|
||||||
self._shutdown.send(True)
|
self._shutdown.set()
|
||||||
eventlet.sleep(0)
|
time.sleep(0)
|
||||||
self._thread.wait()
|
self._thread.join()
|
||||||
self._started = False
|
self._started = False
|
||||||
|
|
||||||
def _periodic_sync(self):
|
def _periodic_sync(self):
|
||||||
|
@@ -111,8 +111,10 @@ class TestSync(test_base.DbTestCase):
|
|||||||
|
|
||||||
class TestManager(test_base.DbTestCase):
|
class TestManager(test_base.DbTestCase):
|
||||||
|
|
||||||
@mock.patch('eventlet.spawn_after', lambda delay, func: func())
|
@mock.patch('time.sleep', lambda _: None)
|
||||||
@mock.patch('eventlet.event.Event', autospec=True)
|
@mock.patch('threading.Thread.start',
|
||||||
|
lambda self: self._target(*self._args, **self._kwargs))
|
||||||
|
@mock.patch('threading.Event', autospec=True)
|
||||||
@mock.patch.object(pxe_filter_service.PXEFilterManager, '_sync',
|
@mock.patch.object(pxe_filter_service.PXEFilterManager, '_sync',
|
||||||
autospec=True)
|
autospec=True)
|
||||||
def test_init_and_run(self, mock_sync, mock_event):
|
def test_init_and_run(self, mock_sync, mock_event):
|
||||||
|
Reference in New Issue
Block a user