Verified Commit 8d17b247 authored by Marc Vef's avatar Marc Vef
Browse files

Daemon: Adding append support

parent d3d9f170
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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)))
+4 −4
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ namespace gkfs::metadata {
constexpr auto rocksdb_backend = "rocksdb";
constexpr auto parallax_backend = "parallaxdb";


class MetadataDB {
private:
    std::string path_;
@@ -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
+34 −10
Original line number Diff line number Diff line
@@ -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>

@@ -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);

@@ -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);
@@ -100,6 +119,11 @@ public:

    std::string
    serialize_params() const override;

    size_t
    size() const {
        return size_;
    }
};

class CreateOperand : public MergeOperand {
+8 −5
Original line number Diff line number Diff line
@@ -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;
@@ -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