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)
28KB
386 代码行
ecpool
此crate提供线程池(ErasureCoderPool
)来管理纠删码的执行。
ecpool
还提供 ErasureCode
特性,定义纠删码接口,其实现可以通过 ErasureCoderPool
执行。
特性有一些内置实现
LibErasureCoder
:- 此实现使用
liberasurecode
crate,这是一个对 openstack/liberasurecode 库的封装。 - 它高度优化且稳定,但仅适用于Unix环境。
- 此实现使用
ReplicaCoder
:- 此实现简单地复制输入数据。
- 仅用于示例和测试目的,不建议在生产环境中使用。
构建先决条件
在构建此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