Verified Commit 1deddf34 authored by Tommaso Tocci's avatar Tommaso Tocci
Browse files

Use file ID instead of path on data operations

 - ChunkStorage now use file ID to organize chunks and locate them
 - all the data rpc now accepts the file ID instead of the file path
parent 26e015da
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
#ifndef IFS_CHUNK_STORAGE_HPP
#define IFS_CHUNK_STORAGE_HPP

#include "global/global_defs.hpp"

#include <abt.h>
#include <limits.h>
#include <string>
@@ -27,23 +29,23 @@ class ChunkStorage {
        std::string root_path;
        size_t chunksize;
        inline std::string absolute(const std::string& internal_path) const;
        static inline std::string get_chunks_dir(const std::string& file_path);
        static inline std::string get_chunk_path(const std::string& file_path, unsigned int chunk_id);
        void init_chunk_space(const std::string& file_path) const;
        static inline std::string get_chunks_dir(const fuid_t fuid);
        static inline std::string get_chunk_path(const fuid_t fuid, unsigned int chunk_id);
        void init_chunk_space(const fuid_t fuid) const;

    public:
        ChunkStorage(const std::string& path, const size_t chunksize);
        void write_chunk(const std::string& file_path, unsigned int chunk_id,
        void write_chunk(const fuid_t fuid, unsigned int chunk_id,
                         const char * buff, size_t size, off64_t offset,
                         ABT_eventual& eventual) const;
        void read_chunk(const std::string& file_path, unsigned int chunk_id,
        void read_chunk(const fuid_t fuid, unsigned int chunk_id,
                         char * buff, size_t size, off64_t offset,
                         ABT_eventual& eventual) const;
        void trim_chunk_space(const std::string& file_path, unsigned int chunk_start,
        void trim_chunk_space(const fuid_t fuid, unsigned int chunk_start,
                unsigned int chunk_end = UINT_MAX);
        void delete_chunk(const std::string& file_path, unsigned int chunk_id);
        void truncate_chunk(const std::string& file_path, unsigned int chunk_id, off_t length);
        void destroy_chunk_space(const std::string& file_path) const;
        void delete_chunk(const fuid_t fuid, unsigned int chunk_id);
        void truncate_chunk(const fuid_t fuid, unsigned int chunk_id, off_t length);
        void destroy_chunk_space(const fuid_t fuid) const;
        ChunkStat chunk_stat() const;
};

+8 −5
Original line number Diff line number Diff line
#ifndef IFS_RPC_DISTRIBUTOR_HPP
#define IFS_RPC_DISTRIBUTOR_HPP

#include "global/global_defs.hpp"

#include <vector>
#include <string>
#include <numeric>


using ChunkID = unsigned int;
using Host = unsigned int;
using ChunkID = unsigned long;
using Host = unsigned long;

class Distributor {
    public:
        virtual Host localhost() const = 0;
        virtual Host locate_data(const std::string& path, const ChunkID& chnk_id) const = 0;
        virtual Host locate_data(const fuid_t fuid, const ChunkID chnk_id) const = 0;
        virtual Host locate_file_metadata(const std::string& path) const = 0;
        virtual std::vector<Host> locate_directory_metadata(const std::string& path) const = 0;
};
@@ -24,10 +26,11 @@ class SimpleHashDistributor : public Distributor {
        unsigned int hosts_size_;
        std::vector<Host> all_hosts_;
        std::hash<std::string> str_hash;
        std::hash<unsigned long> ul_hash;
    public:
        SimpleHashDistributor(Host localhost, unsigned int hosts_size);
        Host localhost() const override;
        Host locate_data(const std::string& path, const ChunkID& chnk_id) const override;
        Host locate_data(const fuid_t fuid, const ChunkID chnk_id) const override;
        Host locate_file_metadata(const std::string& path) const override;
        std::vector<Host> locate_directory_metadata(const std::string& path) const override;
};
@@ -38,7 +41,7 @@ class LocalOnlyDistributor : public Distributor {
    public:
        LocalOnlyDistributor(Host localhost);
        Host localhost() const override;
        Host locate_data(const std::string& path, const ChunkID& chnk_id) const override;
        Host locate_data(const fuid_t fuid, const ChunkID chnk_id) const override;
        Host locate_file_metadata(const std::string& path) const override;
        std::vector<Host> locate_directory_metadata(const std::string& path) const override;
};
+20 −17
Original line number Diff line number Diff line
@@ -35,9 +35,12 @@ MERCURY_GEN_PROC(rpc_path_only_in_t, ((hg_const_string_t) (path)))
MERCURY_GEN_PROC(rpc_stat_out_t, ((hg_int32_t) (err))
        ((hg_const_string_t) (db_val)))

MERCURY_GEN_PROC(rpc_rm_node_in_t, ((hg_const_string_t) (path)))
MERCURY_GEN_PROC(rpc_rm_node_in_t,
        ((hg_uint64_t) (fuid))\
        ((hg_const_string_t) (path)))

MERCURY_GEN_PROC(rpc_trunc_in_t,
        ((hg_uint64_t) (fuid))\
        ((hg_const_string_t) (path)) \
        ((hg_uint64_t)       (length)))

@@ -75,7 +78,7 @@ MERCURY_GEN_PROC(rpc_get_metadentry_size_out_t, ((hg_int32_t) (err))

// data
MERCURY_GEN_PROC(rpc_read_data_in_t,
                 ((hg_const_string_t) (path))\
        ((hg_uint64_t) (fuid))\
        ((int64_t) (offset))\
        ((hg_uint64_t) (chunk_n))\
        ((hg_uint64_t) (chunk_start))\
@@ -88,7 +91,7 @@ MERCURY_GEN_PROC(rpc_data_out_t,
((hg_size_t) (io_size)))

MERCURY_GEN_PROC(rpc_write_data_in_t,
                 ((hg_const_string_t) (path))\
        ((hg_uint64_t) (fuid))\
        ((int64_t) (offset))\
        ((hg_uint64_t) (chunk_n))\
        ((hg_uint64_t) (chunk_start))\
+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ off64_t adafs_lseek(std::shared_ptr<OpenFile> adafs_fd, off64_t offset, int when

int adafs_truncate(const std::string& path, off_t offset);

int adafs_truncate(const std::string& path, off_t old_size, off_t new_size);
int adafs_truncate(const std::string& path, const fuid_t fuid, off_t old_size, off_t new_size);

int adafs_dup(int oldfd);

+3 −3
Original line number Diff line number Diff line
@@ -22,12 +22,12 @@ struct ChunkStat {
};


ssize_t rpc_send_write(const std::string& path, const void* buf, const bool append_flag, const off64_t in_offset,
ssize_t rpc_send_write(const fuid_t fuid, const void* buf, const bool append_flag, const off64_t in_offset,
                       const size_t write_size, const int64_t updated_metadentry_size);

ssize_t rpc_send_read(const std::string& path, void* buf, const off64_t offset, const size_t read_size);
ssize_t rpc_send_read(const fuid_t fuid, void* buf, const off64_t offset, const size_t read_size);

int rpc_send_trunc_data(const std::string& path, size_t current_size, size_t new_size);
int rpc_send_trunc_data(const fuid_t fuid, size_t current_size, size_t new_size);

ChunkStat rpc_get_chunk_stat();

Loading