def run_and_check_output(self, *args, **kwargs): eventlet_nonblocking_mode = kwargs.pop( 'eventlet_nonblocking_mode', True) if eventlet_nonblocking_mode: # We have to make sure that the invoked function as well as the # subsequent error handling are performed within the same thread. return _utils.avoid_blocking_call( self._run_and_check_output, *args, **kwargs) else: return self._run_and_check_output(*args, **kwargs)
def run_and_check_output(self, *args, **kwargs): eventlet_nonblocking_mode = kwargs.pop('eventlet_nonblocking_mode', True) if eventlet_nonblocking_mode: # We have to make sure that the invoked function as well as the # subsequent error handling are performed within the same thread. return _utils.avoid_blocking_call(self._run_and_check_output, *args, **kwargs) else: return self._run_and_check_output(*args, **kwargs)
def _listen(self): while self._running: try: # We're using an indefinite timeout here. When the listener is # closed, this will raise an 'invalid handle value' error, # which we're going to ignore. event = _utils.avoid_blocking_call( self._clusapi_utils.get_cluster_notify_v2, self._notif_port_h, timeout_ms=-1) processed_event = self._process_event(event) if processed_event: self._event_queue.put(processed_event) except Exception: if self._running: LOG.exception( "Unexpected exception in event listener loop. " "The cluster event listener will now close.") self._signal_stopped()