SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
FileSystem.h
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 #ifndef swcdb_fs_FileSystem_h
7 #define swcdb_fs_FileSystem_h
8 
9 #include "swcdb/fs/Settings.h"
10 #include "swcdb/fs/SmartFd.h"
11 #include "swcdb/fs/Dirent.h"
12 #include "swcdb/fs/Callbacks.h"
13 #include "swcdb/fs/Statistics.h"
14 #include "swcdb/fs/Logger.h"
15 
16 
17 namespace SWC { namespace FS {
18 
19 
20 enum Type : uint8_t {
21 
22  UNKNOWN = 0x00,
23  LOCAL = 0x01,
24  BROKER = 0x02,
25  CUSTOM = 0x03,
26  HADOOP = 0x04,
27  HADOOP_JVM = 0x05,
28  CEPH = 0x06,
29 
30 };
31 
32 
33 enum OpenFlags {
34  OPEN_FLAG_DIRECTIO = 0x00000001,
35  OPEN_FLAG_OVERWRITE = 0x00000002,
37  WRITE_VALIDATE_LENGTH = 0x00000008
38 };
39 
40 
41 enum Flags : uint8_t {
42  NONE = 0x00,
43  FLUSH = 0x01,
44  SYNC = 0x02
45 };
46 
47 
48 struct Configurables {
51  std::string path_root;
53  Configurables(const Config::Settings::Ptr& a_settings) noexcept
54  : settings(a_settings),
55  cfg_fds_max(nullptr),
56  path_root(),
57  stats_enabled(false) {
58  }
60  Configurables(const Configurables&) = delete;
63  ~Configurables() noexcept { }
64 };
65 
66 struct ImplOptions {
67  ImplOptions(bool has_all=false) noexcept;
68  #define ADD_OPTION(_N) \
69  uint8_t _N : 1; \
70  ImplOptions& add_##_N() noexcept;\
71  bool SWC_PURE_FUNC has_##_N() const noexcept;
72  ADD_OPTION(async_exists)
73  ADD_OPTION(async_remove)
74  ADD_OPTION(async_length)
75  ADD_OPTION(async_mkdirs)
76  ADD_OPTION(async_readdir)
77  ADD_OPTION(async_rmdir)
78  ADD_OPTION(async_rename)
79  ADD_OPTION(async_write)
80  ADD_OPTION(async_readall)
81  ADD_OPTION(async_combi_pread)
82  ADD_OPTION(async_create)
83  ADD_OPTION(async_open)
84  ADD_OPTION(async_read)
85  ADD_OPTION(async_pread)
86  ADD_OPTION(async_append)
87  ADD_OPTION(async_seek)
88  ADD_OPTION(async_flush)
89  ADD_OPTION(async_sync)
90  ADD_OPTION(async_close)
91  #undef ADD_OPTION
92 };
93 
94 std::string normalize_pathname(std::string s);
95 
96 Type fs_type(const std::string& fs_name);
97 
98 const char* SWC_CONST_FUNC to_string(Type typ) noexcept;
99 
100 
101 class FileSystem : public std::enable_shared_from_this<FileSystem> {
102  public:
103 
104  typedef std::shared_ptr<FileSystem> Ptr;
105 
107  const std::string path_root;
108  const std::string path_data;
109 
112 
115 
116  FileSystem(const Configurables* config, ImplOptions impl_opts);
117 
118  FileSystem(FileSystem&&) = delete;
119  FileSystem(const FileSystem&) = delete;
121  FileSystem& operator=(const FileSystem&) = delete;
122 
123  virtual ~FileSystem() noexcept;
124 
125  virtual void stop();
126 
127  virtual Type SWC_CONST_FUNC get_type() const noexcept;
128 
129  virtual Type get_type_underlying() const noexcept;
130 
131  virtual std::string to_string() const = 0;
132 
133  virtual void get_abspath(const std::string& name, std::string& abspath,
134  size_t reserve=0);
135 
136  void fd_open_incr() noexcept;
137 
138  void fd_open_decr() noexcept;
139 
140  bool need_fds() const noexcept;
141 
142  size_t fds_open() const noexcept;
143 
144  virtual bool exists(int& err, const std::string& name) = 0;
145  virtual void exists(Callback::ExistsCb_t&& cb,
146  const std::string& name);
147 
148  virtual void remove(int& err, const std::string& name) = 0;
149  virtual void remove(Callback::RemoveCb_t&& cb,
150  const std::string& name);
151 
152  virtual size_t length(int& err, const std::string& name) = 0;
153  virtual void length(Callback::LengthCb_t&& cb,
154  const std::string& name);
155 
156 
157  // Directory Actions
158  virtual void mkdirs(int& err, const std::string& name) = 0;
159  virtual void mkdirs(Callback::MkdirsCb_t&& cb,
160  const std::string& name);
161 
162  virtual void readdir(int& err, const std::string& name,
163  DirentList& results) = 0;
164  virtual void readdir(Callback::ReaddirCb_t&& cb,
165  const std::string& name);
166 
167  virtual void rmdir(int& err, const std::string& name) = 0;
168  virtual void rmdir(Callback::RmdirCb_t&& cb,
169  const std::string& name);
170 
171  virtual void rename(int& err, const std::string& from,
172  const std::string& to) = 0;
173  virtual void rename(Callback::RenameCb_t&& cb,
174  const std::string& from, const std::string& to);
175 
176  // File(fd) Actions
177  virtual void write(int& err, SmartFd::Ptr& smartfd,
178  uint8_t replication, StaticBuffer& buffer) = 0;
179  void default_write(int& err, SmartFd::Ptr& smartfd,
180  uint8_t replication, StaticBuffer& buffer);
181  virtual void write(Callback::WriteCb_t&& cb, SmartFd::Ptr& smartfd,
182  uint8_t replication, StaticBuffer&& buffer);
183 
184  virtual void read(int& err, const std::string& name, StaticBuffer* dst) = 0;
185  void default_read(int& err, const std::string& name, StaticBuffer* dst);
186  virtual void read(Callback::ReadAllCb_t&& cb, const std::string& name);
187 
188  virtual void combi_pread(int& err, SmartFd::Ptr& smartfd,
189  uint64_t offset, uint32_t amount,
190  StaticBuffer* dst) = 0;
191  void default_combi_pread(int& err, SmartFd::Ptr& smartfd,
192  uint64_t offset, uint32_t amount,
193  StaticBuffer* dst);
194  virtual void combi_pread(Callback::CombiPreadCb_t&& cb,
195  SmartFd::Ptr& smartfd,
196  uint64_t offset, uint32_t amount);
197 
198  virtual void create(int& err, SmartFd::Ptr& smartfd,
199  uint8_t replication) = 0;
200  virtual void create(Callback::CreateCb_t&& cb, SmartFd::Ptr& smartfd,
201  uint8_t replication);
202 
203  virtual void open(int& err, SmartFd::Ptr& smartfd) = 0;
204  virtual void open(Callback::OpenCb_t&& cb, SmartFd::Ptr& smartfd);
205 
206 
207  virtual size_t read(int& err, SmartFd::Ptr& smartfd,
208  void *dst, size_t amount) = 0;
209  virtual size_t read(int& err, SmartFd::Ptr& smartfd,
210  StaticBuffer* dst, size_t amount) = 0;
211  size_t default_read(int& err, SmartFd::Ptr& smartfd,
212  StaticBuffer* dst, size_t amount);
213  virtual void read(Callback::ReadCb_t&& cb, SmartFd::Ptr& smartfd,
214  size_t amount);
215 
216  virtual size_t pread(int& err, SmartFd::Ptr& smartfd,
217  uint64_t offset, void *dst, size_t amount) = 0;
218  virtual size_t pread(int& err, SmartFd::Ptr& smartfd,
219  uint64_t offset, StaticBuffer* dst, size_t amount) = 0;
220  size_t default_pread(int& err, SmartFd::Ptr& smartfd,
221  uint64_t offset, StaticBuffer* dst, size_t amount);
222  virtual void pread(Callback::PreadCb_t&& cb, SmartFd::Ptr& smartfd,
223  uint64_t offset, size_t amount);
224 
225  virtual size_t append(int& err, SmartFd::Ptr& smartfd,
226  StaticBuffer& buffer, Flags flags) = 0;
227  virtual void append(Callback::AppendCb_t&& cb, SmartFd::Ptr& smartfd,
228  StaticBuffer& buffer, Flags flags);
229 
230  virtual void seek(int& err, SmartFd::Ptr& smartfd, size_t offset) = 0;
231  virtual void seek(Callback::CloseCb_t&& cb, SmartFd::Ptr& smartfd,
232  size_t offset);
233 
234  virtual void flush(int& err, SmartFd::Ptr& smartfd) = 0;
235  virtual void flush(Callback::FlushCb_t&& cb, SmartFd::Ptr& smartfd);
236 
237  virtual void sync(int& err, SmartFd::Ptr& smartfd) = 0;
238  virtual void sync(Callback::SyncCb_t&& cb, SmartFd::Ptr& smartfd);
239 
240  virtual void close(int& err, SmartFd::Ptr& smartfd) = 0;
241  virtual void close(Callback::CloseCb_t&& cb, SmartFd::Ptr& smartfd);
242 
243 };
244 
245 }}
246 
247 
248 extern "C"{
250 }
251 
252 
253 
254 #ifdef SWC_IMPL_SOURCE
255 #include "swcdb/fs/FileSystem.cc"
256 #endif
257 
258 
259 #endif // swcdb_fs_FileSystem_h
SWC::FS::Callback::OpenCb_t
std::function< void(int)> OpenCb_t
Definition: Callbacks.h:34
SWC::FS::FileSystem::Ptr
std::shared_ptr< FileSystem > Ptr
Definition: FileSystem.h:104
SWC::FS::ADD_OPTION
ADD_OPTION(async_exists) ADD_OPTION(async_remove) ADD_OPTION(async_length) ADD_OPTION(async_mkdirs) ADD_OPTION(async_readdir) ADD_OPTION(async_rmdir) ADD_OPTION(async_rename) ADD_OPTION(async_write) ADD_OPTION(async_readall) ADD_OPTION(async_combi_pread) ADD_OPTION(async_create) ADD_OPTION(async_open) ADD_OPTION(async_read) ADD_OPTION(async_pread) ADD_OPTION(async_append) ADD_OPTION(async_seek) ADD_OPTION(async_flush) ADD_OPTION(async_sync) ADD_OPTION(async_close) FileSystem
Definition: FileSystem.cc:80
SWC::FS::Callback::WriteCb_t
std::function< void(int, StaticBuffer &&)> WriteCb_t
Definition: Callbacks.h:29
SWC::FS::fs_type
Type fs_type(const std::string &fs_name)
Definition: FileSystem.cc:19
SWC::FS::FileSystem::append
virtual size_t append(int &err, SmartFd::Ptr &smartfd, StaticBuffer &buffer, Flags flags)=0
SWC::FS::Callback::PreadCb_t
std::function< void(int, StaticBuffer &&)> PreadCb_t
Definition: Callbacks.h:36
SWC::FS::LOCAL
@ LOCAL
Definition: FileSystem.h:23
SWC::Core::AtomicBase< bool >
SWC::FS::FileSystem::default_read
void default_read(int &err, const std::string &name, StaticBuffer *dst)
Definition: FileSystem.cc:257
SWC::Config::Settings::Ptr
std::shared_ptr< Settings > Ptr
Definition: Settings.h:29
SWC::FS::Callback::CombiPreadCb_t
std::function< void(int, StaticBuffer &&)> CombiPreadCb_t
Definition: Callbacks.h:31
SWC::FS::HADOOP
@ HADOOP
Definition: FileSystem.h:26
SWC::FS::Callback::ReadCb_t
std::function< void(int, StaticBuffer &&)> ReadCb_t
Definition: Callbacks.h:35
SWC::FS::Type
Type
Definition: FileSystem.h:20
SWC::FS::WRITE_VALIDATE_LENGTH
@ WRITE_VALIDATE_LENGTH
Definition: FileSystem.h:37
SWC::FS::Callback::LengthCb_t
std::function< void(int, size_t)> LengthCb_t
Definition: Callbacks.h:22
SWC::FS::Callback::SyncCb_t
std::function< void(int)> SyncCb_t
Definition: Callbacks.h:40
SWC::FS::Flags
Flags
Definition: FileSystem.h:41
SWC::FS::FileSystem::FileSystem
FileSystem(const FileSystem &)=delete
SWC::FS::FileSystem::default_combi_pread
void default_combi_pread(int &err, SmartFd::Ptr &smartfd, uint64_t offset, uint32_t amount, StaticBuffer *dst)
Definition: FileSystem.cc:304
SWC::FS::Configurables::operator=
Configurables & operator=(const Configurables &)=delete
SWC::FS::UNKNOWN
@ UNKNOWN
Definition: FileSystem.h:22
SWC::FS::FileSystem
Definition: FileSystem.h:101
SWC::FS::FileSystem::seek
virtual void seek(int &err, SmartFd::Ptr &smartfd, size_t offset)=0
SWC::FS::FileSystem::cfg_fds_max
const Config::Property::Value_int32_g::Ptr cfg_fds_max
Definition: FileSystem.h:111
SWC::FS::BROKER
@ BROKER
Definition: FileSystem.h:24
SWC::FS::FileSystem::FileSystem
FileSystem(FileSystem &&)=delete
SWC::FS::Callback::ExistsCb_t
std::function< void(int, bool)> ExistsCb_t
Definition: Callbacks.h:20
SWC::FS::FileSystem::open
virtual void open(int &err, SmartFd::Ptr &smartfd)=0
SWC::FS::Configurables::Configurables
Configurables(const Config::Settings::Ptr &a_settings) noexcept
Definition: FileSystem.h:53
SWC::FS::Configurables
Definition: FileSystem.h:48
SWC::FS::Callback::CloseCb_t
std::function< void(int)> CloseCb_t
Definition: Callbacks.h:41
SWC::FS::FileSystem::sync
virtual void sync(int &err, SmartFd::Ptr &smartfd)=0
SWC::FS::OpenFlags
OpenFlags
Definition: FileSystem.h:33
SWC::FS::Callback::RenameCb_t
std::function< void(int)> RenameCb_t
Definition: Callbacks.h:27
SWC::FS::ImplOptions
Definition: FileSystem.h:66
SWC::FS::FileSystem::get_type
virtual Type SWC_CONST_FUNC get_type() const noexcept
Definition: FileSystem.cc:122
SWC::FS::Configurables::path_root
std::string path_root
Definition: FileSystem.h:51
SWC_CONST_FUNC
#define SWC_CONST_FUNC
Definition: Compat.h:107
SWC::FS::FileSystem::combi_pread
virtual void combi_pread(int &err, SmartFd::Ptr &smartfd, uint64_t offset, uint32_t amount, StaticBuffer *dst)=0
SWC::FS::FileSystem::pread
virtual size_t pread(int &err, SmartFd::Ptr &smartfd, uint64_t offset, void *dst, size_t amount)=0
SWC::FS::CEPH
@ CEPH
Definition: FileSystem.h:28
SWC::FS::OPEN_FLAG_VERIFY_CHECKSUM
@ OPEN_FLAG_VERIFY_CHECKSUM
Definition: FileSystem.h:36
Dirent.h
SWC::FS::FileSystem::rmdir
virtual void rmdir(int &err, const std::string &name)=0
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::FS::OPEN_FLAG_OVERWRITE
@ OPEN_FLAG_OVERWRITE
Definition: FileSystem.h:35
SWC::FS::FileSystem::read
virtual void read(int &err, const std::string &name, StaticBuffer *dst)=0
SWC::FS::FileSystem::operator=
FileSystem & operator=(const FileSystem &)=delete
SWC::FS::FileSystem::flush
virtual void flush(int &err, SmartFd::Ptr &smartfd)=0
SWC::FS::Configurables::settings
Config::Settings::Ptr settings
Definition: FileSystem.h:49
SWC::Core::Buffer
Definition: Buffer.h:18
SWC::FS::Callback::ReadAllCb_t
std::function< void(int, StaticBuffer &&)> ReadAllCb_t
Definition: Callbacks.h:30
SWC::FS::FileSystem::to_string
virtual std::string to_string() const =0
Definition: FileSystem.cc:130
SWC::FS::Configurables::cfg_fds_max
Config::Property::Value_int32_g::Ptr cfg_fds_max
Definition: FileSystem.h:50
SWC::FS::Configurables::Configurables
Configurables(Configurables &&)=delete
SWC::FS::HADOOP_JVM
@ HADOOP_JVM
Definition: FileSystem.h:27
SWC::FS::CUSTOM
@ CUSTOM
Definition: FileSystem.h:25
SWC::FS::Callback::ReaddirCb_t
std::function< void(int, DirentList &&)> ReaddirCb_t
Definition: Callbacks.h:25
SWC::FS::Callback::RemoveCb_t
std::function< void(int)> RemoveCb_t
Definition: Callbacks.h:21
SWC::FS::Configurables::operator=
Configurables & operator=(Configurables &&)=delete
SWC::FS::FileSystem::~FileSystem
virtual ~FileSystem() noexcept
Definition: FileSystem.cc:113
SWC::FS::Callback::RmdirCb_t
std::function< void(int)> RmdirCb_t
Definition: Callbacks.h:26
SWC::FS::ImplOptions::ImplOptions
ImplOptions(bool has_all=false) noexcept
Definition: FileSystem.cc:67
SWC::FS::FileSystem::fd_open_incr
void fd_open_incr() noexcept
Definition: FileSystem.cc:155
SWC::FS::SmartFd
Smart FileDescriptor.
Definition: SmartFd.h:34
SWC::FS::FileSystem::get_type_underlying
virtual Type get_type_underlying() const noexcept
Definition: FileSystem.cc:126
fs_make_new_t
SWC::FS::FileSystem * fs_make_new_t(SWC::FS::Configurables *)
Definition: FileSystem.h:249
SWC::FS::FileSystem::write
virtual void write(int &err, SmartFd::Ptr &smartfd, uint8_t replication, StaticBuffer &buffer)=0
SWC::FS::FileSystem::settings
const Config::Settings::Ptr settings
Definition: FileSystem.h:110
SWC::FS::Callback::CreateCb_t
std::function< void(int)> CreateCb_t
Definition: Callbacks.h:33
SWC::FS::FileSystem::remove
virtual void remove(int &err, const std::string &name)=0
SWC::FS::FileSystem::mkdirs
virtual void mkdirs(int &err, const std::string &name)=0
SWC::Core::Vector< Dirent >
SWC::FS::FileSystem::default_write
void default_write(int &err, SmartFd::Ptr &smartfd, uint8_t replication, StaticBuffer &buffer)
Definition: FileSystem.cc:226
SWC::FS::FileSystem::exists
virtual bool exists(int &err, const std::string &name)=0
Settings.h
SmartFd.h
SWC::Condition::from
Comp from(const char **buf, uint32_t *remainp, uint8_t extended=0x00) noexcept
Definition: Comparators.cc:15
SWC::FS::FileSystem::FileSystem
FileSystem(const Configurables *config, ImplOptions impl_opts)
SWC::FS::normalize_pathname
std::string normalize_pathname(std::string s)
Definition: FileSystem.cc:13
SWC::FS::Callback::FlushCb_t
std::function< void(int)> FlushCb_t
Definition: Callbacks.h:39
SWC::FS::FileSystem::m_run
Core::AtomicBool m_run
Definition: FileSystem.h:113
SWC::FS::FileSystem::stop
virtual void stop()
Definition: FileSystem.cc:115
SWC::FS::Configurables::Configurables
Configurables(const Configurables &)=delete
SWC::FS::FileSystem::fd_open_decr
void fd_open_decr() noexcept
Definition: FileSystem.cc:159
SWC::FS::FileSystem::create
virtual void create(int &err, SmartFd::Ptr &smartfd, uint8_t replication)=0
SWC::FS::FileSystem::operator=
FileSystem & operator=(FileSystem &&)=delete
SWC::FS::Configurables::stats_enabled
bool stats_enabled
Definition: FileSystem.h:52
SWC::FS::FLUSH
@ FLUSH
Definition: FileSystem.h:43
SWC::FS::FileSystem::path_root
const std::string path_root
Definition: FileSystem.h:107
SWC::FS::FileSystem::close
virtual void close(int &err, SmartFd::Ptr &smartfd)=0
Statistics.h
SWC::FS::FileSystem::fds_open
size_t fds_open() const noexcept
Definition: FileSystem.cc:167
SWC::FS::Statistics
Definition: Statistics.h:18
SWC::FS::FileSystem::path_data
const std::string path_data
Definition: FileSystem.h:108
Logger.h
SWC::FS::FileSystem::rename
virtual void rename(int &err, const std::string &from, const std::string &to)=0
flags
uint8_t flags
Flags.
Definition: Header.h:55
SWC::FS::SYNC
@ SYNC
Definition: FileSystem.h:44
SWC::FS::NONE
@ NONE
Definition: FileSystem.h:42
FileSystem.cc
SWC::FS::Configurables::~Configurables
~Configurables() noexcept
Definition: FileSystem.h:63
SWC::FS::FileSystem::get_abspath
virtual void get_abspath(const std::string &name, std::string &abspath, size_t reserve=0)
Definition: FileSystem.cc:138
SWC::FS::FileSystem::length
virtual size_t length(int &err, const std::string &name)=0
SWC::FS::Callback::AppendCb_t
std::function< void(int, size_t)> AppendCb_t
Definition: Callbacks.h:37
SWC::FS::OPEN_FLAG_DIRECTIO
@ OPEN_FLAG_DIRECTIO
Definition: FileSystem.h:34
SWC::FS::FileSystem::impl_options
const ImplOptions impl_options
Definition: FileSystem.h:106
SWC::FS::Callback::MkdirsCb_t
std::function< void(int)> MkdirsCb_t
Definition: Callbacks.h:24
SWC::FS::FileSystem::statistics
Statistics statistics
Definition: FileSystem.h:114
SWC::Config::Property::Value_int32_g
Definition: Property.h:586
SWC::FS::FileSystem::default_pread
size_t default_pread(int &err, SmartFd::Ptr &smartfd, uint64_t offset, StaticBuffer *dst, size_t amount)
Definition: FileSystem.cc:365
SWC::FS::to_string
const char *SWC_CONST_FUNC to_string(Type typ) noexcept
Definition: FileSystem.cc:47
Callbacks.h
SWC::FS::FileSystem::readdir
virtual void readdir(int &err, const std::string &name, DirentList &results)=0
SWC::FS::FileSystem::need_fds
bool need_fds() const noexcept
Definition: FileSystem.cc:163