]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
erasure-code: factor generic create_rule into parent ErasureCode
authorSage Weil <sage@redhat.com>
Fri, 30 Jun 2017 19:50:07 +0000 (15:50 -0400)
committerSage Weil <sage@redhat.com>
Thu, 6 Jul 2017 19:01:03 +0000 (15:01 -0400)
These 3 implementations are all identical.  Move the rest of init() to
into the parent since these all behave the same.

Signed-off-by: Sage Weil <sage@redhat.com>
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
src/erasure-code/shec/ErasureCodeShec.cc
src/erasure-code/shec/ErasureCodeShec.h

index 353ab4f0d8e68afd83d6328463fc430d18d702eb..4c5021ee91f1a7fcc7e828051685bd3a4cae76a2 100644 (file)
 
 #include "common/strtol.h"
 #include "include/buffer.h"
+#include "crush/CrushWrapper.h"
+#include "osd/osd_types.h"
 
 using namespace std;
 
 const unsigned ErasureCode::SIMD_ALIGN = 32;
 
+#define DEFAULT_RULE_ROOT "default"
+#define DEFAULT_RULE_FAILURE_DOMAIN "host"
+
+int ErasureCode::init(
+  ErasureCodeProfile &profile,
+  std::ostream *ss)
+{
+  int err = 0;
+  err |= to_string("crush-root", profile,
+                  &rule_root,
+                  DEFAULT_RULE_ROOT, ss);
+  err |= to_string("crush-failure-domain", profile,
+                  &rule_failure_domain,
+                  DEFAULT_RULE_FAILURE_DOMAIN, ss);
+  if (err)
+    return err;
+  _profile = profile;
+  return 0;
+}
+
+int ErasureCode::create_rule(
+  const std::string &name,
+  CrushWrapper &crush,
+  std::ostream *ss) const
+{
+  int ruleid = crush.add_simple_rule(
+    name,
+    rule_root,
+    rule_failure_domain,
+    "",
+    "indep",
+    pg_pool_t::TYPE_ERASURE,
+    ss);
+
+  if (ruleid < 0)
+    return ruleid;
+
+  crush.set_rule_mask_max_size(ruleid, get_chunk_count());
+  return ruleid;
+}
+
 int ErasureCode::sanity_check_k(int k, ostream *ss)
 {
   if (k < 2) {
index e544b022a126b35e44787f42a1f232cfb749abae..bce77e68b6668540ec5fdbcd00428d5ceb864423 100644 (file)
@@ -33,17 +33,22 @@ namespace ceph {
     std::vector<int> chunk_mapping;
     ErasureCodeProfile _profile;
 
+    // for CRUSH rule
+    std::string rule_root;
+    std::string rule_failure_domain;
+
     ~ErasureCode() override {}
 
-    int init(ErasureCodeProfile &profile, std::ostream *ss) override {
-      _profile = profile;
-      return 0;
-    }
+    int init(ErasureCodeProfile &profile, std::ostream *ss) override;
 
     const ErasureCodeProfile &get_profile() const override {
       return _profile;
     }
 
+    int create_rule(const std::string &name,
+                   CrushWrapper &crush,
+                   std::ostream *ss) const;
+
     int sanity_check_k(int k, std::ostream *ss);
 
     unsigned int get_coding_chunk_count() const override {
index 787acb6d7d3a55db0f1427d7486247794f3d7f7f..46c8e830173aecaea5edcecbb4e44f24d4a8c747 100644 (file)
@@ -19,8 +19,7 @@
 #include "common/debug.h"
 #include "ErasureCodeIsa.h"
 #include "xor_op.h"
-#include "crush/CrushWrapper.h"
-#include "osd/osd_types.h"
+#include "include/assert.h"
 using namespace std;
 
 // -----------------------------------------------------------------------------
@@ -46,27 +45,6 @@ _prefix(std::ostream* _dout)
 const std::string ErasureCodeIsaDefault::DEFAULT_K("7");
 const std::string ErasureCodeIsaDefault::DEFAULT_M("3");
 
-int
-ErasureCodeIsa::create_rule(const string &name,
-                           CrushWrapper &crush,
-                           ostream *ss) const
-{
-  int ruleid = crush.add_simple_rule(
-    name,
-    rule_root,
-    rule_failure_domain,
-    "",
-    "indep",
-    pg_pool_t::TYPE_ERASURE,
-    ss);
-
-  if (ruleid < 0)
-    return ruleid;
-  else {
-    crush.set_rule_mask_max_size(ruleid, get_chunk_count());
-    return ruleid;
-  }
-}
 
 // -----------------------------------------------------------------------------
 
@@ -74,18 +52,11 @@ int
 ErasureCodeIsa::init(ErasureCodeProfile &profile, ostream *ss)
 {
   int err = 0;
-  err |= to_string("crush-root", profile,
-                  &rule_root,
-                  DEFAULT_RULE_ROOT, ss);
-  err |= to_string("crush-failure-domain", profile,
-                  &rule_failure_domain,
-                  DEFAULT_RULE_FAILURE_DOMAIN, ss);
   err |= parse(profile, ss);
   if (err)
     return err;
   prepare();
-  ErasureCode::init(profile, ss);
-  return err;
+  return ErasureCode::init(profile, ss);
 }
 
 // -----------------------------------------------------------------------------
index bdf1197f857b5198f3117c5d74221b83cf5eccc6..d67b918f79ea8cfda71bc9a58df49edf540c2da1 100644 (file)
@@ -30,9 +30,6 @@
 #include "ErasureCodeIsaTableCache.h"
 // -----------------------------------------------------------------------------
 
-#define DEFAULT_RULE_ROOT "default"
-#define DEFAULT_RULE_FAILURE_DOMAIN "host"
-
 class ErasureCodeIsa : public ErasureCode {
 public:
 
@@ -46,8 +43,6 @@ public:
 
   ErasureCodeIsaTableCache &tcache;
   const char *technique;
-  std::string rule_root;
-  std::string rule_failure_domain;
 
   ErasureCodeIsa(const char *_technique,
                  ErasureCodeIsaTableCache &_tcache) :
@@ -55,9 +50,7 @@ public:
   m(0),
   w(0),
   tcache(_tcache),
-  technique(_technique),
-  rule_root(DEFAULT_RULE_ROOT),
-  rule_failure_domain(DEFAULT_RULE_FAILURE_DOMAIN)
+  technique(_technique)
   {
   }
 
@@ -66,10 +59,6 @@ public:
   {
   }
 
-  int create_rule(const std::string &name,
-                 CrushWrapper &crush,
-                 std::ostream *ss) const override;
-
   unsigned int
   get_chunk_count() const override
   {
index 1db7d7e63b9900fd2afc2e0754603f3f9b27f37c..599073eb3f73e59d482e77960b145d36e197502f 100644 (file)
@@ -17,8 +17,6 @@
 
 #include "common/debug.h"
 #include "ErasureCodeJerasure.h"
-#include "crush/CrushWrapper.h"
-#include "osd/osd_types.h"
 
 using namespace std;
 
@@ -42,43 +40,17 @@ static ostream& _prefix(std::ostream* _dout)
   return *_dout << "ErasureCodeJerasure: ";
 }
 
-int ErasureCodeJerasure::create_rule(const string &name,
-                                       CrushWrapper &crush,
-                                       ostream *ss) const
-{
-  int ruleid = crush.add_simple_rule(
-    name,
-    rule_root,
-    rule_failure_domain,
-    "",
-    "indep",
-    pg_pool_t::TYPE_ERASURE,
-    ss);
-  if (ruleid < 0)
-    return ruleid;
-  else {
-    crush.set_rule_mask_max_size(ruleid, get_chunk_count());
-    return ruleid;
-  }
-}
 
 int ErasureCodeJerasure::init(ErasureCodeProfile& profile, ostream *ss)
 {
   int err = 0;
   dout(10) << "technique=" << technique << dendl;
   profile["technique"] = technique;
-  err |= to_string("crush-root", profile,
-                  &rule_root,
-                  DEFAULT_RULE_ROOT, ss);
-  err |= to_string("crush-failure-domain", profile,
-                  &rule_failure_domain,
-                  DEFAULT_RULE_FAILURE_DOMAIN, ss);
   err |= parse(profile, ss);
   if (err)
     return err;
   prepare();
-  ErasureCode::init(profile, ss);
-  return err;
+  return ErasureCode::init(profile, ss);
 }
 
 int ErasureCodeJerasure::parse(ErasureCodeProfile &profile,
index a0e7d7ab4869abfaeb428ea3ccb956aaa7ea4360..be9abc5615fa6e2faed8f54c46b7df1037a2994c 100644 (file)
@@ -20,9 +20,6 @@
 
 #include "erasure-code/ErasureCode.h"
 
-#define DEFAULT_RULE_ROOT "default"
-#define DEFAULT_RULE_FAILURE_DOMAIN "host"
-
 class ErasureCodeJerasure : public ErasureCode {
 public:
   int k;
@@ -44,17 +41,11 @@ public:
     w(0),
     DEFAULT_W("8"),
     technique(_technique),
-    rule_root(DEFAULT_RULE_ROOT),
-    rule_failure_domain(DEFAULT_RULE_FAILURE_DOMAIN),
     per_chunk_alignment(false)
   {}
 
   ~ErasureCodeJerasure() override {}
   
-  int create_rule(const std::string &name,
-                 CrushWrapper &crush,
-                 std::ostream *ss) const override;
-
   unsigned int get_chunk_count() const override {
     return k + m;
   }
index f47127e0db9445723972a64080acf33d016982a3..17b380d5e43b2d0039393e6e56b3b80f5ac7a88c 100644 (file)
@@ -27,8 +27,6 @@ using namespace std;
 
 #include "common/debug.h"
 #include "ErasureCodeShec.h"
-#include "crush/CrushWrapper.h"
-#include "osd/osd_types.h"
 extern "C" {
 #include "jerasure/include/jerasure.h"
 #include "jerasure/include/galois.h"
@@ -47,42 +45,15 @@ static ostream& _prefix(std::ostream* _dout)
   return *_dout << "ErasureCodeShec: ";
 }
 
-int ErasureCodeShec::create_rule(const string &name,
-                                   CrushWrapper &crush,
-                                   ostream *ss) const
-{
-  int ruleid = crush.add_simple_rule(
-    name,
-    rule_root,
-    rule_failure_domain,
-    "",
-    "indep",
-    pg_pool_t::TYPE_ERASURE,
-    ss);
-  if (ruleid < 0) {
-    return ruleid;
-  } else {
-    crush.set_rule_mask_max_size(ruleid, get_chunk_count());
-    return ruleid;
-  }
-}
-
 int ErasureCodeShec::init(ErasureCodeProfile &profile,
                          ostream *ss)
 {
   int err = 0;
-  err |= ErasureCode::to_string("crush-root", profile,
-                  &rule_root,
-                  DEFAULT_RULE_ROOT, ss);
-  err |= ErasureCode::to_string("crush-failure-domain", profile,
-                  &rule_failure_domain,
-                  DEFAULT_RULE_FAILURE_DOMAIN, ss);
   err |= parse(profile);
   if (err)
     return err;
   prepare();
-  ErasureCode::init(profile, ss);
-  return err;
+  return ErasureCode::init(profile, ss);
 }
 
 unsigned int ErasureCodeShec::get_chunk_size(unsigned int object_size) const
index fc580706e658ec51be45b500f792f133cb9ea790..073644e7ad0a6225a51180526e355d6c5b4ab545 100644 (file)
@@ -24,9 +24,6 @@
 #include "erasure-code/ErasureCode.h"
 #include "ErasureCodeShecTableCache.h"
 
-#define DEFAULT_RULE_ROOT "default"
-#define DEFAULT_RULE_FAILURE_DOMAIN "host"
-
 class ErasureCodeShec : public ErasureCode {
 
 public:
@@ -45,8 +42,6 @@ public:
   int w;
   int DEFAULT_W;
   int technique;
-  string rule_root;
-  string rule_failure_domain;
   int *matrix;
 
   ErasureCodeShec(const int _technique,
@@ -61,17 +56,11 @@ public:
     w(0),
     DEFAULT_W(8),
     technique(_technique),
-    rule_root(DEFAULT_RULE_ROOT),
-    rule_failure_domain(DEFAULT_RULE_FAILURE_DOMAIN),
     matrix(0)
   {}
 
   ~ErasureCodeShec() override {}
 
-  int create_rule(const string &name,
-                 CrushWrapper &crush,
-                 ostream *ss) const override;
-
   unsigned int get_chunk_count() const override {
     return k + m;
   }