From 02869f8d6a6385680b48efbaa8044098a1dca572 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Wed, 29 Jan 2014 15:08:01 +0100 Subject: [PATCH] erasure-code: implement ErasureCodeJerasure::create_ruleset It is based on CrushWrapper::add_simple_ruleset, using a "default" root and "host" failure domain by default. They can be overridden with erasure-code parameters ( erasure-code-ruleset-root and erasure-code-ruleset-failure-domain respectively ). Reviewed-By: Christophe Courtaut Signed-off-by: Loic Dachary --- .../ErasureCodeJerasure.cc | 19 ++++++++++++++++++- .../ErasureCodeJerasure.h | 10 +++++++++- src/osd/ErasureCodePluginJerasure/Makefile.am | 2 +- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.cc b/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.cc index f1de0e4f8974d..a39ffbeb3a5c8 100644 --- a/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.cc +++ b/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.cc @@ -18,6 +18,8 @@ #include #include "common/debug.h" #include "ErasureCodeJerasure.h" +#include "crush/CrushWrapper.h" +#include "osd/osd_types.h" #include "vectorop.h" extern "C" { #include "jerasure.h" @@ -36,9 +38,24 @@ static ostream& _prefix(std::ostream* _dout) return *_dout << "ErasureCodeJerasure: "; } -void ErasureCodeJerasure::init(const map ¶meters) +int ErasureCodeJerasure::create_ruleset(const string &name, + CrushWrapper &crush, + ostream *ss) const +{ + return crush.add_simple_ruleset(name, ruleset_root, ruleset_failure_domain, + "indep", pg_pool_t::TYPE_ERASURE, ss); +} + +void ErasureCodeJerasure::init(const map ¶meters) { dout(10) << "technique=" << technique << dendl; + map::const_iterator parameter; + parameter = parameters.find("erasure-code-ruleset-root"); + if (parameter != parameters.end()) + ruleset_root = parameter->second; + parameter = parameters.find("erasure-code-ruleset-failure-domain"); + if (parameter != parameters.end()) + ruleset_failure_domain = parameter->second; parse(parameters); prepare(); } diff --git a/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.h b/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.h index a0db6a02b1c4d..042d1b495d8d8 100644 --- a/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.h +++ b/src/osd/ErasureCodePluginJerasure/ErasureCodeJerasure.h @@ -25,13 +25,21 @@ public: int m; int w; const char *technique; + string ruleset_root; + string ruleset_failure_domain; ErasureCodeJerasure(const char *_technique) : - technique(_technique) + technique(_technique), + ruleset_root("default"), + ruleset_failure_domain("host") {} virtual ~ErasureCodeJerasure() {} + virtual int create_ruleset(const string &name, + CrushWrapper &crush, + ostream *ss) const; + virtual unsigned int get_chunk_count() const { return k + m; } diff --git a/src/osd/ErasureCodePluginJerasure/Makefile.am b/src/osd/ErasureCodePluginJerasure/Makefile.am index 51ef83bf964d5..3f03106c54d25 100644 --- a/src/osd/ErasureCodePluginJerasure/Makefile.am +++ b/src/osd/ErasureCodePluginJerasure/Makefile.am @@ -19,7 +19,7 @@ noinst_HEADERS += \ libec_jerasure_la_CFLAGS = ${AM_CFLAGS} libec_jerasure_la_CXXFLAGS= ${AM_CXXFLAGS} -libec_jerasure_la_LIBADD = $(PTHREAD_LIBS) $(EXTRALIBS) +libec_jerasure_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS) libec_jerasure_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 if LINUX libec_jerasure_la_LDFLAGS += -export-symbols-regex '.*__erasure_code_.*' -- 2.39.5