Example #1
0
    def _receive_request_commit(self,uuid,requesting_endpoint):
        '''
        Called by another endpoint on the same host as this endpoint
        to begin the first phase of the commit of the active event
        with uuid "uuid."

        @param {uuid} uuid --- The uuid of the _ActiveEvent that we
        want to commit.

        @param {Endpoint object} requesting_endpoint --- 
        Endpoint object if was requested to commit by endpoint objects
        on this same host (from endpoint object calls).
        
        Called by another endpoint on this endpoint (not called by
        external non-Waldo code).

        Forward the commit request to any other endpoints that were
        touched when the event was processed on this side.
        '''
        endpoint_request_commit_action = (
            waldoServiceActions._ReceiveRequestCommitAction(
                self,uuid,False))
        self._thread_pool.add_service_action(endpoint_request_commit_action)
Example #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.')