From a199ff9d59382a988bf03518c823d1a292ff1452 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Sun, 17 May 2015 18:09:21 +0200 Subject: [PATCH] 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 --- src/erasure-code/shec/ErasureCodePluginShec.cc | 14 ++++++-------- src/erasure-code/shec/ErasureCodeShec.cc | 13 ++++++------- src/erasure-code/shec/ErasureCodeShec.h | 7 +++++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/erasure-code/shec/ErasureCodePluginShec.cc b/src/erasure-code/shec/ErasureCodePluginShec.cc index d581e5d73c4d..a56f2fbdc87c 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 4283ce0f705f..c60a9562a6eb 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 680fd255c480..672e0fa44fad 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) {} -- 2.47.3