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