Commit 80a35953 authored by Marc Vef's avatar Marc Vef
Browse files

Merge branch 'atomic_operations' into 'master'



Atomic operations

See merge request zdvresearch_bsc/adafs!52

Signed-off-by: default avatarMarc Vef <vef@uni-mainz.de>
parents b5d85fc6 e1c673b8
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -31,7 +31,9 @@ public:

    void update_ACM_time(bool a, bool c, bool m);

    std::string to_KVentry();
    std::string to_KVentry() const;

    void serialize(std::string& s) const;

    //Getter and Setter
    time_t atime() const;
+3 −0
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@ bool db_is_dir_entry(const std::string& dir_path);

bool db_update_metadentry(const std::string& old_key, const std::string& new_key, const std::string& val);

bool db_update_metadentry_size(const std::string& key,
        size_t size, off64_t offset, bool append);

void db_iterate_all_entries();

#endif //IFS_DB_OPS_HPP
+69 −0
Original line number Diff line number Diff line
#ifndef DB_MERGE_HPP
#define DB_MERGE_HPP


#include "rocksdb/merge_operator.h"
#include <daemon/classes/metadata.hpp>

namespace rdb = rocksdb;

enum class OperandID: char {
    increase_size = 's',
    create = 'c'
};

class MergeOperand {
    public:
        constexpr static char operand_id_suffix = ':';
        std::string serialize() const;
        static OperandID get_id(const rdb::Slice& serialized_op);
        static rdb::Slice get_params(const rdb::Slice& serialized_op);

    protected:
        std::string serialize_id() const;
        virtual std::string serialize_params() const = 0;
        virtual const OperandID id() const = 0;
};

class IncreaseSizeOperand: public MergeOperand {
    public:
        constexpr const static char separator = ',';
        constexpr const static char true_char = 't';
        constexpr const static char false_char = 'f';

        size_t size;
        bool append;

        IncreaseSizeOperand(const size_t size, const bool append);
        IncreaseSizeOperand(const rdb::Slice& serialized_op);

        const OperandID id() const override;
        std::string serialize_params() const override;
};

class CreateOperand: public MergeOperand {
    public:
        std::string metadata;
        CreateOperand(const std::string& metadata);

        const OperandID id() const override;
        std::string serialize_params() const override;
};

class MetadataMergeOperator: public rocksdb::MergeOperator {
    public:
        virtual ~MetadataMergeOperator(){};
        bool FullMergeV2(const MergeOperationInput& merge_in,
                MergeOperationOutput* merge_out) const override;

        bool PartialMergeMulti(const rdb::Slice& key,
                const std::deque<rdb::Slice>& operand_list,
                std::string* new_value, rdb::Logger* logger) const override;

        const char* Name() const override;

        bool AllowSingleOperand() const override;
};


#endif // DB_MERGE_HPP
+1 −1
Original line number Diff line number Diff line
@@ -333,7 +333,7 @@ echo "############################################################ Installing:
CURR=${SOURCE}/rocksdb
cd ${CURR}
make clean
make -j${CORES} static_lib
make USE_RTTI=1 -j${CORES} static_lib
make INSTALL_PATH=${INSTALL} install

echo "Done"
+2 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ set(DAEMON_SRC
    classes/metadata.cpp
    db/db_util.cpp
    db/db_ops.cpp
    db/merge.cpp
    handler/h_metadentry.cpp
    handler/h_data.cpp
    handler/h_preload.cpp
@@ -29,6 +30,7 @@ set(DAEMON_HEADERS
    ../../include/daemon/classes/rpc_data.hpp
    ../../include/daemon/db/db_ops.hpp
    ../../include/daemon/db/db_util.hpp
    ../../include/daemon/db/merge.hpp
    ../../include/daemon/handler/rpc_defs.hpp
    )
add_executable(adafs_daemon ${DAEMON_SRC} ${DAEMON_HEADERS})
Loading