From e9e06589b4f24a188dc47a8f71c11fd0b3e56de8 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 3 Apr 2018 10:06:07 -0500 Subject: [PATCH] erasure-code: avoid bufferlist::push_front Signed-off-by: Sage Weil --- src/erasure-code/ErasureCode.cc | 5 ++++- src/erasure-code/shec/ErasureCodeShec.cc | 5 ++++- src/test/erasure-code/ErasureCodeExample.h | 11 +++++++++-- src/test/erasure-code/TestErasureCodeExample.cc | 2 +- src/test/erasure-code/TestErasureCodeIsa.cc | 8 ++++---- src/test/erasure-code/TestErasureCodeJerasure.cc | 2 +- src/test/erasure-code/TestErasureCodeLrc.cc | 10 ++++++++-- 7 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/erasure-code/ErasureCode.cc b/src/erasure-code/ErasureCode.cc index fa5d8e29a4e5b..45607bf2f4b2a 100644 --- a/src/erasure-code/ErasureCode.cc +++ b/src/erasure-code/ErasureCode.cc @@ -221,8 +221,11 @@ int ErasureCode::_decode(const set &want_to_read, unsigned blocksize = (*chunks.begin()).second.length(); for (unsigned int i = 0; i < k + m; i++) { if (chunks.find(i) == chunks.end()) { + bufferlist tmp; bufferptr ptr(buffer::create_aligned(blocksize, SIMD_ALIGN)); - (*decoded)[i].push_front(ptr); + tmp.push_back(ptr); + tmp.claim_append((*decoded)[i]); + (*decoded)[i].swap(tmp); } else { (*decoded)[i] = chunks.find(i)->second; (*decoded)[i].rebuild_aligned(SIMD_ALIGN); diff --git a/src/erasure-code/shec/ErasureCodeShec.cc b/src/erasure-code/shec/ErasureCodeShec.cc index ebcffadd05f92..2c31958ce444f 100644 --- a/src/erasure-code/shec/ErasureCodeShec.cc +++ b/src/erasure-code/shec/ErasureCodeShec.cc @@ -198,8 +198,11 @@ int ErasureCodeShec::_decode(const set &want_to_read, unsigned blocksize = (*chunks.begin()).second.length(); for (unsigned int i = 0; i < k + m; i++) { if (chunks.find(i) == chunks.end()) { + bufferlist tmp; bufferptr ptr(buffer::create_aligned(blocksize, SIMD_ALIGN)); - (*decoded)[i].push_front(ptr); + tmp.push_back(ptr); + tmp.claim_append((*decoded)[i]); + (*decoded)[i].swap(tmp); } else { (*decoded)[i] = chunks.find(i)->second; (*decoded)[i].rebuild_aligned(SIMD_ALIGN); diff --git a/src/test/erasure-code/ErasureCodeExample.h b/src/test/erasure-code/ErasureCodeExample.h index cd4bac41c38b4..1258465388a62 100644 --- a/src/test/erasure-code/ErasureCodeExample.h +++ b/src/test/erasure-code/ErasureCodeExample.h @@ -117,8 +117,11 @@ public: for (set::iterator j = want_to_encode.begin(); j != want_to_encode.end(); ++j) { + bufferlist tmp; bufferptr chunk(ptr, (*j) * chunk_length, chunk_length); - (*encoded)[*j].push_front(chunk); + tmp.push_back(chunk); + tmp.claim_append((*encoded)[*j]); + (*encoded)[*j].swap(tmp); } return 0; } @@ -165,7 +168,11 @@ public: for (unsigned j = 0; j < chunk_length; j++) { c[j] = a[j] ^ b[j]; } - (*decoded)[*i].push_front(chunk); + + bufferlist tmp; + tmp.append(chunk); + tmp.claim_append((*decoded)[*i]); + (*decoded)[*i].swap(tmp); } } return 0; diff --git a/src/test/erasure-code/TestErasureCodeExample.cc b/src/test/erasure-code/TestErasureCodeExample.cc index bdf7fbd0053b8..826f3bef177e4 100644 --- a/src/test/erasure-code/TestErasureCodeExample.cc +++ b/src/test/erasure-code/TestErasureCodeExample.cc @@ -180,7 +180,7 @@ TEST(ErasureCodeExample, decode) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; in_ptr.append(payload, strlen(payload)); bufferlist in; - in.push_front(in_ptr); + in.push_back(in_ptr); int want_to_encode[] = { 0, 1, 2 }; map encoded; EXPECT_EQ(0, example.encode(set(want_to_encode, want_to_encode+3), diff --git a/src/test/erasure-code/TestErasureCodeIsa.cc b/src/test/erasure-code/TestErasureCodeIsa.cc index 4a288e3ff508a..6d8e1681fc249 100644 --- a/src/test/erasure-code/TestErasureCodeIsa.cc +++ b/src/test/erasure-code/TestErasureCodeIsa.cc @@ -442,7 +442,7 @@ TEST_F(IsaErasureCodeTest, isa_vandermonde_exhaustive) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; in_ptr.append(payload, strlen(payload)); bufferlist in; - in.push_front(in_ptr); + in.push_back(in_ptr); setwant_to_encode; @@ -569,7 +569,7 @@ TEST_F(IsaErasureCodeTest, isa_cauchy_exhaustive) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; in_ptr.append(payload, strlen(payload)); bufferlist in; - in.push_front(in_ptr); + in.push_back(in_ptr); setwant_to_encode; @@ -696,7 +696,7 @@ TEST_F(IsaErasureCodeTest, isa_cauchy_cache_trash) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; in_ptr.append(payload, strlen(payload)); bufferlist in; - in.push_front(in_ptr); + in.push_back(in_ptr); setwant_to_encode; @@ -822,7 +822,7 @@ TEST_F(IsaErasureCodeTest, isa_xor_codec) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; in_ptr.append(payload, strlen(payload)); bufferlist in; - in.push_front(in_ptr); + in.push_back(in_ptr); setwant_to_encode; diff --git a/src/test/erasure-code/TestErasureCodeJerasure.cc b/src/test/erasure-code/TestErasureCodeJerasure.cc index 5201b02a38b6b..54930e5ed0bb1 100644 --- a/src/test/erasure-code/TestErasureCodeJerasure.cc +++ b/src/test/erasure-code/TestErasureCodeJerasure.cc @@ -81,7 +81,7 @@ TYPED_TEST(ErasureCodeTest, encode_decode) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; in_ptr.append(payload, strlen(payload)); bufferlist in; - in.push_front(in_ptr); + in.push_back(in_ptr); int want_to_encode[] = { 0, 1, 2, 3 }; map encoded; EXPECT_EQ(0, jerasure.encode(set(want_to_encode, want_to_encode+4), diff --git a/src/test/erasure-code/TestErasureCodeLrc.cc b/src/test/erasure-code/TestErasureCodeLrc.cc index 842ffa8e053f0..21926af2b93eb 100644 --- a/src/test/erasure-code/TestErasureCodeLrc.cc +++ b/src/test/erasure-code/TestErasureCodeLrc.cc @@ -623,7 +623,10 @@ TEST(ErasureCodeLrc, encode_decode) for (unsigned int i = 0; i < lrc.get_chunk_count(); ++i) { want_to_encode.insert(i); bufferptr ptr(buffer::create_page_aligned(chunk_size)); - encoded[i].push_front(ptr); + bufferlist tmp; + tmp.push_back(ptr); + tmp.claim_append(encoded[i]); + encoded[i].swap(tmp); } const vector &mapping = lrc.get_chunk_mapping(); char c = 'A'; @@ -753,7 +756,10 @@ TEST(ErasureCodeLrc, encode_decode_2) for (unsigned int i = 0; i < lrc.get_chunk_count(); ++i) { want_to_encode.insert(i); bufferptr ptr(buffer::create_page_aligned(chunk_size)); - encoded[i].push_front(ptr); + bufferlist tmp; + tmp.push_back(ptr); + tmp.claim_append(encoded[i]); + encoded[i].swap(tmp); } const vector &mapping = lrc.get_chunk_mapping(); char c = 'A'; -- 2.39.5