ErasureCodeInterfaceRef *erasure_code,
ostream *ss) {
ErasureCodeShec *interface;
- std::string t = "multiple";
- if (profile.find("technique") != profile.end()){
- t = profile.find("technique")->second;
- }
+ if (profile.find("technique") == profile.end())
+ profile["technique"] = "multiple";
+ std::string t = profile.find("technique")->second;
if (t == "single"){
interface = new ErasureCodeShecReedSolomonVandermonde(tcache, ErasureCodeShec::SINGLE);
} else if (t == "multiple"){
interface = new ErasureCodeShecReedSolomonVandermonde(tcache, ErasureCodeShec::MULTIPLE);
} else {
- derr << "technique=" << t << " is not a valid coding technique. "
- << " Choose one of the following: "
- << "single, multiple"
- << dendl;
+ *ss << "technique=" << t << " is not a valid coding technique. "
+ << "Choose one of the following: "
+ << "single, multiple ";
return -ENOENT;
}
int r = interface->init(profile, ss);
ostream *ss)
{
int err = 0;
- 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;
+ 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);
if (err)
return err;
#include "ErasureCodeShecTableCache.h"
#include <list>
+#define DEFAULT_RULESET_ROOT "default"
+#define DEFAULT_RULESET_FAILURE_DOMAIN "host"
+
class ErasureCodeShec : public ErasureCode {
public:
w(0),
DEFAULT_W(8),
technique(_technique),
- ruleset_root("default"),
- ruleset_failure_domain("host"),
+ ruleset_root(DEFAULT_RULESET_ROOT),
+ ruleset_failure_domain(DEFAULT_RULESET_FAILURE_DOMAIN),
matrix(0)
{}