Beispiel #1
0
    def _connect_handler(self, request):
        assert request.app_id == self._app_id, \
            "Connection failed. Application id mismatch: %s vs %s"%(
                request.app_id, self._app_id)
        assert request.worker_rank == self._rank, \
            "Connection failed. Rank mismatch: %s vs %s"%(
                request.worker_rank, self._rank)
        assert len(request.identifier) > 0, \
            "Connection failed. An identifier should be offered!"

        with self._condition:
            if self._connected:
                # If a duplicated reqeust from peer, just ignore it.
                # If a new connect request from peer, suicide.
                if request.identifier != self._peer_identifier:
                    logging.error('Suicide as peer %s has restarted!',
                                  request.identifier)
                    os._exit(138)  # Tell Scheduler to restart myself
            else:
                self._peer_identifier = request.identifier
                self._connected = True
                self._condition.notifyAll()

        return tws_pb.ConnectResponse(app_id=self._app_id,
                                      worker_rank=self._rank)
Beispiel #2
0
    def _connect_handler(self, request):
        assert self._role == 'follower', \
            "Leader does not accept connect request"
        assert request.app_id == self._app_id, \
            "Connection failed. Application id mismatch: %s vs %s"%(
                request.app_id, self._app_id)
        assert request.worker_rank == self._rank, \
            "Connection failed. Rank mismatch: %s vs %s"%(
                request.worker_rank, self._rank)

        with self._condition:
            assert not self._connected, "Already connected"
            self._connected = True
            self._condition.notifyAll()

        return tws_pb.ConnectResponse(app_id=self._app_id,
                                      worker_rank=self._rank)