def _heartbeat_stopped(self, connection):
     for correlation_id, invocation in six.iteritems(dict(self._pending)):
         if invocation.sent_connection == connection:
             self._handle_exception(
                 invocation,
                 TargetDisconnectedError("%s has stopped heart beating." %
                                         connection))
    def _send(self, invocation, connection, ignore_heartbeat):
        correlation_id = self._next_correlation_id.get_and_increment()
        message = invocation.request
        message.set_correlation_id(correlation_id)
        message.set_partition_id(invocation.partition_id)
        self._pending[correlation_id] = invocation
        if not invocation.timer:
            invocation.timer = self._client.reactor.add_timer_absolute(
                invocation.timeout, invocation.on_timeout)

        if isinstance(invocation, ListenerInvocation):
            self._event_handlers[correlation_id] = invocation

        self.logger.debug("Sending %s to %s", message, connection)

        if not ignore_heartbeat and not connection.heartbeating:
            self._handle_exception(
                invocation,
                TargetDisconnectedError("%s has stopped heart beating." %
                                        connection))
            return

        invocation.sent_connection = connection
        try:
            connection.send_message(message)
        except IOError as e:
            self._handle_exception(invocation, e)
 def _member_removed(self, member):
     self.members.remove(member)
     self._client.connection_manager.close_connection(member.address, TargetDisconnectedError(
         "%s is no longer a member of the cluster" % member))
     for _, removed in list(self.listeners.values()):
         if removed:
             try:
                 removed(member)
             except:
                 logging.exception("Exception in membership listener")
 def _heartbeat_stopped(self, connection):
     if connection.endpoint == self.owner_connection_address:
         self._client.connection_manager.close_connection(
             connection.endpoint,
             TargetDisconnectedError("%s stopped heart beating." %
                                     connection))