Loading lfs/CMakeLists.txt +6 −2 Original line number Diff line number Diff line Loading @@ -31,11 +31,15 @@ set(SOURCE_FILES src/main.cpp src/main.hpp src/fuse_ops.hpp src/configure.hpp src/classes/metadata.h src/classes/metadata.cpp src/classes/fs_data.h src/classes/fs_data.cpp src/classes/dentry.h src/classes/dentry.cpp src/adafs_ops/mdata_ops.hpp src/adafs_ops/dentry_ops.hpp src/adafs_ops/access.hpp src/adafs_ops/db_ops.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/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/adafs_ops/db_ops.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 ) add_executable(adafs ${SOURCE_FILES} src/main.cpp) Loading lfs/src/adafs_ops/dentry_ops.cpp +4 −5 Original line number Diff line number Diff line Loading @@ -3,7 +3,8 @@ // #include "dentry_ops.hpp" #include "db_ops.hpp" #include "../db/db_ops.hpp" #include "../db/util.hpp" using namespace std; Loading Loading @@ -120,11 +121,9 @@ pair<int, fuse_ino_t> do_lookup(fuse_req_t& req, const fuse_ino_t p_inode, const * @return */ int create_dentry(const fuse_ino_t p_inode, const fuse_ino_t inode, const string& name, mode_t mode) { auto key = "d_"s + fmt::FormatInt(p_inode).str() + "_"s + name; auto val = fmt::FormatInt(inode).str() + "_"s + fmt::FormatInt(mode).str(); // XXX check later if we need to check if dentry of father already exists return db_put_dentry(key, val); // put dentry for key, value return db_put_dentry(db_build_dentry_key(p_inode, name), db_build_dentry_value(inode, mode)); } /** Loading lfs/src/adafs_ops/mdata_ops.cpp +40 −30 Original line number Diff line number Diff line Loading @@ -5,21 +5,24 @@ #include "mdata_ops.hpp" #include "dentry_ops.hpp" using namespace std; // TODO error handling. int write_all_metadata(const Metadata& md, const fuse_ino_t inode) { auto inode_key = fmt::FormatInt(inode).str(); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::atime)>(md_field_map), md.atime()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::mtime)>(md_field_map), md.mtime()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::ctime)>(md_field_map), md.ctime()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::uid)>(md_field_map), md.uid()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::gid)>(md_field_map), md.gid()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::mode)>(md_field_map), md.mode()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::inode_no)>(md_field_map), md.inode_no()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::link_count)>(md_field_map), md.link_count()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::size)>(md_field_map), md.size()); db_put_mdata(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; } Loading @@ -27,16 +30,23 @@ int write_all_metadata(const Metadata& md, const fuse_ino_t inode) { int read_all_metadata(Metadata& md, const fuse_ino_t inode) { auto inode_key = fmt::FormatInt(inode).str(); md.atime(db_get_mdata<time_t>(inode_key + std::get<to_underlying(Md_fields::atime)>(md_field_map))); md.mtime(db_get_mdata<time_t>(inode_key + std::get<to_underlying(Md_fields::mtime)>(md_field_map))); md.ctime(db_get_mdata<time_t>(inode_key + std::get<to_underlying(Md_fields::ctime)>(md_field_map))); md.uid(db_get_mdata<uid_t>(inode_key + std::get<to_underlying(Md_fields::uid)>(md_field_map))); md.gid(db_get_mdata<gid_t>(inode_key + std::get<to_underlying(Md_fields::gid)>(md_field_map))); md.mode(db_get_mdata<mode_t>(inode_key + std::get<to_underlying(Md_fields::mode)>(md_field_map))); md.inode_no(db_get_mdata<fuse_ino_t>(inode_key + std::get<to_underlying(Md_fields::inode_no)>(md_field_map))); md.link_count(db_get_mdata<nlink_t>(inode_key + std::get<to_underlying(Md_fields::link_count)>(md_field_map))); md.size(db_get_mdata<off_t>(inode_key + std::get<to_underlying(Md_fields::size)>(md_field_map))); md.blocks(db_get_mdata<blkcnt_t>(inode_key + std::get<to_underlying(Md_fields::blocks)>(md_field_map))); md.atime(db_get_mdata<time_t>( db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::atime)>(md_field_map)))); md.mtime(db_get_mdata<time_t>( 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.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.blocks(db_get_mdata<blkcnt_t>( db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::blocks)>(md_field_map)))); return 0; } Loading @@ -49,16 +59,16 @@ int read_all_metadata(Metadata& md, const fuse_ino_t inode) { int remove_all_metadata(const fuse_ino_t inode) { // TODO error handling auto inode_key = fmt::FormatInt(inode).str(); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::atime)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::mtime)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::ctime)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::uid)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::gid)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::mode)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::inode_no)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::link_count)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::size)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::blocks)>(md_field_map)); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::atime)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::mtime)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::ctime)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::uid)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::gid)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::mode)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::inode_no)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::link_count)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::size)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::blocks)>(md_field_map))); return 0; } Loading lfs/src/adafs_ops/mdata_ops.hpp +13 −12 Original line number Diff line number Diff line Loading @@ -7,21 +7,22 @@ #include "../main.hpp" #include "../classes/metadata.h" #include "db_ops.hpp" #include "../db/db_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 file names 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 }; //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); Loading lfs/src/adafs_ops/db_ops.cpp→lfs/src/db/db_ops.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ // #include "db_ops.hpp" #include "mdata_ops.hpp" #include "../adafs_ops/mdata_ops.hpp" using namespace rocksdb; Loading Loading @@ -38,7 +38,7 @@ bool db_delete_mdata(const string& key) { bool db_dentry_exists(const fuse_ino_t p_inode, const string& name, string& val) { auto db = ADAFS_DATA->rdb(); auto key = "d_"s + fmt::FormatInt(p_inode).str() + "_"s + name; auto key = db_build_dentry_key(p_inode, name); return db->Get(rocksdb::ReadOptions(), key, &val).ok(); } Loading @@ -46,7 +46,7 @@ bool db_mdata_exists(const fuse_ino_t inode) { auto db = ADAFS_DATA->rdb(); string val_str; return db->Get(ReadOptions(), fmt::FormatInt(inode).str() + std::get<to_underlying(Md_fields::atime)>(md_field_map), db_build_mdata_key(inode, std::get<to_underlying(Md_fields::atime)>(md_field_map)), &val_str).ok(); } Loading @@ -61,7 +61,7 @@ void db_get_dentries(vector<Dentry>& dentries, const fuse_ino_t dir_inode) { size_t pos; auto delim = "_"s; auto db = ADAFS_DATA->rdb(); auto prefix = "d_"s + fmt::FormatInt(dir_inode).str(); auto prefix = db_build_dentry_prefix(dir_inode); // Do RangeScan on parent inode auto dentry_iter = db->NewIterator(rocksdb::ReadOptions()); for (dentry_iter->Seek(prefix); Loading @@ -88,7 +88,7 @@ void db_get_dentries(vector<Dentry>& dentries, const fuse_ino_t dir_inode) { } pair<bool, fuse_ino_t> db_delete_dentry_get_inode(const fuse_ino_t p_inode, const string& name) { auto key = "d_"s + fmt::FormatInt(p_inode).str() + "_"s + name; auto key = db_build_dentry_key(p_inode, name); auto db = ADAFS_DATA->rdb(); string val; db->Get(ReadOptions(), key, &val); Loading @@ -105,7 +105,7 @@ pair<bool, fuse_ino_t> db_delete_dentry_get_inode(const fuse_ino_t p_inode, cons bool db_is_dir_empty(const fuse_ino_t inode) { auto dir_empty = true; auto db = ADAFS_DATA->rdb(); auto prefix = "d_"s + fmt::FormatInt(inode).str(); auto prefix = db_build_dentry_prefix(inode); auto dentry_iter = db->NewIterator(rocksdb::ReadOptions()); for (dentry_iter->Seek(prefix); dentry_iter->Valid() && dentry_iter->key().starts_with(prefix); dentry_iter->Next()) { Loading Loading
lfs/CMakeLists.txt +6 −2 Original line number Diff line number Diff line Loading @@ -31,11 +31,15 @@ set(SOURCE_FILES src/main.cpp src/main.hpp src/fuse_ops.hpp src/configure.hpp src/classes/metadata.h src/classes/metadata.cpp src/classes/fs_data.h src/classes/fs_data.cpp src/classes/dentry.h src/classes/dentry.cpp src/adafs_ops/mdata_ops.hpp src/adafs_ops/dentry_ops.hpp src/adafs_ops/access.hpp src/adafs_ops/db_ops.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/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/adafs_ops/db_ops.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 ) add_executable(adafs ${SOURCE_FILES} src/main.cpp) Loading
lfs/src/adafs_ops/dentry_ops.cpp +4 −5 Original line number Diff line number Diff line Loading @@ -3,7 +3,8 @@ // #include "dentry_ops.hpp" #include "db_ops.hpp" #include "../db/db_ops.hpp" #include "../db/util.hpp" using namespace std; Loading Loading @@ -120,11 +121,9 @@ pair<int, fuse_ino_t> do_lookup(fuse_req_t& req, const fuse_ino_t p_inode, const * @return */ int create_dentry(const fuse_ino_t p_inode, const fuse_ino_t inode, const string& name, mode_t mode) { auto key = "d_"s + fmt::FormatInt(p_inode).str() + "_"s + name; auto val = fmt::FormatInt(inode).str() + "_"s + fmt::FormatInt(mode).str(); // XXX check later if we need to check if dentry of father already exists return db_put_dentry(key, val); // put dentry for key, value return db_put_dentry(db_build_dentry_key(p_inode, name), db_build_dentry_value(inode, mode)); } /** Loading
lfs/src/adafs_ops/mdata_ops.cpp +40 −30 Original line number Diff line number Diff line Loading @@ -5,21 +5,24 @@ #include "mdata_ops.hpp" #include "dentry_ops.hpp" using namespace std; // TODO error handling. int write_all_metadata(const Metadata& md, const fuse_ino_t inode) { auto inode_key = fmt::FormatInt(inode).str(); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::atime)>(md_field_map), md.atime()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::mtime)>(md_field_map), md.mtime()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::ctime)>(md_field_map), md.ctime()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::uid)>(md_field_map), md.uid()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::gid)>(md_field_map), md.gid()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::mode)>(md_field_map), md.mode()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::inode_no)>(md_field_map), md.inode_no()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::link_count)>(md_field_map), md.link_count()); db_put_mdata(inode_key + std::get<to_underlying(Md_fields::size)>(md_field_map), md.size()); db_put_mdata(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; } Loading @@ -27,16 +30,23 @@ int write_all_metadata(const Metadata& md, const fuse_ino_t inode) { int read_all_metadata(Metadata& md, const fuse_ino_t inode) { auto inode_key = fmt::FormatInt(inode).str(); md.atime(db_get_mdata<time_t>(inode_key + std::get<to_underlying(Md_fields::atime)>(md_field_map))); md.mtime(db_get_mdata<time_t>(inode_key + std::get<to_underlying(Md_fields::mtime)>(md_field_map))); md.ctime(db_get_mdata<time_t>(inode_key + std::get<to_underlying(Md_fields::ctime)>(md_field_map))); md.uid(db_get_mdata<uid_t>(inode_key + std::get<to_underlying(Md_fields::uid)>(md_field_map))); md.gid(db_get_mdata<gid_t>(inode_key + std::get<to_underlying(Md_fields::gid)>(md_field_map))); md.mode(db_get_mdata<mode_t>(inode_key + std::get<to_underlying(Md_fields::mode)>(md_field_map))); md.inode_no(db_get_mdata<fuse_ino_t>(inode_key + std::get<to_underlying(Md_fields::inode_no)>(md_field_map))); md.link_count(db_get_mdata<nlink_t>(inode_key + std::get<to_underlying(Md_fields::link_count)>(md_field_map))); md.size(db_get_mdata<off_t>(inode_key + std::get<to_underlying(Md_fields::size)>(md_field_map))); md.blocks(db_get_mdata<blkcnt_t>(inode_key + std::get<to_underlying(Md_fields::blocks)>(md_field_map))); md.atime(db_get_mdata<time_t>( db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::atime)>(md_field_map)))); md.mtime(db_get_mdata<time_t>( 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.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.blocks(db_get_mdata<blkcnt_t>( db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::blocks)>(md_field_map)))); return 0; } Loading @@ -49,16 +59,16 @@ int read_all_metadata(Metadata& md, const fuse_ino_t inode) { int remove_all_metadata(const fuse_ino_t inode) { // TODO error handling auto inode_key = fmt::FormatInt(inode).str(); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::atime)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::mtime)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::ctime)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::uid)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::gid)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::mode)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::inode_no)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::link_count)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::size)>(md_field_map)); db_delete_mdata(inode_key + std::get<to_underlying(Md_fields::blocks)>(md_field_map)); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::atime)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::mtime)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::ctime)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::uid)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::gid)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::mode)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::inode_no)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::link_count)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::size)>(md_field_map))); db_delete_mdata(db_build_mdata_key(inode_key, std::get<to_underlying(Md_fields::blocks)>(md_field_map))); return 0; } Loading
lfs/src/adafs_ops/mdata_ops.hpp +13 −12 Original line number Diff line number Diff line Loading @@ -7,21 +7,22 @@ #include "../main.hpp" #include "../classes/metadata.h" #include "db_ops.hpp" #include "../db/db_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 file names 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 }; //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); Loading
lfs/src/adafs_ops/db_ops.cpp→lfs/src/db/db_ops.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ // #include "db_ops.hpp" #include "mdata_ops.hpp" #include "../adafs_ops/mdata_ops.hpp" using namespace rocksdb; Loading Loading @@ -38,7 +38,7 @@ bool db_delete_mdata(const string& key) { bool db_dentry_exists(const fuse_ino_t p_inode, const string& name, string& val) { auto db = ADAFS_DATA->rdb(); auto key = "d_"s + fmt::FormatInt(p_inode).str() + "_"s + name; auto key = db_build_dentry_key(p_inode, name); return db->Get(rocksdb::ReadOptions(), key, &val).ok(); } Loading @@ -46,7 +46,7 @@ bool db_mdata_exists(const fuse_ino_t inode) { auto db = ADAFS_DATA->rdb(); string val_str; return db->Get(ReadOptions(), fmt::FormatInt(inode).str() + std::get<to_underlying(Md_fields::atime)>(md_field_map), db_build_mdata_key(inode, std::get<to_underlying(Md_fields::atime)>(md_field_map)), &val_str).ok(); } Loading @@ -61,7 +61,7 @@ void db_get_dentries(vector<Dentry>& dentries, const fuse_ino_t dir_inode) { size_t pos; auto delim = "_"s; auto db = ADAFS_DATA->rdb(); auto prefix = "d_"s + fmt::FormatInt(dir_inode).str(); auto prefix = db_build_dentry_prefix(dir_inode); // Do RangeScan on parent inode auto dentry_iter = db->NewIterator(rocksdb::ReadOptions()); for (dentry_iter->Seek(prefix); Loading @@ -88,7 +88,7 @@ void db_get_dentries(vector<Dentry>& dentries, const fuse_ino_t dir_inode) { } pair<bool, fuse_ino_t> db_delete_dentry_get_inode(const fuse_ino_t p_inode, const string& name) { auto key = "d_"s + fmt::FormatInt(p_inode).str() + "_"s + name; auto key = db_build_dentry_key(p_inode, name); auto db = ADAFS_DATA->rdb(); string val; db->Get(ReadOptions(), key, &val); Loading @@ -105,7 +105,7 @@ pair<bool, fuse_ino_t> db_delete_dentry_get_inode(const fuse_ino_t p_inode, cons bool db_is_dir_empty(const fuse_ino_t inode) { auto dir_empty = true; auto db = ADAFS_DATA->rdb(); auto prefix = "d_"s + fmt::FormatInt(inode).str(); auto prefix = db_build_dentry_prefix(inode); auto dentry_iter = db->NewIterator(rocksdb::ReadOptions()); for (dentry_iter->Seek(prefix); dentry_iter->Valid() && dentry_iter->key().starts_with(prefix); dentry_iter->Next()) { Loading