From: Samuel Just Date: Sat, 1 Feb 2014 19:31:25 +0000 (-0800) Subject: TestRados: send aligned appends on erasure pools X-Git-Tag: v0.78~163^2~59 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=541a7e27250d5adf93457c3dbcc69dde1c1dd71f;p=ceph.git TestRados: send aligned appends on erasure pools Signed-off-by: Samuel Just --- diff --git a/src/test/osd/Object.cc b/src/test/osd/Object.cc index 279ae237d614..c98d62d2934e 100644 --- a/src/test/osd/Object.cc +++ b/src/test/osd/Object.cc @@ -44,13 +44,15 @@ void AppendGenerator::get_ranges_map( uint64_t pos = off; uint64_t limit = off + get_append_size(cont); while (pos < limit) { - uint64_t segment_length = ( - rand() % (max_append_size - min_append_size)) + min_append_size; - assert(segment_length < max_append_size); + uint64_t segment_length = round_up( + rand() % (max_append_size - min_append_size), + alignment) + min_append_size; assert(segment_length >= min_append_size); if (segment_length + pos > limit) { segment_length = limit - pos; } + if (alignment) + assert(segment_length % alignment == 0); out.insert(make_pair(pos, segment_length)); pos += segment_length; } diff --git a/src/test/osd/Object.h b/src/test/osd/Object.h index 1f4defdcb67b..d39d36c6fd83 100644 --- a/src/test/osd/Object.h +++ b/src/test/osd/Object.h @@ -238,21 +238,34 @@ public: class AppendGenerator : public RandGenerator { uint64_t off; + uint64_t alignment; uint64_t min_append_size; uint64_t max_append_size; uint64_t max_append_total; + + uint64_t round_up(uint64_t in, uint64_t by) { + if (by) + in += (by - (in % by)); + return in; + } + public: AppendGenerator( uint64_t off, + uint64_t alignment, uint64_t min_append_size, - uint64_t max_append_size, - uint64_t max_append_total) : - off(off), min_append_size(min_append_size), - max_append_size(max_append_size), - max_append_total(max_append_total) {} + uint64_t _max_append_size, + uint64_t max_append_multiple) : + off(off), alignment(alignment), + min_append_size(round_up(min_append_size, alignment)), + max_append_size(round_up(_max_append_size, alignment)) { + if (_max_append_size == min_append_size) + max_append_size += alignment; + max_append_total = max_append_multiple * max_append_size; + } uint64_t get_append_size(const ContDesc &in) { RandWrap rand(in.seqnum); - return rand() % max_append_total; + return round_up(rand() % max_append_total, alignment); } uint64_t get_length(const ContDesc &in) { return off + get_append_size(in); diff --git a/src/test/osd/RadosModel.h b/src/test/osd/RadosModel.h index 4a5b861a856e..1193f4aecccf 100644 --- a/src/test/osd/RadosModel.h +++ b/src/test/osd/RadosModel.h @@ -708,9 +708,11 @@ public: 0; cont_gen = new AppendGenerator( prev_length, + (context->io_ctx.pool_requires_alignment() ? + context->io_ctx.pool_required_alignment() : 0), context->min_stride_size, context->max_stride_size, - 3 * context->max_stride_size); + 3); } else { cont_gen = new VarLenGenerator( context->max_size, context->min_stride_size, context->max_stride_size);