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; +} |