]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ErasureCodeJerasure: define technique Liber8tion
authorLoic Dachary <loic@dachary.org>
Thu, 29 Aug 2013 13:12:32 +0000 (15:12 +0200)
committerLoic Dachary <loic@dachary.org>
Tue, 10 Sep 2013 14:46:22 +0000 (16:46 +0200)
technique == "liber8tion"

       ErasureCodeInterface (abstract)
       |
       -> ErasureCodeJerasure (abstract)
          |
          -> ErasureCodeJerasureLiberation
             |
             -> ErasureCodeJerasureLiber8tion
                | == liber8tion

Derived from Liberation it overloads the parse and prepare methods.

parse : default to K=2 and packetsize = 8.
If any of the following constraints is not satisfied, revert to the
default:

  * K <= 8
  * packetsize must not be zero

prepare uses liber8tion_coding_bitmatrix

https://github.com/dachary/ceph/tree/wip-5879 refs #5879

Signed-off-by: Loic Dachary <loic@dachary.org>
src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.cc
src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.h
src/test/osd/TestErasureCodeJerasure.cc

index 7fb95177779e0dafd653c3b043355cded1a003d0..25821274081d350fb2cb6a48baa5c8d24dbf3590 100644 (file)
@@ -357,3 +357,33 @@ void ErasureCodeJerasureBlaumRoth::prepare() {
   bitmatrix = blaum_roth_coding_bitmatrix(k, w);
   schedule = jerasure_smart_bitmatrix_to_schedule(k, m, w, bitmatrix);
 }
+
+// 
+// ErasureCodeJerasureLiber8tion
+//
+void ErasureCodeJerasureLiber8tion::parse(const map<std::string,std::string> &parameters) {
+  k = to_int("erasure-code-k", parameters, DEFAULT_K);
+  m = DEFAULT_M;
+  w = DEFAULT_W;
+  packetsize = to_int("erasure-code-packetsize", parameters, DEFAULT_PACKETSIZE);
+
+  bool error = false;
+  if (k > w) {
+    derr << "k=" << k << " must be less than or equal to w=" << w << dendl;
+    error = true;
+  }
+  if (packetsize == 0) {
+    derr << "packetsize=" << packetsize << " must be set" << dendl;
+    error = true;
+  }
+  if (error) {
+    derr << "reverting to k=" << DEFAULT_K << ", packetsize=" << DEFAULT_PACKETSIZE << dendl;
+    k = DEFAULT_K;
+    packetsize = DEFAULT_PACKETSIZE;
+  }
+}
+
+void ErasureCodeJerasureLiber8tion::prepare() {
+  bitmatrix = liber8tion_coding_bitmatrix(k);
+  schedule = jerasure_smart_bitmatrix_to_schedule(k, m, w, bitmatrix);
+}
index ddf6c7dcfd1620125d2bf96160a88c2084d90f26..7728751c3834e8f50a78767045e157d36a4b57d4 100644 (file)
@@ -209,4 +209,19 @@ public:
 
   virtual void prepare();
 };
+
+class ErasureCodeJerasureLiber8tion : public ErasureCodeJerasureLiberation {
+public:
+  static const int DEFAULT_K = 2;
+  static const int DEFAULT_M = 2;
+  static const int DEFAULT_W = 8;
+
+  ErasureCodeJerasureLiber8tion() :
+    ErasureCodeJerasureLiberation("liber8tion")
+  {}
+
+  virtual void parse(const map<std::string,std::string> &parameters);
+  virtual void prepare();
+};
+
 #endif
index dfbd740e363f2b66860f4cf80be854380e089298..266b1735659aae840dcd5d2babecee13cc98bf8e 100644 (file)
@@ -32,6 +32,7 @@ typedef ::testing::Types<
   ErasureCodeJerasureCauchyGood,
   ErasureCodeJerasureLiberation,
   ErasureCodeJerasureBlaumRoth,
+  ErasureCodeJerasureLiber8tion
 > JerasureTypes;
 TYPED_TEST_CASE(ErasureCodeTest, JerasureTypes);