#include "common/strtol.h"
#include "include/buffer.h"
+#include "crush/CrushWrapper.h"
+#include "osd/osd_types.h"
using namespace std;
const unsigned ErasureCode::SIMD_ALIGN = 32;
+#define DEFAULT_RULE_ROOT "default"
+#define DEFAULT_RULE_FAILURE_DOMAIN "host"
+
+int ErasureCode::init(
+ ErasureCodeProfile &profile,
+ std::ostream *ss)
+{
+ int err = 0;
+ err |= to_string("crush-root", profile,
+ &rule_root,
+ DEFAULT_RULE_ROOT, ss);
+ err |= to_string("crush-failure-domain", profile,
+ &rule_failure_domain,
+ DEFAULT_RULE_FAILURE_DOMAIN, ss);
+ if (err)
+ return err;
+ _profile = profile;
+ return 0;
+}
+
+int ErasureCode::create_rule(
+ const std::string &name,
+ CrushWrapper &crush,
+ std::ostream *ss) const
+{
+ int ruleid = crush.add_simple_rule(
+ name,
+ rule_root,
+ rule_failure_domain,
+ "",
+ "indep",
+ pg_pool_t::TYPE_ERASURE,
+ ss);
+
+ if (ruleid < 0)
+ return ruleid;
+
+ crush.set_rule_mask_max_size(ruleid, get_chunk_count());
+ return ruleid;
+}
+
int ErasureCode::sanity_check_k(int k, ostream *ss)
{
if (k < 2) {
std::vector<int> chunk_mapping;
ErasureCodeProfile _profile;
+ // for CRUSH rule
+ std::string rule_root;
+ std::string rule_failure_domain;
+
~ErasureCode() override {}
- int init(ErasureCodeProfile &profile, std::ostream *ss) override {
- _profile = profile;
- return 0;
- }
+ int init(ErasureCodeProfile &profile, std::ostream *ss) override;
const ErasureCodeProfile &get_profile() const override {
return _profile;
}
+ int create_rule(const std::string &name,
+ CrushWrapper &crush,
+ std::ostream *ss) const;
+
int sanity_check_k(int k, std::ostream *ss);
unsigned int get_coding_chunk_count() const override {
#include "common/debug.h"
#include "ErasureCodeIsa.h"
#include "xor_op.h"
-#include "crush/CrushWrapper.h"
-#include "osd/osd_types.h"
+#include "include/assert.h"
using namespace std;
// -----------------------------------------------------------------------------
const std::string ErasureCodeIsaDefault::DEFAULT_K("7");
const std::string ErasureCodeIsaDefault::DEFAULT_M("3");
-int
-ErasureCodeIsa::create_rule(const string &name,
- CrushWrapper &crush,
- ostream *ss) const
-{
- int ruleid = crush.add_simple_rule(
- name,
- rule_root,
- rule_failure_domain,
- "",
- "indep",
- pg_pool_t::TYPE_ERASURE,
- ss);
-
- if (ruleid < 0)
- return ruleid;
- else {
- crush.set_rule_mask_max_size(ruleid, get_chunk_count());
- return ruleid;
- }
-}
// -----------------------------------------------------------------------------
ErasureCodeIsa::init(ErasureCodeProfile &profile, ostream *ss)
{
int err = 0;
- err |= to_string("crush-root", profile,
- &rule_root,
- DEFAULT_RULE_ROOT, ss);
- err |= to_string("crush-failure-domain", profile,
- &rule_failure_domain,
- DEFAULT_RULE_FAILURE_DOMAIN, ss);
err |= parse(profile, ss);
if (err)
return err;
prepare();
- ErasureCode::init(profile, ss);
- return err;
+ return ErasureCode::init(profile, ss);
}
// -----------------------------------------------------------------------------
#include "ErasureCodeIsaTableCache.h"
// -----------------------------------------------------------------------------
-#define DEFAULT_RULE_ROOT "default"
-#define DEFAULT_RULE_FAILURE_DOMAIN "host"
-
class ErasureCodeIsa : public ErasureCode {
public:
ErasureCodeIsaTableCache &tcache;
const char *technique;
- std::string rule_root;
- std::string rule_failure_domain;
ErasureCodeIsa(const char *_technique,
ErasureCodeIsaTableCache &_tcache) :
m(0),
w(0),
tcache(_tcache),
- technique(_technique),
- rule_root(DEFAULT_RULE_ROOT),
- rule_failure_domain(DEFAULT_RULE_FAILURE_DOMAIN)
+ technique(_technique)
{
}
{
}
- int create_rule(const std::string &name,
- CrushWrapper &crush,
- std::ostream *ss) const override;
-
unsigned int
get_chunk_count() const override
{
#include "common/debug.h"
#include "ErasureCodeJerasure.h"
-#include "crush/CrushWrapper.h"
-#include "osd/osd_types.h"
using namespace std;
return *_dout << "ErasureCodeJerasure: ";
}
-int ErasureCodeJerasure::create_rule(const string &name,
- CrushWrapper &crush,
- ostream *ss) const
-{
- int ruleid = crush.add_simple_rule(
- name,
- rule_root,
- rule_failure_domain,
- "",
- "indep",
- pg_pool_t::TYPE_ERASURE,
- ss);
- if (ruleid < 0)
- return ruleid;
- else {
- crush.set_rule_mask_max_size(ruleid, get_chunk_count());
- return ruleid;
- }
-}
int ErasureCodeJerasure::init(ErasureCodeProfile& profile, ostream *ss)
{
int err = 0;
dout(10) << "technique=" << technique << dendl;
profile["technique"] = technique;
- err |= to_string("crush-root", profile,
- &rule_root,
- DEFAULT_RULE_ROOT, ss);
- err |= to_string("crush-failure-domain", profile,
- &rule_failure_domain,
- DEFAULT_RULE_FAILURE_DOMAIN, ss);
err |= parse(profile, ss);
if (err)
return err;
prepare();
- ErasureCode::init(profile, ss);
- return err;
+ return ErasureCode::init(profile, ss);
}
int ErasureCodeJerasure::parse(ErasureCodeProfile &profile,
#include "erasure-code/ErasureCode.h"
-#define DEFAULT_RULE_ROOT "default"
-#define DEFAULT_RULE_FAILURE_DOMAIN "host"
-
class ErasureCodeJerasure : public ErasureCode {
public:
int k;
w(0),
DEFAULT_W("8"),
technique(_technique),
- rule_root(DEFAULT_RULE_ROOT),
- rule_failure_domain(DEFAULT_RULE_FAILURE_DOMAIN),
per_chunk_alignment(false)
{}
~ErasureCodeJerasure() override {}
- int create_rule(const std::string &name,
- CrushWrapper &crush,
- std::ostream *ss) const override;
-
unsigned int get_chunk_count() const override {
return k + m;
}
#include "common/debug.h"
#include "ErasureCodeShec.h"
-#include "crush/CrushWrapper.h"
-#include "osd/osd_types.h"
extern "C" {
#include "jerasure/include/jerasure.h"
#include "jerasure/include/galois.h"
return *_dout << "ErasureCodeShec: ";
}
-int ErasureCodeShec::create_rule(const string &name,
- CrushWrapper &crush,
- ostream *ss) const
-{
- int ruleid = crush.add_simple_rule(
- name,
- rule_root,
- rule_failure_domain,
- "",
- "indep",
- pg_pool_t::TYPE_ERASURE,
- ss);
- if (ruleid < 0) {
- return ruleid;
- } else {
- crush.set_rule_mask_max_size(ruleid, get_chunk_count());
- return ruleid;
- }
-}
-
int ErasureCodeShec::init(ErasureCodeProfile &profile,
ostream *ss)
{
int err = 0;
- err |= ErasureCode::to_string("crush-root", profile,
- &rule_root,
- DEFAULT_RULE_ROOT, ss);
- err |= ErasureCode::to_string("crush-failure-domain", profile,
- &rule_failure_domain,
- DEFAULT_RULE_FAILURE_DOMAIN, ss);
err |= parse(profile);
if (err)
return err;
prepare();
- ErasureCode::init(profile, ss);
- return err;
+ return ErasureCode::init(profile, ss);
}
unsigned int ErasureCodeShec::get_chunk_size(unsigned int object_size) const
#include "erasure-code/ErasureCode.h"
#include "ErasureCodeShecTableCache.h"
-#define DEFAULT_RULE_ROOT "default"
-#define DEFAULT_RULE_FAILURE_DOMAIN "host"
-
class ErasureCodeShec : public ErasureCode {
public:
int w;
int DEFAULT_W;
int technique;
- string rule_root;
- string rule_failure_domain;
int *matrix;
ErasureCodeShec(const int _technique,
w(0),
DEFAULT_W(8),
technique(_technique),
- rule_root(DEFAULT_RULE_ROOT),
- rule_failure_domain(DEFAULT_RULE_FAILURE_DOMAIN),
matrix(0)
{}
~ErasureCodeShec() override {}
- int create_rule(const string &name,
- CrushWrapper &crush,
- ostream *ss) const override;
-
unsigned int get_chunk_count() const override {
return k + m;
}