From: Radoslaw Zarzynski Date: Tue, 27 Mar 2018 14:49:54 +0000 (+0200) Subject: common: abstract the container type of bufferlist::_buffers. X-Git-Tag: v14.1.0~721^2~13 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=fbe8a3287d598d2425d257e7696034c543031537;p=ceph-ci.git common: abstract the container type of bufferlist::_buffers. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/common/buffer.cc b/src/common/buffer.cc index c951654c76a..49c8d015a56 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -1085,7 +1085,7 @@ using namespace ceph; if (p == ls->end()) seek(off); unsigned left = len; - for (std::list::const_iterator i = otherl._buffers.begin(); + for (buffers_t::const_iterator i = otherl._buffers.begin(); i != otherl._buffers.end(); ++i) { unsigned l = (*i).length(); @@ -1127,8 +1127,8 @@ using namespace ceph; // buffer-wise comparison if (true) { - std::list::const_iterator a = _buffers.begin(); - std::list::const_iterator b = other._buffers.begin(); + buffers_t::const_iterator a = _buffers.begin(); + buffers_t::const_iterator b = other._buffers.begin(); unsigned aoff = 0, boff = 0; while (a != _buffers.end()) { unsigned len = a->length() - aoff; @@ -1174,7 +1174,7 @@ using namespace ceph; bool buffer::list::is_aligned(unsigned align) const { - for (std::list::const_iterator it = _buffers.begin(); + for (buffers_t::const_iterator it = _buffers.begin(); it != _buffers.end(); ++it) if (!it->is_aligned(align)) @@ -1184,7 +1184,7 @@ using namespace ceph; bool buffer::list::is_n_align_sized(unsigned align) const { - for (std::list::const_iterator it = _buffers.begin(); + for (buffers_t::const_iterator it = _buffers.begin(); it != _buffers.end(); ++it) if (!it->is_n_align_sized(align)) @@ -1195,7 +1195,7 @@ using namespace ceph; bool buffer::list::is_aligned_size_and_memory(unsigned align_size, unsigned align_memory) const { - for (std::list::const_iterator it = _buffers.begin(); + for (buffers_t::const_iterator it = _buffers.begin(); it != _buffers.end(); ++it) { if (!it->is_aligned(align_memory) || !it->is_n_align_sized(align_size)) @@ -1205,7 +1205,7 @@ using namespace ceph; } bool buffer::list::is_zero() const { - for (std::list::const_iterator it = _buffers.begin(); + for (buffers_t::const_iterator it = _buffers.begin(); it != _buffers.end(); ++it) { if (!it->is_zero()) { @@ -1217,7 +1217,7 @@ using namespace ceph; void buffer::list::zero() { - for (std::list::iterator it = _buffers.begin(); + for (buffers_t::iterator it = _buffers.begin(); it != _buffers.end(); ++it) it->zero(); @@ -1227,7 +1227,7 @@ using namespace ceph; { ceph_assert(o+l <= _len); unsigned p = 0; - for (std::list::iterator it = _buffers.begin(); + for (buffers_t::iterator it = _buffers.begin(); it != _buffers.end(); ++it) { if (p + it->length() > o) { @@ -1341,7 +1341,7 @@ using namespace ceph; void buffer::list::rebuild(ptr& nb) { unsigned pos = 0; - for (std::list::iterator it = _buffers.begin(); + for (buffers_t::iterator it = _buffers.begin(); it != _buffers.end(); ++it) { nb.copy_in(pos, it->length(), it->c_str(), false); @@ -1370,7 +1370,7 @@ using namespace ceph; && _len > (max_buffers * align_size)) { align_size = round_up_to(round_up_to(_len, max_buffers) / max_buffers, align_size); } - std::list::iterator p = _buffers.begin(); + buffers_t::iterator p = _buffers.begin(); while (p != _buffers.end()) { // keep anything that's already align and sized aligned if (p->is_aligned(align_memory) && p->is_n_align_sized(align_size)) { @@ -1395,7 +1395,7 @@ using namespace ceph; */ offset += p->length(); unaligned.push_back(*p); - _buffers.erase(p++); + p = _buffers.erase(p); } while (p != _buffers.end() && (!p->is_aligned(align_memory) || !p->is_n_align_sized(align_size) || @@ -1439,7 +1439,9 @@ using namespace ceph; _len += bl._len; if (!(flags & CLAIM_ALLOW_NONSHAREABLE)) bl.make_shareable(); - _buffers.splice(_buffers.end(), bl._buffers ); + std::move(bl._buffers.begin(), bl._buffers.end(), + std::back_inserter(_buffers)); + bl._buffers.clear(); bl._len = 0; bl.last_p = bl.begin(); } @@ -1447,7 +1449,7 @@ using namespace ceph; void buffer::list::claim_append_piecewise(list& bl) { // steal the other guy's buffers - for (std::list::const_iterator i = bl.buffers().begin(); + for (buffers_t::const_iterator i = bl.buffers().begin(); i != bl.buffers().end(); ++i) { append(*i, 0, i->length()); } @@ -1567,7 +1569,7 @@ using namespace ceph; void buffer::list::append(const list& bl) { _len += bl._len; - for (std::list::const_iterator p = bl._buffers.begin(); + for (buffers_t::const_iterator p = bl._buffers.begin(); p != bl._buffers.end(); ++p) _buffers.push_back(*p); @@ -1635,7 +1637,7 @@ using namespace ceph; if (n >= _len) throw end_of_buffer(); - for (std::list::const_iterator p = _buffers.begin(); + for (buffers_t::const_iterator p = _buffers.begin(); p != _buffers.end(); ++p) { if (n >= p->length()) { @@ -1655,7 +1657,7 @@ using namespace ceph; if (_buffers.empty()) return 0; // no buffers - std::list::const_iterator iter = _buffers.begin(); + buffers_t::const_iterator iter = _buffers.begin(); ++iter; if (iter != _buffers.end()) @@ -1666,7 +1668,7 @@ using namespace ceph; string buffer::list::to_str() const { string s; s.reserve(length()); - for (std::list::const_iterator p = _buffers.begin(); + for (buffers_t::const_iterator p = _buffers.begin(); p != _buffers.end(); ++p) { if (p->length()) { @@ -1684,7 +1686,7 @@ using namespace ceph; clear(); // skip off - std::list::const_iterator curbuf = other._buffers.begin(); + buffers_t::const_iterator curbuf = other._buffers.begin(); while (off > 0 && off >= curbuf->length()) { // skip this buffer @@ -1727,7 +1729,7 @@ using namespace ceph; //cout << "splice off " << off << " len " << len << " ... mylen = " << length() << std::endl; // skip off - std::list::iterator curbuf = _buffers.begin(); + buffers_t::iterator curbuf = _buffers.begin(); while (off > 0) { ceph_assert(curbuf != _buffers.end()); if (off >= (*curbuf).length()) { @@ -1769,7 +1771,7 @@ using namespace ceph; if (claim_by) claim_by->append( *curbuf, off, howmuch ); _len -= (*curbuf).length(); - _buffers.erase( curbuf++ ); + curbuf = _buffers.erase( curbuf ); len -= howmuch; off = 0; } @@ -1783,7 +1785,7 @@ using namespace ceph; { list s; s.substr_of(*this, off, len); - for (std::list::const_iterator it = s._buffers.begin(); + for (buffers_t::const_iterator it = s._buffers.begin(); it != s._buffers.end(); ++it) if (it->length()) @@ -1949,7 +1951,7 @@ int buffer::list::write_fd(int fd) const int iovlen = 0; ssize_t bytes = 0; - std::list::const_iterator p = _buffers.begin(); + buffers_t::const_iterator p = _buffers.begin(); while (p != _buffers.end()) { if (p->length() > 0) { iov[iovlen].iov_base = (void *)p->c_str(); @@ -1998,7 +2000,7 @@ int buffer::list::write_fd(int fd, uint64_t offset) const { iovec iov[IOV_MAX]; - std::list::const_iterator p = _buffers.begin(); + buffers_t::const_iterator p = _buffers.begin(); uint64_t left_pbrs = _buffers.size(); while (left_pbrs) { ssize_t bytes = 0; @@ -2028,7 +2030,7 @@ __u32 buffer::list::crc32c(__u32 crc) const int cache_hits = 0; int cache_adjusts = 0; - for (std::list::const_iterator it = _buffers.begin(); + for (buffers_t::const_iterator it = _buffers.begin(); it != _buffers.end(); ++it) { if (it->length()) { @@ -2075,7 +2077,7 @@ __u32 buffer::list::crc32c(__u32 crc) const void buffer::list::invalidate_crc() { - for (std::list::const_iterator p = _buffers.begin(); p != _buffers.end(); ++p) { + for (buffers_t::const_iterator p = _buffers.begin(); p != _buffers.end(); ++p) { raw *r = p->get_raw(); if (r) { r->invalidate_crc(); @@ -2102,7 +2104,7 @@ sha1_digest_t buffer::list::sha1() */ void buffer::list::write_stream(std::ostream &out) const { - for (std::list::const_iterator p = _buffers.begin(); p != _buffers.end(); ++p) { + for (buffers_t::const_iterator p = _buffers.begin(); p != _buffers.end(); ++p) { if (p->length() > 0) { out.write(p->c_str(), p->length()); } @@ -2219,7 +2221,7 @@ std::ostream& buffer::operator<<(std::ostream& out, const buffer::ptr& bp) { std::ostream& buffer::operator<<(std::ostream& out, const buffer::list& bl) { out << "buffer::list(len=" << bl.length() << "," << std::endl; - std::list::const_iterator it = bl.buffers().begin(); + buffer::list::buffers_t::const_iterator it = bl.buffers().begin(); while (it != bl.buffers().end()) { out << "\t" << *it; if (++it == bl.buffers().end()) break; diff --git a/src/compressor/zlib/ZlibCompressor.cc b/src/compressor/zlib/ZlibCompressor.cc index 7d523980486..e3064d2a21b 100644 --- a/src/compressor/zlib/ZlibCompressor.cc +++ b/src/compressor/zlib/ZlibCompressor.cc @@ -66,7 +66,7 @@ int ZlibCompressor::zlib_compress(const bufferlist &in, bufferlist &out) return -1; } - for (std::list::const_iterator i = in.buffers().begin(); + for (ceph::bufferlist::buffers_t::const_iterator i = in.buffers().begin(); i != in.buffers().end();) { c_in = (unsigned char*) (*i).c_str(); @@ -120,7 +120,7 @@ int ZlibCompressor::isal_compress(const bufferlist &in, bufferlist &out) isal_deflate_init(&strm); strm.end_of_stream = 0; - for (std::list::const_iterator i = in.buffers().begin(); + for (ceph::bufferlist::buffers_t::const_iterator i = in.buffers().begin(); i != in.buffers().end();) { c_in = (unsigned char*) (*i).c_str(); diff --git a/src/include/buffer.h b/src/include/buffer.h index 123ff4c2a52..c4bd7d14298 100644 --- a/src/include/buffer.h +++ b/src/include/buffer.h @@ -384,16 +384,17 @@ namespace buffer CEPH_BUFFER_API { */ class CEPH_BUFFER_API list { + public: + typedef std::list buffers_t; + class iterator; + + private: // my private bits - std::list _buffers; + buffers_t _buffers; unsigned _len; unsigned _memcopy_count; //the total of memcopy using rebuild(). ptr append_buffer; // where i put small appends. - public: - class iterator; - - private: template class CEPH_BUFFER_API iterator_impl { protected: @@ -401,11 +402,11 @@ namespace buffer CEPH_BUFFER_API { const list, list>::type bl_t; typedef typename std::conditional, - std::list >::type list_t; + const buffers_t, + buffers_t >::type list_t; typedef typename std::conditional::const_iterator, - typename std::list::iterator>::type list_iter_t; + typename buffers_t::const_iterator, + typename buffers_t::iterator>::type list_iter_t; using iterator_category = std::forward_iterator_tag; using value_type = typename std::conditional::type; using difference_type = std::ptrdiff_t; @@ -740,7 +741,7 @@ namespace buffer CEPH_BUFFER_API { } unsigned get_memcopy_count() const {return _memcopy_count; } - const std::list& buffers() const { return _buffers; } + const buffers_t& buffers() const { return _buffers; } void swap(list& other) noexcept; unsigned length() const { #if 0 @@ -823,7 +824,7 @@ namespace buffer CEPH_BUFFER_API { // clone non-shareable buffers (make shareable) void make_shareable() { - std::list::iterator pb; + decltype(_buffers)::iterator pb; for (pb = _buffers.begin(); pb != _buffers.end(); ++pb) { (void) pb->make_shareable(); } @@ -834,7 +835,7 @@ namespace buffer CEPH_BUFFER_API { { if (this != &bl) { clear(); - std::list::const_iterator pb; + decltype(_buffers)::const_iterator pb; for (pb = bl._buffers.begin(); pb != bl._buffers.end(); ++pb) { push_back(*pb); } diff --git a/src/kv/LevelDBStore.cc b/src/kv/LevelDBStore.cc index d75b3a66068..75fdaa2cd5f 100644 --- a/src/kv/LevelDBStore.cc +++ b/src/kv/LevelDBStore.cc @@ -255,7 +255,7 @@ void LevelDBStore::LevelDBTransactionImpl::set( // make sure the buffer isn't too large or we might crash here... char* slicebuf = (char*) alloca(bllen); leveldb::Slice newslice(slicebuf, bllen); - std::list::const_iterator pb; + ceph::bufferlist::buffers_t::const_iterator pb; for (pb = to_set_bl.buffers().begin(); pb != to_set_bl.buffers().end(); ++pb) { size_t ptrlen = (*pb).length(); memcpy((void*)slicebuf, (*pb).c_str(), ptrlen); diff --git a/src/messages/MDataPing.h b/src/messages/MDataPing.h index b05d06c8c90..c45d3c76870 100644 --- a/src/messages/MDataPing.h +++ b/src/messages/MDataPing.h @@ -64,8 +64,8 @@ private: mdata_hook(&mp); if (free_data) { - const std::list& buffers = data.buffers(); - list::const_iterator pb; + const ceph::bufferlist::buffers_t& buffers = data.buffers(); + ceph::bufferlist::buffers_t::const_iterator pb; for (pb = buffers.begin(); pb != buffers.end(); ++pb) { free((void*) pb->c_str()); } diff --git a/src/msg/async/PosixStack.cc b/src/msg/async/PosixStack.cc index e2262d8886e..2f354a6db00 100644 --- a/src/msg/async/PosixStack.cc +++ b/src/msg/async/PosixStack.cc @@ -112,7 +112,7 @@ class PosixConnectedSocketImpl final : public ConnectedSocketImpl { ssize_t send(bufferlist &bl, bool more) override { size_t sent_bytes = 0; - std::list::const_iterator pb = bl.buffers().begin(); + ceph::bufferlist::buffers_t::const_iterator pb = bl.buffers().begin(); uint64_t left_pbrs = bl.buffers().size(); while (left_pbrs) { struct msghdr msg; diff --git a/src/msg/async/rdma/RDMAConnectedSocketImpl.cc b/src/msg/async/rdma/RDMAConnectedSocketImpl.cc index be3637c6681..3776e70fa3c 100644 --- a/src/msg/async/rdma/RDMAConnectedSocketImpl.cc +++ b/src/msg/async/rdma/RDMAConnectedSocketImpl.cc @@ -447,8 +447,8 @@ ssize_t RDMAConnectedSocketImpl::submit(bool more) return 0; auto fill_tx_via_copy = [this](std::vector &tx_buffers, unsigned bytes, - std::list::const_iterator &start, - std::list::const_iterator &end) -> unsigned { + ceph::bufferlist::buffers_t::const_iterator &start, + ceph::bufferlist::buffers_t::const_iterator &end) -> unsigned { ceph_assert(start != end); auto chunk_idx = tx_buffers.size(); int ret = worker->get_reged_mem(this, tx_buffers, bytes); @@ -481,8 +481,8 @@ ssize_t RDMAConnectedSocketImpl::submit(bool more) }; std::vector tx_buffers; - std::list::const_iterator it = pending_bl.buffers().begin(); - std::list::const_iterator copy_it = it; + ceph::bufferlist::buffers_t::const_iterator it = pending_bl.buffers().begin(); + ceph::bufferlist::buffers_t::const_iterator copy_it = it; unsigned total = 0; unsigned need_reserve_bytes = 0; while (it != pending_bl.buffers().end()) { diff --git a/src/msg/simple/Pipe.cc b/src/msg/simple/Pipe.cc index 3c48d63f4f4..0c65effc83e 100644 --- a/src/msg/simple/Pipe.cc +++ b/src/msg/simple/Pipe.cc @@ -2408,7 +2408,7 @@ int Pipe::write_message(const ceph_msg_header& header, const ceph_msg_footer& fo msg.msg_iovlen++; // payload (front+data) - list::const_iterator pb = blist.buffers().begin(); + ceph::bufferlist::buffers_t::const_iterator pb = blist.buffers().begin(); unsigned b_off = 0; // carry-over buffer offset, if any unsigned bl_pos = 0; // blist pos unsigned left = blist.length(); diff --git a/src/os/ObjectStore.h b/src/os/ObjectStore.h index 3c2ced9af05..dc426aca292 100644 --- a/src/os/ObjectStore.h +++ b/src/os/ObjectStore.h @@ -696,8 +696,8 @@ public: vector<__le32> &cm, vector<__le32> &om) { - list list = bl.buffers(); - std::list::iterator p; + ceph::bufferlist::buffers_t list = bl.buffers(); + ceph::bufferlist::buffers_t::iterator p; for(p = list.begin(); p != list.end(); ++p) { ceph_assert(p->length() % sizeof(Op) == 0); diff --git a/src/os/filestore/FileJournal.cc b/src/os/filestore/FileJournal.cc index 9e8b1cd31ac..e1b1fd4ecb7 100644 --- a/src/os/filestore/FileJournal.cc +++ b/src/os/filestore/FileJournal.cc @@ -1372,7 +1372,7 @@ int FileJournal::write_aio_bl(off64_t& pos, bufferlist& bl, uint64_t seq) iovec *iov = new iovec[max]; int n = 0; unsigned len = 0; - for (std::list::const_iterator p = bl.buffers().begin(); + for (ceph::bufferlist::buffers_t::const_iterator p = bl.buffers().begin(); n < max; ++p, ++n) { ceph_assert(p != bl.buffers().end()); diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index 7ceb74b7efb..1e5872656a7 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -2186,7 +2186,7 @@ public: struct rgw_vio* get_vio() { return vio; } - const std::list& buffers() { return bl.buffers(); } + const buffer::list::buffers_t& buffers() { return bl.buffers(); } unsigned /* XXX */ length() { return bl.length(); }