]>
Commit | Line | Data |
---|---|---|
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 | |
32 | namespace 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 | /// | |
47 | future<> 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 | ||
57 | namespace util { | |
58 | ||
59 | /// \addtogroup fileio-util | |
60 | /// @{ | |
61 | ||
62 | template <typename Func> | |
63 | SEASTAR_CONCEPT(requires requires(Func func, input_stream<char>& in) { | |
64 | { func(in) }; | |
65 | }) | |
66 | auto 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. | |
84 | future<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. | |
91 | future<sstring> read_entire_file_contiguous(std::filesystem::path path); | |
92 | ||
93 | /// @} | |
94 | ||
95 | } // namespace util | |
96 | ||
f67539c2 | 97 | } // namespace seastar |