Commit e291fc0e authored by Marc Vef's avatar Marc Vef
Browse files

Transactional connection added. All db operations can now be used in transactions.

parent 3f6bd6b0
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -33,13 +33,13 @@ set(SOURCE_FILES src/main.cpp src/main.hpp src/fuse_ops.hpp src/configure.hpp

        src/adafs_ops/mdata_ops.hpp src/adafs_ops/dentry_ops.hpp src/adafs_ops/access.hpp

        src/db/db_ops.hpp src/db/util.hpp
        src/db/db_ops.hpp src/db/db_txn_ops.hpp src/db/util.hpp

        src/util.cpp
        src/fuse_ops/file.cpp src/fuse_ops/directory.cpp src/fuse_ops/sync.cpp src/fuse_ops/access.cpp
        src/adafs_ops/mdata_ops.cpp src/adafs_ops/dentry_ops.cpp src/adafs_ops/access.cpp

        src/db/db_ops.cpp src/db/util.cpp
        src/db/db_ops.cpp src/db/db_txn_ops.cpp src/db/util.cpp

        )
add_executable(adafs ${SOURCE_FILES} src/main.cpp)
+27 −15
Original line number Diff line number Diff line
@@ -11,18 +11,27 @@ using namespace std;
int write_all_metadata(const Metadata& md, const fuse_ino_t inode) {
    auto inode_key = fmt::FormatInt(inode).str();

    db_put_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::atime)>(md_field_map)), md.atime());
    db_put_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::mtime)>(md_field_map)), md.mtime());
    db_put_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::ctime)>(md_field_map)), md.ctime());
    db_put_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::uid)>(md_field_map)), md.uid());
    db_put_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::gid)>(md_field_map)), md.gid());
    db_put_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::mode)>(md_field_map)), md.mode());
    db_put_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::inode_no)>(md_field_map)),
                 md.inode_no());
    db_put_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::link_count)>(md_field_map)),
                 md.link_count());
    db_put_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::size)>(md_field_map)), md.size());
    db_put_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::blocks)>(md_field_map)), md.blocks());
    db_put_mdata(db_build_mdata_key(
            inode_key, std::get<to_underlying(Md_fields::atime)>(md_field_map)), md.atime());
    db_put_mdata(db_build_mdata_key(
            inode_key, std::get<to_underlying(Md_fields::mtime)>(md_field_map)), md.mtime());
    db_put_mdata(db_build_mdata_key(
            inode_key, std::get<to_underlying(Md_fields::ctime)>(md_field_map)), md.ctime());
    db_put_mdata(db_build_mdata_key(
            inode_key, std::get<to_underlying(Md_fields::uid)>(md_field_map)), md.uid());
    db_put_mdata(db_build_mdata_key(
            inode_key, std::get<to_underlying(Md_fields::gid)>(md_field_map)), md.gid());
    db_put_mdata(db_build_mdata_key(
            inode_key, std::get<to_underlying(Md_fields::mode)>(md_field_map)), md.mode());
    db_put_mdata(db_build_mdata_key(
            inode_key, std::get<to_underlying(Md_fields::inode_no)>(md_field_map)), md.inode_no());
    db_put_mdata(db_build_mdata_key(
            inode_key, std::get<to_underlying(Md_fields::link_count)>(md_field_map)), md.link_count());
    db_put_mdata(db_build_mdata_key(
            inode_key, std::get<to_underlying(Md_fields::size)>(md_field_map)), md.size());
    db_put_mdata(db_build_mdata_key(
            inode_key, std::get<to_underlying(Md_fields::blocks)>(md_field_map)), md.blocks());

    return 0;
}

@@ -36,15 +45,18 @@ int read_all_metadata(Metadata& md, const fuse_ino_t inode) {
            db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::mtime)>(md_field_map))));
    md.ctime(db_get_mdata<time_t>(
            db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::ctime)>(md_field_map))));
    md.uid(db_get_mdata<uid_t>(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::uid)>(md_field_map))));
    md.gid(db_get_mdata<gid_t>(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::gid)>(md_field_map))));
    md.uid(db_get_mdata<uid_t>(
            db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::uid)>(md_field_map))));
    md.gid(db_get_mdata<gid_t>(
            db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::gid)>(md_field_map))));
    md.mode(db_get_mdata<mode_t>(
            db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::mode)>(md_field_map))));
    md.inode_no(db_get_mdata<fuse_ino_t>(
            db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::inode_no)>(md_field_map))));
    md.link_count(db_get_mdata<nlink_t>(
            db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::link_count)>(md_field_map))));
    md.size(db_get_mdata<off_t>(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::size)>(md_field_map))));
    md.size(db_get_mdata<off_t>(
            db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::size)>(md_field_map))));
    md.blocks(db_get_mdata<blkcnt_t>(
            db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::blocks)>(md_field_map))));
    return 0;
