Crate ecpool[][src]

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:
  • ReplicaCoder:
    • This implementation simply replicates the input data.
    • It is provided for example and testing purposes only and not intended to use in production.

Build Prerequisites

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

Examples

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())
);

Modules

liberasurecode

An ErasureCode implementation based on openstack/liberasurecode.

replica

An ErasureCode implementation that simply replicates the input data.

Structs

ErasureCoderPool

Thread pool for encoding and decoding data by using an ErasureCode implementation.

Error

This crate specific Error type.

Enums

ErrorKind

Possible error kinds.

Traits

BuildCoder

This trait allows for building instances of an implementaion of ErasureCode trait.

ErasureCode

This trait allows for encoding and decoding data by using some erasure coding algorithm.

Type Definitions

Fragment

A fragment.

FragmentBuf

An owned fragment.

Result

This crate specific Result type.