summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cli/src/cli-rpc-ops.c20
-rw-r--r--cli/src/cli-xml-output.c50
-rw-r--r--cli/src/cli.h1
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handler.c50
4 files changed, 112 insertions, 9 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c
index b7e0aedbcbb..aeddd636ed3 100644
--- a/cli/src/cli-rpc-ops.c
+++ b/cli/src/cli-rpc-ops.c
@@ -552,10 +552,11 @@ out:
static int
print_brick_details (dict_t *dict, int volcount, int start_index,
- int end_index, int replica_count, int arbiter_count)
+ int end_index, int replica_count)
{
char key[1024] = {0,};
int index = start_index;
+ int isArbiter = 0;
int ret = -1;
char *brick = NULL;
#ifdef HAVE_BD_XLATOR
@@ -563,12 +564,20 @@ print_brick_details (dict_t *dict, int volcount, int start_index,
#endif
while (index <= end_index) {
+ memset (key, 0, sizeof (key));
snprintf (key, 1024, "volume%d.brick%d", volcount, index);
ret = dict_get_str (dict, key, &brick);
if (ret)
goto out;
+ memset (key, 0, sizeof(key));
+ snprintf (key, sizeof (key), "volume%d.brick%d.isArbiter",
+ volcount, index);
+ if (dict_get (dict, key))
+ isArbiter = 1;
+ else
+ isArbiter = 0;
- if (arbiter_count && index % replica_count == 0)
+ if (isArbiter)
cli_out ("Brick%d: %s (arbiter)", index, brick);
else
cli_out ("Brick%d: %s", index, brick);
@@ -726,7 +735,7 @@ gf_cli_print_tier_info (dict_t *dict, int i, int brick_count)
hot_replica_count, 0, 0, 0);
ret = print_brick_details (dict, i, 1, hot_brick_count,
- hot_replica_count, 0);
+ hot_replica_count);
if (ret)
goto out;
@@ -745,8 +754,7 @@ gf_cli_print_tier_info (dict_t *dict, int i, int brick_count)
cold_disperse_count, cold_redundancy_count, cold_arbiter_count);
ret = print_brick_details (dict, i, hot_brick_count+1,
- brick_count, cold_replica_count,
- cold_arbiter_count);
+ brick_count, cold_replica_count);
if (ret)
goto out;
out:
@@ -1015,7 +1023,7 @@ next:
} else {
cli_out ("Bricks:");
ret = print_brick_details (dict, i, j, brick_count,
- replica_count, arbiter_count);
+ replica_count);
if (ret)
goto out;
}
diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c
index 7140f803071..f7ae0578b15 100644
--- a/cli/src/cli-xml-output.c
+++ b/cli/src/cli-xml-output.c
@@ -2551,6 +2551,8 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)
int dist_count = 0;
int stripe_count = 0;
int replica_count = 0;
+ int arbiter_count = 0;
+ int isArbiter = 0;
int disperse_count = 0;
int redundancy_count = 0;
int transport = 0;
@@ -2561,6 +2563,7 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)
char *caps = NULL;
int k __attribute__((unused)) = 0;
int index = 1;
+ int start_index = 1;
int vol_type = -1;
int tier_vol_type = 0;
/*hot disperse count, redundancy count and dist count are always
@@ -2569,17 +2572,18 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)
int hot_dist_count = 0;
int hot_redundancy_count = 0;
values c = 0;
- char *keys[30] = {
+ char *keys[MAX] = {
[COLD_BRICK_COUNT] = "volume%d.cold_brick_count",
[COLD_TYPE] = "volume%d.cold_type",
[COLD_DIST_COUNT] = "volume%d.cold_dist_count",
[COLD_REPLICA_COUNT] = "volume%d.cold_replica_count",
+ [COLD_ARBITER_COUNT] = "volume%d.cold_arbiter_count",
[COLD_DISPERSE_COUNT] = "volume%d.cold_disperse_count",
[COLD_REDUNDANCY_COUNT] = "volume%d.cold_redundancy_count",
[HOT_BRICK_COUNT] = "volume%d.hot_brick_count",
[HOT_TYPE] = "volume%d.hot_type",
[HOT_REPLICA_COUNT] = "volume%d.hot_replica_count"};
- int value[9] = {};
+ int value[MAX] = {};
ret = dict_get_int32 (dict, "count", &count);
@@ -2668,6 +2672,16 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)
XML_RET_CHECK_AND_GOTO (ret, out);
memset (key, 0, sizeof (key));
+ snprintf (key, sizeof (key), "volume%d.arbiter_count", i);
+ ret = dict_get_int32 (dict, key, &arbiter_count);
+ if (ret)
+ goto out;
+ ret = xmlTextWriterWriteFormatElement (local->writer,
+ (xmlChar *)"arbiterCount",
+ "%d", arbiter_count);
+ XML_RET_CHECK_AND_GOTO (ret, out);
+
+ memset (key, 0, sizeof (key));
snprintf (key, sizeof (key), "volume%d.disperse_count", i);
ret = dict_get_int32 (dict, key, &disperse_count);
if (ret)
@@ -2910,6 +2924,11 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)
XML_RET_CHECK_AND_GOTO (ret, out);
ret = xmlTextWriterWriteFormatElement (local->writer,
+ (xmlChar *)"coldarbiterCount",
+ "%d", value[COLD_ARBITER_COUNT]);
+ XML_RET_CHECK_AND_GOTO (ret, out);
+
+ ret = xmlTextWriterWriteFormatElement (local->writer,
(xmlChar *)"coldbrickCount",
"%d",
value[COLD_BRICK_COUNT]);
@@ -2952,7 +2971,7 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)
value[COLD_BRICK_COUNT]);
}
- index = value[HOT_BRICK_COUNT] + 1;
+ start_index = index = value[HOT_BRICK_COUNT] + 1;
while (index <= brick_count) {
snprintf (key, 1024, "volume%d.brick%d", i,
@@ -2990,6 +3009,19 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)
"%s", uuid);
XML_RET_CHECK_AND_GOTO (ret, out);
+ memset (key, 0, sizeof (key));
+ snprintf (key, sizeof (key),
+ "volume%d.brick%d.isArbiter", i,
+ index);
+ if (dict_get (dict, key))
+ isArbiter = 1;
+ else
+ isArbiter = 0;
+ ret = xmlTextWriterWriteFormatElement
+ (local->writer, (xmlChar *)"isArbiter",
+ "%d", isArbiter);
+ XML_RET_CHECK_AND_GOTO (ret, out);
+
ret = xmlTextWriterEndElement (local->writer);
XML_RET_CHECK_AND_GOTO (ret, out);
@@ -3035,6 +3067,18 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)
"%s", uuid);
XML_RET_CHECK_AND_GOTO (ret, out);
+ memset (key, 0, sizeof (key));
+ snprintf (key, sizeof (key),
+ "volume%d.brick%d.isArbiter", i, j);
+ if (dict_get (dict, key))
+ isArbiter = 1;
+ else
+ isArbiter = 0;
+ ret = xmlTextWriterWriteFormatElement
+ (local->writer, (xmlChar *)"isArbiter",
+ "%d", isArbiter);
+ XML_RET_CHECK_AND_GOTO (ret, out);
+
/* </brick> */
ret = xmlTextWriterEndElement (local->writer);
XML_RET_CHECK_AND_GOTO (ret, out);
diff --git a/cli/src/cli.h b/cli/src/cli.h
index 1f5704fd25a..17fe1223af0 100644
--- a/cli/src/cli.h
+++ b/cli/src/cli.h
@@ -52,6 +52,7 @@ typedef enum {
COLD_TYPE,
COLD_DIST_COUNT,
COLD_REPLICA_COUNT,
+ COLD_ARBITER_COUNT,
COLD_DISPERSE_COUNT,
COLD_REDUNDANCY_COUNT,
HOT_BRICK_COUNT,
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
index 1e7affd51a1..0d9e60dba1c 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
@@ -409,6 +409,53 @@ out:
}
int
+glusterd_add_arbiter_info_to_bricks (glusterd_volinfo_t *volinfo,
+ dict_t *volumes, int count)
+{
+ char key[256] = {0, };
+ int i = 0;
+ int start_index = 0;
+ int ret = 0;
+
+ if (volinfo->type == GF_CLUSTER_TYPE_TIER) {
+ /*TODO: Add info for hot tier once attach tier of arbiter
+ * volumes is supported. */
+
+ /* cold tier */
+ if (volinfo->tier_info.cold_replica_count == 1 ||
+ volinfo->arbiter_count != 1)
+ return 0;
+
+ i = start_index = volinfo->tier_info.hot_brick_count + 1;
+ for (; i <= volinfo->brick_count; i++) {
+ if ((i - start_index + 1) %
+ volinfo->tier_info.cold_replica_count != 0)
+ continue;
+ memset (key, 0, sizeof (key));
+ snprintf (key, 256, "volume%d.brick%d.isArbiter",
+ count, i);
+ ret = dict_set_int32 (volumes, key, 1);
+ if (ret)
+ return ret;
+ }
+ } else {
+ if (volinfo->replica_count == 1 || volinfo->arbiter_count != 1)
+ return 0;
+ for (i = 1; i <= volinfo->brick_count; i++) {
+ if (i % volinfo->replica_count != 0)
+ continue;
+ memset (key, 0, sizeof (key));
+ snprintf (key, 256, "volume%d.brick%d.isArbiter",
+ count, i);
+ ret = dict_set_int32 (volumes, key, 1);
+ if (ret)
+ return ret;
+ }
+ }
+ return 0;
+}
+
+int
glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo,
dict_t *volumes, int count)
{
@@ -629,6 +676,9 @@ glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo,
#endif
i++;
}
+ ret = glusterd_add_arbiter_info_to_bricks (volinfo, volumes, count);
+ if (ret)
+ goto out;
dict = volinfo->dict;
if (!dict) {