)]}'
{"oslo_utils/eventletutils.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"1b3fa1a39da63964b2e1230798909888879e262b","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        self._set \u003d False"},{"line_number":154,"context_line":"        self.clear()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def clear(self):"},{"line_number":157,"context_line":"        old_event \u003d getattr(self, \"_event\", None)"},{"line_number":158,"context_line":"        was_set \u003d self._set"},{"line_number":159,"context_line":"        self._set \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_190f01e2","line":156,"updated":"2019-01-24 01:34:55.000000000","message":"Actually, in light of I466aa7cb64308e018598c3bb63a9d0cfbc833adc, wouldn\u0027t it be enough just to implement clear() like:\n\n  if getattr(self, \u0027_set\u0027, True):\n      self._set \u003d False\n      self._event \u003d _eventlet.event.Event()\n\nIf clear() is called twice in a row (without an intervening set()) there\u0027s no point replacing the old event with a new one and signalling the old one if it had never been triggered in the first place; that\u0027s just pure overhead. This is the only case when we do call send().\n\nThe case where set() is called first followed by clear() is handled by the stopwatch/loop stuff in wait(). I tested with threading.Event and confirmed that if two threads are waiting on an event that subsequently gets set, and one of them wakes up and immediately clears it again, then the other should continue waiting (not wake up and return False from wait()). I believe either implementation is still consistent with that.","commit_id":"4eb61941f811a8ab96745a5ea07e6a4a89fe764c"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"c8076211703548b04672b4ae07868cb13cd4563d","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        self._set \u003d False"},{"line_number":154,"context_line":"        self.clear()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def clear(self):"},{"line_number":157,"context_line":"        old_event \u003d getattr(self, \"_event\", None)"},{"line_number":158,"context_line":"        was_set \u003d self._set"},{"line_number":159,"context_line":"        self._set \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_2c8b931f","line":156,"in_reply_to":"9fdfeff1_190f01e2","updated":"2019-01-24 18:33:56.000000000","message":"Hmm, yeah, making clear a noop if the event was never set does seem reasonable. I guess we have unit tests intended to cover this behavior so we can always try it and see.\n\nI\u0027m inclined to go with this for now and then we can optimize it in a followup. Sound good?","commit_id":"4eb61941f811a8ab96745a5ea07e6a4a89fe764c"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"7a3e4461407ca5b3213a308744e1b259a26befda","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        self._set \u003d False"},{"line_number":154,"context_line":"        self.clear()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def clear(self):"},{"line_number":157,"context_line":"        old_event \u003d getattr(self, \"_event\", None)"},{"line_number":158,"context_line":"        was_set \u003d self._set"},{"line_number":159,"context_line":"        self._set \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_f2cc82bd","line":156,"in_reply_to":"9fdfeff1_2c8b931f","updated":"2019-01-24 20:22:36.000000000","message":"I\u0027m relaxed :)","commit_id":"4eb61941f811a8ab96745a5ea07e6a4a89fe764c"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"3b8412cf4a5a382050ced7bac4043e0e5b1ddb14","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        self._set \u003d False"},{"line_number":154,"context_line":"        self.clear()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def clear(self):"},{"line_number":157,"context_line":"        old_event \u003d getattr(self, \"_event\", None)"},{"line_number":158,"context_line":"        was_set \u003d self._set"},{"line_number":159,"context_line":"        self._set \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_f2b242e6","line":156,"in_reply_to":"9fdfeff1_f2cc82bd","updated":"2019-01-24 20:45:11.000000000","message":"Ibd5324926431fc760c3dd0be064324e3009cc2c2","commit_id":"4eb61941f811a8ab96745a5ea07e6a4a89fe764c"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"1b3fa1a39da63964b2e1230798909888879e262b","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def clear(self):"},{"line_number":157,"context_line":"        old_event \u003d getattr(self, \"_event\", None)"},{"line_number":158,"context_line":"        was_set \u003d self._set"},{"line_number":159,"context_line":"        self._set \u003d False"},{"line_number":160,"context_line":"        self._event \u003d _eventlet.event.Event()"},{"line_number":161,"context_line":"        if old_event is not None and not was_set:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_7f870d63","line":158,"updated":"2019-01-24 01:34:55.000000000","message":"could also use old_event.ready()","commit_id":"4eb61941f811a8ab96745a5ea07e6a4a89fe764c"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"eb263b81c1db1931dcc8d8cfb60aff49ab68fd09","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        was_set \u003d self._set"},{"line_number":159,"context_line":"        self._set \u003d False"},{"line_number":160,"context_line":"        self._event \u003d _eventlet.event.Event()"},{"line_number":161,"context_line":"        if old_event is not None and not was_set:"},{"line_number":162,"context_line":"            old_event.send(True)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def is_set(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_3a98b8be","line":161,"updated":"2019-01-23 19:06:37.000000000","message":"Why to not reuse call_count here?","commit_id":"4eb61941f811a8ab96745a5ea07e6a4a89fe764c"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"cdd055e4306048f57f73e9d10af6ac284bfc0da5","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        was_set \u003d self._set"},{"line_number":159,"context_line":"        self._set \u003d False"},{"line_number":160,"context_line":"        self._event \u003d _eventlet.event.Event()"},{"line_number":161,"context_line":"        if old_event is not None and not was_set:"},{"line_number":162,"context_line":"            old_event.send(True)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def is_set(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_5b3ed4da","line":161,"in_reply_to":"9fdfeff1_3a98b8be","updated":"2019-01-24 11:50:59.000000000","message":"Done","commit_id":"4eb61941f811a8ab96745a5ea07e6a4a89fe764c"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"c8076211703548b04672b4ae07868cb13cd4563d","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        was_set \u003d self._set"},{"line_number":159,"context_line":"        self._set \u003d False"},{"line_number":160,"context_line":"        self._event \u003d _eventlet.event.Event()"},{"line_number":161,"context_line":"        if old_event is not None and not was_set:"},{"line_number":162,"context_line":"            old_event.send(True)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def is_set(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_2c38739e","line":161,"in_reply_to":"9fdfeff1_3a98b8be","updated":"2019-01-24 18:33:56.000000000","message":"For completeness, we discussed this on IRC and the problem is that call_count is a mock construct, not something that is actually part of the event class.","commit_id":"4eb61941f811a8ab96745a5ea07e6a4a89fe764c"}]}
