Exemplo n.º 1
0
    def _receive_request_complete_commit(self,event_uuid):
        '''
        Called by another endpoint on the same host as this endpoint
        to finish the second phase of the commit of active event with
        uuid "uuid."

        Another endpoint (either on the same host as I am or my
        partner) asked me to complete the second phase of the commit
        for an event with uuid event_uuid.
        
        @param {uuid} event_uuid --- The uuid of the event we are
        trying to commit.

        '''
        req_complete_commit_action = (
            waldoServiceActions._ReceiveRequestCompleteCommitAction(
                self,event_uuid,False))

        self._thread_pool.add_service_action(req_complete_commit_action)
Exemplo n.º 2
0
    def _receive_msg_from_partner(self,string_msg):
        '''
        Called by the connection object.

        @param {String} string_msg --- A raw byte string sent from
        partner.  Should be able to deserialize it, convert it into a
        message, and dispatch it as an event.

        Can receive a variety of messages from partner: request to
        execute a sequence block, request to commit a change to a
        peered variable, request to backout an event, etc.  In this
        function, we dispatch depending on message we receive.
        '''
        general_msg = GeneralMessage()
        general_msg.ParseFromString(string_msg)

        if general_msg.HasField('notify_ready'):
            endpoint_uuid = general_msg.notify_ready.endpoint_uuid
            self._receive_partner_ready(endpoint_uuid.data)
        elif general_msg.HasField('notify_of_peered_modified_resp'):
            service_action = waldoServiceActions._ReceivePeeredModifiedResponseMsg(
                self,general_msg.notify_of_peered_modified_resp)
            self._thread_pool.add_service_action(service_action)

        elif general_msg.HasField('timestamp_updated'):
            clock_timestamp = general_msg.timestamp_updated.data
            self._clock.got_partner_timestamp(clock_timestamp)            
            
        elif general_msg.HasField('request_sequence_block'):
            service_action =  waldoServiceActions._ReceivePartnerMessageRequestSequenceBlockAction(
                self,general_msg.request_sequence_block)
            self._thread_pool.add_service_action(service_action)
            
        elif general_msg.HasField('notify_of_peered_modified'):
            service_action = waldoServiceActions._ReceivePeeredModifiedMsg(
                self,general_msg.notify_of_peered_modified)
            self._thread_pool.add_service_action(service_action)

        elif general_msg.HasField('stop'):
            t = threading.Thread(target= self._handle_partner_stop_msg,args=(general_msg.stop,))
            t.start()

        elif general_msg.HasField('first_phase_result'):
            if general_msg.first_phase_result.successful:
                self._receive_first_phase_commit_successful(
                    general_msg.first_phase_result.event_uuid.data,
                    general_msg.first_phase_result.sending_endpoint_uuid.data,
                    [x.data for x  in general_msg.first_phase_result.children_event_endpoint_uuids])
            else:
                self._receive_first_phase_commit_unsuccessful(
                    general_msg.first_phase_result.event_uuid.data,
                    general_msg.first_phase_result.sending_endpoint_uuid.data)

        elif general_msg.HasField('additional_subscriber'):
            self._receive_additional_subscriber(
                general_msg.additional_subscriber.event_uuid.data,
                general_msg.additional_subscriber.additional_subscriber_uuid.data,
                general_msg.additional_subscriber.host_uuid.data,
                general_msg.additional_subscriber.resource_uuid.data)

        elif general_msg.HasField('promotion'):
            self._receive_promotion(
                general_msg.promotion.event_uuid.data,
                general_msg.promotion.new_priority.data)
            
        elif general_msg.HasField('removed_subscriber'):
            self._receive_removed_subscriber(
                general_msg.removed_subscriber.event_uuid.data,
                general_msg.removed_subscriber.removed_subscriber_uuid.data,
                general_msg.removed_subscriber.host_uuid.data,
                general_msg.removed_subscriber.resource_uuid.data)

        elif general_msg.HasField('backout_commit_request'):
            self._receive_request_backout(
                general_msg.backout_commit_request.event_uuid.data,
                util.PARTNER_ENDPOINT_SENTINEL)

        elif general_msg.HasField('complete_commit_request'):
            service_action = (
                waldoServiceActions._ReceiveRequestCompleteCommitAction(
                    self,general_msg.complete_commit_request.event_uuid.data,True))
            self._thread_pool.add_service_action(service_action)

        elif general_msg.HasField('commit_request'):
            service_action = (
                waldoServiceActions._ReceiveRequestCommitAction(
                    self,general_msg.commit_request.event_uuid.data,True))
            self._thread_pool.add_service_action(service_action)
            
        elif general_msg.HasField('error'):
            event = self._act_event_map.get_event(general_msg.error.event_uuid.data)
            event.send_exception_to_listener(general_msg.error)

        elif general_msg.HasField('heartbeat'):
            self._heartbeat.receive_heartbeat(general_msg.heartbeat.msg)

        #### DEBUG
        else:
            util.logger_assert(
                'Do not know how to convert message to event action ' +
                'in _receive_msg_from_partner.')