From: Loic Dachary Date: Thu, 29 Aug 2013 13:12:32 +0000 (+0200) Subject: ErasureCodeJerasure: define technique Liber8tion X-Git-Tag: v0.71~129^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e9e53912503259326a7877bda31c4360302c2c34;p=ceph.git ErasureCodeJerasure: define technique Liber8tion 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 --- diff --git a/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.cc b/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.cc index 7fb95177779..25821274081 100644 --- a/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.cc +++ b/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.cc @@ -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 ¶meters) { + 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); +} diff --git a/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.h b/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.h index ddf6c7dcfd1..7728751c383 100644 --- a/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.h +++ b/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.h @@ -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 ¶meters); + virtual void prepare(); +}; + #endif diff --git a/src/test/osd/TestErasureCodeJerasure.cc b/src/test/osd/TestErasureCodeJerasure.cc index dfbd740e363..266b1735659 100644 --- a/src/test/osd/TestErasureCodeJerasure.cc +++ b/src/test/osd/TestErasureCodeJerasure.cc @@ -32,6 +32,7 @@ typedef ::testing::Types< ErasureCodeJerasureCauchyGood, ErasureCodeJerasureLiberation, ErasureCodeJerasureBlaumRoth, + ErasureCodeJerasureLiber8tion > JerasureTypes; TYPED_TEST_CASE(ErasureCodeTest, JerasureTypes);