| Crates.io | ecpool |
| lib.rs | ecpool |
| version | 1.0.2 |
| created_at | 2018-09-27 09:53:15.07048+00 |
| updated_at | 2018-10-12 10:20:20.078308+00 |
| description | Thread pool for managing executions of erasure coding |
| homepage | https://github.com/frugalos/ecpool |
| repository | https://github.com/frugalos/ecpool |
| max_upload_size | |
| id | 86801 |
| size | 35,414 |
This crate provides thread pool (ErasureCoderPool) for managing executions of erasure coding.
ecpool also provides ErasureCode trait defines erasure coding interface
and of which implemtations can be executed via ErasureCoderPool.
There are some built-in implementations of the trait:
LibErasureCoder:
liberasurecode crate that is a wrapper for openstack/liberasurecode library.ReplicaCoder:
This implementation simply replicates the input data.
It is provided for example and testing purposes only and not intended to use in production.
It is required to install openstack/liberasurecode and its dependencies by executing the following commands before building this crate:
$ git clone https://github.com/frugalos/liberasurecode
$ cd liberasurecode && sudo ./install_deps.sh
Basic usage:
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())
);