+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2017 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation. See file COPYING.
- *
- */
-
-#include <seastar/core/sharded.hh>
-#include <seastar/net/packet.hh>
-#include <seastar/core/reactor.hh>
-#include <seastar/core/alien.hh>
-
-#include "include/buffer_raw.h"
-#include "buffer_seastar.h"
-
-using temporary_buffer = seastar::temporary_buffer<char>;
-
-namespace ceph::buffer {
-
-class raw_seastar_foreign_ptr : public raw {
- seastar::foreign_ptr<temporary_buffer> ptr;
- seastar::alien::instance& alien;
- public:
- raw_seastar_foreign_ptr(temporary_buffer&& buf)
- : raw(buf.get_write(), buf.size()), ptr(std::move(buf)),
- alien(seastar::engine().alien()) {}
-
- ~raw_seastar_foreign_ptr() {
- if (!seastar::engine_is_ready()) {
- // we should let a seastar reactor destroy this memory, we are alien.
- seastar::alien::run_on(alien, ptr.get_owner_shard(),
- [_ptr = std::move(ptr)]() mutable noexcept {
- _ptr.reset();
- });
- }
- }
-};
-
-class raw_seastar_local_ptr : public raw {
- temporary_buffer buf;
- public:
- raw_seastar_local_ptr(temporary_buffer&& buf)
- : raw(buf.get_write(), buf.size()), buf(std::move(buf)) {}
-};
-
-inline namespace v15_2_0 {
-
-ceph::unique_leakable_ptr<buffer::raw> create(temporary_buffer&& buf) {
- return ceph::unique_leakable_ptr<buffer::raw>(
- new raw_seastar_foreign_ptr(std::move(buf)));
-}
-
-ceph::unique_leakable_ptr<buffer::raw> create_local(temporary_buffer&& buf) {
- return ceph::unique_leakable_ptr<buffer::raw>(
- new raw_seastar_local_ptr(std::move(buf)));
-}
-
-} // inline namespace v15_2_0
-
-// buffer::ptr conversions
-
-ptr::operator seastar::temporary_buffer<char>() &
-{
- return {c_str(), _len, seastar::make_object_deleter(*this)};
-}
-
-ptr::operator seastar::temporary_buffer<char>() &&
-{
- auto data = c_str();
- auto length = _len;
- return {data, length, seastar::make_object_deleter(std::move(*this))};
-}
-
-// buffer::list conversions
-
-list::operator seastar::net::packet() &&
-{
- seastar::net::packet p(_num);
- for (auto& ptr : _buffers) {
- // append each ptr as a temporary_buffer
- p = seastar::net::packet(std::move(p), std::move(ptr));
- }
- clear();
- return p;
-}
-
-} // namespace ceph::buffer
-
-namespace {
-
-using ceph::buffer::raw;
-class raw_seastar_local_shared_ptr : public raw {
- temporary_buffer buf;
-public:
- raw_seastar_local_shared_ptr(temporary_buffer& buf)
- : raw(buf.get_write(), buf.size()), buf(buf.share()) {}
-};
-}
-
-buffer::ptr seastar_buffer_iterator::get_ptr(size_t len)
-{
- buffer::ptr p{ceph::unique_leakable_ptr<buffer::raw>(
- new raw_seastar_local_shared_ptr{buf})};
- p.set_length(len);
- return p;
-}
-
-buffer::ptr const_seastar_buffer_iterator::get_ptr(size_t len)
-{
- return buffer::ptr{ buffer::copy(get_pos_add(len), len) };
-}
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include <seastar/core/temporary_buffer.hh>
-#include "include/buffer.h"
-#include "common/error_code.h"
-
-namespace details {
-
-template<bool is_const>
-class buffer_iterator_impl {
-public:
- using pointer = std::conditional_t<is_const, const char*, char *>;
- buffer_iterator_impl(pointer first, const char* last)
- : pos(first), end_ptr(last)
- {}
- pointer get_pos_add(size_t n) {
- auto r = pos;
- pos += n;
- if (pos > end_ptr) {
- throw buffer::end_of_buffer{};
- }
- return r;
- }
- pointer get() const {
- return pos;
- }
-protected:
- pointer pos;
- const char* end_ptr;
-};
-} // namespace details
-
-class seastar_buffer_iterator : details::buffer_iterator_impl<false> {
- using parent = details::buffer_iterator_impl<false>;
- using temporary_buffer = seastar::temporary_buffer<char>;
-public:
- seastar_buffer_iterator(temporary_buffer& b)
- : parent(b.get_write(), b.end()), buf(b)
- {}
- using parent::pointer;
- using parent::get_pos_add;
- using parent::get;
- ceph::buffer::ptr get_ptr(size_t len);
-
-private:
- // keep the reference to buf around, so it can be "shared" by get_ptr()
- temporary_buffer& buf;
-};
-
-class const_seastar_buffer_iterator : details::buffer_iterator_impl<true> {
- using parent = details::buffer_iterator_impl<true>;
- using temporary_buffer = seastar::temporary_buffer<char>;
-public:
- const_seastar_buffer_iterator(temporary_buffer& b)
- : parent(b.get_write(), b.end())
- {}
- using parent::pointer;
- using parent::get_pos_add;
- using parent::get;
- ceph::buffer::ptr get_ptr(size_t len);
-};
common/throttle.cc
common/tmap_helpers.cc
common/tri_mutex.cc
+ common/buffer_seastar.cc
crush/CrushLocation.cc)
# the specialized version of ceph-common, where
${PROJECT_SOURCE_DIR}/src/common/bit_str.cc
${PROJECT_SOURCE_DIR}/src/common/bloom_filter.cc
${PROJECT_SOURCE_DIR}/src/common/buffer.cc
- ${PROJECT_SOURCE_DIR}/src/common/buffer_seastar.cc
${PROJECT_SOURCE_DIR}/src/common/ceph_argparse.cc
${PROJECT_SOURCE_DIR}/src/common/ceph_context.cc
${PROJECT_SOURCE_DIR}/src/common/ceph_crypto.cc
#include <seastar/core/future-util.hh>
#include <seastar/core/reactor.hh>
-#include "common/buffer_seastar.h"
+#include "crimson/common/buffer_seastar.h"
#include "auth/KeyRing.h"
#include "include/denc.h"
#include "crimson/common/buffer_io.h"
--- /dev/null
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2017 Red Hat, Inc.
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation. See file COPYING.
+ *
+ */
+
+#include <seastar/core/sharded.hh>
+#include <seastar/net/packet.hh>
+#include <seastar/core/reactor.hh>
+#include <seastar/core/alien.hh>
+
+#include "include/buffer_raw.h"
+#include "buffer_seastar.h"
+
+using temporary_buffer = seastar::temporary_buffer<char>;
+
+namespace ceph::buffer {
+
+class raw_seastar_foreign_ptr : public raw {
+ seastar::foreign_ptr<temporary_buffer> ptr;
+ seastar::alien::instance& alien;
+ public:
+ raw_seastar_foreign_ptr(temporary_buffer&& buf)
+ : raw(buf.get_write(), buf.size()), ptr(std::move(buf)),
+ alien(seastar::engine().alien()) {}
+
+ ~raw_seastar_foreign_ptr() {
+ if (!seastar::engine_is_ready()) {
+ // we should let a seastar reactor destroy this memory, we are alien.
+ seastar::alien::run_on(alien, ptr.get_owner_shard(),
+ [_ptr = std::move(ptr)]() mutable noexcept {
+ _ptr.reset();
+ });
+ }
+ }
+};
+
+class raw_seastar_local_ptr : public raw {
+ temporary_buffer buf;
+ public:
+ raw_seastar_local_ptr(temporary_buffer&& buf)
+ : raw(buf.get_write(), buf.size()), buf(std::move(buf)) {}
+};
+
+inline namespace v15_2_0 {
+
+ceph::unique_leakable_ptr<buffer::raw> create(temporary_buffer&& buf) {
+ return ceph::unique_leakable_ptr<buffer::raw>(
+ new raw_seastar_foreign_ptr(std::move(buf)));
+}
+
+ceph::unique_leakable_ptr<buffer::raw> create_local(temporary_buffer&& buf) {
+ return ceph::unique_leakable_ptr<buffer::raw>(
+ new raw_seastar_local_ptr(std::move(buf)));
+}
+
+} // inline namespace v15_2_0
+
+// buffer::ptr conversions
+
+ptr::operator seastar::temporary_buffer<char>() &
+{
+ return {c_str(), _len, seastar::make_object_deleter(*this)};
+}
+
+ptr::operator seastar::temporary_buffer<char>() &&
+{
+ auto data = c_str();
+ auto length = _len;
+ return {data, length, seastar::make_object_deleter(std::move(*this))};
+}
+
+// buffer::list conversions
+
+list::operator seastar::net::packet() &&
+{
+ seastar::net::packet p(_num);
+ for (auto& ptr : _buffers) {
+ // append each ptr as a temporary_buffer
+ p = seastar::net::packet(std::move(p), std::move(ptr));
+ }
+ clear();
+ return p;
+}
+
+} // namespace ceph::buffer
+
+namespace {
+
+using ceph::buffer::raw;
+class raw_seastar_local_shared_ptr : public raw {
+ temporary_buffer buf;
+public:
+ raw_seastar_local_shared_ptr(temporary_buffer& buf)
+ : raw(buf.get_write(), buf.size()), buf(buf.share()) {}
+};
+}
+
+buffer::ptr seastar_buffer_iterator::get_ptr(size_t len)
+{
+ buffer::ptr p{ceph::unique_leakable_ptr<buffer::raw>(
+ new raw_seastar_local_shared_ptr{buf})};
+ p.set_length(len);
+ return p;
+}
+
+buffer::ptr const_seastar_buffer_iterator::get_ptr(size_t len)
+{
+ return buffer::ptr{ buffer::copy(get_pos_add(len), len) };
+}
--- /dev/null
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include <seastar/core/temporary_buffer.hh>
+#include "include/buffer.h"
+#include "common/error_code.h"
+
+namespace details {
+
+template<bool is_const>
+class buffer_iterator_impl {
+public:
+ using pointer = std::conditional_t<is_const, const char*, char *>;
+ buffer_iterator_impl(pointer first, const char* last)
+ : pos(first), end_ptr(last)
+ {}
+ pointer get_pos_add(size_t n) {
+ auto r = pos;
+ pos += n;
+ if (pos > end_ptr) {
+ throw buffer::end_of_buffer{};
+ }
+ return r;
+ }
+ pointer get() const {
+ return pos;
+ }
+protected:
+ pointer pos;
+ const char* end_ptr;
+};
+} // namespace details
+
+class seastar_buffer_iterator : details::buffer_iterator_impl<false> {
+ using parent = details::buffer_iterator_impl<false>;
+ using temporary_buffer = seastar::temporary_buffer<char>;
+public:
+ seastar_buffer_iterator(temporary_buffer& b)
+ : parent(b.get_write(), b.end()), buf(b)
+ {}
+ using parent::pointer;
+ using parent::get_pos_add;
+ using parent::get;
+ ceph::buffer::ptr get_ptr(size_t len);
+
+private:
+ // keep the reference to buf around, so it can be "shared" by get_ptr()
+ temporary_buffer& buf;
+};
+
+class const_seastar_buffer_iterator : details::buffer_iterator_impl<true> {
+ using parent = details::buffer_iterator_impl<true>;
+ using temporary_buffer = seastar::temporary_buffer<char>;
+public:
+ const_seastar_buffer_iterator(temporary_buffer& b)
+ : parent(b.get_write(), b.end())
+ {}
+ using parent::pointer;
+ using parent::get_pos_add;
+ using parent::get;
+ ceph::buffer::ptr get_ptr(size_t len);
+};
#include <seastar/core/temporary_buffer.hh>
#include <gtest/gtest.h>
#include "include/denc.h"
-#include "common/buffer_seastar.h"
+#include "crimson/common/buffer_seastar.h"
using temporary_buffer = seastar::temporary_buffer<char>;
using buffer_iterator = seastar_buffer_iterator;