summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZane Bitter <zbitter@redhat.com>2019-01-02 10:14:47 +1300
committerZane Bitter <zbitter@redhat.com>2019-01-03 09:48:22 +1300
commit14a53c4d8a9d5605b14a503803859df0d6d4b820 (patch)
treea2b536fd571436e02c952fa6ab840b57a61938fa
parentcc8b51e1e16f6bdc7d6c0e571e2002e70cde098d (diff)
downloadoslo-utils-14a53c4d8a9d5605b14a503803859df0d6d4b820.tar.gz
Avoid calling eventlet.event.Event.reset()
The eventlet maintainers have made it clear that calling reset() on an Event is not recommended: https://github.com/eventlet/eventlet/commit/715b2ced5239bbada84c06f488b9c8dda8180230 We don't really need to resend the event to wake up threads, because Event.wait() will return immediately once the event has been sent. So just rely on the internal _set flag to tell us whether we need to send the event. Change-Id: I466aa7cb64308e018598c3bb63a9d0cfbc833adc
-rw-r--r--oslo_utils/eventletutils.py8
-rw-r--r--oslo_utils/tests/test_eventletutils.py7
2 files changed, 6 insertions, 9 deletions
diff --git a/oslo_utils/eventletutils.py b/oslo_utils/eventletutils.py
index 1f90b6e..30fc41c 100644
--- a/oslo_utils/eventletutils.py
+++ b/oslo_utils/eventletutils.py
@@ -165,11 +165,9 @@ class EventletEvent(object):
isSet = is_set
def set(self):
- if self._set:
- self._event.reset()
-
- self._set = True
- self._event.send(True)
+ if not self._set:
+ self._set = True
+ self._event.send(True)
def wait(self, timeout=None):
with timeutils.StopWatch(timeout) as sw:
diff --git a/oslo_utils/tests/test_eventletutils.py b/oslo_utils/tests/test_eventletutils.py
index 4460649..96205f0 100644
--- a/oslo_utils/tests/test_eventletutils.py
+++ b/oslo_utils/tests/test_eventletutils.py
@@ -146,12 +146,11 @@ class EventletUtilsTest(test_base.BaseTestCase):
self.assertTrue(hasattr(e_event, method))
# Ensure set() allows multiple invocations, same as in
- # threading implementation. Must call reset on underlying
- # Event before reusing it
+ # threading implementation.
e_event.set()
- self.assertEqual(0, mock_eventlet.event.Event().reset.call_count)
+ self.assertTrue(e_event.isSet())
e_event.set()
- self.assertEqual(1, mock_eventlet.event.Event().reset.call_count)
+ self.assertTrue(e_event.isSet())
def test_event_no_timeout(self):
event = eventletutils.EventletEvent()