From 08c87ae4208b73f4f183f7b54ebcb373e8bc0ede Mon Sep 17 00:00:00 2001 From: Vishal Pandey Date: Wed, 24 Apr 2019 13:37:16 +0530 Subject: glusterd/thin-arbiter: Thin-arbiter integration with GD1 gluster volume create replica 2 thin-arbiter 1 : : : [force] The changes have been made in a way that the last brick in the bricks list will be treated as the thin-arbiter. GD1 will be manipulated to consider replica count to be as 2 and continue creating the volume like any other replica 2 volume but since thin-arbiter volumes need ta-brick client xlator entries for each subvolume in fuse volfile, volfile generation is modified in a way to inject these entries seperately in the volfile for every subvolume. Few more additions - 1- Save the volinfo with new fields ta_bricks list and thin_arbiter_count. 2- Introduce a new option client.ta-brick-port to add remote-port to ta-brick xlator entry in fuse volfiles. The option can be set using the following CLI syntax - gluster volume set client.ta-brick-port 3- Volume Info will contain a Thin-Arbiter-path entry to distinguish from other replicate volumes. Change-Id: Ib434e2313b29716f32476c6c211d282c4ef39406 Updates #687 Signed-off-by: Vishal Pandey (cherry picked from commit 9b223b15ab69fce4076de036ee162f36a058bcd2) --- cli/src/cli-rpc-ops.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'cli/src/cli-rpc-ops.c') diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 16d5f73983f..35985ab44c6 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -723,10 +723,12 @@ gf_cli_get_volume_cbk(struct rpc_req *req, struct iovec *iov, int count, int32_t redundancy_count = 0; int32_t arbiter_count = 0; int32_t snap_count = 0; + int32_t thin_arbiter_count = 0; int32_t vol_type = 0; int32_t transport = 0; char *volume_id_str = NULL; char *volname = NULL; + char *ta_brick = NULL; dict_t *dict = NULL; cli_local_t *local = NULL; char key[1024] = {0}; @@ -903,6 +905,11 @@ xml_output: if (ret) goto out; + snprintf(key, 256, "volume%d.thin_arbiter_count", i); + ret = dict_get_int32(dict, key, &thin_arbiter_count); + if (ret) + goto out; + // Distributed (stripe/replicate/stripe-replica) setups vol_type = get_vol_type(type, dist_count, brick_count); @@ -929,6 +936,14 @@ xml_output: if (ret) goto out; + if (thin_arbiter_count) { + snprintf(key, 1024, "volume%d.thin_arbiter_brick", i); + ret = dict_get_str(dict, key, &ta_brick); + if (ret) + goto out; + cli_out("Thin-arbiter-path: %s", ta_brick); + } + snprintf(key, 256, "volume%d.opt_count", i); ret = dict_get_int32(dict, key, &opt_count); if (ret) -- cgit