示例#1
0
文件: ec.py 项目: lhllacp/oio-sds
    def connect(cls, chunk, sysmeta, reqid=None,
                connection_timeout=None, write_timeout=None, **kwargs):
        raw_url = chunk.get("real_url", chunk["url"])
        parsed = urlparse(raw_url)
        chunk_path = parsed.path.split('/')[-1]
        hdrs = headers_from_object_metadata(sysmeta)
        if reqid:
            hdrs[REQID_HEADER] = reqid

        hdrs[CHUNK_HEADERS["chunk_pos"]] = chunk["pos"]
        hdrs[CHUNK_HEADERS["chunk_id"]] = chunk_path

        # in the trailer
        # metachunk_size & metachunk_hash
        trailers = (CHUNK_HEADERS["metachunk_size"],
                    CHUNK_HEADERS["metachunk_hash"])
        if kwargs.get('chunk_checksum_algo'):
            trailers = trailers + (CHUNK_HEADERS["chunk_hash"], )
        hdrs["Trailer"] = ', '.join(trailers)
        with ConnectionTimeout(
                connection_timeout or io.CONNECTION_TIMEOUT):
            perfdata = kwargs.get('perfdata', None)
            if perfdata is not None:
                connect_start = monotonic_time()
            conn = io.http_connect(
                parsed.netloc, 'PUT', parsed.path, hdrs, scheme=parsed.scheme)
            conn.set_cork(True)
            if perfdata is not None:
                connect_end = monotonic_time()
                perfdata_rawx = perfdata.setdefault('rawx', dict())
                perfdata_rawx['connect.' + chunk['url']] = \
                    connect_end - connect_start
            conn.chunk = chunk
        return cls(chunk, conn, write_timeout=write_timeout,
                   reqid=reqid, **kwargs)
示例#2
0
文件: ec.py 项目: hungld/oio-sds
    def _get_response(self, chunk, headers):
        resp = None
        parsed = urlparse(chunk.get('real_url', chunk['url']))
        try:
            with ConnectionTimeout(self.connection_timeout):
                conn = io.http_connect(parsed.netloc, 'GET', parsed.path,
                                       headers)

            with ChunkReadTimeout(self.read_timeout):
                resp = conn.getresponse()
            if resp.status != 200:
                self.logger.warning('Invalid GET response from %s: %s %s',
                                    chunk, resp.status, resp.reason)
                resp = None
        except (SocketError, Timeout) as err:
            self.logger.error('ERROR fetching %s: %s', chunk, err)
        except Exception:
            self.logger.exception('ERROR fetching %s', chunk)
        return resp