Loading include/common/metadata.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,9 @@ namespace gkfs::metadata { constexpr mode_t LINK_MODE = ((S_IRWXU | S_IRWXG | S_IRWXO) | S_IFLNK); uint16_t gen_unique_id(const std::string& path); class Metadata { private: time_t atime_{}; // access time. gets updated on file access unless mounted Loading include/common/rpc/rpc_types.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,7 @@ MERCURY_GEN_PROC(rpc_update_metadentry_size_in_t, (hg_int64_t) (offset))((hg_bool_t) (append))) MERCURY_GEN_PROC(rpc_update_metadentry_size_out_t, ((hg_int32_t) (err))((hg_int64_t) (ret_size))) ((hg_int32_t) (err))((hg_int64_t) (ret_offset))) MERCURY_GEN_PROC(rpc_get_metadentry_size_out_t, ((hg_int32_t) (err))((hg_int64_t) (ret_size))) Loading include/daemon/backend/metadata/db.hpp +4 −4 Original line number Diff line number Diff line Loading @@ -50,7 +50,6 @@ namespace gkfs::metadata { constexpr auto rocksdb_backend = "rocksdb"; constexpr auto parallax_backend = "parallaxdb"; class MetadataDB { private: std::string path_; Loading Loading @@ -121,12 +120,13 @@ public: * @brief Increases only the size part of the metadata entry via a RocksDB * Operand. * @param key KV store key * @param size new size for entry * @param io_size new size for entry * @param append * @throws DBException on failure, NotFoundException if entry doesn't exist */ void increase_size(const std::string& key, size_t size, bool append); off_t increase_size(const std::string& key, size_t io_size, off_t offset, bool append); /** * @brief Decreases only the size part of the metadata entry via a RocksDB Loading include/daemon/backend/metadata/merge.hpp +34 −10 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ #ifndef DB_MERGE_HPP #define DB_MERGE_HPP #include <daemon/backend/metadata/metadata_module.hpp> #include <rocksdb/merge_operator.h> #include <common/metadata.hpp> Loading Loading @@ -68,15 +68,18 @@ protected: }; class IncreaseSizeOperand : public MergeOperand { public: constexpr const static char separator = ','; constexpr const static char true_char = 't'; constexpr const static char false_char = 'f'; private: constexpr const static char serialize_sep = ','; constexpr const static char serialize_end = '\0'; size_t size_; uint16_t merge_id_; bool append_; size_t size; bool append; public: IncreaseSizeOperand(size_t size); IncreaseSizeOperand(size_t size, bool append); IncreaseSizeOperand(size_t size, uint16_t merge_id, bool append); explicit IncreaseSizeOperand(const rdb::Slice& serialized_op); Loading @@ -85,12 +88,28 @@ public: std::string serialize_params() const override; size_t size() const { return size_; } uint16_t merge_id() const { return merge_id_; } bool append() const { return append_; } }; class DecreaseSizeOperand : public MergeOperand { public: size_t size; private: size_t size_; public: explicit DecreaseSizeOperand(size_t size); explicit DecreaseSizeOperand(const rdb::Slice& serialized_op); Loading @@ -100,6 +119,11 @@ public: std::string serialize_params() const override; size_t size() const { return size_; } }; class CreateOperand : public MergeOperand { Loading include/daemon/backend/metadata/metadata_backend.hpp +8 −5 Original line number Diff line number Diff line Loading @@ -60,8 +60,9 @@ public: update(const std::string& old_key, const std::string& new_key, const std::string& val) = 0; virtual void increase_size(const std::string& key, size_t size, bool append) = 0; virtual off_t increase_size(const std::string& key, size_t size, off_t offset, bool append) = 0; virtual void decrease_size(const std::string& key, size_t size) = 0; Loading Loading @@ -114,9 +115,11 @@ public: static_cast<T&>(*this).update_impl(old_key, new_key, val); } void increase_size(const std::string& key, size_t size, bool append) { static_cast<T&>(*this).increase_size_impl(key, size, append); off_t increase_size(const std::string& key, size_t size, off_t offset, bool append) { return static_cast<T&>(*this).increase_size_impl(key, size, offset, append); } void Loading Loading
include/common/metadata.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,9 @@ namespace gkfs::metadata { constexpr mode_t LINK_MODE = ((S_IRWXU | S_IRWXG | S_IRWXO) | S_IFLNK); uint16_t gen_unique_id(const std::string& path); class Metadata { private: time_t atime_{}; // access time. gets updated on file access unless mounted Loading
include/common/rpc/rpc_types.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,7 @@ MERCURY_GEN_PROC(rpc_update_metadentry_size_in_t, (hg_int64_t) (offset))((hg_bool_t) (append))) MERCURY_GEN_PROC(rpc_update_metadentry_size_out_t, ((hg_int32_t) (err))((hg_int64_t) (ret_size))) ((hg_int32_t) (err))((hg_int64_t) (ret_offset))) MERCURY_GEN_PROC(rpc_get_metadentry_size_out_t, ((hg_int32_t) (err))((hg_int64_t) (ret_size))) Loading
include/daemon/backend/metadata/db.hpp +4 −4 Original line number Diff line number Diff line Loading @@ -50,7 +50,6 @@ namespace gkfs::metadata { constexpr auto rocksdb_backend = "rocksdb"; constexpr auto parallax_backend = "parallaxdb"; class MetadataDB { private: std::string path_; Loading Loading @@ -121,12 +120,13 @@ public: * @brief Increases only the size part of the metadata entry via a RocksDB * Operand. * @param key KV store key * @param size new size for entry * @param io_size new size for entry * @param append * @throws DBException on failure, NotFoundException if entry doesn't exist */ void increase_size(const std::string& key, size_t size, bool append); off_t increase_size(const std::string& key, size_t io_size, off_t offset, bool append); /** * @brief Decreases only the size part of the metadata entry via a RocksDB Loading
include/daemon/backend/metadata/merge.hpp +34 −10 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ #ifndef DB_MERGE_HPP #define DB_MERGE_HPP #include <daemon/backend/metadata/metadata_module.hpp> #include <rocksdb/merge_operator.h> #include <common/metadata.hpp> Loading Loading @@ -68,15 +68,18 @@ protected: }; class IncreaseSizeOperand : public MergeOperand { public: constexpr const static char separator = ','; constexpr const static char true_char = 't'; constexpr const static char false_char = 'f'; private: constexpr const static char serialize_sep = ','; constexpr const static char serialize_end = '\0'; size_t size_; uint16_t merge_id_; bool append_; size_t size; bool append; public: IncreaseSizeOperand(size_t size); IncreaseSizeOperand(size_t size, bool append); IncreaseSizeOperand(size_t size, uint16_t merge_id, bool append); explicit IncreaseSizeOperand(const rdb::Slice& serialized_op); Loading @@ -85,12 +88,28 @@ public: std::string serialize_params() const override; size_t size() const { return size_; } uint16_t merge_id() const { return merge_id_; } bool append() const { return append_; } }; class DecreaseSizeOperand : public MergeOperand { public: size_t size; private: size_t size_; public: explicit DecreaseSizeOperand(size_t size); explicit DecreaseSizeOperand(const rdb::Slice& serialized_op); Loading @@ -100,6 +119,11 @@ public: std::string serialize_params() const override; size_t size() const { return size_; } }; class CreateOperand : public MergeOperand { Loading
include/daemon/backend/metadata/metadata_backend.hpp +8 −5 Original line number Diff line number Diff line Loading @@ -60,8 +60,9 @@ public: update(const std::string& old_key, const std::string& new_key, const std::string& val) = 0; virtual void increase_size(const std::string& key, size_t size, bool append) = 0; virtual off_t increase_size(const std::string& key, size_t size, off_t offset, bool append) = 0; virtual void decrease_size(const std::string& key, size_t size) = 0; Loading Loading @@ -114,9 +115,11 @@ public: static_cast<T&>(*this).update_impl(old_key, new_key, val); } void increase_size(const std::string& key, size_t size, bool append) { static_cast<T&>(*this).increase_size_impl(key, size, append); off_t increase_size(const std::string& key, size_t size, off_t offset, bool append) { return static_cast<T&>(*this).increase_size_impl(key, size, offset, append); } void Loading