Shrink malleability

This MR has as objective implement the shrink action (one or more servers leave the system)

Merge request reports

Loading
+12 −0
Changes for include/client/rpc/forward_malleability.hpp: 12 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@
  SPDX-License-Identifier: LGPL-3.0-or-later
*/

#include <string>

#ifndef GEKKOFS_CLIENT_FORWARD_MALLEABILITY_HPP
#define GEKKOFS_CLIENT_FORWARD_MALLEABILITY_HPP

@@ -50,6 +52,16 @@ forward_expand_status();

int
forward_expand_finalize();

int
forward_shrink_start(int old_server_conf, int new_server_conf,
                     const std::string& new_hosts_file);

int
forward_shrink_status();

int
forward_shrink_finalize();
} // namespace gkfs::malleable::rpc

#endif // GEKKOFS_CLIENT_FORWARD_MALLEABILITY_HPP
+26 −0
Changes for include/client/user_functions.hpp: 26 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -179,6 +179,32 @@ expand_status();
 */
int
expand_finalize();

/**
 * @brief Start a shrinking of the file system
 * @param old_server_conf old number of nodes
 * @param new_server_conf new number of nodes
 * @param new_hosts_file path to hostfile containing only the surviving nodes
 * @return error code
 */
int
shrink_start(int old_server_conf, int new_server_conf,
             const std::string& new_hosts_file);

/**
 * @brief Check for the current status of the shrinking process
 * @return 0 when finished, positive numbers indicate how many daemons
 * are still redistributing data
 */
int
shrink_status();

/**
 * @brief Finalize the shrinking process
 * @return error code
 */
int
shrink_finalize();
} // namespace malleable
} // namespace gkfs

+11 −0
Changes for include/common/rpc/rpc_types_thallium.hpp: 11 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -433,6 +433,17 @@ struct rpc_expand_start_in_t {
    }
};

struct rpc_shrink_start_in_t {
    uint32_t old_server_conf;
    uint32_t new_server_conf;
    std::string new_hosts_file;
    template <class Archive>
    void
    serialize(Archive& ar) {
        ar(old_server_conf, new_server_conf, new_hosts_file);
    }
};

struct rpc_migrate_metadata_in_t {
    std::string key;
    std::string value;
+3 −0
Changes for include/common/common_defs.hpp: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -129,6 +129,9 @@ namespace malleable::rpc::tag {
constexpr auto expand_start = "rpc_srv_expand_start";
constexpr auto expand_status = "rpc_srv_expand_status";
constexpr auto expand_finalize = "rpc_srv_expand_finalize";
constexpr auto shrink_start = "rpc_srv_shrink_start";
constexpr auto shrink_status = "rpc_srv_shrink_status";
constexpr auto shrink_finalize = "rpc_srv_shrink_finalize";
// migrate data uses the write rpc
constexpr auto migrate_metadata = "rpc_srv_migrate_metadata";
} // namespace malleable::rpc::tag
+10 −0
Changes for include/daemon/handler/rpc_defs.hpp: 10 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -143,6 +143,16 @@ rpc_srv_expand_status(const tl::request& req);
void
rpc_srv_expand_finalize(const tl::request& req);

void
rpc_srv_shrink_start(const tl::request& req,
                     const gkfs::rpc::rpc_shrink_start_in_t& in);

void
rpc_srv_shrink_status(const tl::request& req);

void
rpc_srv_shrink_finalize(const tl::request& req);

void
rpc_srv_migrate_metadata(const tl::request& req,
                         const gkfs::rpc::rpc_migrate_metadata_in_t& in);
Loading
Loading