]> git.proxmox.com Git - ceph.git/blame - ceph/src/seastar/include/seastar/util/file.hh
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / seastar / include / seastar / util / file.hh
CommitLineData
f67539c2
TL
1/*
2 * This file is open source software, licensed to you under the terms
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
4 * distributed with this work for additional information regarding copyright
5 * ownership. You may not use this file except in compliance with the License.
6 *
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing,
12 * software distributed under the License is distributed on an
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 * KIND, either express or implied. See the License for the
15 * specific language governing permissions and limitations
16 * under the License.
17 */
18
19/*
20 * Copyright 2020 ScyllaDB
21 */
22
23#pragma once
24
25#include <seastar/core/future.hh>
20effc67
TL
26#include <seastar/core/fstream.hh>
27#include <seastar/core/sstring.hh>
1e59de90 28#include <seastar/core/reactor.hh>
f67539c2 29#include <seastar/util/std-compat.hh>
20effc67 30#include <seastar/util/short_streams.hh>
f67539c2
TL
31
32namespace seastar {
33
34/// Recursively removes a directory and all of its contents.
35///
36/// \param path path of the directory to recursively remove
37///
38/// \note
39/// Unlike `rm -rf` path has to be a directory and may not refer to a regular file.
40///
41/// The function flushes the parent directory of the removed path and so guaranteeing that
42/// the remove is stable on disk.
43///
44/// The function bails out on first error. In that case, some files and/or sub-directories
45/// (and their contents) may be left behind at the level in which the error was detected.
46///
47future<> recursive_remove_directory(std::filesystem::path path) noexcept;
48
20effc67
TL
49/// @}
50
51/// \defgroup fileio-util File and Stream Utilities
52/// \ingroup fileio-module
53///
54/// \brief
55/// These utilities are provided to help perform operations on files and I/O streams.
56
57namespace util {
58
59/// \addtogroup fileio-util
60/// @{
61
62template <typename Func>
63SEASTAR_CONCEPT(requires requires(Func func, input_stream<char>& in) {
64 { func(in) };
65})
66auto with_file_input_stream(const std::filesystem::path& path, Func func, file_open_options file_opts = {}, file_input_stream_options input_stream_opts = {}) {
67 static_assert(std::is_nothrow_move_constructible_v<Func>);
68 return open_file_dma(path.native(), open_flags::ro, std::move(file_opts)).then(
69 [func = std::move(func), input_stream_opts = std::move(input_stream_opts)] (file f) mutable {
70 return do_with(make_file_input_stream(std::move(f), std::move(input_stream_opts)),
71 [func = std::move(func)] (input_stream<char>& in) mutable {
72 return futurize_invoke(std::move(func), in).finally([&in] {
73 return in.close();
74 });
75 });
76 });
77}
78
79/// Returns all bytes from the file until eof, accessible in chunks.
80///
81/// \note use only on short files to avoid running out of memory.
82///
83/// \param path path of the file to be read.
84future<std::vector<temporary_buffer<char>>> read_entire_file(std::filesystem::path path);
85
86/// Returns all bytes from the file until eof as a single buffer.
87///
88/// \note use only on short files to avoid running out of memory.
89///
90/// \param path path of the file to be read.
91future<sstring> read_entire_file_contiguous(std::filesystem::path path);
92
93/// @}
94
95} // namespace util
96
f67539c2 97} // namespace seastar