From: Loic Dachary Date: Wed, 29 Jan 2014 14:06:41 +0000 (+0100) Subject: erasure-code: implement example create_ruleset X-Git-Tag: v0.78~226^2~23 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f019c906b6ea5bd43d6d8ed21b4e407da04a28f1;p=ceph.git erasure-code: implement example create_ruleset And the associated unit tests. Reviewed-By: Christophe Courtaut Signed-off-by: Loic Dachary --- diff --git a/src/test/Makefile.am b/src/test/Makefile.am index 83b83f4676ef..84c9ef93874c 100644 --- a/src/test/Makefile.am +++ b/src/test/Makefile.am @@ -364,7 +364,7 @@ check_PROGRAMS += unittest_ceph_compatset libec_example_la_SOURCES = test/osd/ErasureCodePluginExample.cc libec_example_la_CFLAGS = ${AM_CFLAGS} libec_example_la_CXXFLAGS= ${AM_CXXFLAGS} -libec_example_la_LIBADD = $(PTHREAD_LIBS) $(EXTRALIBS) +libec_example_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS) libec_example_la_LDFLAGS = ${AM_LDFLAGS} -export-symbols-regex '.*__erasure_code_.*' erasure_codelib_LTLIBRARIES += libec_example.la diff --git a/src/test/osd/ErasureCodeExample.h b/src/test/osd/ErasureCodeExample.h index ab2bcf02909d..bd36b1d73c43 100644 --- a/src/test/osd/ErasureCodeExample.h +++ b/src/test/osd/ErasureCodeExample.h @@ -21,6 +21,9 @@ #include #include #include + +#include "crush/CrushWrapper.h" +#include "osd/osd_types.h" #include "osd/ErasureCodeInterface.h" #define FIRST_DATA_CHUNK 0 @@ -35,6 +38,13 @@ class ErasureCodeExample : public ErasureCodeInterface { public: virtual ~ErasureCodeExample() {} + + virtual int create_ruleset(const string &name, + CrushWrapper &crush, + ostream *ss) const { + return crush.add_simple_ruleset(name, "default", "host", + "indep", pg_pool_t::TYPE_ERASURE, ss); + } virtual int minimum_to_decode(const set &want_to_read, const set &available_chunks, diff --git a/src/test/osd/TestErasureCodeExample.cc b/src/test/osd/TestErasureCodeExample.cc index faa863ec2acc..4df0762419b5 100644 --- a/src/test/osd/TestErasureCodeExample.cc +++ b/src/test/osd/TestErasureCodeExample.cc @@ -14,6 +14,7 @@ * */ +#include "include/stringify.h" #include "global/global_init.h" #include "ErasureCodeExample.h" #include "common/ceph_argparse.h" @@ -201,6 +202,37 @@ TEST(ErasureCodeExample, decode) EXPECT_EQ(-ERANGE, example.decode_concat(degraded, &out)); } +TEST(ErasureCodeExample, create_ruleset) +{ + CrushWrapper *c = new CrushWrapper; + c->create(); + c->set_type_name(2, "root"); + c->set_type_name(1, "host"); + c->set_type_name(0, "osd"); + + int rootno; + c->add_bucket(0, CRUSH_BUCKET_STRAW, CRUSH_HASH_RJENKINS1, + 5, 0, NULL, NULL, &rootno); + c->set_item_name(rootno, "default"); + + map loc; + loc["root"] = "default"; + + int num_host = 2; + int num_osd = 5; + int osd = 0; + for (int h=0; hinsert_item(g_ceph_context, osd, 1.0, string("osd.") + stringify(osd), loc); + } + } + + stringstream ss; + ErasureCodeExample example; + EXPECT_EQ(0, example.create_ruleset("myrule", *c, &ss)); +} + int main(int argc, char **argv) { vector args; argv_to_vec(argc, (const char **)argv, args);