Пример #1
0
 def process_task(self, req):
     """
     Process task
     """
     try:
         files = self.pre_cache(req.scope, req.name)
         ret_files = []
         for file in files:
             ret_file = {
                 'scope': file['scope'],
                 'name': file['name'],
                 'min_id': file['min_id'],
                 'max_id': file['max_id'],
                 'content_type': ContentType.FILE,
                 'status': file['status'],
                 'priority': req.priority,
                 'pfn_size': file['size'],
                 'pfn': file['pfn'],
                 'object_metadata': {
                     'md5': file['md5'],
                     'adler32': file['adler32']
                 }
             }
             ret_files.append(ret_file)
         add_contents(req.scope, req.name, self.resource_name, ret_files)
         req.status = RequestStatus.PRECACHED
         req.processing_meta['collection_status'] = str(
             RequestStatus.PRECACHED)
         return req
     except NoRequestedData as error:
         req.status = RequestStatus.ERROR
         req.errors = {'message': str(error)}
         return req
Пример #2
0
    def prepare_to_split_files(self, req):
        if req.granularity_type == GranularityType.PARTIAL:
            coll_id = req.processing_meta['coll_id']
            files = get_contents_by_edge(edge_name=self.resource_name,
                                         coll_id=coll_id,
                                         content_type=ContentType.FILE)

            sub_files = []
            for file in files:
                for i in range(file.min_id, file.max_id + 1,
                               req.granularity_level):
                    new_min_id = i
                    new_max_id = i + req.granularity_level - 1
                    if new_max_id > file.max_id:
                        new_max_id = file.max_id
                    new_file = {
                        'coll_id': file.coll_id,
                        'scope': file.scope,
                        'name': file.name,
                        'min_id': new_min_id,
                        'max_id': new_max_id,
                        'content_type': ContentType.PARTIAL,
                        'edge_id': file.edge_id,
                        'status': ContentStatus.TOSPLIT,
                        'pfn': file.pfn,
                        'priority': file.priority
                    }

                    sub_files.append(new_file)

            self.logger.debug("Creating new splitting files: %s" % sub_files)
            self.logger.info("Creating %s new splitting files" %
                             len(sub_files))

            add_contents(req.scope, req.name, self.resource_name, sub_files)
Пример #3
0
    def POST(self, collection_scope, collection_name, edge_name):
        """ Add or update list of contents in a collection on an edge.
        HTTP Success:
            200 OK
        HTTP Error:
            404 Not Found
            500 InternalError
        :returns: dictionary of an request.
        """

        header('Content-Type', 'application/json')

        try:
            json_data = data
            files = json.loads(json_data)
            add_contents(collection_scope, collection_name, edge_name, files)
        except exceptions.DuplicatedObject as error:
            raise self.generate_http_response(HTTP_STATUS_CODE.NotFound,
                                              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={
                                              'status': 0,
                                              'message': 'added successfully'
                                          })