From: Loic Dachary Date: Sun, 17 May 2015 16:09:21 +0000 (+0200) Subject: erasure-code: ErasureCodeShec update default values to string X-Git-Tag: v9.0.2~78^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F4710%2Fhead;p=ceph.git erasure-code: ErasureCodeShec update default values to string Update the ErasureCodeShec::init function to use string default values. The default profile values for technique, ruleset-root and ruleset-failure-domain are set for the user to see. The error message when an invalid technique is provided is written to the error stream to be returned to the user instead of being written to the OSD log. Updating other values from the profile would require deeper changes and is left for later. http://tracker.ceph.com/issues/9589 Fixes: #9589 Signed-off-by: Loic Dachary --- diff --git a/src/erasure-code/shec/ErasureCodePluginShec.cc b/src/erasure-code/shec/ErasureCodePluginShec.cc index d581e5d73c4..a56f2fbdc87 100644 --- a/src/erasure-code/shec/ErasureCodePluginShec.cc +++ b/src/erasure-code/shec/ErasureCodePluginShec.cc @@ -41,21 +41,19 @@ public: 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); diff --git a/src/erasure-code/shec/ErasureCodeShec.cc b/src/erasure-code/shec/ErasureCodeShec.cc index 4283ce0f705..c60a9562a6e 100644 --- a/src/erasure-code/shec/ErasureCodeShec.cc +++ b/src/erasure-code/shec/ErasureCodeShec.cc @@ -58,13 +58,12 @@ int ErasureCodeShec::init(ErasureCodeProfile &profile, ostream *ss) { int err = 0; - map::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; diff --git a/src/erasure-code/shec/ErasureCodeShec.h b/src/erasure-code/shec/ErasureCodeShec.h index 680fd255c48..672e0fa44fa 100644 --- a/src/erasure-code/shec/ErasureCodeShec.h +++ b/src/erasure-code/shec/ErasureCodeShec.h @@ -26,6 +26,9 @@ #include "ErasureCodeShecTableCache.h" #include +#define DEFAULT_RULESET_ROOT "default" +#define DEFAULT_RULESET_FAILURE_DOMAIN "host" + class ErasureCodeShec : public ErasureCode { public: @@ -60,8 +63,8 @@ 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) {}