コード例 #1
0
 def resume(self, transaction_id):
     """Resume.request -- user request to resume transaction"""
     request = create_request_from_type(RequestType.RESUME_REQUEST,
                                        transaction_id=transaction_id)
     machine = self._machines.get(transaction_id, None)
     if machine is None:
         raise InvalidTransaction(transaction_id)
     else:
         machine.update_state(event=Event.RECEIVED_RESUME_REQUEST,
                              request=request)
コード例 #2
0
 def suspend(self, transaction_id):
     """Suspend.request -- user request to suspend transaction"""
     request = create_request_from_type(RequestType.SUSPEND_REQUEST,
                                        transaction_id=transaction_id)
     machine = self._machines.get(transaction_id, None)
     if machine is None:
         raise InvalidTransaction(transaction_id)
     else:
         machine.update_state(event=Event.RECEIVED_SUSPEND_REQUEST,
                              request=request)
コード例 #3
0
 def report(self, transaction_id):
     """Report.request -- user request for status report of transaction"""
     request = create_request_from_type(RequestType.REPORT_REQUEST,
                                        transaction_id=transaction_id)
     machine = self._machines.get(transaction_id, None)
     if machine is None:
         raise InvalidTransaction(transaction_id)
     else:
         machine.update_state(event=Event.RECEIVED_REPORT_REQUEST,
                              request=request)
コード例 #4
0
 def cancel(self, transaction_id):
     """Cancel.request -- user request to cancel transaction"""
     request = create_request_from_type(RequestType.CANCEL_REQUEST,
                                        transaction_id=transaction_id)
     machine = self._machines.get(transaction_id, None)
     if machine is None:
         raise InvalidTransaction(transaction_id)
     else:
         machine.update_state(event=Event.RECEIVED_CANCEL_REQUEST,
                              request=request)
コード例 #5
0
    def put(self,
            destination_id,
            source_path,
            destination_path,
            transmission_mode=None):
        """Initiates a Put request by invoking Transaction Start procedures and Copy File procedures

        Other parameters not yet implemented:
            - segmentation control
            - fault handler overrides
            - flow label
            - messages to user
            - filestore requests
        """
        # Do some file checks before starting anything
        if source_path.startswith('/'):
            ait.core.log.error('Source path should be a relative path.')
            return
        if destination_path.startswith('/'):
            ait.core.log.error('Destination path should be a relative path.')
            return

        # (A) Transaction Start Notification Procedure
        #  1. Issue Tx ID sequentially
        transaction_num = self._increment_tx_counter()

        # (B) Copy File Procedure
        # Determine transmission mode so we know what kind of machine to make
        # Use destination id to get the default MIB setting for that entity id
        if transmission_mode is None:
            transmission_mode = self.mib.transmission_mode(destination_id)

        if transmission_mode == TransmissionMode.ACK:
            # TODO raise invalid transmission mode since we don't support ACK right now
            pass

        # Create a `Request` which contains all the parameters for a Put.request
        # This is passed to the machine to progress the state
        request = create_request_from_type(RequestType.PUT_REQUEST,
                                           destination_id=destination_id,
                                           source_path=source_path,
                                           destination_path=destination_path,
                                           transmission_mode=transmission_mode)
        # if transmission_mode == TransmissionMode.ACK:
        #     machine = Sender2(self, transaction_num, request=request)
        # else:
        machine = Sender1(self, transaction_num)
        # Send the Put.request `Request` to the newly created machine
        # This is where the rest of the Put request procedures are done
        machine.update_state(event=Event.RECEIVED_PUT_REQUEST, request=request)
        # Add transaction to list, indexed by Tx #
        self._machines[transaction_num] = machine

        return transaction_num