예제 #1
0
    def test_create_and_check_for_request_core(self):
        """ Request (CORE): Test the creation, query, and deletion of a Request """

        properties = {
            'scope': 'test_scope',
            'name': 'test_name_%s' % str(uuid()),
            'data_type': 'DATASET',
            'granularity_type': 'FILE',
            'granularity_level': 1,
            'priority': 99,
            'edge_id': None,
            'status': 'NEW',
            'request_meta': {
                'taskid': 975,
                'job_id': 864
            },
            'processing_meta': None,
            'errors': None,
        }
        request_id = add_request(**properties)
        # request = get_request(properties['scope'], properties['name'], request_metadata=properties['request_meta'])
        # assert_equal(request_id, request.request_id)

        request = get_request(request_id=request_id)
        assert_equal(request_id, request.request_id)

        json.dumps(request.to_dict())

        assert_equal(request.scope, properties['scope'])
        assert_equal(request.name, properties['name'])
        assert_equal(str(request.data_type), properties['data_type'])
        assert_equal(str(request.granularity_type),
                     properties['granularity_type'])
        assert_equal(request.granularity_level,
                     properties['granularity_level'])
        assert_equal(request.priority, properties['priority'])
        assert_equal(request.edge_id, properties['edge_id'])
        assert_equal(str(request.status), properties['status'])
        assert_equal(str(request.request_meta['taskid']),
                     str(properties['request_meta']['taskid']))
        assert_equal(str(request.request_meta['job_id']),
                     str(properties['request_meta']['job_id']))
        # assert_equal(str(request.processing_meta), str(properties['processing_meta']))
        assert_equal(request.errors, properties['errors'])

        request_id1 = add_request(**properties)
        delete_request(request_id1)

        update_request(request_id, parameters={'status': 'ERROR'})
        request = get_request(request_id=request_id)
        assert_equal(str(request.status), 'ERROR')

        with assert_raises(exceptions.NoObject):
            get_request(request_id=999999)

        delete_request(request_id)

        with assert_raises(exceptions.NoObject):
            get_request(request_id=request_id)
예제 #2
0
파일: daemon.py 프로젝트: PanDAWMS/ESS
    def assign_remote_requests(self):
        if not self.head_client:
            return

        reqs = []
        try:
            reqs = self.head_client.get_requests(edge_name=self.resource_name,
                                                 status=str(
                                                     RequestStatus.ASSIGNING))
        except NoObject:
            pass
        except ESSException as error:
            self.logger.info(
                "Caught exception when get requests from the head service: %s"
                % str(error))

        for req in reqs:
            coll = self.head_client.get_collection(req.scope, req.name)
            collection = {
                'scope': coll.scope,
                'name': coll.name,
                'collection_type': coll.collection_type,
                'coll_size': coll.coll_size,
                'global_status': coll.global_status,
                'total_files': coll.total_files,
                'num_replicas': coll.num_replicas,
                'coll_metadata': coll.coll_metadata
            }
            try:
                add_collection(**collection)
            except DuplicatedObject as error:
                self.logger.info("Collection is already registered: %s, %s" %
                                 (collection, error))

            req.status = RequestStatus.ASSIGNED
            processing_meta = req.processing_meta
            processing_meta['original_request_id'] = req.request_id
            request = {
                'scope': req.scope,
                'name': req.name,
                'data_type': req.data_type,
                'granularity_type': req.granularity_type,
                'granularity_level': req.granularity_level,
                'priority': req.priority,
                'edge_id': get_edge_id(self.resource_name),
                'status': req.status,
                'request_meta': req.request_meta,
                'processing_meta': processing_meta,
                'errors': req.errors
            }
            try:
                add_request(**request)
            except DuplicatedObject as error:
                self.logger.info("Request is already registered: %s, %s" %
                                 (request, error))

            self.head_client.update_request(req.request_id,
                                            status=str(req.status))
예제 #3
0
    def POST(self):
        """ Create Request.
        HTTP Success:
            200 OK
        HTTP Error:
            400 Bad request
            500 Internal Error
        """
        json_data = data()
        args = ['scope', 'name', 'data_type', 'status', 'granularity_type', 'granularity_level', 'priority', 'request_meta']

        try:
            parameters = {}
            json_data = json.loads(json_data)
            for key, value in json_data.items():
                if key in args:
                    parameters[key] = value
        except ValueError:
            raise self.generate_http_response(HTTP_STATUS_CODE.BadRequest, exc_cls=exceptions.BadRequest.__name__, exc_msg='Cannot decode json parameter dictionary')

        try:
            request_id = add_request(**parameters)
        except exceptions.DuplicatedObject as error:
            raise self.generate_http_response(HTTP_STATUS_CODE.Conflict, exc_cls=error.__class__.__name__, exc_msg=error)
        except exceptions.ESSException as error:
            raise self.generate_http_response(HTTP_STATUS_CODE.InternalError, exc_cls=error.__class__.__name__, exc_msg=error)
        except Exception as error:
            print(error)
            print(format_exc())
            raise self.generate_http_response(HTTP_STATUS_CODE.InternalError, exc_cls=exceptions.CoreException.__name__, exc_msg=error)

        raise self.generate_http_response(HTTP_STATUS_CODE.OK, data={'request_id': request_id})