+1 −12
Original line number Diff line number Diff line
@@ -8,22 +8,11 @@
#include "../main.hpp"
#include "../classes/metadata.h"
#include "../db/db_ops.hpp"
#include "../db/db_txn_ops.hpp"
#include "../db/util.hpp"

using namespace std;

//template <typename E>
//constexpr typename std::underlying_type<E>::type to_underlying(E e) {
//    return static_cast<typename std::underlying_type<E>::type>(e);
//}
//
//// mapping of enum to string to get the db_keys for metadata
//enum class Md_fields { atime, mtime, ctime, uid, gid, mode, inode_no, link_count, size, blocks };
//
//const std::array<std::string, 10> md_field_map = {
//        "_atime"s, "_mtime"s, "_ctime"s, "_uid"s, "_gid"s, "_mode"s, "_inodeno"s, "_lnkcnt"s, "_size"s, "_blkcnt"s
//};

int write_all_metadata(const Metadata& md, const fuse_ino_t inode);

int read_all_metadata(Metadata& md, const fuse_ino_t inode);
+24 −8
Original line number Diff line number Diff line
@@ -76,14 +76,6 @@ void FsData::mgmt_path(const std::string& mgmt_path_) {
    FsData::mgmt_path_ = mgmt_path_;
}

//rocksdb::DB* FsData::rdb() {
//    return rdb_;
//}
//
//void FsData::rdb(rocksdb::DB* rdb_) {
//    FsData::rdb_ = rdb_;
//}

const rocksdb::Options& FsData::rdb_options() const {
    return rdb_options_;
}
@@ -108,3 +100,27 @@ void FsData::rdb(const std::shared_ptr<rocksdb::DB>& rdb) {
    FsData::rdb_ = rdb;
}

const std::shared_ptr<rocksdb::OptimisticTransactionDB>& FsData::txn_rdb() const {
    return txn_rdb_;
}

void FsData::txn_rdb(const std::shared_ptr<rocksdb::OptimisticTransactionDB>& tx_rdb) {
    FsData::txn_rdb_ = tx_rdb;
}

const std::shared_ptr<rocksdb::DB>& FsData::rdb_crt() const {
    return rdb_crt_;
}

void FsData::rdb_crt(const std::shared_ptr<rocksdb::DB>& rdb_crt) {
    FsData::rdb_crt_ = rdb_crt;
}

const rocksdb::OptimisticTransactionOptions& FsData::txn_rdb_options() const {
    return txn_rdb_options_;
}

void FsData::txn_rdb_options(const rocksdb::OptimisticTransactionOptions& tx_rdb_options) {
    FsData::txn_rdb_options_ = tx_rdb_options;
}
+16 −6
Original line number Diff line number Diff line
@@ -30,9 +30,11 @@ private:
    std::string mgmt_path_;

    // rocksdb
//    rocksdb::DB* rdb_;
    std::shared_ptr<rocksdb::DB> rdb_; //single rocksdb instance
    std::shared_ptr<rocksdb::DB> rdb_;
    std::shared_ptr<rocksdb::DB> rdb_crt_; // additional db instance (currently not used)
    std::shared_ptr<rocksdb::OptimisticTransactionDB> txn_rdb_;
    rocksdb::Options rdb_options_;
    rocksdb::OptimisticTransactionOptions txn_rdb_options_; // needed for snapshots
    std::string rdb_path_;

public:
@@ -82,10 +84,6 @@ public:

    void mgmt_path(const std::string& mgmt_path_);

//    rocksdb::DB* rdb();
//
//    void rdb(rocksdb::DB* rdb_);

    const std::shared_ptr<rocksdb::DB>& rdb() const;

    void rdb(const std::shared_ptr<rocksdb::DB>& rdb);
@@ -98,6 +96,18 @@ public:

    void rdb_path(const std::string& rdb_path);

    const std::shared_ptr<rocksdb::OptimisticTransactionDB>& txn_rdb() const;

    void txn_rdb(const std::shared_ptr<rocksdb::OptimisticTransactionDB>& tx_rdb);

    const std::shared_ptr<rocksdb::DB>& rdb_crt() const;

    void rdb_crt(const std::shared_ptr<rocksdb::DB>& rdb_crt);

    const rocksdb::OptimisticTransactionOptions& txn_rdb_options() const;

    void txn_rdb_options(const rocksdb::OptimisticTransactionOptions& tx_rdb_options);

};


Loading