From 3c223cb117a062137a81e3848ae15ff814e46f86 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 14 Jun 2019 11:49:47 +0800 Subject: [PATCH] crimson: add buffer_io helpers Signed-off-by: Kefu Chai --- src/crimson/CMakeLists.txt | 1 + src/crimson/common/buffer_io.cc | 34 +++++++++++++++++++++++++++++++++ src/crimson/common/buffer_io.h | 19 ++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 src/crimson/common/buffer_io.cc create mode 100644 src/crimson/common/buffer_io.h diff --git a/src/crimson/CMakeLists.txt b/src/crimson/CMakeLists.txt index 9a8fcf8a2d8..fd3f99a1b70 100644 --- a/src/crimson/CMakeLists.txt +++ b/src/crimson/CMakeLists.txt @@ -4,6 +4,7 @@ set_target_properties(crimson::cflags PROPERTIES INTERFACE_LINK_LIBRARIES Seastar::seastar) set(crimson_common_srcs + common/buffer_io.cc common/config_proxy.cc common/perf_counters_collection.cc common/assert.cc diff --git a/src/crimson/common/buffer_io.cc b/src/crimson/common/buffer_io.cc new file mode 100644 index 00000000000..8e33cab44a8 --- /dev/null +++ b/src/crimson/common/buffer_io.cc @@ -0,0 +1,34 @@ +#include "buffer_io.h" + +#include +#include +#include + +#include "include/buffer.h" + +namespace ceph::buffer { + +seastar::future<> write_file(ceph::buffer::list&& bl, + seastar::sstring fn, + seastar::file_permissions permissions) +{ + const auto flags = (seastar::open_flags::wo | + seastar::open_flags::create | + seastar::open_flags::truncate); + seastar::file_open_options foo; + foo.create_permissions = permissions; + return seastar::open_file_dma(fn, flags, foo).then( + [bl=std::move(bl)](seastar::file f) { + return seastar::do_with(seastar::make_file_output_stream(f), std::move(f), + [&bl](seastar::output_stream& out, + seastar::file& f) { + return seastar::do_for_each(bl.buffers(), [&out](auto& buf) { + return out.write(buf.c_str(), buf.length()); + }).then([&out] { + return out.close(); + }); + }); + }); +} + +} diff --git a/src/crimson/common/buffer_io.h b/src/crimson/common/buffer_io.h new file mode 100644 index 00000000000..5cc6a6e97b7 --- /dev/null +++ b/src/crimson/common/buffer_io.h @@ -0,0 +1,19 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#pragma once + +#include +#include + +#include "include/buffer_fwd.h" + +namespace ceph::buffer { + seastar::future<> write_file(ceph::buffer::list&& bl, + seastar::sstring fn, + seastar::file_permissions= // 0644 + (seastar::file_permissions::user_read | + seastar::file_permissions::user_write | + seastar::file_permissions::group_read | + seastar::file_permissions::others_read)); +} -- 2.39.5