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)
{
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;
}
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,
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());
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,
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)]);
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,
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,
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;
#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;
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,
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)
{
++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,
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)
{
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,
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;
int *minimum);
};
-class ErasureCodeShecReedSolomonVandermonde : public ErasureCodeShec {
+class ErasureCodeShecReedSolomonVandermonde final : public ErasureCodeShec {
public:
ErasureCodeShecReedSolomonVandermonde(ErasureCodeShecTableCache &_tcache,
#define MINIMUM_TO_RECOVER 2u
-class ErasureCodeExample : public ErasureCode {
+class ErasureCodeExample final : public ErasureCode {
public:
~ErasureCodeExample() override {}
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,
+
+ int _minimum_to_decode(const set<int> &want_to_read,
const set<int> &available_chunks,
- set<int> *minimum) {
+ set<int> *minimum) override {
if (includes(available_chunks.begin(), available_chunks.end(),
want_to_read.begin(), want_to_read.end())) {
*minimum = want_to_read;
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 {
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
//
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(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));
{
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));
}
{
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]);
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]);
{
int want_to_decode[] = {0, 1};
map<int, bufferlist> decoded;
- EXPECT_EQ(0, Isa.decode(set<int>(want_to_decode, want_to_decode + 2),
- encoded,
- &decoded));
+ EXPECT_EQ(0, Isa._decode(set<int>(want_to_decode, want_to_decode + 2),
+ encoded,
+ &decoded));
EXPECT_EQ(2u, decoded.size());
EXPECT_EQ(chunk_size, decoded[0].length());
compare_chunks(in, decoded);
EXPECT_EQ(3u, degraded.size());
int want_to_decode[] = {1};
map<int, bufferlist> decoded;
- EXPECT_EQ(0, Isa.decode(set<int>(want_to_decode, want_to_decode + 1),
- degraded,
- &decoded));
+ EXPECT_EQ(0, Isa._decode(set<int>(want_to_decode, want_to_decode + 1),
+ degraded,
+ &decoded));
// always decode all, regardless of want_to_decode
EXPECT_EQ(4u, decoded.size());
EXPECT_EQ(chunk_size, decoded[1].length());
EXPECT_EQ(3u, degraded.size());
int want_to_decode[] = {3};
map<int, bufferlist> decoded;
- EXPECT_EQ(0, Isa.decode(set<int>(want_to_decode, want_to_decode + 1),
+ EXPECT_EQ(0, Isa._decode(set<int>(want_to_decode, want_to_decode + 1),
degraded,
&decoded));
// always decode all, regardless of want_to_decode
EXPECT_EQ(3u, degraded.size());
int want_to_decode[] = {2};
map<int, bufferlist> decoded;
- EXPECT_EQ(0, Isa.decode(set<int>(want_to_decode, want_to_decode + 1),
- degraded,
- &decoded));
+ EXPECT_EQ(0, Isa._decode(set<int>(want_to_decode, want_to_decode + 1),
+ degraded,
+ &decoded));
// always decode all, regardless of want_to_decode
EXPECT_EQ(4u, decoded.size());
EXPECT_EQ(chunk_size, decoded[2].length());
EXPECT_EQ(2u, degraded.size());
int want_to_decode[] = {1, 3};
map<int, bufferlist> decoded;
- EXPECT_EQ(0, Isa.decode(set<int>(want_to_decode, want_to_decode + 2),
- degraded,
- &decoded));
+ EXPECT_EQ(0, Isa._decode(set<int>(want_to_decode, want_to_decode + 2),
+ degraded,
+ &decoded));
// always decode all, regardless of want_to_decode
EXPECT_EQ(4u, decoded.size());
EXPECT_EQ(chunk_size, decoded[1].length());
EXPECT_EQ(2u, degraded.size());
int want_to_decode[] = {0, 1};
map<int, bufferlist> decoded;
- EXPECT_EQ(0, Isa.decode(set<int>(want_to_decode, want_to_decode + 2),
- degraded,
- &decoded));
+ EXPECT_EQ(0, Isa._decode(set<int>(want_to_decode, want_to_decode + 2),
+ degraded,
+ &decoded));
// always decode all, regardless of want_to_decode
EXPECT_EQ(4u, decoded.size());
EXPECT_EQ(chunk_size, decoded[0].length());
set<int> available_chunks;
set<int> minimum;
- EXPECT_EQ(0, Isa.minimum_to_decode(want_to_read,
- available_chunks,
- &minimum));
+ EXPECT_EQ(0, Isa._minimum_to_decode(want_to_read,
+ available_chunks,
+ &minimum));
EXPECT_TRUE(minimum.empty());
}
//
want_to_read.insert(0);
- EXPECT_EQ(-EIO, Isa.minimum_to_decode(want_to_read,
- available_chunks,
- &minimum));
+ EXPECT_EQ(-EIO, Isa._minimum_to_decode(want_to_read,
+ available_chunks,
+ &minimum));
}
//
// Reading a subset of the available chunks is always possible.
want_to_read.insert(0);
available_chunks.insert(0);
- EXPECT_EQ(0, Isa.minimum_to_decode(want_to_read,
- available_chunks,
- &minimum));
+ EXPECT_EQ(0, Isa._minimum_to_decode(want_to_read,
+ available_chunks,
+ &minimum));
EXPECT_EQ(want_to_read, minimum);
}
//
want_to_read.insert(1);
available_chunks.insert(0);
- EXPECT_EQ(-EIO, Isa.minimum_to_decode(want_to_read,
- available_chunks,
- &minimum));
+ EXPECT_EQ(-EIO, Isa._minimum_to_decode(want_to_read,
+ available_chunks,
+ &minimum));
}
//
// When chunks are not available, the minimum can be made of any
available_chunks.insert(2);
available_chunks.insert(3);
- EXPECT_EQ(0, Isa.minimum_to_decode(want_to_read,
- available_chunks,
- &minimum));
+ EXPECT_EQ(0, Isa._minimum_to_decode(want_to_read,
+ available_chunks,
+ &minimum));
EXPECT_EQ(2u, minimum.size());
EXPECT_EQ(0u, minimum.count(3));
}
bool ok;
// decode as requested
- ok = Isa.decode(want_to_decode,
- degraded,
- &decoded);
+ ok = Isa._decode(want_to_decode,
+ degraded,
+ &decoded);
for (int i = 0; i < (int) decoded.size(); i++) {
// compare all the buffers with their original
{
int want_to_decode[] = { 0, 1 };
map<int, bufferlist> decoded;
- EXPECT_EQ(0, jerasure.decode(set<int>(want_to_decode, want_to_decode+2),
- encoded,
- &decoded));
+ EXPECT_EQ(0, jerasure._decode(set<int>(want_to_decode, want_to_decode+2),
+ encoded,
+ &decoded));
EXPECT_EQ(2u, decoded.size());
EXPECT_EQ(length, decoded[0].length());
EXPECT_EQ(0, memcmp(decoded[0].c_str(), in.c_str(), length));
EXPECT_EQ(2u, degraded.size());
int want_to_decode[] = { 0, 1 };
map<int, bufferlist> decoded;
- EXPECT_EQ(0, jerasure.decode(set<int>(want_to_decode, want_to_decode+2),
- degraded,
- &decoded));
+ EXPECT_EQ(0, jerasure._decode(set<int>(want_to_decode, want_to_decode+2),
+ degraded,
+ &decoded));
// always decode all, regardless of want_to_decode
EXPECT_EQ(4u, decoded.size());
EXPECT_EQ(length, decoded[0].length());
set<int> available_chunks;
set<int> minimum;
- EXPECT_EQ(0, jerasure.minimum_to_decode(want_to_read,
- available_chunks,
- &minimum));
+ EXPECT_EQ(0, jerasure._minimum_to_decode(want_to_read,
+ available_chunks,
+ &minimum));
EXPECT_TRUE(minimum.empty());
}
//
want_to_read.insert(0);
- EXPECT_EQ(-EIO, jerasure.minimum_to_decode(want_to_read,
- available_chunks,
- &minimum));
+ EXPECT_EQ(-EIO, jerasure._minimum_to_decode(want_to_read,
+ available_chunks,
+ &minimum));
}
//
// Reading a subset of the available chunks is always possible.
want_to_read.insert(0);
available_chunks.insert(0);
- EXPECT_EQ(0, jerasure.minimum_to_decode(want_to_read,
- available_chunks,
- &minimum));
+ EXPECT_EQ(0, jerasure._minimum_to_decode(want_to_read,
+ available_chunks,
+ &minimum));
EXPECT_EQ(want_to_read, minimum);
}
//
want_to_read.insert(1);
available_chunks.insert(0);
- EXPECT_EQ(-EIO, jerasure.minimum_to_decode(want_to_read,
- available_chunks,
- &minimum));
+ EXPECT_EQ(-EIO, jerasure._minimum_to_decode(want_to_read,
+ available_chunks,
+ &minimum));
}
//
// When chunks are not available, the minimum can be made of any
available_chunks.insert(2);
available_chunks.insert(3);
- EXPECT_EQ(0, jerasure.minimum_to_decode(want_to_read,
- available_chunks,
- &minimum));
+ EXPECT_EQ(0, jerasure._minimum_to_decode(want_to_read,
+ available_chunks,
+ &minimum));
EXPECT_EQ(2u, minimum.size());
EXPECT_EQ(0u, minimum.count(3));
}
available_chunks.insert(1);
available_chunks.insert(2);
set<int> 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
available_chunks.insert(i);
// _____DDDDc can recover c
set<int> 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<int> expected_minimum;
expected_minimum.insert(5);
expected_minimum.insert(6);
for (int i = 1; i < (int)lrc.get_chunk_count(); i++)
available_chunks.insert(i);
set<int> 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<int> expected_minimum;
expected_minimum.insert(2);
expected_minimum.insert(3);
// missing (7)
// missing (8)
set<int> 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
// missing (7)
// missing (8)
set<int> 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);
}
}
available_chunks.insert(5);
available_chunks.insert(6);
set<int> 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(1U, minimum.count(4));
EXPECT_EQ(1U, minimum.count(5));
EXPECT_EQ(1U, minimum.count(6));
map<int, bufferlist> 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));
}
available_chunks.insert(6);
available_chunks.insert(7);
set<int> 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(5U, minimum.size());
EXPECT_EQ(available_chunks, minimum);
map<int, bufferlist> 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));
}
encoded.erase(3);
encoded.erase(6);
set<int> 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(4U, minimum.size());
// only need two chunks from the first local layer
EXPECT_EQ(1U, minimum.count(0));
EXPECT_EQ(1U, minimum.count(5));
map<int, bufferlist> 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));
available_chunks.insert(6);
available_chunks.insert(7);
set<int> 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(4U, minimum.size());
EXPECT_EQ(1U, minimum.count(1));
EXPECT_EQ(1U, minimum.count(4));
EXPECT_EQ(1U, minimum.count(6));
map<int, bufferlist> 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));
}
available_chunks.insert(6);
available_chunks.insert(7);
set<int> 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(5U, minimum.size());
EXPECT_EQ(1U, minimum.count(1));
EXPECT_EQ(1U, minimum.count(3));
EXPECT_EQ(1U, minimum.count(7));
map<int, bufferlist> 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));
available_chunks.insert(6);
available_chunks.insert(7);
set<int> 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(5U, minimum.size());
EXPECT_EQ(1U, minimum.count(1));
EXPECT_EQ(1U, minimum.count(3));
EXPECT_EQ(1U, minimum.count(7));
map<int, bufferlist> 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));
available_chunks.insert(5);
available_chunks.insert(7);
set<int> 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);
map<int, bufferlist> decoded;
- EXPECT_EQ(0, lrc.decode(want_to_read, chunks, &decoded));
+ EXPECT_EQ(0, lrc._decode(want_to_read, chunks, &decoded));
}
}
available_chunks.insert(i);
}
- int r = shec->minimum_to_decode(want_to_decode, available_chunks,
- &minimum_chunks);
+ int r = shec->_minimum_to_decode(want_to_decode, available_chunks,
+ &minimum_chunks);
EXPECT_EQ(-EINVAL, r);
delete shec;
available_chunks.insert(i);
}
- int r = shec->minimum_to_decode(want_to_decode, available_chunks,
- &minimum_chunks);
+ int r = shec->_minimum_to_decode(want_to_decode, available_chunks,
+ &minimum_chunks);
EXPECT_EQ(-EINVAL, r);
delete shec;
available_chunks.insert(i);
}
- int r = shec->minimum_to_decode(want_to_decode, available_chunks,
- &minimum_chunks);
+ int r = shec->_minimum_to_decode(want_to_decode, available_chunks,
+ &minimum_chunks);
EXPECT_EQ(-EIO, r);
delete shec;
available_chunks.insert(i);
}
- int r = shec->minimum_to_decode(want_to_decode, available_chunks,
- &minimum_chunks);
+ int r = shec->_minimum_to_decode(want_to_decode, available_chunks,
+ &minimum_chunks);
EXPECT_EQ(-EIO, r);
delete shec;
available_chunks.insert(i);
}
- int r = shec->minimum_to_decode(want_to_decode, available_chunks, NULL);
+ int r = shec->_minimum_to_decode(want_to_decode, available_chunks, NULL);
EXPECT_EQ(-EINVAL, r);
delete shec;
want_to_decode.insert(i);
available_chunks.insert(i);
}
- shec->minimum_to_decode(want_to_decode, available_chunks, &minimum_chunks);
+ shec->_minimum_to_decode(want_to_decode, available_chunks, &minimum_chunks);
minimum = minimum_chunks; //normal value
for (int i = 100; i < 120; ++i) {
minimum_chunks.insert(i); //insert extra data
}
- int r = shec->minimum_to_decode(want_to_decode, available_chunks,
- &minimum_chunks);
+ int r = shec->_minimum_to_decode(want_to_decode, available_chunks,
+ &minimum_chunks);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_EQ(minimum, minimum_chunks);
available_chunks.insert(1);
available_chunks.insert(2);
- int r = shec->minimum_to_decode(want_to_decode, available_chunks,
- &minimum_chunks);
+ int r = shec->_minimum_to_decode(want_to_decode, available_chunks,
+ &minimum_chunks);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_TRUE(minimum_chunks.size());
}
sleep(1);
printf("*** test start ***\n");
- int r = shec->minimum_to_decode(want_to_decode, available_chunks,
- &minimum_chunks);
+ int r = shec->_minimum_to_decode(want_to_decode, available_chunks,
+ &minimum_chunks);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_EQ(want_to_decode, minimum_chunks);
int want_to_decode[] = { 0, 1, 2, 3, 4, 5, 6 };
map<int, bufferlist> decoded;
decoded.clear();
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 2),
- encoded,
- &decoded);
- EXPECT_TRUE(shec->matrix != NULL);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 2),
+ encoded,
+ &decoded);
+ EXPECT_NE(nullptr, shec->matrix);
EXPECT_EQ(0, r);
EXPECT_EQ(2u, decoded.size());
EXPECT_EQ(32u, decoded[0].length());
//decode
int want_to_decode[] = { 0, 1, 2, 3, 4, 5, 6 };
map<int, bufferlist> decoded;
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
+ &decoded);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_EQ(2u, decoded.size());
//decode
int want_to_decode[] = { 0, 1, 2, 3, 4, 5, 6 };
map<int, bufferlist> decoded;
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
&decoded);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
//decode
int want_to_decode[] = { 0, 1, 2, 3, 4, 5, 6 };
map<int, bufferlist> decoded;
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
+ &decoded);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_EQ(2u, decoded.size());
//decode
int want_to_decode[] = { 0, 1, 2, 3, 4, 5, 6 };
map<int, bufferlist> decoded;
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
+ &decoded);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_EQ(2u, decoded.size());
int want_to_decode[] = { 0, 1, 2, 3, 4, 5, 6 };
map<int, bufferlist> decoded;
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
+ &decoded);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_EQ(2u, decoded.size());
int want_to_decode[] = { 0, 1, 2, 3, 4, 5, 6 };
map<int, bufferlist> decoded;
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 7), encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 7), encoded,
+ &decoded);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_EQ(7u, decoded.size());
int want_to_decode[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; //more than k+m
map<int, bufferlist> decoded;
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 8), encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 8), encoded,
+ &decoded);
EXPECT_EQ(0, r);
EXPECT_EQ(7u, decoded.size());
EXPECT_EQ(shec->get_chunk_size(in.length()), encoded[0].length());
buf.append("abc");
encoded[100] = buf;
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 10), encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 10), encoded,
+ &decoded);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_EQ(7u, decoded.size());
inchunks.insert(make_pair(i, encoded[i]));
}
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 7), inchunks,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 7), inchunks,
+ &decoded);
EXPECT_EQ(-1, r);
delete shec;
inchunks.insert(make_pair(i, encoded[i]));
}
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 5), inchunks,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 5), inchunks,
+ &decoded);
EXPECT_EQ(-1, r);
delete shec;
int want_to_decode[] = { 0, 1, 2, 3, 4, 5, 6 };
//decoded = NULL
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 7), encoded,
- NULL);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 7), encoded,
+ NULL);
EXPECT_NE(0, r);
delete shec;
decoded[i] = buf;
}
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 7), encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 7), encoded,
+ &decoded);
EXPECT_NE(0, r);
delete shec;
int want_to_decode[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
map<int, bufferlist> decoded;
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
+ &decoded);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_EQ(2u, decoded.size());
}
sleep(1);
printf("*** test start ***\n");
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
+ &decoded);
EXPECT_TRUE(shec->matrix != NULL);
EXPECT_EQ(0, r);
EXPECT_EQ(2u, decoded.size());
map<int, bufferlist> degraded;
degraded[0] = encoded[0];
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 2), degraded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 2), degraded,
+ &decoded);
EXPECT_EQ(-1, r);
delete shec;
printf("*** thread loop start ***\n");
g_flag = 1;
while (g_flag == 1) {
- shec->minimum_to_decode(want_to_decode, available_chunks, &minimum_chunks);
+ shec->_minimum_to_decode(want_to_decode, available_chunks, &minimum_chunks);
}
printf("*** thread loop end ***\n");
printf("*** thread loop start ***\n");
g_flag = 1;
while (g_flag == 1) {
- shec->decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
- &decoded);
+ shec->_decode(set<int>(want_to_decode, want_to_decode + 2), encoded,
+ &decoded);
decoded.clear();
}
printf("*** thread loop end ***\n");
}
}
- result = shec->minimum_to_decode(want_to_decode, available_chunks,
- &minimum_chunks);
+ result = shec->_minimum_to_decode(want_to_decode, available_chunks,
+ &minimum_chunks);
if (result == 0){
EXPECT_EQ(0, result);
want_to_decode2[i] = i;
}
- result = shec->decode(set<int>(want_to_decode2, want_to_decode2 + 2),
- encoded, &decoded);
+ result = shec->_decode(set<int>(want_to_decode2, want_to_decode2 + 2),
+ encoded, &decoded);
EXPECT_EQ(0, result);
EXPECT_EQ(2u, decoded.size());
EXPECT_EQ(c_size, decoded[0].length());
}
EXPECT_FALSE(out1 == in);
- set<int> want_to_read, available_chunks, minimum_chunks, want_to_read_without_avails;
+ set<int> want_to_read, available_chunks, want_to_read_without_avails;
+ map<int, vector<pair<int,int>>> minimum_chunks;
set<int>::iterator itr;
int array_want_to_read[shec->get_chunk_count()];
int array_available_chunks[shec->get_chunk_count()];
result = shec->minimum_to_decode(want_to_read, available_chunks,
&minimum_chunks);
- dresult = shec->decode(want_to_read, inchunks, &decoded);
+ dresult = shec->decode(want_to_read, inchunks, &decoded,
+ shec->get_chunk_size(kObjectSize));
++count_num;
minimum_count = 0;
}
//decode
- r = shec->decode(set<int>(want_to_decode, want_to_decode + 2),
- encoded,
- &decoded);
+ r = shec->_decode(set<int>(want_to_decode, want_to_decode + 2),
+ encoded,
+ &decoded);
EXPECT_EQ(0, r);
EXPECT_EQ(2u, decoded.size());