Unverified Commit 345cd966 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 7c6b6bbe
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,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);

+6 −5
Original line number Diff line number Diff line
@@ -5,21 +5,22 @@

namespace rpc_send {

ssize_t write(const std::string& path, const void* buf, const bool append_flag, const off64_t in_offset,
                       const size_t write_size, const int64_t updated_metadentry_size);
struct ChunkStat {
    unsigned long chunk_size;
    unsigned long chunk_total;
    unsigned long chunk_free;
};

ssize_t read(const std::string& path, void* buf, const off64_t offset, const size_t read_size);
ssize_t 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);

int trunc_data(const std::string& path, size_t current_size, size_t new_size);
ssize_t read(const fuid_t fuid, void* buf, const off64_t offset, const size_t read_size);

int trunc_data(const fuid_t fuid, size_t current_size, size_t new_size);

ChunkStat chunk_stat();

}


#endif //IFS_PRELOAD_C_DATA_WS_HPP
+1 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ int mk_node(const std::string& path, mode_t mode, fuid_t& fuid);

int stat(const std::string& path, std::string& attr);

int rm_node(const std::string& path, const bool remove_metadentry_only);
int rm_node(const std::string& path, const fuid_t fuid, const bool remove_metadentry_only);

int decr_size(const std::string& path, size_t length);

+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;
};

+7 −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;
};
@@ -27,7 +29,7 @@ class SimpleHashDistributor : public Distributor {
    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 +40,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;
};
Loading