From: Loic Dachary Date: Mon, 1 Jun 2015 17:50:05 +0000 (+0200) Subject: erasure-code: implement get_profile for every plugins X-Git-Tag: v9.0.2~67^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=77e5330da193a1a05e1daf73a8a07aa692f2c6bb;p=ceph.git erasure-code: implement get_profile for every plugins The ErasureCode::init function is implemented to store the profile and is called by the init method of each plugin. The ErasureCode::get_profile function is implemented to return the profile that was stored. A specialized ostream<< function is implemented to facilitate the display of the profile. Signed-off-by: Loic Dachary --- diff --git a/src/erasure-code/ErasureCode.h b/src/erasure-code/ErasureCode.h index 8622e7b79909..ee41935b55fb 100644 --- a/src/erasure-code/ErasureCode.h +++ b/src/erasure-code/ErasureCode.h @@ -33,9 +33,19 @@ namespace ceph { static const unsigned SIMD_ALIGN; vector chunk_mapping; + ErasureCodeProfile _profile; virtual ~ErasureCode() {} + virtual int init(ErasureCodeProfile &profile, ostream *ss) { + _profile = profile; + return 0; + } + + virtual const ErasureCodeProfile &get_profile() const { + return _profile; + } + virtual unsigned int get_coding_chunk_count() const { return get_chunk_count() - get_data_chunk_count(); } diff --git a/src/erasure-code/ErasureCodeInterface.h b/src/erasure-code/ErasureCodeInterface.h index 865f22479e44..9e04348cd297 100644 --- a/src/erasure-code/ErasureCodeInterface.h +++ b/src/erasure-code/ErasureCodeInterface.h @@ -153,6 +153,20 @@ using namespace std; namespace ceph { typedef map ErasureCodeProfile; + + inline ostream& operator<<(ostream& out, const ErasureCodeProfile& profile) { + out << "{"; + for (ErasureCodeProfile::const_iterator it = profile.begin(); + it != profile.end(); + ++it) { + if (it != profile.begin()) out << ","; + out << it->first << "=" << it->second; + } + out << "}"; + return out; + } + + class ErasureCodeInterface { public: virtual ~ErasureCodeInterface() {} diff --git a/src/erasure-code/isa/ErasureCodeIsa.cc b/src/erasure-code/isa/ErasureCodeIsa.cc index 5f94b661e47d..50ad57e8eac8 100644 --- a/src/erasure-code/isa/ErasureCodeIsa.cc +++ b/src/erasure-code/isa/ErasureCodeIsa.cc @@ -80,6 +80,7 @@ ErasureCodeIsa::init(ErasureCodeProfile &profile, ostream *ss) if (err) return err; prepare(); + ErasureCode::init(profile, ss); return err; } diff --git a/src/erasure-code/jerasure/ErasureCodeJerasure.cc b/src/erasure-code/jerasure/ErasureCodeJerasure.cc index a5410118074e..8992aa8a89f2 100644 --- a/src/erasure-code/jerasure/ErasureCodeJerasure.cc +++ b/src/erasure-code/jerasure/ErasureCodeJerasure.cc @@ -67,6 +67,7 @@ int ErasureCodeJerasure::init(ErasureCodeProfile& profile, ostream *ss) if (err) return err; prepare(); + ErasureCode::init(profile, ss); return err; } diff --git a/src/erasure-code/lrc/ErasureCodeLrc.cc b/src/erasure-code/lrc/ErasureCodeLrc.cc index 56a6412efd92..003c696f4ff5 100644 --- a/src/erasure-code/lrc/ErasureCodeLrc.cc +++ b/src/erasure-code/lrc/ErasureCodeLrc.cc @@ -534,6 +534,7 @@ int ErasureCodeLrc::init(ErasureCodeProfile &profile, profile.erase("mapping"); profile.erase("layers"); } + ErasureCode::init(profile, ss); return 0; } diff --git a/src/erasure-code/shec/ErasureCodeShec.cc b/src/erasure-code/shec/ErasureCodeShec.cc index c60a9562a6eb..148525e6bbff 100644 --- a/src/erasure-code/shec/ErasureCodeShec.cc +++ b/src/erasure-code/shec/ErasureCodeShec.cc @@ -68,6 +68,7 @@ int ErasureCodeShec::init(ErasureCodeProfile &profile, if (err) return err; prepare(); + ErasureCode::init(profile, ss); return err; } diff --git a/src/test/erasure-code/ErasureCodeExample.h b/src/test/erasure-code/ErasureCodeExample.h index c45d7f78d9a5..dce35d18e557 100644 --- a/src/test/erasure-code/ErasureCodeExample.h +++ b/src/test/erasure-code/ErasureCodeExample.h @@ -39,10 +39,6 @@ class ErasureCodeExample : public ErasureCode { public: virtual ~ErasureCodeExample() {} - virtual int init(ErasureCodeProfile &profile, ostream *ss) { - return 0; - } - virtual int create_ruleset(const string &name, CrushWrapper &crush, ostream *ss) const { diff --git a/src/test/erasure-code/ErasureCodePluginExample.cc b/src/test/erasure-code/ErasureCodePluginExample.cc index 96e4c462b213..5806fbd201fe 100644 --- a/src/test/erasure-code/ErasureCodePluginExample.cc +++ b/src/test/erasure-code/ErasureCodePluginExample.cc @@ -28,6 +28,7 @@ public: ostream *ss) { *erasure_code = ErasureCodeInterfaceRef(new ErasureCodeExample()); + (*erasure_code)->init(profile, ss); return 0; } }; diff --git a/src/test/erasure-code/Makefile.am b/src/test/erasure-code/Makefile.am index 327660b200ee..ee74be35dffe 100644 --- a/src/test/erasure-code/Makefile.am +++ b/src/test/erasure-code/Makefile.am @@ -35,7 +35,9 @@ ceph_erasure_code_LDADD += -ldl endif bin_DEBUGPROGRAMS += ceph_erasure_code -libec_example_la_SOURCES = test/erasure-code/ErasureCodePluginExample.cc +libec_example_la_SOURCES = \ + erasure-code/ErasureCode.cc \ + test/erasure-code/ErasureCodePluginExample.cc test/erasure-code/ErasureCodePluginExample.cc: ./ceph_ver.h libec_example_la_CFLAGS = ${AM_CFLAGS} libec_example_la_CXXFLAGS= ${AM_CXXFLAGS}