{
int err = 0;
dout(10) << "technique=" << technique << dendl;
- map<string,string>::const_iterator parameter;
- parameter = profile.find("ruleset-root");
- if (parameter != profile.end())
- ruleset_root = parameter->second;
- parameter = profile.find("ruleset-failure-domain");
- if (parameter != profile.end())
- ruleset_failure_domain = parameter->second;
+ profile["technique"] = technique;
+ err |= to_string("ruleset-root", profile,
+ &ruleset_root,
+ DEFAULT_RULESET_ROOT, ss);
+ err |= to_string("ruleset-failure-domain", profile,
+ &ruleset_failure_domain,
+ DEFAULT_RULESET_FAILURE_DOMAIN, ss);
err |= parse(profile, ss);
if (err)
return err;
err |= ErasureCodeJerasure::parse(profile, ss);
if (w != 8 && w != 16 && w != 32) {
*ss << "ReedSolomonVandermonde: w=" << w
- << " must be one of {8, 16, 32} : revert to DEFAULT_W " << std::endl;
- w = DEFAULT_W;
+ << " must be one of {8, 16, 32} : revert to " << DEFAULT_W << std::endl;
+ profile["w"] = "8";
+ err |= to_int("w", profile, &w, DEFAULT_W, ss);
err = -EINVAL;
}
err |= to_bool("jerasure-per-chunk-alignment", profile,
- &per_chunk_alignment, false, ss);
+ &per_chunk_alignment, "false", ss);
return err;
}
ostream *ss)
{
int err = ErasureCodeJerasure::parse(profile, ss);
+ if (profile.find("m") != profile.end())
+ profile.erase("m");
m = 2;
if (w != 8 && w != 16 && w != 32) {
*ss << "ReedSolomonRAID6: w=" << w
<< " must be one of {8, 16, 32} : revert to 8 " << std::endl;
- w = 8;
+ profile["w"] = "8";
+ err |= to_int("w", profile, &w, DEFAULT_W, ss);
err = -EINVAL;
}
return err;
int err = ErasureCodeJerasure::parse(profile, ss);
err |= to_int("packetsize", profile, &packetsize, DEFAULT_PACKETSIZE, ss);
err |= to_bool("jerasure-per-chunk-alignment", profile,
- &per_chunk_alignment, false, ss);
+ &per_chunk_alignment, "false", ss);
return err;
}
}
}
-void ErasureCodeJerasureLiberation::revert_to_default(ostream *ss)
+int ErasureCodeJerasureLiberation::revert_to_default(ErasureCodeProfile &profile,
+ ostream *ss)
{
+ int err = 0;
*ss << "reverting to k=" << DEFAULT_K << ", w="
<< DEFAULT_W << ", packetsize=" << DEFAULT_PACKETSIZE << std::endl;
- k = DEFAULT_K;
- w = DEFAULT_W;
- packetsize = DEFAULT_PACKETSIZE;
+ profile["k"] = DEFAULT_K;
+ err |= to_int("k", profile, &k, DEFAULT_K, ss);
+ profile["w"] = DEFAULT_W;
+ err |= to_int("w", profile, &w, DEFAULT_W, ss);
+ profile["packetsize"] = DEFAULT_PACKETSIZE;
+ err |= to_int("packetsize", profile, &packetsize, DEFAULT_PACKETSIZE, ss);
+ return err;
}
int ErasureCodeJerasureLiberation::parse(ErasureCodeProfile &profile,
if (!check_packetsize_set(ss) || !check_packetsize(ss))
error = true;
if (error) {
- revert_to_default(ss);
+ revert_to_default(profile, ss);
err = -EINVAL;
}
return err;
ostream *ss)
{
int err = ErasureCodeJerasure::parse(profile, ss);
- m = DEFAULT_M;
- w = DEFAULT_W;
+ if (profile.find("m") != profile.end())
+ profile.erase("m");
+ err |= to_int("m", profile, &m, DEFAULT_M, ss);
+ if (profile.find("w") != profile.end())
+ profile.erase("w");
+ err |= to_int("w", profile, &w, DEFAULT_W, ss);
err |= to_int("packetsize", profile, &packetsize, DEFAULT_PACKETSIZE, ss);
bool error = false;
if (!check_packetsize_set(ss))
error = true;
if (error) {
- revert_to_default(ss);
+ revert_to_default(profile, ss);
err = -EINVAL;
}
return err;
#include "erasure-code/ErasureCode.h"
+#define DEFAULT_RULESET_ROOT "default"
+#define DEFAULT_RULESET_FAILURE_DOMAIN "host"
+
class ErasureCodeJerasure : public ErasureCode {
public:
int k;
- int DEFAULT_K;
+ std::string DEFAULT_K;
int m;
- int DEFAULT_M;
+ std::string DEFAULT_M;
int w;
- int DEFAULT_W;
+ std::string DEFAULT_W;
const char *technique;
string ruleset_root;
string ruleset_failure_domain;
ErasureCodeJerasure(const char *_technique) :
k(0),
- DEFAULT_K(2),
+ DEFAULT_K("2"),
m(0),
- DEFAULT_M(1),
+ DEFAULT_M("1"),
w(0),
- DEFAULT_W(8),
+ DEFAULT_W("8"),
technique(_technique),
- ruleset_root("default"),
- ruleset_failure_domain("host"),
+ ruleset_root(DEFAULT_RULESET_ROOT),
+ ruleset_failure_domain(DEFAULT_RULESET_FAILURE_DOMAIN),
per_chunk_alignment(false)
{}
ErasureCodeJerasure("reed_sol_van"),
matrix(0)
{
- DEFAULT_K = 7;
- DEFAULT_M = 3;
- DEFAULT_W = 8;
+ DEFAULT_K = "7";
+ DEFAULT_M = "3";
+ DEFAULT_W = "8";
}
virtual ~ErasureCodeJerasureReedSolomonVandermonde() {
if (matrix)
ErasureCodeJerasure("reed_sol_r6_op"),
matrix(0)
{
- DEFAULT_K = 7;
- DEFAULT_W = 8;
+ DEFAULT_K = "7";
+ DEFAULT_W = "8";
}
virtual ~ErasureCodeJerasureReedSolomonRAID6() {
if (matrix)
virtual void prepare();
};
+#define DEFAULT_PACKETSIZE "2048"
+
class ErasureCodeJerasureCauchy : public ErasureCodeJerasure {
public:
- static const int DEFAULT_PACKETSIZE = 2048;
int *bitmatrix;
int **schedule;
int packetsize;
bitmatrix(0),
schedule(0)
{
- DEFAULT_K = 7;
- DEFAULT_M = 3;
- DEFAULT_W = 8;
+ DEFAULT_K = "7";
+ DEFAULT_M = "3";
+ DEFAULT_W = "8";
}
virtual ~ErasureCodeJerasureCauchy() {
if (bitmatrix)
class ErasureCodeJerasureLiberation : public ErasureCodeJerasure {
public:
- static const int DEFAULT_PACKETSIZE = 2048;
int *bitmatrix;
int **schedule;
int packetsize;
bitmatrix(0),
schedule(0)
{
- DEFAULT_K = 2;
- DEFAULT_M = 2;
- DEFAULT_W = 7;
+ DEFAULT_K = "2";
+ DEFAULT_M = "2";
+ DEFAULT_W = "7";
}
virtual ~ErasureCodeJerasureLiberation();
virtual bool check_w(ostream *ss) const;
virtual bool check_packetsize_set(ostream *ss) const;
virtual bool check_packetsize(ostream *ss) const;
- virtual void revert_to_default(ostream *ss);
+ virtual int revert_to_default(ErasureCodeProfile &profile,
+ ostream *ss);
virtual int parse(ErasureCodeProfile &profile, ostream *ss);
virtual void prepare();
};
ErasureCodeJerasureLiber8tion() :
ErasureCodeJerasureLiberation("liber8tion")
{
- DEFAULT_K = 2;
- DEFAULT_M = 2;
- DEFAULT_W = 8;
+ DEFAULT_K = "2";
+ DEFAULT_M = "2";
+ DEFAULT_W = "8";
}
virtual int parse(ErasureCodeProfile &profile, ostream *ss);