Skip to content

Commit

Permalink
Merge pull request #18683 from tchaikov/wip-erasure-cleanup
Browse files Browse the repository at this point in the history
erasure-code: refactor the interfaces to hide internals from public

Reviewed-by: Sage Weil <sage@redhat.com>
  • Loading branch information
liewegas committed Nov 9, 2017
2 parents 36d83f1 + 203ddce commit 3855d2c
Show file tree
Hide file tree
Showing 15 changed files with 191 additions and 204 deletions.
16 changes: 8 additions & 8 deletions src/erasure-code/ErasureCode.cc
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ int ErasureCode::chunk_index(unsigned int i) const
return chunk_mapping.size() > i ? chunk_mapping[i] : i;
}

int ErasureCode::minimum_to_decode(const set<int> &want_to_read,
int ErasureCode::_minimum_to_decode(const set<int> &want_to_read,
const set<int> &available_chunks,
set<int> *minimum)
{
Expand All @@ -112,7 +112,7 @@ int ErasureCode::minimum_to_decode(const set<int> &want_to_read,
map<int, vector<pair<int, int>>> *minimum)
{
set<int> minimum_shard_ids;
int r = minimum_to_decode(want_to_read, available_chunks, &minimum_shard_ids);
int r = _minimum_to_decode(want_to_read, available_chunks, &minimum_shard_ids);
if (r != 0) {
return r;
}
Expand All @@ -133,7 +133,7 @@ int ErasureCode::minimum_to_decode_with_cost(const set<int> &want_to_read,
i != available.end();
++i)
available_chunks.insert(i->first);
return minimum_to_decode(want_to_read, available_chunks, minimum);
return _minimum_to_decode(want_to_read, available_chunks, minimum);
}

int ErasureCode::encode_prepare(const bufferlist &raw,
Expand Down Expand Up @@ -197,9 +197,9 @@ int ErasureCode::encode_chunks(const set<int> &want_to_encode,
assert("ErasureCode::encode_chunks not implemented" == 0);
}

int ErasureCode::decode(const set<int> &want_to_read,
const map<int, bufferlist> &chunks,
map<int, bufferlist> *decoded)
int ErasureCode::_decode(const set<int> &want_to_read,
const map<int, bufferlist> &chunks,
map<int, bufferlist> *decoded)
{
vector<int> have;
have.reserve(chunks.size());
Expand Down Expand Up @@ -236,7 +236,7 @@ int ErasureCode::decode(const set<int> &want_to_read,
const map<int, bufferlist> &chunks,
map<int, bufferlist> *decoded, int chunk_size)
{
return decode(want_to_read, chunks, decoded);
return _decode(want_to_read, chunks, decoded);
}

int ErasureCode::decode_chunks(const set<int> &want_to_read,
Expand Down Expand Up @@ -336,7 +336,7 @@ int ErasureCode::decode_concat(const map<int, bufferlist> &chunks,
want_to_read.insert(chunk_index(i));
}
map<int, bufferlist> decoded_map;
int r = decode(want_to_read, chunks, &decoded_map);
int r = _decode(want_to_read, chunks, &decoded_map);
if (r == 0) {
for (unsigned int i = 0; i < get_data_chunk_count(); i++) {
decoded->claim_append(decoded_map[chunk_index(i)]);
Expand Down
22 changes: 11 additions & 11 deletions src/erasure-code/ErasureCode.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,13 @@ namespace ceph {
return 1;
}

virtual int minimum_to_decode(const std::set<int> &want_to_read,
const std::set<int> &available_chunks,
std::set<int> *minimum);
virtual int _minimum_to_decode(const std::set<int> &want_to_read,
const std::set<int> &available_chunks,
std::set<int> *minimum);

virtual int minimum_to_decode(const std::set<int> &want_to_read,
const std::set<int> &available,
std::map<int, std::vector<std::pair<int, int>>> *minimum)override;
int minimum_to_decode(const std::set<int> &want_to_read,
const std::set<int> &available,
std::map<int, std::vector<std::pair<int, int>>> *minimum) final override;

int minimum_to_decode_with_cost(const std::set<int> &want_to_read,
const std::map<int, int> &available,
Expand All @@ -82,13 +82,13 @@ namespace ceph {
int encode_chunks(const std::set<int> &want_to_encode,
std::map<int, bufferlist> *encoded) override;

virtual int decode(const std::set<int> &want_to_read,
const std::map<int, bufferlist> &chunks,
std::map<int, bufferlist> *decoded);

int decode(const std::set<int> &want_to_read,
const std::map<int, bufferlist> &chunks,
std::map<int, bufferlist> *decoded, int chunk_size) override;
std::map<int, bufferlist> *decoded, int chunk_size) override final;

virtual int _decode(const std::set<int> &want_to_read,
const std::map<int, bufferlist> &chunks,
std::map<int, bufferlist> *decoded);

int decode_chunks(const std::set<int> &want_to_read,
const std::map<int, bufferlist> &chunks,
Expand Down
6 changes: 3 additions & 3 deletions src/erasure-code/lrc/ErasureCodeLrc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -569,9 +569,9 @@ unsigned int ErasureCodeLrc::get_chunk_size(unsigned int object_size) const

void p(const set<int> &s) { cerr << s; } // for gdb

int ErasureCodeLrc::minimum_to_decode(const set<int> &want_to_read,
const set<int> &available_chunks,
set<int> *minimum)
int ErasureCodeLrc::_minimum_to_decode(const set<int> &want_to_read,
const set<int> &available_chunks,
set<int> *minimum)
{
dout(20) << __func__ << " want_to_read " << want_to_read
<< " available_chunks " << available_chunks << dendl;
Expand Down
8 changes: 4 additions & 4 deletions src/erasure-code/lrc/ErasureCodeLrc.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,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 final : public ErasureCode {
public:
static const std::string DEFAULT_KML;

Expand Down Expand Up @@ -87,9 +87,9 @@ class ErasureCodeLrc : public ErasureCode {
std::set<int> get_erasures(const std::set<int> &need,
const std::set<int> &available) const;

int minimum_to_decode(const std::set<int> &want_to_read,
const std::set<int> &available,
std::set<int> *minimum) override;
int _minimum_to_decode(const std::set<int> &want_to_read,
const std::set<int> &available,
std::set<int> *minimum) override;

int create_rule(const std::string &name,
CrushWrapper &crush,
Expand Down
6 changes: 3 additions & 3 deletions src/erasure-code/shec/ErasureCodeShec.cc
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ unsigned int ErasureCodeShec::get_chunk_size(unsigned int object_size) const
return padded_length / k;
}

int ErasureCodeShec::minimum_to_decode(const set<int> &want_to_read,
int ErasureCodeShec::_minimum_to_decode(const set<int> &want_to_read,
const set<int> &available_chunks,
set<int> *minimum_chunks)
{
Expand Down Expand Up @@ -131,7 +131,7 @@ int ErasureCodeShec::minimum_to_decode_with_cost(const set<int> &want_to_read,
++i)
available_chunks.insert(i->first);

return minimum_to_decode(want_to_read, available_chunks, minimum_chunks);
return _minimum_to_decode(want_to_read, available_chunks, minimum_chunks);
}

int ErasureCodeShec::encode(const set<int> &want_to_encode,
Expand Down Expand Up @@ -168,7 +168,7 @@ int ErasureCodeShec::encode_chunks(const set<int> &want_to_encode,
return 0;
}

int ErasureCodeShec::decode(const set<int> &want_to_read,
int ErasureCodeShec::_decode(const set<int> &want_to_read,
const map<int, bufferlist> &chunks,
map<int, bufferlist> *decoded)
{
Expand Down
14 changes: 7 additions & 7 deletions src/erasure-code/shec/ErasureCodeShec.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ class ErasureCodeShec : public ErasureCode {

unsigned int get_chunk_size(unsigned int object_size) const override;

int minimum_to_decode(const set<int> &want_to_read,
const set<int> &available_chunks,
set<int> *minimum);
int _minimum_to_decode(const std::set<int> &want_to_read,
const std::set<int> &available_chunks,
std::set<int> *minimum);

int minimum_to_decode_with_cost(const set<int> &want_to_read,
const map<int, int> &available,
Expand All @@ -85,9 +85,9 @@ class ErasureCodeShec : public ErasureCode {
int encode_chunks(const set<int> &want_to_encode,
map<int, bufferlist> *encoded) override;

int decode(const set<int> &want_to_read,
const map<int, bufferlist> &chunks,
map<int, bufferlist> *decoded);
int _decode(const std::set<int> &want_to_read,
const std::map<int, bufferlist> &chunks,
std::map<int, bufferlist> *decoded) override;
int decode_chunks(const set<int> &want_to_read,
const map<int, bufferlist> &chunks,
map<int, bufferlist> *decoded) override;
Expand Down Expand Up @@ -119,7 +119,7 @@ class ErasureCodeShec : public ErasureCode {
int *minimum);
};

class ErasureCodeShecReedSolomonVandermonde : public ErasureCodeShec {
class ErasureCodeShecReedSolomonVandermonde final : public ErasureCodeShec {
public:

ErasureCodeShecReedSolomonVandermonde(ErasureCodeShecTableCache &_tcache,
Expand Down
25 changes: 5 additions & 20 deletions src/test/erasure-code/ErasureCodeExample.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@

#define MINIMUM_TO_RECOVER 2u

class ErasureCodeExample : public ErasureCode {
class ErasureCodeExample final : public ErasureCode {
public:
~ErasureCodeExample() override {}

Expand All @@ -45,21 +45,6 @@ class ErasureCodeExample : public ErasureCode {
return crush.add_simple_rule(name, "default", "host", "",
"indep", pg_pool_t::TYPE_ERASURE, ss);
}

int minimum_to_decode(const set<int> &want_to_read,
const set<int> &available_chunks,
set<int> *minimum) {
if (includes(available_chunks.begin(), available_chunks.end(),
want_to_read.begin(), want_to_read.end())) {
*minimum = want_to_read;
return 0;
} else if (available_chunks.size() >= MINIMUM_TO_RECOVER) {
*minimum = available_chunks;
return 0;
} else {
return -EIO;
}
}

int minimum_to_decode_with_cost(const set<int> &want_to_read,
const map<int, int> &available,
Expand Down Expand Up @@ -88,7 +73,7 @@ class ErasureCodeExample : public ErasureCode {
i != c2c.end();
++i)
available_chunks.insert(i->first);
return minimum_to_decode(want_to_read, available_chunks, minimum);
return _minimum_to_decode(want_to_read, available_chunks, minimum);
}

unsigned int get_chunk_count() const override {
Expand Down Expand Up @@ -144,9 +129,9 @@ class ErasureCodeExample : public ErasureCode {
return 0;
}

int decode(const set<int> &want_to_read,
const map<int, bufferlist> &chunks,
map<int, bufferlist> *decoded) {
int _decode(const set<int> &want_to_read,
const map<int, bufferlist> &chunks,
map<int, bufferlist> *decoded) {
//
// All chunks have the same size
//
Expand Down
26 changes: 13 additions & 13 deletions src/test/erasure-code/TestErasureCodeExample.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,17 @@ TEST(ErasureCodeExample, minimum_to_decode)
want_to_read.insert(1);
{
set<int> minimum;
EXPECT_EQ(-EIO, example.minimum_to_decode(want_to_read,
EXPECT_EQ(-EIO, example._minimum_to_decode(want_to_read,
available_chunks,
&minimum));
}
available_chunks.insert(0);
available_chunks.insert(2);
{
set<int> minimum;
EXPECT_EQ(0, example.minimum_to_decode(want_to_read,
available_chunks,
&minimum));
EXPECT_EQ(0, example._minimum_to_decode(want_to_read,
available_chunks,
&minimum));
EXPECT_EQ(available_chunks, minimum);
EXPECT_EQ(2u, minimum.size());
EXPECT_EQ(1u, minimum.count(0));
Expand All @@ -54,9 +54,9 @@ TEST(ErasureCodeExample, minimum_to_decode)
{
set<int> minimum;
available_chunks.insert(1);
EXPECT_EQ(0, example.minimum_to_decode(want_to_read,
available_chunks,
&minimum));
EXPECT_EQ(0, example._minimum_to_decode(want_to_read,
available_chunks,
&minimum));
EXPECT_EQ(1u, minimum.size());
EXPECT_EQ(1u, minimum.count(1));
}
Expand Down Expand Up @@ -132,9 +132,9 @@ TEST(ErasureCodeExample, encode_decode)
{
int want_to_decode[] = { 0, 1 };
map<int, bufferlist> decoded;
EXPECT_EQ(0, example.decode(set<int>(want_to_decode, want_to_decode+2),
encoded,
&decoded));
EXPECT_EQ(0, example._decode(set<int>(want_to_decode, want_to_decode+2),
encoded,
&decoded));
EXPECT_EQ(2u, decoded.size());
EXPECT_EQ(3u, decoded[0].length());
EXPECT_EQ('A', decoded[0][0]);
Expand All @@ -151,9 +151,9 @@ TEST(ErasureCodeExample, encode_decode)
EXPECT_EQ(2u, degraded.size());
int want_to_decode[] = { 0, 1 };
map<int, bufferlist> decoded;
EXPECT_EQ(0, example.decode(set<int>(want_to_decode, want_to_decode+2),
degraded,
&decoded));
EXPECT_EQ(0, example._decode(set<int>(want_to_decode, want_to_decode+2),
degraded,
&decoded));
EXPECT_EQ(2u, decoded.size());
EXPECT_EQ(3u, decoded[0].length());
EXPECT_EQ('A', decoded[0][0]);
Expand Down

0 comments on commit 3855d2c

Please sign in to comment.