From 177202e4df0778350714b1ab746cde7d7a658c15 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Fri, 29 Aug 2014 23:58:34 +0200 Subject: [PATCH] erasure-code: lowercase LRC plugin name So that all erasure code plugins are lowercase. Signed-off-by: Loic Dachary --- doc/rados/operations/erasure-code-lrc.rst | 22 +- src/erasure-code/LRC/Makefile.am | 21 -- src/erasure-code/Makefile.am | 2 +- .../ErasureCodeLrc.cc} | 73 ++-- .../ErasureCodeLRC.h => lrc/ErasureCodeLrc.h} | 7 +- .../ErasureCodePluginLrc.cc} | 19 +- src/erasure-code/lrc/Makefile.am | 21 ++ src/test/erasure-code/Makefile.am | 26 +- ...rasureCodeLRC.cc => TestErasureCodeLrc.cc} | 329 +++++++++--------- ...uginLRC.cc => TestErasureCodePluginLrc.cc} | 7 +- src/test/erasure-code/test-erasure-code.sh | 18 +- src/test/mon/osd-pool-create.sh | 4 +- 12 files changed, 277 insertions(+), 272 deletions(-) delete mode 100644 src/erasure-code/LRC/Makefile.am rename src/erasure-code/{LRC/ErasureCodeLRC.cc => lrc/ErasureCodeLrc.cc} (94%) rename src/erasure-code/{LRC/ErasureCodeLRC.h => lrc/ErasureCodeLrc.h} (96%) rename src/erasure-code/{LRC/ErasureCodePluginLRC.cc => lrc/ErasureCodePluginLrc.cc} (80%) create mode 100644 src/erasure-code/lrc/Makefile.am rename src/test/erasure-code/{TestErasureCodeLRC.cc => TestErasureCodeLrc.cc} (71%) rename src/test/erasure-code/{TestErasureCodePluginLRC.cc => TestErasureCodePluginLrc.cc} (87%) diff --git a/doc/rados/operations/erasure-code-lrc.rst b/doc/rados/operations/erasure-code-lrc.rst index 98cc42aa73ec..17500c85b57a 100644 --- a/doc/rados/operations/erasure-code-lrc.rst +++ b/doc/rados/operations/erasure-code-lrc.rst @@ -8,8 +8,8 @@ from all the others. For instance if *jerasure* is configured with *k=8* and *m=4*, losing one OSD requires reading from the eleven others to repair. -The *LRC* erasure code plugin creates local parity chunks to be able -to recover using less OSDs. For instance if *LRC* is configured with +The *lrc* erasure code plugin creates local parity chunks to be able +to recover using less OSDs. For instance if *lrc* is configured with *k=8*, *m=4* and *l=4*, it will create an additional parity chunk for every four OSDs. When a single OSD is lost, it can be recovered with only four OSDs instead of eleven. @@ -25,7 +25,7 @@ connected to the same switch, reduced bandwidth usage can actually be observed.:: $ ceph osd erasure-code-profile set LRCprofile \ - plugin=LRC \ + plugin=lrc \ k=4 m=2 l=3 \ ruleset-failure-domain=host $ ceph osd pool create lrcpool 12 12 erasure LRCprofile @@ -38,20 +38,20 @@ In Firefly the reduced bandwidth will only be observed if the primary OSD is in the same rack as the lost chunk.:: $ ceph osd erasure-code-profile set LRCprofile \ - plugin=LRC \ + plugin=lrc \ k=4 m=2 l=3 \ ruleset-locality=rack \ ruleset-failure-domain=host $ ceph osd pool create lrcpool 12 12 erasure LRCprofile -Create an LRC profile +Create an lrc profile ===================== -To create a new LRC erasure code profile:: +To create a new lrc erasure code profile:: ceph osd erasure-code-profile set {name} \ - plugin=LRC \ + plugin=lrc \ k={data-chunks} \ m={coding-chunks} \ l={locality} \ @@ -155,7 +155,7 @@ define locality sets, for instance datacenters and racks into datacenters. The **k/m/l** are implemented by generating a low level configuration. -The *LRC* erasure code plugin recursively applies erasure code +The *lrc* erasure code plugin recursively applies erasure code techniques so that recovering from the loss of some chunks only requires a subset of the available chunks, most of the time. @@ -182,7 +182,7 @@ implies *K=2*, the *c* implies *M=1* and the *jerasure* plugin is used by default.:: $ ceph osd erasure-code-profile set LRCprofile \ - plugin=LRC \ + plugin=lrc \ mapping=DD_ \ layers='[ [ "DDc", "" ] ]' $ ceph osd pool create lrcpool 12 12 erasure LRCprofile @@ -196,7 +196,7 @@ observed. It is equivalent to **k=4**, **m=2** and **l=3** although the layout of the chunks is different:: $ ceph osd erasure-code-profile set LRCprofile \ - plugin=LRC \ + plugin=lrc \ mapping=__DD__DD \ layers='[ [ "_cDD_cDD", "" ], @@ -213,7 +213,7 @@ In Firefly the reduced bandwidth will only be observed if the primary OSD is in the same rack as the lost chunk.:: $ ceph osd erasure-code-profile set LRCprofile \ - plugin=LRC \ + plugin=lrc \ mapping=__DD__DD \ layers='[ [ "_cDD_cDD", "" ], diff --git a/src/erasure-code/LRC/Makefile.am b/src/erasure-code/LRC/Makefile.am deleted file mode 100644 index a1a9e23a3e64..000000000000 --- a/src/erasure-code/LRC/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ -# LRC plugin -noinst_HEADERS += \ - erasure-code/LRC/ErasureCodeLRC.h - -LRC_sources = \ - erasure-code/ErasureCode.cc \ - erasure-code/LRC/ErasureCodePluginLRC.cc \ - erasure-code/LRC/ErasureCodeLRC.cc - -erasure-code/LRC/ErasureCodePluginLRC.cc: ./ceph_ver.h - -libec_LRC_la_SOURCES = ${LRC_sources} common/str_map.cc -libec_LRC_la_CFLAGS = ${AM_CFLAGS} -libec_LRC_la_CXXFLAGS= ${AM_CXXFLAGS} -libec_LRC_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(LIBJSON_SPIRIT) -libec_LRC_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 -if LINUX -libec_LRC_la_LDFLAGS += -export-symbols-regex '.*__erasure_code_.*' -endif - -erasure_codelib_LTLIBRARIES += libec_LRC.la diff --git a/src/erasure-code/Makefile.am b/src/erasure-code/Makefile.am index 223d16634aec..dc1db2113dd1 100644 --- a/src/erasure-code/Makefile.am +++ b/src/erasure-code/Makefile.am @@ -4,7 +4,7 @@ erasure_codelibdir = $(pkglibdir)/erasure-code erasure_codelib_LTLIBRARIES = include erasure-code/jerasure/Makefile.am -include erasure-code/LRC/Makefile.am +include erasure-code/lrc/Makefile.am if WITH_BETTER_YASM_ELF64 include erasure-code/isa/Makefile.am diff --git a/src/erasure-code/LRC/ErasureCodeLRC.cc b/src/erasure-code/lrc/ErasureCodeLrc.cc similarity index 94% rename from src/erasure-code/LRC/ErasureCodeLRC.cc rename to src/erasure-code/lrc/ErasureCodeLrc.cc index 3c69fe02f019..caa78960504e 100644 --- a/src/erasure-code/LRC/ErasureCodeLRC.cc +++ b/src/erasure-code/lrc/ErasureCodeLrc.cc @@ -4,6 +4,7 @@ * Ceph - scalable distributed file system * * Copyright (C) 2014 Cloudwatt + * Copyright (C) 2014 Red Hat * * Author: Loic Dachary * @@ -25,7 +26,7 @@ #include "erasure-code/ErasureCodePlugin.h" #include "json_spirit/json_spirit_writer.h" -#include "ErasureCodeLRC.h" +#include "ErasureCodeLrc.h" // re-include our assert to clobber boost's #include "include/assert.h" @@ -36,10 +37,10 @@ static ostream& _prefix(std::ostream* _dout) { - return *_dout << "ErasureCodeLRC: "; + return *_dout << "ErasureCodeLrc: "; } -int ErasureCodeLRC::create_ruleset(const string &name, +int ErasureCodeLrc::create_ruleset(const string &name, CrushWrapper &crush, ostream *ss) const { @@ -92,7 +93,7 @@ int ErasureCodeLRC::create_ruleset(const string &name, return ruleset; } -int ErasureCodeLRC::layers_description(const map ¶meters, +int ErasureCodeLrc::layers_description(const map ¶meters, json_spirit::mArray *description, ostream *ss) const { @@ -121,7 +122,7 @@ int ErasureCodeLRC::layers_description(const map ¶meters, return 0; } -int ErasureCodeLRC::layers_parse(string description_string, +int ErasureCodeLrc::layers_parse(string description_string, json_spirit::mArray description, ostream *ss) { @@ -148,9 +149,9 @@ int ErasureCodeLRC::layers_parse(string description_string, if (j->type() != json_spirit::str_type) { stringstream element; json_spirit::write(*j, element); - *ss << "the first element of the entry " + *ss << "the first element of the entry " << element.str() << " (first is zero) " - << position << " in " << description_string + << position << " in " << description_string << " is of type " << (*j).type() << " instead of string" << std::endl; return ERROR_LRC_STR; } @@ -163,9 +164,9 @@ int ErasureCodeLRC::layers_parse(string description_string, j->type() != json_spirit::obj_type) { stringstream element; json_spirit::write(*j, element); - *ss << "the second element of the entry " + *ss << "the second element of the entry " << element.str() << " (first is zero) " - << position << " in " << description_string + << position << " in " << description_string << " is of type " << (*j).type() << " instead of string or object" << std::endl; return ERROR_LRC_CONFIG_OPTIONS; @@ -189,9 +190,9 @@ int ErasureCodeLRC::layers_parse(string description_string, } } return 0; -} +} -int ErasureCodeLRC::layers_init() +int ErasureCodeLrc::layers_init() { ErasureCodePluginRegistry ®istry = ErasureCodePluginRegistry::instance(); int err; @@ -220,7 +221,7 @@ int ErasureCodeLRC::layers_init() layer.parameters["plugin"] = "jerasure"; if (layer.parameters.find("technique") == layer.parameters.end()) layer.parameters["technique"] = "reed_sol_van"; - if (layer.parameters.find("directory") == layer.parameters.end()) + if (layer.parameters.find("directory") == layer.parameters.end()) layer.parameters["directory"] = directory; stringstream ss; err = registry.factory(layer.parameters["plugin"], @@ -235,7 +236,7 @@ int ErasureCodeLRC::layers_init() return 0; } -int ErasureCodeLRC::layers_sanity_checks(string description_string, +int ErasureCodeLrc::layers_sanity_checks(string description_string, ostream *ss) const { int position = 0; @@ -250,8 +251,8 @@ int ErasureCodeLRC::layers_sanity_checks(string description_string, layer != layers.end(); ++layer) { if (chunk_count != layer->chunks_map.length()) { - *ss << "the first element of the array at position " - << position << " (starting from zero) " + *ss << "the first element of the array at position " + << position << " (starting from zero) " << " is the string '" << layer->chunks_map << " found in the layers parameter " << description_string << ". It is expected to be " @@ -264,7 +265,7 @@ int ErasureCodeLRC::layers_sanity_checks(string description_string, return 0; } -int ErasureCodeLRC::parse(const map ¶meters, +int ErasureCodeLrc::parse(const map ¶meters, ostream *ss) { int r = ErasureCode::parse(parameters, ss); @@ -273,11 +274,11 @@ int ErasureCodeLRC::parse(const map ¶meters, if (parameters.count("directory") != 0) directory = parameters.find("directory")->second; - + return parse_ruleset(parameters, ss); } -int ErasureCodeLRC::parse_kml(map ¶meters, +int ErasureCodeLrc::parse_kml(map ¶meters, ostream *ss) { int err = ErasureCode::parse(parameters, ss); @@ -328,7 +329,7 @@ int ErasureCodeLRC::parse_kml(map ¶meters, << parameters << std::endl; return ERROR_LRC_M_MODULO; } - + string mapping; for (int i = 0; i < local_group_count; i++) { mapping += string(k / local_group_count, 'D') + @@ -345,10 +346,10 @@ int ErasureCodeLRC::parse_kml(map ¶meters, string(m / local_group_count, 'c') + "_"; } layers += "\", \"\" ],"; - + // local layers for (int i = 0; i < local_group_count; i++) { - layers += " [ \""; + layers += " [ \""; for (int j = 0; j < local_group_count; j++) { if (i == j) layers += string(l, 'D') + "c"; @@ -383,7 +384,7 @@ int ErasureCodeLRC::parse_kml(map ¶meters, return 0; } -int ErasureCodeLRC::parse_ruleset(const map ¶meters, +int ErasureCodeLrc::parse_ruleset(const map ¶meters, ostream *ss) { map::const_iterator parameter; @@ -434,7 +435,7 @@ int ErasureCodeLRC::parse_ruleset(const map ¶meters, return 0; } -int ErasureCodeLRC::parse_ruleset_step(string description_string, +int ErasureCodeLrc::parse_ruleset_step(string description_string, json_spirit::mArray description, ostream *ss) { @@ -474,7 +475,7 @@ int ErasureCodeLRC::parse_ruleset_step(string description_string, return 0; } -int ErasureCodeLRC::init(const map ¶meters, +int ErasureCodeLrc::init(const map ¶meters, ostream *ss) { int r; @@ -520,7 +521,7 @@ int ErasureCodeLRC::init(const map ¶meters, return layers_sanity_checks(description_string, ss); } -set ErasureCodeLRC::get_erasures(const set &want, +set ErasureCodeLrc::get_erasures(const set &want, const set &available) const { set result; @@ -530,14 +531,14 @@ set ErasureCodeLRC::get_erasures(const set &want, return result; } -unsigned int ErasureCodeLRC::get_chunk_size(unsigned int object_size) const +unsigned int ErasureCodeLrc::get_chunk_size(unsigned int object_size) const { return layers.front().erasure_code->get_chunk_size(object_size); } void p(const set &s) { cerr << s; } // for gdb -int ErasureCodeLRC::minimum_to_decode(const set &want_to_read, +int ErasureCodeLrc::minimum_to_decode(const set &want_to_read, const set &available_chunks, set *minimum) { @@ -570,8 +571,8 @@ int ErasureCodeLRC::minimum_to_decode(const set &want_to_read, } // - // Case 2: - // + // Case 2: + // // Try to recover erasures with as few chunks as possible. // for (vector::reverse_iterator i = layers.rbegin(); @@ -649,7 +650,7 @@ int ErasureCodeLRC::minimum_to_decode(const set &want_to_read, } } - { + { // // Case 3: // @@ -657,14 +658,14 @@ int ErasureCodeLRC::minimum_to_decode(const set &want_to_read, // // Try to recover as many chunks as possible, even from layers // that do not contain chunks that we want, in the hope that it - // will help the upper layers. + // will help the upper layers. // set erasures_total; for (unsigned int i = 0; i < get_chunk_count(); ++i) { if (available_chunks.count(i) == 0) erasures_total.insert(i); } - + for (vector::reverse_iterator i = layers.rbegin(); i != layers.rend(); ++i) { @@ -695,7 +696,7 @@ int ErasureCodeLRC::minimum_to_decode(const set &want_to_read, if (erasures_total.empty()) { // // Do not try to be smart about what chunks are necessary to - // recover, use all available chunks. + // recover, use all available chunks. // *minimum = available_chunks; dout(20) << __func__ << " minimum == available_chunks == " @@ -703,13 +704,13 @@ int ErasureCodeLRC::minimum_to_decode(const set &want_to_read, return 0; } } - + derr << __func__ << " not enough chunks in " << available_chunks << " to read " << want_to_read << dendl; return -EIO; } -int ErasureCodeLRC::encode_chunks(const set &want_to_encode, +int ErasureCodeLrc::encode_chunks(const set &want_to_encode, map *encoded) { unsigned int top = layers.size(); @@ -747,7 +748,7 @@ int ErasureCodeLRC::encode_chunks(const set &want_to_encode, return 0; } -int ErasureCodeLRC::decode_chunks(const set &want_to_read, +int ErasureCodeLrc::decode_chunks(const set &want_to_read, const map &chunks, map *decoded) { diff --git a/src/erasure-code/LRC/ErasureCodeLRC.h b/src/erasure-code/lrc/ErasureCodeLrc.h similarity index 96% rename from src/erasure-code/LRC/ErasureCodeLRC.h rename to src/erasure-code/lrc/ErasureCodeLrc.h index 3ad592cce983..4214cb63ba61 100644 --- a/src/erasure-code/LRC/ErasureCodeLRC.h +++ b/src/erasure-code/lrc/ErasureCodeLrc.h @@ -4,6 +4,7 @@ * Ceph - scalable distributed file system * * Copyright (C) 2014 Cloudwatt + * Copyright (C) 2014 Red Hat * * Author: Loic Dachary * @@ -43,7 +44,7 @@ #define ERROR_LRC_K_MODULO -(MAX_ERRNO + 20) #define ERROR_LRC_M_MODULO -(MAX_ERRNO + 21) -class ErasureCodeLRC : public ErasureCode { +class ErasureCodeLrc : public ErasureCode { public: struct Layer { Layer(string _chunks_map) : chunks_map(_chunks_map) { } @@ -71,13 +72,13 @@ public: }; vector ruleset_steps; - ErasureCodeLRC() : + ErasureCodeLrc() : ruleset_root("default") { ruleset_steps.push_back(Step("chooseleaf", "host", 0)); } - virtual ~ErasureCodeLRC() {} + virtual ~ErasureCodeLrc() {} set get_erasures(const set &need, const set &available) const; diff --git a/src/erasure-code/LRC/ErasureCodePluginLRC.cc b/src/erasure-code/lrc/ErasureCodePluginLrc.cc similarity index 80% rename from src/erasure-code/LRC/ErasureCodePluginLRC.cc rename to src/erasure-code/lrc/ErasureCodePluginLrc.cc index ce4ae7c9d497..dfb680a0f6a5 100644 --- a/src/erasure-code/LRC/ErasureCodePluginLRC.cc +++ b/src/erasure-code/lrc/ErasureCodePluginLrc.cc @@ -1,9 +1,10 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab /* * Ceph - scalable distributed file system * * Copyright (C) 2014 Cloudwatt + * Copyright (C) 2014 Red Hat * * Author: Loic Dachary * @@ -11,16 +12,16 @@ * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. - * + * */ #include "ceph_ver.h" #include "common/debug.h" #include "erasure-code/ErasureCodePlugin.h" -#include "ErasureCodeLRC.h" +#include "ErasureCodeLrc.h" // re-include our assert -#include "include/assert.h" +#include "include/assert.h" #define dout_subsys ceph_subsys_osd #undef dout_prefix @@ -28,15 +29,15 @@ static ostream& _prefix(std::ostream* _dout) { - return *_dout << "ErasureCodePluginLRC: "; + return *_dout << "ErasureCodePluginLrc: "; } -class ErasureCodePluginLRC : public ErasureCodePlugin { +class ErasureCodePluginLrc : public ErasureCodePlugin { public: virtual int factory(const map ¶meters, ErasureCodeInterfaceRef *erasure_code) { - ErasureCodeLRC *interface; - interface = new ErasureCodeLRC(); + ErasureCodeLrc *interface; + interface = new ErasureCodeLrc(); stringstream ss; assert(parameters.count("directory") != 0); int r = interface->init(parameters, &ss); @@ -55,5 +56,5 @@ const char *__erasure_code_version() { return CEPH_GIT_NICE_VER; } int __erasure_code_init(char *plugin_name, char *directory) { ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance(); - return instance.add(plugin_name, new ErasureCodePluginLRC()); + return instance.add(plugin_name, new ErasureCodePluginLrc()); } diff --git a/src/erasure-code/lrc/Makefile.am b/src/erasure-code/lrc/Makefile.am new file mode 100644 index 000000000000..c6547a3ea529 --- /dev/null +++ b/src/erasure-code/lrc/Makefile.am @@ -0,0 +1,21 @@ +# lrc plugin +noinst_HEADERS += \ + erasure-code/lrc/ErasureCodeLrc.h + +lrc_sources = \ + erasure-code/ErasureCode.cc \ + erasure-code/lrc/ErasureCodePluginLrc.cc \ + erasure-code/lrc/ErasureCodeLrc.cc + +erasure-code/lrc/ErasureCodePluginLrc.cc: ./ceph_ver.h + +libec_lrc_la_SOURCES = ${lrc_sources} common/str_map.cc +libec_lrc_la_CFLAGS = ${AM_CFLAGS} +libec_lrc_la_CXXFLAGS= ${AM_CXXFLAGS} +libec_lrc_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(LIBJSON_SPIRIT) +libec_lrc_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 +if LINUX +libec_lrc_la_LDFLAGS += -export-symbols-regex '.*__erasure_code_.*' +endif + +erasure_codelib_LTLIBRARIES += libec_lrc.la diff --git a/src/test/erasure-code/Makefile.am b/src/test/erasure-code/Makefile.am index d69e80e38e75..6cef35958e71 100644 --- a/src/test/erasure-code/Makefile.am +++ b/src/test/erasure-code/Makefile.am @@ -144,24 +144,24 @@ endif check_PROGRAMS += unittest_erasure_code_plugin_isa endif -unittest_erasure_code_LRC_SOURCES = \ - test/erasure-code/TestErasureCodeLRC.cc \ - ${LRC_sources} -unittest_erasure_code_LRC_CXXFLAGS = $(UNITTEST_CXXFLAGS) -unittest_erasure_code_LRC_LDADD = $(LIBOSD) $(LIBCOMMON) $(UNITTEST_LDADD) $(CEPH_GLOBAL) +unittest_erasure_code_lrc_SOURCES = \ + test/erasure-code/TestErasureCodeLrc.cc \ + ${lrc_sources} +unittest_erasure_code_lrc_CXXFLAGS = $(UNITTEST_CXXFLAGS) +unittest_erasure_code_lrc_LDADD = $(LIBOSD) $(LIBCOMMON) $(UNITTEST_LDADD) $(CEPH_GLOBAL) if LINUX -unittest_erasure_code_LRC_LDADD += -ldl +unittest_erasure_code_lrc_LDADD += -ldl endif -check_PROGRAMS += unittest_erasure_code_LRC +check_PROGRAMS += unittest_erasure_code_lrc -unittest_erasure_code_plugin_LRC_SOURCES = \ - test/erasure-code/TestErasureCodePluginLRC.cc -unittest_erasure_code_plugin_LRC_CXXFLAGS = ${AM_CXXFLAGS} ${UNITTEST_CXXFLAGS} -unittest_erasure_code_plugin_LRC_LDADD = $(LIBOSD) $(LIBCOMMON) $(UNITTEST_LDADD) $(CEPH_GLOBAL) +unittest_erasure_code_plugin_lrc_SOURCES = \ + test/erasure-code/TestErasureCodePluginLrc.cc +unittest_erasure_code_plugin_lrc_CXXFLAGS = ${AM_CXXFLAGS} ${UNITTEST_CXXFLAGS} +unittest_erasure_code_plugin_lrc_LDADD = $(LIBOSD) $(LIBCOMMON) $(UNITTEST_LDADD) $(CEPH_GLOBAL) if LINUX -unittest_erasure_code_plugin_LRC_LDADD += -ldl +unittest_erasure_code_plugin_lrc_LDADD += -ldl endif -check_PROGRAMS += unittest_erasure_code_plugin_LRC +check_PROGRAMS += unittest_erasure_code_plugin_lrc unittest_erasure_code_example_SOURCES = \ erasure-code/ErasureCode.cc \ diff --git a/src/test/erasure-code/TestErasureCodeLRC.cc b/src/test/erasure-code/TestErasureCodeLrc.cc similarity index 71% rename from src/test/erasure-code/TestErasureCodeLRC.cc rename to src/test/erasure-code/TestErasureCodeLrc.cc index 6fcd8a064f95..c3f0e68cb06d 100644 --- a/src/test/erasure-code/TestErasureCodeLRC.cc +++ b/src/test/erasure-code/TestErasureCodeLrc.cc @@ -4,6 +4,7 @@ * Ceph distributed storage system * * Copyright (C) 2014 Cloudwatt + * Copyright (C) 2014 Red Hat * * Author: Loic Dachary * @@ -20,48 +21,48 @@ #include "common/config.h" #include "include/stringify.h" #include "global/global_init.h" -#include "erasure-code/LRC/ErasureCodeLRC.h" +#include "erasure-code/lrc/ErasureCodeLrc.h" #include "common/ceph_argparse.h" #include "global/global_context.h" #include "gtest/gtest.h" -TEST(ErasureCodeLRC, parse_ruleset) +TEST(ErasureCodeLrc, parse_ruleset) { - ErasureCodeLRC LRC; - EXPECT_EQ("default", LRC.ruleset_root); - EXPECT_EQ("host", LRC.ruleset_steps.front().type); + ErasureCodeLrc lrc; + EXPECT_EQ("default", lrc.ruleset_root); + EXPECT_EQ("host", lrc.ruleset_steps.front().type); map parameters; parameters["ruleset-root"] = "other"; - EXPECT_EQ(0, LRC.parse_ruleset(parameters, &cerr)); - EXPECT_EQ("other", LRC.ruleset_root); + EXPECT_EQ(0, lrc.parse_ruleset(parameters, &cerr)); + EXPECT_EQ("other", lrc.ruleset_root); parameters["ruleset-steps"] = "[]"; - EXPECT_EQ(0, LRC.parse_ruleset(parameters, &cerr)); - EXPECT_TRUE(LRC.ruleset_steps.empty()); + EXPECT_EQ(0, lrc.parse_ruleset(parameters, &cerr)); + EXPECT_TRUE(lrc.ruleset_steps.empty()); parameters["ruleset-steps"] = "0"; - EXPECT_EQ(ERROR_LRC_ARRAY, LRC.parse_ruleset(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_ARRAY, lrc.parse_ruleset(parameters, &cerr)); parameters["ruleset-steps"] = "{"; - EXPECT_EQ(ERROR_LRC_PARSE_JSON, LRC.parse_ruleset(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_PARSE_JSON, lrc.parse_ruleset(parameters, &cerr)); parameters["ruleset-steps"] = "[0]"; - EXPECT_EQ(ERROR_LRC_ARRAY, LRC.parse_ruleset(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_ARRAY, lrc.parse_ruleset(parameters, &cerr)); parameters["ruleset-steps"] = "[[0]]"; - EXPECT_EQ(ERROR_LRC_RULESET_OP, LRC.parse_ruleset(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_RULESET_OP, lrc.parse_ruleset(parameters, &cerr)); parameters["ruleset-steps"] = "[[\"choose\", 0]]"; - EXPECT_EQ(ERROR_LRC_RULESET_TYPE, LRC.parse_ruleset(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_RULESET_TYPE, lrc.parse_ruleset(parameters, &cerr)); parameters["ruleset-steps"] = "[[\"choose\", \"host\", []]]"; - EXPECT_EQ(ERROR_LRC_RULESET_N, LRC.parse_ruleset(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_RULESET_N, lrc.parse_ruleset(parameters, &cerr)); parameters["ruleset-steps"] = "[[\"choose\", \"host\", 2]]"; - EXPECT_EQ(0, LRC.parse_ruleset(parameters, &cerr)); + EXPECT_EQ(0, lrc.parse_ruleset(parameters, &cerr)); - const ErasureCodeLRC::Step &step = LRC.ruleset_steps.front(); + const ErasureCodeLrc::Step &step = lrc.ruleset_steps.front(); EXPECT_EQ("choose", step.op); EXPECT_EQ("host", step.type); EXPECT_EQ(2, step.n); @@ -71,16 +72,16 @@ TEST(ErasureCodeLRC, parse_ruleset) " [\"choose\", \"rack\", 2], " " [\"chooseleaf\", \"host\", 5], " "]"; - EXPECT_EQ(0, LRC.parse_ruleset(parameters, &cerr)); - EXPECT_EQ(2U, LRC.ruleset_steps.size()); + EXPECT_EQ(0, lrc.parse_ruleset(parameters, &cerr)); + EXPECT_EQ(2U, lrc.ruleset_steps.size()); { - const ErasureCodeLRC::Step &step = LRC.ruleset_steps[0]; + const ErasureCodeLrc::Step &step = lrc.ruleset_steps[0]; EXPECT_EQ("choose", step.op); EXPECT_EQ("rack", step.type); EXPECT_EQ(2, step.n); } { - const ErasureCodeLRC::Step &step = LRC.ruleset_steps[1]; + const ErasureCodeLrc::Step &step = lrc.ruleset_steps[1]; EXPECT_EQ("chooseleaf", step.op); EXPECT_EQ("host", step.type); EXPECT_EQ(5, step.n); @@ -127,8 +128,8 @@ TEST(ErasureCodeTest, create_ruleset) } } - ErasureCodeLRC LRC; - EXPECT_EQ(0, LRC.create_ruleset("rule1", *c, &cerr)); + ErasureCodeLrc lrc; + EXPECT_EQ(0, lrc.create_ruleset("rule1", *c, &cerr)); map parameters; unsigned int racks = 2; @@ -139,8 +140,8 @@ TEST(ErasureCodeTest, create_ruleset) " [\"chooseleaf\", \"host\", " + stringify(hosts) + "], " "]"; const char *rule_name = "rule2"; - EXPECT_EQ(0, LRC.parse_ruleset(parameters, &cerr)); - EXPECT_EQ(1, LRC.create_ruleset(rule_name, *c, &cerr)); + EXPECT_EQ(0, lrc.parse_ruleset(parameters, &cerr)); + EXPECT_EQ(1, lrc.create_ruleset(rule_name, *c, &cerr)); vector<__u32> weight; for (int o = 0; o < c->get_max_devices(); o++) @@ -166,13 +167,13 @@ TEST(ErasureCodeTest, create_ruleset) EXPECT_EQ(second_rack, out[9] / num_host / num_osd); } -TEST(ErasureCodeLRC, parse_kml) +TEST(ErasureCodeLrc, parse_kml) { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; - EXPECT_EQ(0, LRC.parse_kml(parameters, &cerr)); + EXPECT_EQ(0, lrc.parse_kml(parameters, &cerr)); parameters["k"] = "4"; - EXPECT_EQ(ERROR_LRC_ALL_OR_NOTHING, LRC.parse_kml(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_ALL_OR_NOTHING, lrc.parse_kml(parameters, &cerr)); const char *generated[] = { "mapping", "layers", "ruleset-steps" }; @@ -181,34 +182,34 @@ TEST(ErasureCodeLRC, parse_kml) for (int i = 0; i < 3; i++) { parameters[generated[i]] = "SET"; - EXPECT_EQ(ERROR_LRC_GENERATED, LRC.parse_kml(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_GENERATED, lrc.parse_kml(parameters, &cerr)); parameters.erase(parameters.find(generated[i])); } parameters["k"] = "4"; parameters["m"] = "2"; parameters["l"] = "7"; - EXPECT_EQ(ERROR_LRC_K_M_MODULO, LRC.parse_kml(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_K_M_MODULO, lrc.parse_kml(parameters, &cerr)); parameters["k"] = "3"; parameters["m"] = "3"; parameters["l"] = "3"; - EXPECT_EQ(ERROR_LRC_K_MODULO, LRC.parse_kml(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_K_MODULO, lrc.parse_kml(parameters, &cerr)); parameters["k"] = "4"; parameters["m"] = "2"; parameters["l"] = "3"; - EXPECT_EQ(0, LRC.parse_kml(parameters, &cerr)); + EXPECT_EQ(0, lrc.parse_kml(parameters, &cerr)); EXPECT_EQ("[ " " [ \"DDc_DDc_\", \"\" ]," " [ \"DDDc____\", \"\" ]," " [ \"____DDDc\", \"\" ]," "]", parameters["layers"]); EXPECT_EQ("DD__DD__", parameters["mapping"]); - EXPECT_EQ("chooseleaf", LRC.ruleset_steps[0].op); - EXPECT_EQ("host", LRC.ruleset_steps[0].type); - EXPECT_EQ(0, LRC.ruleset_steps[0].n); - EXPECT_EQ(1U, LRC.ruleset_steps.size()); + EXPECT_EQ("chooseleaf", lrc.ruleset_steps[0].op); + EXPECT_EQ("host", lrc.ruleset_steps[0].type); + EXPECT_EQ(0, lrc.ruleset_steps[0].n); + EXPECT_EQ(1U, lrc.ruleset_steps.size()); parameters.erase(parameters.find("mapping")); parameters.erase(parameters.find("layers")); @@ -216,11 +217,11 @@ TEST(ErasureCodeLRC, parse_kml) parameters["m"] = "2"; parameters["l"] = "3"; parameters["ruleset-failure-domain"] = "osd"; - EXPECT_EQ(0, LRC.parse_kml(parameters, &cerr)); - EXPECT_EQ("chooseleaf", LRC.ruleset_steps[0].op); - EXPECT_EQ("osd", LRC.ruleset_steps[0].type); - EXPECT_EQ(0, LRC.ruleset_steps[0].n); - EXPECT_EQ(1U, LRC.ruleset_steps.size()); + EXPECT_EQ(0, lrc.parse_kml(parameters, &cerr)); + EXPECT_EQ("chooseleaf", lrc.ruleset_steps[0].op); + EXPECT_EQ("osd", lrc.ruleset_steps[0].type); + EXPECT_EQ(0, lrc.ruleset_steps[0].n); + EXPECT_EQ(1U, lrc.ruleset_steps.size()); parameters.erase(parameters.find("mapping")); parameters.erase(parameters.find("layers")); @@ -229,82 +230,82 @@ TEST(ErasureCodeLRC, parse_kml) parameters["l"] = "3"; parameters["ruleset-failure-domain"] = "osd"; parameters["ruleset-locality"] = "rack"; - EXPECT_EQ(0, LRC.parse_kml(parameters, &cerr)); - EXPECT_EQ("choose", LRC.ruleset_steps[0].op); - EXPECT_EQ("rack", LRC.ruleset_steps[0].type); - EXPECT_EQ(2, LRC.ruleset_steps[0].n); - EXPECT_EQ("chooseleaf", LRC.ruleset_steps[1].op); - EXPECT_EQ("osd", LRC.ruleset_steps[1].type); - EXPECT_EQ(4, LRC.ruleset_steps[1].n); - EXPECT_EQ(2U, LRC.ruleset_steps.size()); + EXPECT_EQ(0, lrc.parse_kml(parameters, &cerr)); + EXPECT_EQ("choose", lrc.ruleset_steps[0].op); + EXPECT_EQ("rack", lrc.ruleset_steps[0].type); + EXPECT_EQ(2, lrc.ruleset_steps[0].n); + EXPECT_EQ("chooseleaf", lrc.ruleset_steps[1].op); + EXPECT_EQ("osd", lrc.ruleset_steps[1].type); + EXPECT_EQ(4, lrc.ruleset_steps[1].n); + EXPECT_EQ(2U, lrc.ruleset_steps.size()); parameters.erase(parameters.find("mapping")); parameters.erase(parameters.find("layers")); } -TEST(ErasureCodeLRC, layers_description) +TEST(ErasureCodeLrc, layers_description) { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; json_spirit::mArray description; EXPECT_EQ(ERROR_LRC_DESCRIPTION, - LRC.layers_description(parameters, &description, &cerr)); + lrc.layers_description(parameters, &description, &cerr)); { const char *description_string = "\"not an array\""; parameters["layers"] = description_string; EXPECT_EQ(ERROR_LRC_ARRAY, - LRC.layers_description(parameters, &description, &cerr)); + lrc.layers_description(parameters, &description, &cerr)); } { const char *description_string = "invalid json"; parameters["layers"] = description_string; EXPECT_EQ(ERROR_LRC_PARSE_JSON, - LRC.layers_description(parameters, &description, &cerr)); + lrc.layers_description(parameters, &description, &cerr)); } { const char *description_string = "[]"; parameters["layers"] = description_string; - EXPECT_EQ(0, LRC.layers_description(parameters, &description, &cerr)); + EXPECT_EQ(0, lrc.layers_description(parameters, &description, &cerr)); } } -TEST(ErasureCodeLRC, layers_parse) +TEST(ErasureCodeLrc, layers_parse) { { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; const char *description_string ="[ 0 ]"; parameters["layers"] = description_string; json_spirit::mArray description; - EXPECT_EQ(0, LRC.layers_description(parameters, &description, &cerr)); + EXPECT_EQ(0, lrc.layers_description(parameters, &description, &cerr)); EXPECT_EQ(ERROR_LRC_ARRAY, - LRC.layers_parse(description_string, description, &cerr)); + lrc.layers_parse(description_string, description, &cerr)); } { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; const char *description_string ="[ [ 0 ] ]"; parameters["layers"] = description_string; json_spirit::mArray description; - EXPECT_EQ(0, LRC.layers_description(parameters, &description, &cerr)); + EXPECT_EQ(0, lrc.layers_description(parameters, &description, &cerr)); EXPECT_EQ(ERROR_LRC_STR, - LRC.layers_parse(description_string, description, &cerr)); + lrc.layers_parse(description_string, description, &cerr)); } { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; const char *description_string ="[ [ \"\", 0 ] ]"; parameters["layers"] = description_string; json_spirit::mArray description; - EXPECT_EQ(0, LRC.layers_description(parameters, &description, &cerr)); + EXPECT_EQ(0, lrc.layers_description(parameters, &description, &cerr)); EXPECT_EQ(ERROR_LRC_CONFIG_OPTIONS, - LRC.layers_parse(description_string, description, &cerr)); + lrc.layers_parse(description_string, description, &cerr)); } // @@ -312,15 +313,15 @@ TEST(ErasureCodeLRC, layers_parse) // parameters. // { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; const char *description_string ="[ [ \"\", { \"a\": \"b\" }, \"ignored\" ] ]"; parameters["layers"] = description_string; json_spirit::mArray description; - EXPECT_EQ(0, LRC.layers_description(parameters, &description, &cerr)); - EXPECT_EQ(0, LRC.layers_parse(description_string, description, &cerr)); - EXPECT_EQ("b", LRC.layers.front().parameters["a"]); + EXPECT_EQ(0, lrc.layers_description(parameters, &description, &cerr)); + EXPECT_EQ(0, lrc.layers_parse(description_string, description, &cerr)); + EXPECT_EQ("b", lrc.layers.front().parameters["a"]); } // @@ -328,24 +329,24 @@ TEST(ErasureCodeLRC, layers_parse) // parameters. // { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; const char *description_string ="[ [ \"\", \"a=b c=d\" ] ]"; parameters["layers"] = description_string; json_spirit::mArray description; - EXPECT_EQ(0, LRC.layers_description(parameters, &description, &cerr)); - EXPECT_EQ(0, LRC.layers_parse(description_string, description, &cerr)); - EXPECT_EQ("b", LRC.layers.front().parameters["a"]); - EXPECT_EQ("d", LRC.layers.front().parameters["c"]); + EXPECT_EQ(0, lrc.layers_description(parameters, &description, &cerr)); + EXPECT_EQ(0, lrc.layers_parse(description_string, description, &cerr)); + EXPECT_EQ("b", lrc.layers.front().parameters["a"]); + EXPECT_EQ("d", lrc.layers.front().parameters["c"]); } } -TEST(ErasureCodeLRC, layers_sanity_checks) +TEST(ErasureCodeLrc, layers_sanity_checks) { { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; parameters["mapping"] = "__DDD__DD"; @@ -357,29 +358,29 @@ TEST(ErasureCodeLRC, layers_sanity_checks) " [ \"_____cDDD\", \"\" ]," "]"; parameters["layers"] = description_string; - EXPECT_EQ(0, LRC.init(parameters, &cerr)); + EXPECT_EQ(0, lrc.init(parameters, &cerr)); } { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; const char *description_string = "[ " "]"; parameters["layers"] = description_string; - EXPECT_EQ(ERROR_LRC_MAPPING, LRC.init(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_MAPPING, lrc.init(parameters, &cerr)); } { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; parameters["mapping"] = ""; const char *description_string = "[ " "]"; parameters["layers"] = description_string; - EXPECT_EQ(ERROR_LRC_LAYERS_COUNT, LRC.init(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_LAYERS_COUNT, lrc.init(parameters, &cerr)); } { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; parameters["directory"] = ".libs"; parameters["mapping"] = @@ -391,14 +392,14 @@ TEST(ErasureCodeLRC, layers_sanity_checks) " [ \"AA\", \"\" ], " "]"; parameters["layers"] = description_string; - EXPECT_EQ(ERROR_LRC_MAPPING_SIZE, LRC.init(parameters, &cerr)); + EXPECT_EQ(ERROR_LRC_MAPPING_SIZE, lrc.init(parameters, &cerr)); } } -TEST(ErasureCodeLRC, layers_init) +TEST(ErasureCodeLrc, layers_init) { { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; const char *description_string = @@ -408,19 +409,19 @@ TEST(ErasureCodeLRC, layers_init) parameters["layers"] = description_string; parameters["directory"] = ".libs"; json_spirit::mArray description; - EXPECT_EQ(0, LRC.layers_description(parameters, &description, &cerr)); - EXPECT_EQ(0, LRC.layers_parse(description_string, description, &cerr)); - EXPECT_EQ(0, LRC.layers_init()); - EXPECT_EQ("5", LRC.layers.front().parameters["k"]); - EXPECT_EQ("2", LRC.layers.front().parameters["m"]); - EXPECT_EQ("jerasure", LRC.layers.front().parameters["plugin"]); - EXPECT_EQ("reed_sol_van", LRC.layers.front().parameters["technique"]); + EXPECT_EQ(0, lrc.layers_description(parameters, &description, &cerr)); + EXPECT_EQ(0, lrc.layers_parse(description_string, description, &cerr)); + EXPECT_EQ(0, lrc.layers_init()); + EXPECT_EQ("5", lrc.layers.front().parameters["k"]); + EXPECT_EQ("2", lrc.layers.front().parameters["m"]); + EXPECT_EQ("jerasure", lrc.layers.front().parameters["plugin"]); + EXPECT_EQ("reed_sol_van", lrc.layers.front().parameters["technique"]); } } -TEST(ErasureCodeLRC, init) +TEST(ErasureCodeLrc, init) { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; parameters["mapping"] = "__DDD__DD"; @@ -432,26 +433,26 @@ TEST(ErasureCodeLRC, init) "]"; parameters["layers"] = description_string; parameters["directory"] = ".libs"; - EXPECT_EQ(0, LRC.init(parameters, &cerr)); + EXPECT_EQ(0, lrc.init(parameters, &cerr)); } -TEST(ErasureCodeLRC, init_kml) +TEST(ErasureCodeLrc, init_kml) { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; parameters["k"] = "4"; parameters["m"] = "2"; parameters["l"] = "3"; parameters["directory"] = ".libs"; - EXPECT_EQ(0, LRC.init(parameters, &cerr)); - EXPECT_EQ((unsigned int)(4 + 2 + (4 + 2) / 3), LRC.get_chunk_count()); + EXPECT_EQ(0, lrc.init(parameters, &cerr)); + EXPECT_EQ((unsigned int)(4 + 2 + (4 + 2) / 3), lrc.get_chunk_count()); } -TEST(ErasureCodeLRC, minimum_to_decode) +TEST(ErasureCodeLrc, minimum_to_decode) { // trivial : no erasures, the minimum is want_to_read { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; parameters["mapping"] = "__DDD__DD"; @@ -463,19 +464,19 @@ TEST(ErasureCodeLRC, minimum_to_decode) "]"; parameters["layers"] = description_string; parameters["directory"] = ".libs"; - EXPECT_EQ(0, LRC.init(parameters, &cerr)); + EXPECT_EQ(0, lrc.init(parameters, &cerr)); set want_to_read; want_to_read.insert(1); set available_chunks; available_chunks.insert(1); available_chunks.insert(2); set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); EXPECT_EQ(want_to_read, minimum); } // locally repairable erasure { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; parameters["mapping"] = "__DDD__DD_"; @@ -488,20 +489,20 @@ TEST(ErasureCodeLRC, minimum_to_decode) "]"; parameters["layers"] = description_string; parameters["directory"] = ".libs"; - EXPECT_EQ(0, LRC.init(parameters, &cerr)); + EXPECT_EQ(0, lrc.init(parameters, &cerr)); EXPECT_EQ(parameters["mapping"].length(), - LRC.get_chunk_count()); + lrc.get_chunk_count()); { // want to read the last chunk set want_to_read; - want_to_read.insert(LRC.get_chunk_count() - 1); + want_to_read.insert(lrc.get_chunk_count() - 1); // all chunks are available except the last chunk set available_chunks; - for (int i = 0; i < (int)LRC.get_chunk_count() - 1; i++) + for (int i = 0; i < (int)lrc.get_chunk_count() - 1; i++) available_chunks.insert(i); // _____DDDDc can recover c set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); set expected_minimum; expected_minimum.insert(5); expected_minimum.insert(6); @@ -513,10 +514,10 @@ TEST(ErasureCodeLRC, minimum_to_decode) set want_to_read; want_to_read.insert(0); set available_chunks; - for (int i = 1; i < (int)LRC.get_chunk_count(); i++) + for (int i = 1; i < (int)lrc.get_chunk_count(); i++) available_chunks.insert(i); set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); set expected_minimum; expected_minimum.insert(2); expected_minimum.insert(3); @@ -526,7 +527,7 @@ TEST(ErasureCodeLRC, minimum_to_decode) } // implicit parity required { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; parameters["mapping"] = "__DDD__DD"; @@ -538,9 +539,9 @@ TEST(ErasureCodeLRC, minimum_to_decode) "]"; parameters["layers"] = description_string; parameters["directory"] = ".libs"; - EXPECT_EQ(0, LRC.init(parameters, &cerr)); + EXPECT_EQ(0, lrc.init(parameters, &cerr)); EXPECT_EQ(parameters["mapping"].length(), - LRC.get_chunk_count()); + lrc.get_chunk_count()); set want_to_read; want_to_read.insert(8); // @@ -558,7 +559,7 @@ TEST(ErasureCodeLRC, minimum_to_decode) // missing (7) // missing (8) set minimum; - EXPECT_EQ(-EIO, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(-EIO, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); } // // We want to read chunk 8 and encoding was done with @@ -597,48 +598,48 @@ TEST(ErasureCodeLRC, minimum_to_decode) // missing (7) // missing (8) set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); EXPECT_EQ(available_chunks, minimum); } } } -TEST(ErasureCodeLRC, encode_decode) +TEST(ErasureCodeLrc, encode_decode) { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; parameters["mapping"] = "__DD__DD"; const char *description_string = "[ " - " [ \"_cDD_cDD\", \"\" ]," // global layer - " [ \"c_DD____\", \"\" ]," // first local layer - " [ \"____cDDD\", \"\" ]," // second local layer + " [ \"_cDD_cDD\", \"\" ]," // global layer + " [ \"c_DD____\", \"\" ]," // first local layer + " [ \"____cDDD\", \"\" ]," // second local layer "]"; parameters["layers"] = description_string; parameters["directory"] = ".libs"; - EXPECT_EQ(0, LRC.init(parameters, &cerr)); - EXPECT_EQ(4U, LRC.get_data_chunk_count()); + EXPECT_EQ(0, lrc.init(parameters, &cerr)); + EXPECT_EQ(4U, lrc.get_data_chunk_count()); unsigned int stripe_width = g_conf->osd_pool_erasure_code_stripe_width; - unsigned int chunk_size = stripe_width / LRC.get_data_chunk_count(); - EXPECT_EQ(chunk_size, LRC.get_chunk_size(stripe_width)); + unsigned int chunk_size = stripe_width / lrc.get_data_chunk_count(); + EXPECT_EQ(chunk_size, lrc.get_chunk_size(stripe_width)); set want_to_encode; map encoded; - for (unsigned int i = 0; i < LRC.get_chunk_count(); ++i) { + for (unsigned int i = 0; i < lrc.get_chunk_count(); ++i) { want_to_encode.insert(i); bufferptr ptr(buffer::create_page_aligned(chunk_size)); encoded[i].push_front(ptr); } - const vector &mapping = LRC.get_chunk_mapping(); + const vector &mapping = lrc.get_chunk_mapping(); char c = 'A'; - for (unsigned int i = 0; i < LRC.get_data_chunk_count(); i++) { + for (unsigned int i = 0; i < lrc.get_data_chunk_count(); i++) { int j = mapping[i]; string s(chunk_size, c); encoded[j].clear(); encoded[j].append(s); c++; } - EXPECT_EQ(0, LRC.encode_chunks(want_to_encode, &encoded)); + EXPECT_EQ(0, lrc.encode_chunks(want_to_encode, &encoded)); { map chunks; @@ -652,14 +653,14 @@ TEST(ErasureCodeLRC, encode_decode) available_chunks.insert(5); available_chunks.insert(6); set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); // only need three chunks from the second local layer - EXPECT_EQ(3U, minimum.size()); + EXPECT_EQ(3U, minimum.size()); EXPECT_EQ(1U, minimum.count(4)); EXPECT_EQ(1U, minimum.count(5)); EXPECT_EQ(1U, minimum.count(6)); map decoded; - EXPECT_EQ(0, LRC.decode(want_to_read, chunks, &decoded)); + EXPECT_EQ(0, lrc.decode(want_to_read, chunks, &decoded)); string s(chunk_size, 'D'); EXPECT_EQ(s, string(decoded[7].c_str(), chunk_size)); } @@ -679,12 +680,12 @@ TEST(ErasureCodeLRC, encode_decode) available_chunks.insert(6); available_chunks.insert(7); set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); - EXPECT_EQ(5U, minimum.size()); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(5U, minimum.size()); EXPECT_EQ(available_chunks, minimum); map decoded; - EXPECT_EQ(0, LRC.decode(want_to_read, encoded, &decoded)); + EXPECT_EQ(0, lrc.decode(want_to_read, encoded, &decoded)); string s(chunk_size, 'A'); EXPECT_EQ(s, string(decoded[2].c_str(), chunk_size)); } @@ -705,8 +706,8 @@ TEST(ErasureCodeLRC, encode_decode) encoded.erase(3); encoded.erase(6); set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); - EXPECT_EQ(4U, minimum.size()); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(4U, minimum.size()); // only need two chunks from the first local layer EXPECT_EQ(1U, minimum.count(0)); EXPECT_EQ(1U, minimum.count(2)); @@ -718,7 +719,7 @@ TEST(ErasureCodeLRC, encode_decode) EXPECT_EQ(1U, minimum.count(5)); map decoded; - EXPECT_EQ(0, LRC.decode(want_to_read, encoded, &decoded)); + EXPECT_EQ(0, lrc.decode(want_to_read, encoded, &decoded)); { string s(chunk_size, 'B'); EXPECT_EQ(s, string(decoded[3].c_str(), chunk_size)); @@ -734,9 +735,9 @@ TEST(ErasureCodeLRC, encode_decode) } } -TEST(ErasureCodeLRC, encode_decode_2) +TEST(ErasureCodeLrc, encode_decode_2) { - ErasureCodeLRC LRC; + ErasureCodeLrc lrc; map parameters; parameters["mapping"] = "DD__DD__"; @@ -748,28 +749,28 @@ TEST(ErasureCodeLRC, encode_decode_2) "]"; parameters["layers"] = description_string; parameters["directory"] = ".libs"; - EXPECT_EQ(0, LRC.init(parameters, &cerr)); - EXPECT_EQ(4U, LRC.get_data_chunk_count()); + EXPECT_EQ(0, lrc.init(parameters, &cerr)); + EXPECT_EQ(4U, lrc.get_data_chunk_count()); unsigned int stripe_width = g_conf->osd_pool_erasure_code_stripe_width; - unsigned int chunk_size = stripe_width / LRC.get_data_chunk_count(); - EXPECT_EQ(chunk_size, LRC.get_chunk_size(stripe_width)); + unsigned int chunk_size = stripe_width / lrc.get_data_chunk_count(); + EXPECT_EQ(chunk_size, lrc.get_chunk_size(stripe_width)); set want_to_encode; map encoded; - for (unsigned int i = 0; i < LRC.get_chunk_count(); ++i) { + for (unsigned int i = 0; i < lrc.get_chunk_count(); ++i) { want_to_encode.insert(i); bufferptr ptr(buffer::create_page_aligned(chunk_size)); encoded[i].push_front(ptr); } - const vector &mapping = LRC.get_chunk_mapping(); + const vector &mapping = lrc.get_chunk_mapping(); char c = 'A'; - for (unsigned int i = 0; i < LRC.get_data_chunk_count(); i++) { + for (unsigned int i = 0; i < lrc.get_data_chunk_count(); i++) { int j = mapping[i]; string s(chunk_size, c); encoded[j].clear(); encoded[j].append(s); c++; } - EXPECT_EQ(0, LRC.encode_chunks(want_to_encode, &encoded)); + EXPECT_EQ(0, lrc.encode_chunks(want_to_encode, &encoded)); { set want_to_read; @@ -789,21 +790,21 @@ TEST(ErasureCodeLRC, encode_decode_2) available_chunks.insert(6); available_chunks.insert(7); set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); - EXPECT_EQ(4U, minimum.size()); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(4U, minimum.size()); EXPECT_EQ(1U, minimum.count(1)); EXPECT_EQ(1U, minimum.count(4)); EXPECT_EQ(1U, minimum.count(5)); EXPECT_EQ(1U, minimum.count(6)); map decoded; - EXPECT_EQ(0, LRC.decode(want_to_read, chunks, &decoded)); + EXPECT_EQ(0, lrc.decode(want_to_read, chunks, &decoded)); string s(chunk_size, 'A'); EXPECT_EQ(s, string(decoded[0].c_str(), chunk_size)); } { set want_to_read; - for (unsigned int i = 0; i < LRC.get_chunk_count(); i++) + for (unsigned int i = 0; i < lrc.get_chunk_count(); i++) want_to_read.insert(i); map chunks; chunks[1] = encoded[1]; @@ -818,8 +819,8 @@ TEST(ErasureCodeLRC, encode_decode_2) available_chunks.insert(6); available_chunks.insert(7); set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); - EXPECT_EQ(5U, minimum.size()); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(5U, minimum.size()); EXPECT_EQ(1U, minimum.count(1)); EXPECT_EQ(1U, minimum.count(3)); EXPECT_EQ(1U, minimum.count(5)); @@ -827,7 +828,7 @@ TEST(ErasureCodeLRC, encode_decode_2) EXPECT_EQ(1U, minimum.count(7)); map decoded; - EXPECT_EQ(0, LRC.decode(want_to_read, chunks, &decoded)); + EXPECT_EQ(0, lrc.decode(want_to_read, chunks, &decoded)); { string s(chunk_size, 'A'); EXPECT_EQ(s, string(decoded[0].c_str(), chunk_size)); @@ -847,7 +848,7 @@ TEST(ErasureCodeLRC, encode_decode_2) } { set want_to_read; - for (unsigned int i = 0; i < LRC.get_chunk_count(); i++) + for (unsigned int i = 0; i < lrc.get_chunk_count(); i++) want_to_read.insert(i); map chunks; chunks[1] = encoded[1]; @@ -862,8 +863,8 @@ TEST(ErasureCodeLRC, encode_decode_2) available_chunks.insert(6); available_chunks.insert(7); set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); - EXPECT_EQ(5U, minimum.size()); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(5U, minimum.size()); EXPECT_EQ(1U, minimum.count(1)); EXPECT_EQ(1U, minimum.count(3)); EXPECT_EQ(1U, minimum.count(5)); @@ -871,7 +872,7 @@ TEST(ErasureCodeLRC, encode_decode_2) EXPECT_EQ(1U, minimum.count(7)); map decoded; - EXPECT_EQ(0, LRC.decode(want_to_read, chunks, &decoded)); + EXPECT_EQ(0, lrc.decode(want_to_read, chunks, &decoded)); { string s(chunk_size, 'A'); EXPECT_EQ(s, string(decoded[0].c_str(), chunk_size)); @@ -905,11 +906,11 @@ TEST(ErasureCodeLRC, encode_decode_2) available_chunks.insert(5); available_chunks.insert(7); set minimum; - EXPECT_EQ(0, LRC.minimum_to_decode(want_to_read, available_chunks, &minimum)); - EXPECT_EQ(available_chunks, minimum); + EXPECT_EQ(0, lrc.minimum_to_decode(want_to_read, available_chunks, &minimum)); + EXPECT_EQ(available_chunks, minimum); map decoded; - EXPECT_EQ(0, LRC.decode(want_to_read, chunks, &decoded)); + EXPECT_EQ(0, lrc.decode(want_to_read, chunks, &decoded)); } } @@ -929,7 +930,7 @@ int main(int argc, char **argv) * Local Variables: * compile-command: "cd ../.. ; * make -j4 && valgrind --tool=memcheck --leak-check=full \ - * ./unittest_erasure_code_LRC \ + * ./unittest_erasure_code_lrc \ * --gtest_filter=*.* --log-to-stderr=true --debug-osd=20" * End: */ diff --git a/src/test/erasure-code/TestErasureCodePluginLRC.cc b/src/test/erasure-code/TestErasureCodePluginLrc.cc similarity index 87% rename from src/test/erasure-code/TestErasureCodePluginLRC.cc rename to src/test/erasure-code/TestErasureCodePluginLrc.cc index d2f300df77b5..9376d9b4a834 100644 --- a/src/test/erasure-code/TestErasureCodePluginLRC.cc +++ b/src/test/erasure-code/TestErasureCodePluginLrc.cc @@ -4,6 +4,7 @@ * Ceph distributed storage system * * Copyright (C) 2014 Cloudwatt + * Copyright (C) 2014 Red Hat * * Author: Loic Dachary * @@ -32,7 +33,7 @@ TEST(ErasureCodePlugin, factory) parameters["layers"] = "[ [ \"DDc\", \"\" ] ]"; ErasureCodeInterfaceRef erasure_code; EXPECT_FALSE(erasure_code); - EXPECT_EQ(0, instance.factory("LRC", parameters, &erasure_code, cerr)); + EXPECT_EQ(0, instance.factory("lrc", parameters, &erasure_code, cerr)); EXPECT_TRUE(erasure_code); } @@ -51,8 +52,8 @@ int main(int argc, char **argv) /* * Local Variables: * compile-command: "cd ../.. ; make -j4 && - * make unittest_erasure_code_plugin_LRC && - * valgrind --tool=memcheck ./unittest_erasure_code_plugin_LRC \ + * make unittest_erasure_code_plugin_lrc && + * valgrind --tool=memcheck ./unittest_erasure_code_plugin_lrc \ * --gtest_filter=*.* --log-to-stderr=true --debug-osd=20" * End: */ diff --git a/src/test/erasure-code/test-erasure-code.sh b/src/test/erasure-code/test-erasure-code.sh index 50ba71dce19e..6f31673c1c99 100755 --- a/src/test/erasure-code/test-erasure-code.sh +++ b/src/test/erasure-code/test-erasure-code.sh @@ -111,13 +111,13 @@ function plugin_exists() { return $status } -function TEST_rados_put_get_LRC_advanced() { +function TEST_rados_put_get_lrc_advanced() { local dir=$1 - local poolname=pool-LRC - local profile=profile-LRC + local poolname=pool-lrc + local profile=profile-lrc ./ceph osd erasure-code-profile set $profile \ - plugin=LRC \ + plugin=lrc \ mapping=DD_ \ ruleset-steps='[ [ "chooseleaf", "osd", 0 ] ]' \ layers='[ [ "DDc", "" ] ]' || return 1 @@ -130,13 +130,13 @@ function TEST_rados_put_get_LRC_advanced() { ./ceph osd erasure-code-profile rm $profile } -function TEST_rados_put_get_LRC_kml() { +function TEST_rados_put_get_lrc_kml() { local dir=$1 - local poolname=pool-LRC - local profile=profile-LRC + local poolname=pool-lrc + local profile=profile-lrc ./ceph osd erasure-code-profile set $profile \ - plugin=LRC \ + plugin=lrc \ k=4 m=2 l=3 \ ruleset-failure-domain=osd || return 1 ./ceph osd pool create $poolname 12 12 erasure $profile \ @@ -259,7 +259,7 @@ function TEST_chunk_mapping() { verify_chunk_mapping $dir ecpool 0 1 || return 1 ./ceph osd erasure-code-profile set remap-profile \ - plugin=LRC \ + plugin=lrc \ layers='[ [ "_DD", "" ] ]' \ mapping='_DD' \ ruleset-steps='[ [ "choose", "osd", 0 ] ]' || return 1 diff --git a/src/test/mon/osd-pool-create.sh b/src/test/mon/osd-pool-create.sh index 311fc2b8c456..b73cd5d44645 100755 --- a/src/test/mon/osd-pool-create.sh +++ b/src/test/mon/osd-pool-create.sh @@ -214,12 +214,12 @@ function TEST_replicated_pool_with_ruleset() { grep "doesn't exist" || return 1 } -function TEST_erasure_code_pool_LRC() { +function TEST_erasure_code_pool_lrc() { local dir=$1 run_mon $dir a --public-addr 127.0.0.1 ./ceph osd erasure-code-profile set LRCprofile \ - plugin=LRC \ + plugin=lrc \ mapping=DD_ \ layers='[ [ "DDc", "" ] ]' || return 1 -- 2.47.3