]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common: abstract the container type of bufferlist::_buffers.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 27 Mar 2018 14:49:54 +0000 (16:49 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Sat, 1 Dec 2018 20:22:23 +0000 (21:22 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/common/buffer.cc
src/compressor/zlib/ZlibCompressor.cc
src/include/buffer.h
src/kv/LevelDBStore.cc
src/messages/MDataPing.h
src/msg/async/PosixStack.cc
src/msg/async/rdma/RDMAConnectedSocketImpl.cc
src/msg/simple/Pipe.cc
src/os/ObjectStore.h
src/os/filestore/FileJournal.cc
src/rgw/rgw_file.cc

index c951654c76a7cbe95ddde9a3d16e71930abafc34..49c8d015a5626b1bfa4dd335b9819d0c09038934 100644 (file)
@@ -1085,7 +1085,7 @@ using namespace ceph;
     if (p == ls->end())
       seek(off);
     unsigned left = len;
-    for (std::list<ptr>::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<ptr>::const_iterator a = _buffers.begin();
-      std::list<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<buffer::ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<ptr>::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<buffer::ptr>::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;
index 7d52398048620e96ba37b344b8e4e4302508c168..e3064d2a21b42813c04c890ab6f3d5c7c97d668a 100644 (file)
@@ -66,7 +66,7 @@ int ZlibCompressor::zlib_compress(const bufferlist &in, bufferlist &out)
     return -1;
   }
 
-  for (std::list<buffer::ptr>::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<buffer::ptr>::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();
index 123ff4c2a52e332c204a43f52a695efa08f398fc..c4bd7d1429872cc94368146ff2cf11fe58ca4e6b 100644 (file)
@@ -384,16 +384,17 @@ namespace buffer CEPH_BUFFER_API {
    */
 
   class CEPH_BUFFER_API list {
+  public:
+    typedef std::list<ptr> buffers_t;
+    class iterator;
+
+  private:
     // my private bits
-    std::list<ptr> _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 <bool is_const>
     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<is_const,
-                                       const std::list<ptr>,
-                                       std::list<ptr> >::type list_t;
+                                       const buffers_t,
+                                       buffers_t >::type list_t;
       typedef typename std::conditional<is_const,
-                                       typename std::list<ptr>::const_iterator,
-                                       typename std::list<ptr>::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<is_const, const char, char>::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<ptr>& 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<buffer::ptr>::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<buffer::ptr>::const_iterator pb;
+        decltype(_buffers)::const_iterator pb;
         for (pb = bl._buffers.begin(); pb != bl._buffers.end(); ++pb) {
           push_back(*pb);
         }
index d75b3a6606825f85082a8e0396eb61030e3e573b..75fdaa2cd5fdd3038f45dd771df28a915e88d676 100644 (file)
@@ -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<buffer::ptr>::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);
index b05d06c8c90fcdcd6783ac423e1ad283f3a49b10..c45d3c768707f4522b21f0a0f89bf40ec4dd187a 100644 (file)
@@ -64,8 +64,8 @@ private:
        mdata_hook(&mp);
 
       if (free_data)  {
-       const std::list<buffer::ptr>& buffers = data.buffers();
-       list<bufferptr>::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());
        }
index e2262d8886e588648ec46f0a899101f2ba39d1bb..2f354a6db0061917feba786a308a2f7d1fd1cc2c 100644 (file)
@@ -112,7 +112,7 @@ class PosixConnectedSocketImpl final : public ConnectedSocketImpl {
 
   ssize_t send(bufferlist &bl, bool more) override {
     size_t sent_bytes = 0;
-    std::list<bufferptr>::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;
index be3637c66818ad8a84affcb7aa347c289c81baed..3776e70fa3cebb35de9e212102a4a80076018658 100644 (file)
@@ -447,8 +447,8 @@ ssize_t RDMAConnectedSocketImpl::submit(bool more)
     return 0;
 
   auto fill_tx_via_copy = [this](std::vector<Chunk*> &tx_buffers, unsigned bytes,
-                                 std::list<bufferptr>::const_iterator &start,
-                                 std::list<bufferptr>::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<Chunk*> tx_buffers;
-  std::list<bufferptr>::const_iterator it = pending_bl.buffers().begin();
-  std::list<bufferptr>::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()) {
index 3c48d63f4f4551c4cd60d5e3aeddfa9a6754bf4b..0c65effc83ea2ede6433ae8a4208d4e2dac8c478 100644 (file)
@@ -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<bufferptr>::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();
index 3c2ced9af05152c825f64d8e40962dc43a29a234..dc426aca2925fb1958bc5b46325e8d2cf59b59d2 100644 (file)
@@ -696,8 +696,8 @@ public:
       vector<__le32> &cm,
       vector<__le32> &om) {
 
-      list<bufferptr> list = bl.buffers();
-      std::list<bufferptr>::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);
index 9e8b1cd31acc5570ac900e62f5082186adecd2ad..e1b1fd4ecb7116ba1b71bf2bf70ce9082ec590f3 100644 (file)
@@ -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<buffer::ptr>::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());
index 7ceb74b7efb64e595200159721fc28384c38fc0c..1e5872656a70d19ccd0c94a34185cf40f763983f 100644 (file)
@@ -2186,7 +2186,7 @@ public:
 
   struct rgw_vio* get_vio() { return vio; }
 
-  const std::list<buffer::ptr>& buffers() { return bl.buffers(); }
+  const buffer::list::buffers_t& buffers() { return bl.buffers(); }
 
   unsigned /* XXX */ length() { return bl.length(); }