diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-utils.c')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 28 | 
1 files changed, 28 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 817cbbc323e..7198a130775 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -5328,3 +5328,31 @@ glusterd_is_local_brick (xlator_t *this, glusterd_volinfo_t *volinfo,  out:          return local;  } +int +glusterd_validate_volume_id (dict_t *op_dict, glusterd_volinfo_t *volinfo) +{ +        int     ret             = -1; +        char    *volid_str      = NULL; +        uuid_t  vol_uid         = {0, }; + +        ret = dict_get_str (op_dict, "vol-id", &volid_str); +        if (ret) { +                gf_log (THIS->name, GF_LOG_ERROR, "Failed to get volume id"); +                goto out; +        } +        ret = uuid_parse (volid_str, vol_uid); +        if (ret) { +                gf_log (THIS->name, GF_LOG_ERROR, "Failed to parse uuid"); +                goto out; +        } + +        if (uuid_compare (vol_uid, volinfo->volume_id)) { +                gf_log (THIS->name, GF_LOG_ERROR, "Volume ids are different. " +                        "Possibly a split brain among peers."); +                ret = -1; +                goto out; +        } + +out: +        return ret; +}  | 
