From: Loic Dachary Date: Sun, 2 Feb 2014 08:59:52 +0000 (+0100) Subject: mon: erasure code plugin loader helper X-Git-Tag: v0.78~226^2~16 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=caefb8a29a05ec1a049d0d3159567a444261d793;p=ceph.git mon: erasure code plugin loader helper The get_erasure_code helper loads the erasure code plugin found in the erasure-code-plugin string of the properties argument. It is meant to be used to query the plugin to determine the desired size of a pool, the more suitable ruleset to use etc. Reviewed-By: Christophe Courtaut Signed-off-by: Loic Dachary --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 0a733684d2d7..54e2285f5c8e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2742,6 +2742,23 @@ int OSDMonitor::prepare_new_pool(MPoolOp *m) properties, pg_pool_t::TYPE_REPLICATED, ss); } +int OSDMonitor::get_erasure_code(const map &properties, + ErasureCodeInterfaceRef *erasure_code, + stringstream &ss) +{ + map::const_iterator plugin = + properties.find("erasure-code-plugin"); + if (plugin == properties.end()) { + ss << "cannot determine the erasure code plugin" + << " because erasure-code-plugin is not in the properties " + << properties; + return -EINVAL; + } + ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance(); + return instance.factory(plugin->second, properties, erasure_code); +} + + int OSDMonitor::prepare_pool_properties(const unsigned pool_type, const vector &properties, map *properties_map, diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 83ca34dab076..a490d37e5c5a 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -37,6 +37,8 @@ class Monitor; #include "messages/MOSDFailure.h" #include "messages/MPoolOp.h" +#include "osd/ErasureCodeInterface.h" + #define OSD_METADATA_PREFIX "osd_metadata" /// information about a particular peer's failure reports for one osd @@ -236,6 +238,9 @@ private: bool prepare_pool_op (MPoolOp *m); bool prepare_pool_op_create (MPoolOp *m); bool prepare_pool_op_delete(MPoolOp *m); + int get_erasure_code(const map &properties, + ErasureCodeInterfaceRef *erasure_code, + stringstream &ss); int prepare_pool_properties(const unsigned pool_type, const vector &properties, map *properties_map,