3个稳定版本

使用旧的Rust 2015

1.0.2 2018年10月12日
1.0.1 2018年10月2日
1.0.0 2018年9月27日

#1547编码

每月 39 次下载
用于 2 个crate(通过 frugalos_segment

MIT 许可证

28KB
386 代码行

ecpool

Crates.io: ecpool Documentation Build Status License: MIT

此crate提供线程池(ErasureCoderPool)来管理纠删码的执行。

文档

ecpool 还提供 ErasureCode 特性,定义纠删码接口,其实现可以通过 ErasureCoderPool 执行。

特性有一些内置实现

构建先决条件

在构建此crate之前,需要通过执行以下命令安装 openstack/liberasurecode 及其依赖项

$ git clone https://github.com/frugalos/liberasurecode
$ cd liberasurecode && sudo ./install_deps.sh

示例

基本用法

use ecpool::replica::ReplicaCoder;
use ecpool::{ErrorKind, ErasureCoderPool};
use std::num::NonZeroUsize;
use std::result::Result;
use trackable::error::{Failure, Failed};

// Creates a pool
let data_fragments = NonZeroUsize::new(4).ok_or_else(|| Failure::from(Failed))?;
let parity_fragments = NonZeroUsize::new(2).ok_or_else(|| Failure::from(Failed))?;
let coder = ErasureCoderPool::new(ReplicaCoder::new(data_fragments, parity_fragments));

// Encodes
let data = vec![0, 1, 2, 3];
let encoded = fibers_global::execute(coder.encode(data.clone()))?;

// Decodes
assert_eq!(
    Some(&data),
    fibers_global::execute(coder.decode(encoded[0..].to_vec()))
        .as_ref()
        .ok()
);
assert_eq!(
    Some(&data),
    fibers_global::execute(coder.decode(encoded[1..].to_vec()))
        .as_ref()
        .ok()
);
assert_eq!(
    Some(&data),
    fibers_global::execute(coder.decode(encoded[2..].to_vec()))
        .as_ref()
        .ok()
);
assert_eq!(
    Err(ErrorKind::InvalidInput),
    fibers_global::execute(coder.decode(encoded[3..].to_vec())).map_err(|e| *e.kind())
);

依赖关系

~2.3–3MB
~62K SLoC