Commit 1adf54a3 authored by Ramon Nou's avatar Ramon Nou
Browse files

add machine-readable migration status

parent 4983269a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@
*/

#include <string>
#include <utility>
#include <common/rpc/rpc_types_thallium.hpp>

#ifndef GEKKOFS_CLIENT_FORWARD_MALLEABILITY_HPP
#define GEKKOFS_CLIENT_FORWARD_MALLEABILITY_HPP
@@ -51,6 +53,9 @@ forward_mutate_start(int old_server_conf, int new_server_conf,
int
forward_mutate_status();

std::pair<int, gkfs::rpc::rpc_mutate_detailed_status_out_t>
forward_mutate_detailed_status();

int
forward_mutate_finalize();

+21 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@
#include <string>
#include <cstdint>
#include <vector>
#include <utility>


extern "C" {
@@ -156,6 +157,19 @@ gkfs_msync(void* addr, size_t length, int flags);
} // namespace syscall
namespace malleable {

struct MalleabilityStatus {
    uint64_t old_nodes{0};
    uint64_t new_nodes{0};
    uint64_t jobs_total{0};
    uint64_t jobs_completed{0};
    uint64_t jobs_succeeded{0};
    uint64_t jobs_failed{0};
    uint64_t bytes_transferred{0};
    bool running{false};
    bool failed{false};
    std::string hosts_file;
};

/**
 * @brief Start a mutation of the file system cluster topology.
 *
@@ -201,6 +215,13 @@ mutate_start(int old_server_conf, int new_server_conf,
int
mutate_status();

/**
 * @brief Return detailed, machine-readable mutate progress.
 * @return pair of aggregate error code and detailed status payload
 */
std::pair<int, MalleabilityStatus>
mutate_status_detailed();

/**
 * @brief Finalize the mutate process.
 *         Rewrites the workspace hostfile clean (promotes + to active, removes
+1 −0
Original line number Diff line number Diff line
@@ -131,6 +131,7 @@ namespace malleable::rpc::tag {
// Primary mutate RPC tags
constexpr auto mutate_start = "rpc_srv_mutate_start";
constexpr auto mutate_status = "rpc_srv_mutate_status";
constexpr auto mutate_detailed_status = "rpc_srv_mutate_detailed_status";
constexpr auto mutate_finalize = "rpc_srv_mutate_finalize";
constexpr auto mutate_reload = "rpc_srv_mutate_reload";
constexpr auto mutate_shutdown = "rpc_srv_mutate_shutdown";
+22 −0
Original line number Diff line number Diff line
@@ -61,6 +61,28 @@ struct rpc_err_out_t {
    }
};

struct rpc_mutate_detailed_status_out_t {
    int32_t err{0};
    uint64_t old_nodes{0};
    uint64_t new_nodes{0};
    uint64_t jobs_total{0};
    uint64_t jobs_completed{0};
    uint64_t jobs_succeeded{0};
    uint64_t jobs_failed{0};
    uint64_t bytes_transferred{0};
    bool running{false};
    bool failed{false};
    std::string hosts_file;

    template <class Archive>
    void
    serialize(Archive& ar) {
        ar(err, old_nodes, new_nodes, jobs_total, jobs_completed,
           jobs_succeeded, jobs_failed, bytes_transferred, running, failed,
           hosts_file);
    }
};

// Metadentry
struct rpc_mk_node_in_t {
    std::string path;
+35 −0
Original line number Diff line number Diff line
@@ -148,6 +148,11 @@ private:
    // redist_failed_ indicates that the last redistribution did not complete
    // successfully and must not be finalized.
    std::atomic<bool> redist_failed_{false};
    std::atomic<uint64_t> redist_jobs_total_{0};
    std::atomic<uint64_t> redist_jobs_completed_{0};
    std::atomic<uint64_t> redist_jobs_succeeded_{0};
    std::atomic<uint64_t> redist_jobs_failed_{0};
    std::atomic<uint64_t> redist_bytes_transferred_{0};

    bool expand_on_demand_active_ = false;
    unsigned int expand_on_demand_old_hosts_size_ = 0;
@@ -389,6 +394,15 @@ public:
    bool
    mutate_start_active() const;

    int
    mutate_old_server_conf() const;

    int
    mutate_new_server_conf() const;

    std::string
    mutate_hosts_file() const;

    bool
    redist_running() const;

@@ -401,6 +415,27 @@ public:
    void
    redist_failed(bool redist_failed);

    uint64_t
    redist_jobs_total() const;
    void
    redist_jobs_total(uint64_t value);
    uint64_t
    redist_jobs_completed() const;
    void
    redist_jobs_completed(uint64_t value);
    uint64_t
    redist_jobs_succeeded() const;
    void
    redist_jobs_succeeded(uint64_t value);
    uint64_t
    redist_jobs_failed() const;
    void
    redist_jobs_failed(uint64_t value);
    uint64_t
    redist_bytes_transferred() const;
    void
    redist_bytes_transferred(uint64_t value);

    const std::shared_ptr<gkfs::malleable::MalleableManager>&
    malleable_manager() const;

Loading