Ejemplo n.º 1
0
def put_with_host(uptoken, key, f, fsize, extra, host):
    block_cnt = block_count(fsize)
    if extra.progresses is None:
        extra.progresses = [None] * block_cnt
    else:
        if not len(extra.progresses) == block_cnt:
            return None, err_invalid_put_progress, 0

    if extra.try_times is None:
        extra.try_times = _try_times

    if extra.chunk_size is None:
        extra.chunk_size = _chunk_size

    for i in xrange(block_cnt):
        try_time = extra.try_times
        read_length = _block_size
        if (i + 1) * _block_size > fsize:
            read_length = fsize - i * _block_size
        data_slice = f.read(read_length)
        while True:
            err = resumable_block_put(data_slice, i, extra, uptoken, host)
            if err is None:
                break

            try_time -= 1
            if try_time <= 0:
                return None, err_put_failed, 0
            print err, ".. retry"

    mkfile_host = extra.progresses[-1]["host"] if block_cnt else host
    mkfile_client = auth_up.Client(uptoken, mkfile_host)

    return mkfile(mkfile_client, key, fsize, extra, host)
Ejemplo n.º 2
0
def resumable_block_put(block, index, extra, uptoken):
    block_size = len(block)

    mkblk_client = auth_up.Client(uptoken, conf.UP_HOST)
    if extra.progresses[index] is None or "ctx" not in extra.progresses[index]:
        crc32 = gen_crc32(block)
        block = bytearray(block)
        extra.progresses[index], err = mkblock(mkblk_client, block_size, block)
        if err is not None:
            extra.notify_err(index, block_size, err)
            return err
        if not extra.progresses[index]["crc32"] == crc32:
            return err_unmatched_checksum
        extra.notify(index, block_size, extra.progresses[index])
        return
Ejemplo n.º 3
0
def put(uptoken, key, f, fsize, extra):
    """ 上传二进制流, 通过将data "切片" 分段上传 """
    if not isinstance(extra, PutExtra):
        print("extra must the instance of PutExtra")
        return

    block_cnt = block_count(fsize)
    if extra.progresses is None:
        extra.progresses = [None] * block_cnt
    else:
        if not len(extra.progresses) == block_cnt:
            return None, err_invalid_put_progress

    if extra.try_times is None:
        extra.try_times = _try_times

    if extra.chunk_size is None:
        extra.chunk_size = _chunk_size

    for i in xrange(block_cnt):
        try_time = extra.try_times
        read_length = _block_size
        if (i + 1) * _block_size > fsize:
            read_length = fsize - i * _block_size
        data_slice = f.read(read_length)
        while True:
            err = resumable_block_put(data_slice, i, extra, uptoken)
            if err is None:
                break

            try_time -= 1
            if try_time <= 0:
                return None, err_put_failed
            print err, ".. retry"

    mkfile_client = auth_up.Client(uptoken, extra.progresses[-1]["host"])
    return mkfile(mkfile_client, key, fsize, extra)