]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
erasure-code: move to ErasureCode::to_{int,bool}
authorLoic Dachary <loic@dachary.org>
Tue, 3 Jun 2014 15:25:20 +0000 (17:25 +0200)
committerLoic Dachary <loic@dachary.org>
Wed, 6 Aug 2014 13:22:00 +0000 (15:22 +0200)
The parameter parser helpers to_int and to_bool are moved from
ErasureCode{Jerasure,Isa} to ErasureCode.

The prototype is modified to return a status instead of the value. An
error ostream is provided as the last argument because ErasureCode
cannot use dout() or derr().

http://tracker.ceph.com/issues/8496 Refs: #8496

Signed-off-by: Loic Dachary <loic@dachary.org>
src/erasure-code/ErasureCode.cc
src/erasure-code/ErasureCode.h
src/erasure-code/isa/ErasureCodeIsa.cc
src/erasure-code/isa/ErasureCodeIsa.h
src/erasure-code/jerasure/ErasureCodeJerasure.cc
src/erasure-code/jerasure/ErasureCodeJerasure.h

index 0a9ccb398dfcb5bf25e5ae8f938cf504661271f4..95bf13a49d1e2485d787868caf1376cfcde5ab0c 100644 (file)
@@ -18,6 +18,7 @@
 #include <vector>
 #include <algorithm>
 
+#include "common/strtol.h"
 #include "ErasureCode.h"
 
 int ErasureCode::minimum_to_decode(const set<int> &want_to_read,
@@ -142,4 +143,43 @@ int ErasureCode::decode_chunks(const set<int> &want_to_read,
   assert("ErasureCode::decode_chunks not implemented" == 0);
 }
 
+int ErasureCode::to_int(const std::string &name,
+                       const map<std::string,std::string> &parameters,
+                       int *value,
+                       int default_value,
+                       ostream *ss)
+{
+  if (parameters.find(name) == parameters.end() ||
+      parameters.find(name)->second.size() == 0) {
+    *value = default_value;
+    return 0;
+  }
+  std::string p = parameters.find(name)->second;
+  std::string err;
+  int r = strict_strtol(p.c_str(), 10, &err);
+  if (!err.empty()) {
+    *ss << "could not convert " << name << "=" << p
+       << " to int because " << err
+       << ", set to default " << default_value << std::endl;
+    *value = default_value;
+    return -EINVAL;
+  }
+  *value = r;
+  return 0;
+}
 
+int ErasureCode::to_bool(const std::string &name,
+                        const map<std::string,std::string> &parameters,
+                        bool *value,
+                        bool default_value,
+                        ostream *ss)
+{
+  if (parameters.find(name) == parameters.end() ||
+      parameters.find(name)->second.size() == 0) {
+    *value = default_value;
+    return 0;
+  }
+  const std::string p = parameters.find(name)->second;
+  *value = (p == "yes") || (p == "true");
+  return 0;
+}
index 09fa490fdfce2d2087a96e3e320b4834bf749f3f..97ec687aed1810b844efa30ad7dbe7521e6c73eb 100644 (file)
@@ -55,6 +55,17 @@ namespace ceph {
                               const map<int, bufferlist> &chunks,
                               map<int, bufferlist> *decoded);
 
+    static int to_int(const std::string &name,
+                     const map<std::string,std::string> &parameters,
+                     int *value,
+                     int default_value,
+                     ostream *ss);
+
+    static int to_bool(const std::string &name,
+                      const map<std::string,std::string> &parameters,
+                      bool *value,
+                      bool default_value,
+                      ostream *ss);
   };
 }
 
index ebc8b6f6a95533a88a426877277f1002000b2e38..8d9e7c00ba5dcf2e6642ebfa05c1b58fd0a4b534 100644 (file)
@@ -117,32 +117,6 @@ int ErasureCodeIsa::decode_chunks(const set<int> &want_to_read,
 
 // -----------------------------------------------------------------------------
 
-int
-ErasureCodeIsa::to_int(const std::string &name,
-                       const map<std::string, std::string> &parameters,
-                       int default_value)
-{
-  if (parameters.find(name) == parameters.end() ||
-      parameters.find(name)->second.size() == 0) {
-    dout(10) << name << " defaults to " << default_value << dendl;
-    return default_value;
-  }
-  const std::string value = parameters.find(name)->second;
-  std::string p = value;
-  std::string err;
-  int r = strict_strtol(p.c_str(), 10, &err);
-  if (!err.empty()) {
-    derr << "could not convert " << name << "=" << value
-      << " to int because " << err
-      << ", set to default " << default_value << dendl;
-    return default_value;
-  }
-  dout(10) << name << " set to " << r << dendl;
-  return r;
-}
-
-// -----------------------------------------------------------------------------
-
 void
 ErasureCodeIsaDefault::isa_encode(char **data,
                                   char **coding,
index 96e54428aa2eb2c433507798256a2bda03604ebf..f68fb56f9625bdf43787b6557f78e0d4eee0d8c7 100644 (file)
@@ -98,9 +98,6 @@ public:
 
   virtual void prepare() = 0;
 
-  static int to_int(const std::string &name,
-                    const map<std::string, std::string> &parameters,
-                    int default_value);
 };
 
 // -----------------------------------------------------------------------------
index 7fe68668c6e5936d01c50a3833e02b80e6e81d27..536ce2918aa448f8d546819730d0c26ba9fb666d 100644 (file)
@@ -119,42 +119,6 @@ int ErasureCodeJerasure::decode_chunks(const set<int> &want_to_read,
   return jerasure_decode(erasures, data, coding, blocksize);
 }
 
-int ErasureCodeJerasure::to_int(const std::string &name,
-                                const map<std::string,std::string> &parameters,
-                                int default_value)
-{
-  if (parameters.find(name) == parameters.end() ||
-      parameters.find(name)->second.size() == 0) {
-    dout(10) << name << " defaults to " << default_value << dendl;
-    return default_value;
-  }
-  const std::string value = parameters.find(name)->second;
-  std::string p = value;
-  std::string err;
-  int r = strict_strtol(p.c_str(), 10, &err);
-  if (!err.empty()) {
-    derr << "could not convert " << name << "=" << value
-         << " to int because " << err
-         << ", set to default " << default_value << dendl;
-    return default_value;
-  }
-  dout(10) << name << " set to " << r << dendl;
-  return r;
-}
-
-bool ErasureCodeJerasure::to_bool(const std::string &name,
-                                 const map<std::string,std::string> &parameters,
-                                 bool default_value)
-{
-  if (parameters.find(name) == parameters.end() ||
-      parameters.find(name)->second.size() == 0) {
-    dout(10) << name << " defaults to " << default_value << dendl;
-    return default_value;
-  }
-  const std::string value = parameters.find(name)->second;
-  return (value == "yes") || (value == "1") || (value == "true");
-}
-
 bool ErasureCodeJerasure::is_prime(int value)
 {
   int prime55[] = {
index 9a554780dff310f02d091026a4272a2047694224..3f39f69d936aa4dbffb025dc15685a97db30654c 100644 (file)
@@ -70,12 +70,6 @@ public:
   virtual unsigned get_alignment() const = 0;
   virtual void parse(const map<std::string,std::string> &parameters) = 0;
   virtual void prepare() = 0;
-  static int to_int(const std::string &name,
-                    const map<std::string,std::string> &parameters,
-                    int default_value);
-  static bool to_bool(const std::string &name,
-                     const map<std::string,std::string> &parameters,
-                     bool default_value);
   static bool is_prime(int value);
 };