From caefb8a29a05ec1a049d0d3159567a444261d793 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Sun, 2 Feb 2014 09:59:52 +0100 Subject: [PATCH] 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 --- src/mon/OSDMonitor.cc | 17 +++++++++++++++++ src/mon/OSDMonitor.h | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 0a733684d2d..54e2285f5c8 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 83ca34dab07..a490d37e5c5 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, -- 2.47.3