Commit 778ac4c7 authored by Ramon Nou's avatar Ramon Nou
Browse files

Fix replica metadata stat failover

parent e7f8c0c8
Loading
Loading
Loading
Loading
Loading
+7 −1
Changes for src/client/rpc/forward_metadata.cpp: 7 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -293,9 +293,15 @@ replicated_forward_stat(const std::string& path, string& attr,
    in.include_inline = include_inline;

    try {
        auto out = gkfs::rpc::forward_call<gkfs::rpc::rpc_stat_out_t>(
        gkfs::rpc::rpc_stat_out_t out;
        if(CTX->get_replicas() > 0 && CTX->rpc_timeout().count() == 0) {
            auto stat_rpc = CTX->rpc_engine()->define(gkfs::rpc::tag::stat);
            out = stat_rpc.on(endp).timed(std::chrono::milliseconds(100), in);
        } else {
            out = gkfs::rpc::forward_call<gkfs::rpc::rpc_stat_out_t>(
                    CTX->rpc_engine(), endp, gkfs::rpc::tag::stat, in, __func__,
                    path);
        }

        if(out.err == 0) {
            CTX->mark_host_success(target.host);
+12 −8
Changes for src/client/rpc/metadata_forwarder.cpp: 12 added lines, 8 removed lines.
Original line number Diff line number Diff line
@@ -6,7 +6,8 @@ namespace gkfs::rpc {

int
forward_create(const std::string& p, mode_t m, int c) {
    return CTX->get_replicas() == 0 ? primary_forward_create(p, m, c)
    return CTX->get_replicas() == 0 && c == 0
                   ? primary_forward_create(p, m, c)
                   : replicated_forward_create(p, m, c);
}

@@ -20,7 +21,7 @@ forward_batch_create(uint64_t h, const std::vector<std::string>& p,
int
forward_create_write_inline(const std::string& p, mode_t m,
                            const std::string& d, uint64_t c, int copy) {
    return CTX->get_replicas() == 0
    return CTX->get_replicas() == 0 && copy == 0
                   ? primary_forward_create_write_inline(p, m, d, c, copy)
                   : replicated_forward_create_write_inline(p, m, d, c, copy);
}
@@ -28,7 +29,8 @@ forward_create_write_inline(const std::string& p, mode_t m,
int
forward_stat(const std::string& p, std::string& a, std::string& i, int c,
             bool in) {
    return CTX->get_replicas() == 0 ? primary_forward_stat(p, a, i, c, in)
    return CTX->get_replicas() == 0 && c == 0
                   ? primary_forward_stat(p, a, i, c, in)
                   : replicated_forward_stat(p, a, i, c, in);
}

@@ -41,21 +43,23 @@ forward_rename(const std::string& o, const std::string& n,

int
forward_remove(const std::string& p, bool d, int8_t c, int64_t s) {
    return CTX->get_replicas() == 0 ? primary_forward_remove(p, d, c, s)
    return CTX->get_replicas() == 0 && c == 0
                   ? primary_forward_remove(p, d, c, s)
                   : replicated_forward_remove(p, d, c, s);
}

int
forward_remove(const std::string& p, bool d, int8_t c, int64_t& s, uint32_t& m,
               std::string& t, bool r) {
    return CTX->get_replicas() == 0
    return CTX->get_replicas() == 0 && c == 0
                   ? primary_forward_remove(p, d, c, s, m, t, r)
                   : replicated_forward_remove(p, d, c, s, m, t, r);
}

int
forward_decr_size(const std::string& p, size_t l, int c) {
    return CTX->get_replicas() == 0 ? primary_forward_decr_size(p, l, c)
    return CTX->get_replicas() == 0 && c == 0
                   ? primary_forward_decr_size(p, l, c)
                   : replicated_forward_decr_size(p, l, c);
}

@@ -64,7 +68,7 @@ forward_update_metadentry(const std::string& p,
                          const gkfs::metadata::Metadata& m,
                          const gkfs::metadata::MetadentryUpdateFlags& f,
                          int c) {
    return CTX->get_replicas() == 0
    return CTX->get_replicas() == 0 && c == 0
                   ? primary_forward_update_metadentry(p, m, f, c)
                   : replicated_forward_update_metadentry(p, m, f, c);
}
@@ -98,7 +102,7 @@ forward_read_inline(const std::string& p, void* b, off64_t o, size_t s, int c) {

std::pair<int, off64_t>
forward_get_metadentry_size(const std::string& p, int c) {
    return CTX->get_replicas() == 0
    return CTX->get_replicas() == 0 && c == 0
                   ? primary_forward_get_metadentry_size(p, c)
                   : replicated_forward_get_metadentry_size(p, c);
}