diff options
author | Zane Bitter <zbitter@redhat.com> | 2019-01-02 10:14:47 +1300 |
---|---|---|
committer | Zane Bitter <zbitter@redhat.com> | 2019-01-03 09:48:22 +1300 |
commit | 14a53c4d8a9d5605b14a503803859df0d6d4b820 (patch) | |
tree | a2b536fd571436e02c952fa6ab840b57a61938fa | |
parent | cc8b51e1e16f6bdc7d6c0e571e2002e70cde098d (diff) | |
download | oslo-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.py | 8 | ||||
-rw-r--r-- | oslo_utils/tests/test_eventletutils.py | 7 |
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() |