fs_data.hpp 2.55 KiB
Newer Older
  Copyright 2018-2020, Barcelona Supercomputing Center (BSC), Spain
  Copyright 2015-2020, 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
*/

Marc Vef's avatar
Marc Vef committed

#ifndef LFS_FS_DATA_H
#define LFS_FS_DATA_H

#include <daemon/daemon.hpp>
Marc Vef's avatar
Marc Vef committed

/* Forward declarations */
class MetadataDB;
class ChunkStorage;
#include <unordered_map>
#include <map>
#include <functional> //std::hash
Marc Vef's avatar
Marc Vef committed

class FsData {

private:
    FsData() {}

    //logger
    std::shared_ptr<spdlog::logger> spdlogger_;

    // paths
    std::string rootdir_;
    std::string metadir_;
Marc Vef's avatar
Marc Vef committed

    std::string bind_addr_;
    std::string hosts_file_;
Marc Vef's avatar
Marc Vef committed

    // Database
    std::shared_ptr<MetadataDB> mdb_;
    // Storage backend
    std::shared_ptr<ChunkStorage> storage_;
Marc Vef's avatar
Marc Vef committed

    // configurable metadata
    bool atime_state_;
    bool mtime_state_;
    bool ctime_state_;
    bool link_cnt_state_;
    bool blocks_state_;

Marc Vef's avatar
Marc Vef committed
public:
    static FsData* getInstance() {
        static FsData instance;
        return &instance;
    }

    FsData(FsData const&) = delete;

    void operator=(FsData const&) = delete;

    // getter/setter
Marc Vef's avatar
Marc Vef committed

Marc Vef's avatar
Marc Vef committed
    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;
Marc Vef's avatar
Marc Vef committed

    void mdb(const std::shared_ptr<MetadataDB>& mdb);
Marc Vef's avatar
Marc Vef committed

    void close_mdb();
Marc Vef's avatar
Marc Vef committed

    const std::shared_ptr<ChunkStorage>& storage() const;

    void storage(const std::shared_ptr<ChunkStorage>& storage);

    const std::string& bind_addr() const;
Marc Vef's avatar
Marc Vef committed

    void bind_addr(const std::string& addr);
    const std::string& hosts_file() const;
    void hosts_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);
Marc Vef's avatar
Marc Vef committed

};

#endif //LFS_FS_DATA_H