Newer
Older
/*
Copyright 2018-2019, Barcelona Supercomputing Center (BSC), Spain
Copyright 2015-2019, Johannes Gutenberg Universitaet Mainz, Germany
This software was partially supported by the
EC H2020 funded project NEXTGenIO (Project ID: 671951, www.nextgenio.eu).
This software was partially supported by the
ADA-FS project under the SPPEXA project funded by the DFG.
SPDX-License-Identifier: MIT
*/
#include <daemon/main.hpp>
/* Forward declarations */
class MetadataDB;
class FsData {
private:
FsData() {}
// Caching
std::unordered_map<std::string, std::string> hashmap_;
std::hash<std::string> hashf_;
// Later the blocksize will likely be coupled to the chunks to allow individually big chunk sizes.
blksize_t blocksize_;
//logger
std::shared_ptr<spdlog::logger> spdlogger_;
// paths
std::string rootdir_;
std::string mountdir_;
std::string hosts_raw_; // raw hosts string, given when daemon is started. Used to give it to fs client
std::map<uint64_t, std::string> hosts_;
uint64_t host_id_; // my host number
size_t host_size_;
std::string rpc_addr_;
// Database
std::shared_ptr<MetadataDB> mdb_;
// Storage backend
std::shared_ptr<ChunkStorage> storage_;
// configurable metadata
bool atime_state_;
bool mtime_state_;
bool ctime_state_;
bool link_cnt_state_;
bool blocks_state_;
public:
static FsData* getInstance() {
static FsData instance;
return &instance;
}
FsData(FsData const&) = delete;
void operator=(FsData const&) = delete;
// Utility member functions
bool is_local_op(size_t recipient);
const std::unordered_map<std::string, std::string>& hashmap() const;
void hashmap(const std::unordered_map<std::string, std::string>& hashmap_);
const std::hash<std::string>& hashf() const;
void hashf(const std::hash<std::string>& hashf_);
blksize_t blocksize() const;
void blocksize(blksize_t blocksize_);
const std::shared_ptr<spdlog::logger>& spdlogger() const;
void spdlogger(const std::shared_ptr<spdlog::logger>& spdlogger_);
const std::string& rootdir() const;
void rootdir(const std::string& rootdir_);
const std::string& mountdir() const;
void mountdir(const std::string& mountdir_);
const std::string& metadir() const;
void metadir(const std::string& metadir_);
const std::shared_ptr<MetadataDB>& mdb() const;
void mdb(const std::shared_ptr<MetadataDB>& mdb);
const std::shared_ptr<ChunkStorage>& storage() const;
void storage(const std::shared_ptr<ChunkStorage>& storage);
const std::string& hosts_raw() const;
void hosts_raw(const std::string& hosts_raw);
const std::map<uint64_t, std::string>& hosts() const;
void hosts(const std::map<uint64_t, std::string>& hosts);
const uint64_t& host_id() const;
void host_id(const uint64_t& host_id);
size_t host_size() const;
void host_size(size_t host_size);
void rpc_port(unsigned int rpc_port);
const std::string& rpc_addr() const;
void rpc_addr(const std::string& addr);
const std::string& lookup_file() const;
void lookup_file(const std::string& lookup_file);
bool atime_state() const;
void atime_state(bool atime_state);
bool mtime_state() const;
void mtime_state(bool mtime_state);
bool ctime_state() const;
void ctime_state(bool ctime_state);
bool link_cnt_state() const;
void link_cnt_state(bool link_cnt_state);
bool blocks_state() const;
void blocks_state(bool blocks_state);