Commit 8f65b83b authored by Marc Vef's avatar Marc Vef
Browse files

Merge branch 'MetadataDB_rebased_exceptions' into 'master'

Introduce MetadataDB class

See merge request zdvresearch_bsc/adafs!67
parents e5483d49 d22849e2
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -110,14 +110,11 @@ if (NOT USE_OFI_VERBS AND NOT USE_OFI_PSM2 AND NOT USE_CCI AND NOT USE_BMI)
    add_definitions(-DRPC_PROTOCOL="bmi+tcp")
endif()

set(INCLUDE_DIR "${CMAKE_SOURCE_DIR}/include")

# define include directories that are relevant for all targets
include_directories(
    include
    ${ABT_INCLUDE_DIRS}
    ${ABT_SNOOZER_INCLUDE_DIRS}
    ${LIBEV_INCLUDE_DIRS}
    ${MERCURY_INCLUDE_DIRS}
    ${MARGO_INCLUDE_DIRS}
    ${INCLUDE_DIR}
)

# Daemon
+0 −7
Original line number Diff line number Diff line
@@ -11,13 +11,6 @@
// third party libs
#include <extern/spdlog/spdlog.h>
#include <extern/spdlog/fmt/fmt.h>
// rocksdb
#include <rocksdb/db.h>
#include <rocksdb/slice.h>
#include <rocksdb/options.h>
#include <rocksdb/utilities/transaction.h>
#include <rocksdb/utilities/optimistic_transaction_db.h>
#include <rocksdb/write_batch.h>
// margo
extern "C" {
#include <abt.h>
+7 −9
Original line number Diff line number Diff line
@@ -8,23 +8,21 @@

int create_node(const std::string& path, const uid_t uid, const gid_t gid, mode_t mode);

int create_metadentry(const std::string& path, mode_t mode);
void create_metadentry(const std::string& path, mode_t mode);

int db_val_to_stat(const std::string& path, std::string db_val, struct stat& attr);

int get_metadentry(const std::string& path, std::string& val);
std::string get_metadentry_str(const std::string& path);

int get_metadentry(const std::string& path, Metadata& md);
Metadata get_metadentry(const std::string& path);

int remove_metadentry(const std::string& path);
void remove_node(const std::string& path);

int remove_node(const std::string& path);
size_t get_metadentry_size(const std::string& path);

int get_metadentry_size(const std::string& path, size_t& ret_size);
void update_metadentry_size(const std::string& path, size_t io_size, off_t offset, bool append);

int update_metadentry_size(const std::string& path, size_t io_size, off_t offset, bool append, size_t& read_size);

int update_metadentry(const std::string& path, Metadata& md);
void update_metadentry(const std::string& path, Metadata& md);

int check_access_mask(const std::string& path, int mask);

+17 −0
Original line number Diff line number Diff line
#ifndef IFS_DB_EXCEPTIONS_HPP
#define IFS_DB_EXCEPTIONS_HPP

#include <string>
#include <stdexcept>

class DBException: public std::runtime_error {
    public:
        DBException(const std::string & s) : std::runtime_error(s) {};
};

class NotFoundException: public DBException {
    public:
        NotFoundException(const std::string & s) : DBException(s) {};
};

#endif //IFS_DB_EXCEPTIONS_HPP
+32 −0
Original line number Diff line number Diff line
#ifndef IFS_METADATA_DB_HPP
#define IFS_METADATA_DB_HPP

#include <memory>
#include "rocksdb/db.h"
#include "daemon/backend/exceptions.hpp"

namespace rdb = rocksdb;

class MetadataDB {
    private:
        std::unique_ptr<rdb::DB> db;
        rdb::Options options;
        rdb::WriteOptions write_opts;
        std::string path;
        static void optimize_rocksdb_options(rdb::Options& options);

    public:
        static inline void throw_rdb_status_excpt(const rdb::Status& s);

        MetadataDB(const std::string& path);

        std::string get(const std::string& key) const;
        void put(const std::string& key, const std::string& val);
        void remove(const std::string& key);
        bool exists(const std::string& key);
        void update(const std::string& old_key, const std::string& new_key, const std::string& val);
        void update_size(const std::string& key, size_t size, bool append);
        void iterate_all();
};

#endif //IFS_METADATA_DB_HPP
Loading