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)
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.')