예제 #1
0
def _future_timeout_checker_thread(running_futures, internal_storage,
                                   throw_except):
    should_run = True
    while should_run:
        try:
            while True:
                current_time = time.time()
                for fut in running_futures:
                    if fut.running and fut._call_status:
                        fut_timeout = fut._call_status[
                            'start_time'] + fut.execution_timeout + 5
                        if current_time > fut_timeout:
                            msg = 'The function did not run as expected.'
                            raise TimeoutError('HANDLER', msg)
                time.sleep(5)
        except TimeoutError:
            # generate fake TimeoutError call status
            pickled_exception = str(pickle.dumps(sys.exc_info()))
            call_status = {
                'type': '__end__',
                'exception': True,
                'exc_info': pickled_exception,
                'executor_id': fut.executor_id,
                'job_id': fut.job_id,
                'call_id': fut.call_id,
                'activation_id': fut.activation_id
            }
            status_key = create_status_key(JOBS_PREFIX, fut.executor_id,
                                           fut.job_id, fut.call_id)
            dmpd_response_status = json.dumps(call_status)
            internal_storage.put_data(status_key, dmpd_response_status)
            if throw_except:
                should_run = False
        except Exception:
            time.sleep(5)
예제 #2
0
파일: storage.py 프로젝트: kpavel/lithops
 def get_call_status(self, executor_id, job_id, call_id):
     """
     Get status of a call.
     :param executor_id: executor ID of the call
     :param call_id: call ID of the call
     :return: A dictionary containing call's status, or None if no updated status
     """
     status_key = create_status_key(executor_id, job_id, call_id)
     try:
         data = self.storage.get_object(self.bucket, status_key)
         return json.loads(data.decode('ascii'))
     except StorageNoSuchKeyError:
         return None
예제 #3
0
    def _send_status_os(self):
        """
        Send the status event to the Object Storage
        """
        executor_id = self.response['executor_id']
        job_id = self.response['job_id']
        call_id = self.response['call_id']
        act_id = self.response['activation_id']

        if self.response['type'] == '__init__':
            init_key = create_init_key(JOBS_PREFIX, executor_id, job_id, call_id, act_id)
            self.internal_storage.put_data(init_key, '')

        elif self.response['type'] == '__end__':
            status_key = create_status_key(JOBS_PREFIX, executor_id, job_id, call_id)
            dmpd_response_status = json.dumps(self.response)
            drs = sizeof_fmt(len(dmpd_response_status))
            logger.info("Storing execution stats - Size: {}".format(drs))
            self.internal_storage.put_data(status_key, dmpd_response_status)