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 <christophe.courtaut@gmail.com>
Signed-off-by: Loic Dachary <loic@dachary.org>
This commit is contained in:
Loic Dachary 2014-02-02 09:59:52 +01:00
parent 61c45fe03d
commit caefb8a29a
2 changed files with 22 additions and 0 deletions

View File

@ -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<string,string> &properties,
ErasureCodeInterfaceRef *erasure_code,
stringstream &ss)
{
map<string,string>::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<string> &properties,
map<string,string> *properties_map,

View File

@ -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<string,string> &properties,
ErasureCodeInterfaceRef *erasure_code,
stringstream &ss);
int prepare_pool_properties(const unsigned pool_type,
const vector<string> &properties,
map<string,string> *properties_map,