Commit 382199bc authored by Marc Vef's avatar Marc Vef
Browse files

Getting rid of the private fuse struct and porting it to the singleton

parent 8e196911
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -144,7 +144,7 @@ void metadata_to_stat(const Metadata& md, struct stat& attr) {
int create_node(fuse_req_t& req, struct fuse_entry_param& fep, fuse_ino_t parent, const string& name, mode_t mode) {
    // create metadata of new file (this will also create a new inode number)
    // mode is used here to init metadata
    auto md = make_shared<Metadata>(mode, fuse_req_ctx(req)->uid, fuse_req_ctx(req)->gid, req);
    auto md = make_shared<Metadata>(mode, fuse_req_ctx(req)->uid, fuse_req_ctx(req)->gid);
    if ((mode & S_IFDIR) == S_IFDIR) {
        md->size(
                ADAFS_DATA->blocksize()); // XXX just visual. size computation of directory should be done properly at some point
+18 −0
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@

#include "fs_data.h"

// getter/setter

const std::unordered_map<std::string, std::string>& FsData::hashmap() const {
    return hashmap_;
}
@@ -132,3 +134,19 @@ void FsData::rdb_write_options(const rocksdb::WriteOptions& rdb_write_options) {
    FsData::rdb_write_options_ = rdb_write_options;
}

fuse_ino_t FsData::inode_count() const {
    return inode_count_;
}

void FsData::inode_count(fuse_ino_t inode_count) {
    FsData::inode_count_ = inode_count;
}

// Utility member functions

fuse_ino_t FsData::raise_inode_count(fuse_ino_t count) {
    FsData::inode_count_ += count;
    return FsData::inode_count_;
}

+15 −0
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@ private:
    std::unordered_map<std::string, std::string> hashmap_;
    std::hash<std::string> hashf_;

    // inodes
    fuse_ino_t inode_count_;

    // Later the blocksize will likely be coupled to the chunks to allow individually big chunk sizes.
    blksize_t blocksize_;

@@ -39,6 +42,10 @@ private:
    std::string rdb_path_;

public:

    // mutex has a deleted method to assign an existing mutex. As such it cannot use getter or setters
    std::mutex inode_mutex;

    static FsData* getInstance() {
        static FsData instance;
        return &instance;
@@ -57,6 +64,10 @@ public:

    void hashf(const std::hash<std::string>& hashf_);

    fuse_ino_t inode_count() const;

    void inode_count(fuse_ino_t inode_count);

    blksize_t blocksize() const;

    void blocksize(blksize_t blocksize_);
@@ -112,6 +123,10 @@ public:
    const rocksdb::WriteOptions& rdb_write_options() const;

    void rdb_write_options(const rocksdb::WriteOptions& rdb_write_options);

    // Utility member functions

    fuse_ino_t raise_inode_count(fuse_ino_t count);
};


+2 −2
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ Metadata::Metadata() : atime_(),
                       size_(0),
                       blocks_(0) {}

Metadata::Metadata(mode_t mode, uint32_t uid, uint32_t gid, fuse_req_t& req) :
Metadata::Metadata(mode_t mode, uint32_t uid, uint32_t gid) :
        atime_(),
        mtime_(),
        ctime_(),
@@ -110,7 +110,7 @@ Metadata::Metadata(mode_t mode, uint32_t uid, uint32_t gid, fuse_req_t& req) :
        size_(0),
        blocks_(0) {
    init_ACM_time();
    inode_no_ = Util::generate_inode_no(req);
    inode_no_ = Util::generate_inode_no();
}

Metadata::Metadata(mode_t mode, uid_t uid, gid_t gid, fuse_ino_t inode) :
+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ private:
public:
    Metadata();

    Metadata(mode_t mode, uid_t uid, gid_t gid, fuse_req_t& req);
    Metadata(mode_t mode, uint32_t uid, uint32_t gid);

    Metadata(mode_t mode, uid_t uid, gid_t gid, fuse_ino_t inode);

Loading