]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
erasure-code: ErasureCodeJerasure update default values to string
authorLoic Dachary <ldachary@redhat.com>
Sun, 17 May 2015 16:04:56 +0000 (18:04 +0200)
committerLoic Dachary <ldachary@redhat.com>
Sat, 30 May 2015 22:01:34 +0000 (00:01 +0200)
Update the ErasureCodeJerasure::init function to use string default values
and update the profile accordingly.

The ErasureCodeJerasure::revert_to_default prototype is modified so it
can update the profile.

http://tracker.ceph.com/issues/9589 Fixes: #9589

Signed-off-by: Loic Dachary <ldachary@redhat.com>
src/erasure-code/jerasure/ErasureCodeJerasure.cc
src/erasure-code/jerasure/ErasureCodeJerasure.h

index 72bd9b30ea37a31cbe118472e648fa2ca8bb1475..a5410118074e3eb2bd29ca7d431e4cbc234a873f 100644 (file)
@@ -56,13 +56,13 @@ int ErasureCodeJerasure::init(ErasureCodeProfile& profile, ostream *ss)
 {
   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;
@@ -200,12 +200,13 @@ int ErasureCodeJerasureReedSolomonVandermonde::parse(ErasureCodeProfile &profile
   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;
 }
 
@@ -248,11 +249,14 @@ int ErasureCodeJerasureReedSolomonRAID6::parse(ErasureCodeProfile &profile,
                                               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;
@@ -305,7 +309,7 @@ int ErasureCodeJerasureCauchy::parse(ErasureCodeProfile &profile,
   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;
 }
 
@@ -412,13 +416,19 @@ bool ErasureCodeJerasureLiberation::check_packetsize(ostream *ss) const
   }
 }
 
-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,
@@ -435,7 +445,7 @@ 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;
@@ -478,8 +488,12 @@ int ErasureCodeJerasureLiber8tion::parse(ErasureCodeProfile &profile,
                                         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;
@@ -488,7 +502,7 @@ int ErasureCodeJerasureLiber8tion::parse(ErasureCodeProfile &profile,
   if (!check_packetsize_set(ss))
     error = true;
   if (error) {
-    revert_to_default(ss);
+    revert_to_default(profile, ss);
     err = -EINVAL;
   }
   return err;
index 8d9bb6a1cb31f913e494ffd698c6c38e610842fb..51c319ebcf26d62b90412159fc86514f2ad7aa8b 100644 (file)
 
 #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;
@@ -35,14 +38,14 @@ public:
 
   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)
   {}
 
@@ -93,9 +96,9 @@ public:
     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)
@@ -122,8 +125,8 @@ public:
     ErasureCodeJerasure("reed_sol_r6_op"),
     matrix(0)
   {
-    DEFAULT_K = 7;
-    DEFAULT_W = 8;
+    DEFAULT_K = "7";
+    DEFAULT_W = "8";
   }
   virtual ~ErasureCodeJerasureReedSolomonRAID6() {
     if (matrix)
@@ -142,9 +145,10 @@ public:
   virtual void prepare();
 };
 
+#define DEFAULT_PACKETSIZE "2048"
+
 class ErasureCodeJerasureCauchy : public ErasureCodeJerasure {
 public:
-  static const int DEFAULT_PACKETSIZE = 2048;
   int *bitmatrix;
   int **schedule;
   int packetsize;
@@ -154,9 +158,9 @@ public:
     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)
@@ -197,7 +201,6 @@ public:
 
 class ErasureCodeJerasureLiberation : public ErasureCodeJerasure {
 public:
-  static const int DEFAULT_PACKETSIZE = 2048;
   int *bitmatrix;
   int **schedule;
   int packetsize;
@@ -207,9 +210,9 @@ public:
     bitmatrix(0),
     schedule(0)
   {
-    DEFAULT_K = 2;
-    DEFAULT_M = 2;
-    DEFAULT_W = 7;
+    DEFAULT_K = "2";
+    DEFAULT_M = "2";
+    DEFAULT_W = "7";
   }
   virtual ~ErasureCodeJerasureLiberation();
 
@@ -225,7 +228,8 @@ public:
   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();
 };
@@ -246,9 +250,9 @@ public:
   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);