From: Loic Dachary Date: Sat, 31 May 2014 22:16:59 +0000 (+0200) Subject: erasure-code: move to ErasureCode::minimum_to_decode* X-Git-Tag: v0.85~67^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b4b7c51f4b766f1dd5ec84a23dff58749d62bac1;p=ceph.git erasure-code: move to ErasureCode::minimum_to_decode* The ErasureCode{Jerasure,Isa}::minimum_to_decode and ErasureCode{Jerasure,Isa}::minimum_to_decode_with_cost methods are moved verbatim to the ErasureCode base class. http://tracker.ceph.com/issues/8496 Refs: #8496 Signed-off-by: Loic Dachary --- diff --git a/src/erasure-code/ErasureCode.cc b/src/erasure-code/ErasureCode.cc index 75feeb812749f..0a9ccb398dfcb 100644 --- a/src/erasure-code/ErasureCode.cc +++ b/src/erasure-code/ErasureCode.cc @@ -14,7 +14,43 @@ * */ +#include +#include +#include + #include "ErasureCode.h" + +int ErasureCode::minimum_to_decode(const set &want_to_read, + const set &available_chunks, + set *minimum) +{ + if (includes(available_chunks.begin(), available_chunks.end(), + want_to_read.begin(), want_to_read.end())) { + *minimum = want_to_read; + } else { + unsigned int k = get_data_chunk_count(); + if (available_chunks.size() < (unsigned)k) + return -EIO; + set::iterator i; + unsigned j; + for (i = available_chunks.begin(), j = 0; j < (unsigned)k; ++i, j++) + minimum->insert(*i); + } + return 0; +} + +int ErasureCode::minimum_to_decode_with_cost(const set &want_to_read, + const map &available, + set *minimum) +{ + set available_chunks; + for (map::const_iterator i = available.begin(); + i != available.end(); + ++i) + available_chunks.insert(i->first); + return minimum_to_decode(want_to_read, available_chunks, minimum); +} + int ErasureCode::encode_prepare(const bufferlist &raw, bufferlist *prepared) const { diff --git a/src/erasure-code/ErasureCode.h b/src/erasure-code/ErasureCode.h index 7ae2fd71eb983..09fa490fdfce2 100644 --- a/src/erasure-code/ErasureCode.h +++ b/src/erasure-code/ErasureCode.h @@ -30,6 +30,14 @@ namespace ceph { public: virtual ~ErasureCode() {} + virtual int minimum_to_decode(const set &want_to_read, + const set &available_chunks, + set *minimum); + + virtual int minimum_to_decode_with_cost(const set &want_to_read, + const map &available, + set *minimum); + int encode_prepare(const bufferlist &raw, bufferlist *prepared) const; virtual int encode(const set &want_to_encode, diff --git a/src/erasure-code/isa/ErasureCodeIsa.cc b/src/erasure-code/isa/ErasureCodeIsa.cc index da381a3dd246f..ebc8b6f6a9553 100644 --- a/src/erasure-code/isa/ErasureCodeIsa.cc +++ b/src/erasure-code/isa/ErasureCodeIsa.cc @@ -81,40 +81,6 @@ ErasureCodeIsa::get_chunk_size(unsigned int object_size) const // ----------------------------------------------------------------------------- -int -ErasureCodeIsa::minimum_to_decode(const set &want_to_read, - const set &available_chunks, - set *minimum) -{ - if (includes(available_chunks.begin(), available_chunks.end(), - want_to_read.begin(), want_to_read.end())) { - *minimum = want_to_read; - } else { - if (available_chunks.size() < (unsigned) k) - return -EIO; - set::iterator i; - unsigned j; - for (i = available_chunks.begin(), j = 0; j < (unsigned) k; ++i, j++) - minimum->insert(*i); - } - return 0; -} - -// ----------------------------------------------------------------------------- - -int -ErasureCodeIsa::minimum_to_decode_with_cost(const set &want_to_read, - const map &available, - set *minimum) -{ - set available_chunks; - for (map::const_iterator i = available.begin(); - i != available.end(); - ++i) - available_chunks.insert(i->first); - return minimum_to_decode(want_to_read, available_chunks, minimum); -} - int ErasureCodeIsa::encode_chunks(const set &want_to_encode, map *encoded) { diff --git a/src/erasure-code/isa/ErasureCodeIsa.h b/src/erasure-code/isa/ErasureCodeIsa.h index 136ef5d5d62a1..96e54428aa2eb 100644 --- a/src/erasure-code/isa/ErasureCodeIsa.h +++ b/src/erasure-code/isa/ErasureCodeIsa.h @@ -73,16 +73,9 @@ public: virtual unsigned int get_chunk_size(unsigned int object_size) const; - virtual int minimum_to_decode(const set &want_to_read, - const set &available_chunks, - set *minimum); virtual int encode_chunks(const set &want_to_encode, map *encoded); - virtual int minimum_to_decode_with_cost(const set &want_to_read, - const map &available, - set *minimum); - virtual int decode_chunks(const set &want_to_read, const map &chunks, map *decoded); diff --git a/src/erasure-code/jerasure/ErasureCodeJerasure.cc b/src/erasure-code/jerasure/ErasureCodeJerasure.cc index b35e0bb47d575..7fe68668c6e59 100644 --- a/src/erasure-code/jerasure/ErasureCodeJerasure.cc +++ b/src/erasure-code/jerasure/ErasureCodeJerasure.cc @@ -84,36 +84,6 @@ unsigned int ErasureCodeJerasure::get_chunk_size(unsigned int object_size) const } } -int ErasureCodeJerasure::minimum_to_decode(const set &want_to_read, - const set &available_chunks, - set *minimum) -{ - if (includes(available_chunks.begin(), available_chunks.end(), - want_to_read.begin(), want_to_read.end())) { - *minimum = want_to_read; - } else { - if (available_chunks.size() < (unsigned)k) - return -EIO; - set::iterator i; - unsigned j; - for (i = available_chunks.begin(), j = 0; j < (unsigned)k; ++i, j++) - minimum->insert(*i); - } - return 0; -} - -int ErasureCodeJerasure::minimum_to_decode_with_cost(const set &want_to_read, - const map &available, - set *minimum) -{ - set available_chunks; - for (map::const_iterator i = available.begin(); - i != available.end(); - ++i) - available_chunks.insert(i->first); - return minimum_to_decode(want_to_read, available_chunks, minimum); -} - int ErasureCodeJerasure::encode_chunks(const set &want_to_encode, map *encoded) { diff --git a/src/erasure-code/jerasure/ErasureCodeJerasure.h b/src/erasure-code/jerasure/ErasureCodeJerasure.h index f7e5c3116b0f7..9a554780dff31 100644 --- a/src/erasure-code/jerasure/ErasureCodeJerasure.h +++ b/src/erasure-code/jerasure/ErasureCodeJerasure.h @@ -52,16 +52,9 @@ public: virtual unsigned int get_chunk_size(unsigned int object_size) const; - virtual int minimum_to_decode(const set &want_to_read, - const set &available_chunks, - set *minimum); virtual int encode_chunks(const set &want_to_encode, map *encoded); - virtual int minimum_to_decode_with_cost(const set &want_to_read, - const map &available, - set *minimum); - virtual int decode_chunks(const set &want_to_read, const map &chunks, map *decoded); diff --git a/src/test/erasure-code/TestErasureCodeJerasure.cc b/src/test/erasure-code/TestErasureCodeJerasure.cc index 5a164bbfab77e..b7f35ac6496d4 100644 --- a/src/test/erasure-code/TestErasureCodeJerasure.cc +++ b/src/test/erasure-code/TestErasureCodeJerasure.cc @@ -357,8 +357,8 @@ int main(int argc, char **argv) /* * Local Variables: - * compile-command: "cd ../.. ; make -j4 && - * make unittest_erasure_code_jerasure && + * compile-command: "cd ../.. ; + * make -j4 unittest_erasure_code_jerasure && * valgrind --tool=memcheck --leak-check=full \ * ./unittest_erasure_code_jerasure \ * --gtest_filter=*.* --log-to-stderr=true --debug-osd=20"