prepare();
}
+unsigned int ErasureCodeJerasure::get_chunk_size(unsigned int object_size) const
+{
+ unsigned alignment = get_alignment();
+ unsigned tail = object_size % alignment;
+ unsigned padded_length = object_size + ( tail ? ( alignment - tail ) : 0 );
+ assert(padded_length % k == 0);
+ return padded_length / k;
+}
+
int ErasureCodeJerasure::minimum_to_decode(const set<int> &want_to_read,
const set<int> &available_chunks,
set<int> *minimum)
const bufferlist &in,
map<int, bufferlist> *encoded)
{
- unsigned alignment = get_alignment();
- unsigned tail = in.length() % alignment;
- unsigned padded_length = in.length() + ( tail ? ( alignment - tail ) : 0 );
+ unsigned blocksize = get_chunk_size(in.length());
+ unsigned padded_length = blocksize * k;
dout(10) << "encode adjusted buffer length from " << in.length()
<< " to " << padded_length << dendl;
assert(padded_length % k == 0);
out.push_back(pad);
out.rebuild_page_aligned();
}
- unsigned blocksize = padded_length / k;
unsigned coding_length = blocksize * m;
bufferptr coding(buffer::create_page_aligned(coding_length));
out.push_back(coding);
erasures, data, coding, blocksize);
}
-unsigned ErasureCodeJerasureReedSolomonVandermonde::get_alignment()
+unsigned ErasureCodeJerasureReedSolomonVandermonde::get_alignment() const
{
unsigned alignment = k*w*sizeof(int);
if ( ((w*sizeof(int))%LARGEST_VECTOR_WORDSIZE) )
return jerasure_matrix_decode(k, m, w, matrix, 1, erasures, data, coding, blocksize);
}
-unsigned ErasureCodeJerasureReedSolomonRAID6::get_alignment()
+unsigned ErasureCodeJerasureReedSolomonRAID6::get_alignment() const
{
unsigned alignment = k*w*sizeof(int);
if ( ((w*sizeof(int))%LARGEST_VECTOR_WORDSIZE) )
erasures, data, coding, blocksize, packetsize, 1);
}
-unsigned ErasureCodeJerasureCauchy::get_alignment()
+unsigned ErasureCodeJerasureCauchy::get_alignment() const
{
unsigned alignment = k*w*packetsize*sizeof(int);
if ( ((w*packetsize*sizeof(int))%LARGEST_VECTOR_WORDSIZE) )
coding, blocksize, packetsize, 1);
}
-unsigned ErasureCodeJerasureLiberation::get_alignment()
+unsigned ErasureCodeJerasureLiberation::get_alignment() const
{
unsigned alignment = k*w*packetsize*sizeof(int);
if ( ((w*packetsize*sizeof(int))%LARGEST_VECTOR_WORDSIZE) )
virtual ~ErasureCodeJerasure() {}
+ virtual unsigned int get_chunk_count() const {
+ return k + m;
+ }
+
+ virtual unsigned int get_data_chunk_count() const {
+ return k;
+ }
+
+ virtual unsigned int get_chunk_size(unsigned int object_size) const;
+
virtual int minimum_to_decode(const set<int> &want_to_read,
const set<int> &available_chunks,
set<int> *minimum);
char **data,
char **coding,
int blocksize) = 0;
- virtual unsigned get_alignment() = 0;
+ virtual unsigned get_alignment() const = 0;
virtual void parse(const map<std::string,std::string> ¶meters) = 0;
virtual void prepare() = 0;
static int to_int(const std::string &name,
char **data,
char **coding,
int blocksize);
- virtual unsigned get_alignment();
+ virtual unsigned get_alignment() const;
virtual void parse(const map<std::string,std::string> ¶meters);
virtual void prepare();
};
char **data,
char **coding,
int blocksize);
- virtual unsigned get_alignment();
+ virtual unsigned get_alignment() const;
virtual void parse(const map<std::string,std::string> ¶meters);
virtual void prepare();
};
char **data,
char **coding,
int blocksize);
- virtual unsigned get_alignment();
+ virtual unsigned get_alignment() const;
virtual void parse(const map<std::string,std::string> ¶meters);
void prepare_schedule(int *matrix);
};
char **data,
char **coding,
int blocksize);
- virtual unsigned get_alignment();
+ virtual unsigned get_alignment() const;
virtual void parse(const map<std::string,std::string> ¶meters);
virtual void prepare();
};