]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
erasure-code: implement get_profile for every plugins
authorLoic Dachary <ldachary@redhat.com>
Mon, 1 Jun 2015 17:50:05 +0000 (19:50 +0200)
committerLoic Dachary <ldachary@redhat.com>
Mon, 1 Jun 2015 19:52:09 +0000 (21:52 +0200)
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 <ldachary@redhat.com>
src/erasure-code/ErasureCode.h
src/erasure-code/ErasureCodeInterface.h
src/erasure-code/isa/ErasureCodeIsa.cc
src/erasure-code/jerasure/ErasureCodeJerasure.cc
src/erasure-code/lrc/ErasureCodeLrc.cc
src/erasure-code/shec/ErasureCodeShec.cc
src/test/erasure-code/ErasureCodeExample.h
src/test/erasure-code/ErasureCodePluginExample.cc
src/test/erasure-code/Makefile.am

index 8622e7b79909dc8f30eb3342327d3da0a0620787..ee41935b55fb6662d25f10651c2b8970d45c38a4 100644 (file)
@@ -33,9 +33,19 @@ namespace ceph {
     static const unsigned SIMD_ALIGN;
 
     vector<int> 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();
     }
index 865f22479e449b799354f2a9f82e5a888086923c..9e04348cd297db79c3c19e487a14774faa73dd6b 100644 (file)
@@ -153,6 +153,20 @@ using namespace std;
 namespace ceph {
 
   typedef map<std::string,std::string> 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() {}
index 5f94b661e47dad7c1e01368d610118cc0bd543b8..50ad57e8eac85749c59bf93753f27af864911e2c 100644 (file)
@@ -80,6 +80,7 @@ ErasureCodeIsa::init(ErasureCodeProfile &profile, ostream *ss)
   if (err)
     return err;
   prepare();
+  ErasureCode::init(profile, ss);
   return err;
 }
 
index a5410118074e3eb2bd29ca7d431e4cbc234a873f..8992aa8a89f2fb83f5c5dea491154ec3a3db2885 100644 (file)
@@ -67,6 +67,7 @@ int ErasureCodeJerasure::init(ErasureCodeProfile& profile, ostream *ss)
   if (err)
     return err;
   prepare();
+  ErasureCode::init(profile, ss);
   return err;
 }
 
index 56a6412efd92d42b36624799eb715b3cf037d247..003c696f4ff57b013b7d053bf0f30eb86bf0cf4f 100644 (file)
@@ -534,6 +534,7 @@ int ErasureCodeLrc::init(ErasureCodeProfile &profile,
     profile.erase("mapping");
     profile.erase("layers");
   }
+  ErasureCode::init(profile, ss);
   return 0;
 }
 
index c60a9562a6eb717813713f8085332055e89ead12..148525e6bbff2208110f779983655055e348da68 100644 (file)
@@ -68,6 +68,7 @@ int ErasureCodeShec::init(ErasureCodeProfile &profile,
   if (err)
     return err;
   prepare();
+  ErasureCode::init(profile, ss);
   return err;
 }
 
index c45d7f78d9a5bd05c601424d37f80e8598be0d11..dce35d18e557f1a218e91b561a572933dad93714 100644 (file)
@@ -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 {
index 96e4c462b21348f3a1d830471be89d5c5bb87d8b..5806fbd201fea774b9a2fb4adb6673b128b69191 100644 (file)
@@ -28,6 +28,7 @@ public:
                      ostream *ss)
   {
     *erasure_code = ErasureCodeInterfaceRef(new ErasureCodeExample());
+    (*erasure_code)->init(profile, ss);
     return 0;
   }
 };
index 327660b200eea9892a79edad17df60ff58334238..ee74be35dffe628697c67cfb2ff67f9e0da6b96c 100644 (file)
@@ -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}