summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvra Sengupta <asengupt@redhat.com>2016-07-27 16:28:44 +0530
committerRajesh Joseph <rjoseph@redhat.com>2016-08-23 00:06:28 -0700
commit1df4a89de17e44c8c1f9b4794a7b8c2741f2bc2e (patch)
treeb3b14bf438c454a11b58e4f5951b684b610b46fd
parent413594ed647400f1b39e05d4f1b12ad846e48800 (diff)
snapshot: Display number of snapshots in volume info
Display number of snapshots in a volume in volume info output. This number gets modified, with create, delete, and restore operations. Change-Id: Ic9b7c2b6950980f8ce75ca362998c097ea7c863d BUG: 1360693 Signed-off-by: Avra Sengupta <asengupt@redhat.com> Reviewed-on: http://review.gluster.org/15029 Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Rajesh Joseph <rjoseph@redhat.com>
-rw-r--r--cli/src/cli-rpc-ops.c7
-rw-r--r--cli/src/cli-xml-output.c12
-rwxr-xr-xtests/basic/volume-snapshot.t20
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handler.c5
4 files changed, 44 insertions, 0 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c
index 3ea918a8cba..0bf03bceaa2 100644
--- a/cli/src/cli-rpc-ops.c
+++ b/cli/src/cli-rpc-ops.c
@@ -780,6 +780,7 @@ gf_cli_get_volume_cbk (struct rpc_req *req, struct iovec *iov,
int32_t disperse_count = 0;
int32_t redundancy_count = 0;
int32_t arbiter_count = 0;
+ int32_t snap_count = 0;
int32_t vol_type = 0;
int32_t transport = 0;
char *volume_id_str = NULL;
@@ -967,6 +968,11 @@ xml_output:
if (ret)
goto out;
+ snprintf (key, 256, "volume%d.snap_count", i);
+ ret = dict_get_int32 (dict, key, &snap_count);
+ if (ret)
+ goto out;
+
vol_type = type;
// Distributed (stripe/replicate/stripe-replica) setups
@@ -978,6 +984,7 @@ xml_output:
cli_out ("Type: %s", cli_vol_type_str[vol_type]);
cli_out ("Volume ID: %s", volume_id_str);
cli_out ("Status: %s", cli_vol_status_str[status]);
+ cli_out ("Snapshot Count: %d", snap_count);
#ifdef HAVE_BD_XLATOR
k = 0;
diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c
index 8ef12b9a3c9..35b739c0f62 100644
--- a/cli/src/cli-xml-output.c
+++ b/cli/src/cli-xml-output.c
@@ -2551,6 +2551,7 @@ cli_xml_output_vol_info (cli_local_t *local, dict_t *dict)
int stripe_count = 0;
int replica_count = 0;
int arbiter_count = 0;
+ int snap_count = 0;
int isArbiter = 0;
int disperse_count = 0;
int redundancy_count = 0;
@@ -2631,6 +2632,17 @@ 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.snap_count", i);
+ ret = dict_get_int32 (dict, key, &snap_count);
+ if (ret)
+ goto out;
+ ret = xmlTextWriterWriteFormatElement (local->writer,
+ (xmlChar *)"snapshotCount",
+ "%d", snap_count);
+ XML_RET_CHECK_AND_GOTO (ret, out);
+
+
+ memset (key, 0, sizeof (key));
snprintf (key, sizeof (key), "volume%d.brick_count", i);
ret = dict_get_int32 (dict, key, &brick_count);
if (ret)
diff --git a/tests/basic/volume-snapshot.t b/tests/basic/volume-snapshot.t
index 794ab4944b0..dd938b4064a 100755
--- a/tests/basic/volume-snapshot.t
+++ b/tests/basic/volume-snapshot.t
@@ -104,6 +104,11 @@ create_snapshots
EXPECT 'Started' snapshot_status ${V0}_snap;
EXPECT 'Started' snapshot_status ${V1}_snap;
+EXPECT '1' volinfo_field $V0 'Snapshot Count';
+EXPECT '1' volinfo_field $V1 'Snapshot Count';
+EXPECT "1" get-cmd-field-xml "volume info $V0" "snapshotCount"
+EXPECT "1" get-cmd-field-xml "volume info $V1" "snapshotCount"
+
deactivate_snapshots
EXPECT 'Stopped' snapshot_status ${V0}_snap;
@@ -132,10 +137,20 @@ create_snapshots_with_timestamp;
new_name1=`$CLI_1 snapshot list ${V0} | grep ${V0}_snap1`;
new_name2=`$CLI_1 snapshot list ${V1} | grep ${V1}_snap1`;
+EXPECT '2' volinfo_field $V0 'Snapshot Count';
+EXPECT '2' volinfo_field $V1 'Snapshot Count';
+EXPECT "2" get-cmd-field-xml "volume info $V0" "snapshotCount"
+EXPECT "2" get-cmd-field-xml "volume info $V1" "snapshotCount"
+
EXPECT_NOT "{V0}_snap1" echo $new_name1;
EXPECT_NOT "{V1}_snap1" echo $new_name1;
delete_snapshots $new_name1 $new_name2;
+EXPECT '1' volinfo_field $V0 'Snapshot Count';
+EXPECT '1' volinfo_field $V1 'Snapshot Count';
+EXPECT "1" get-cmd-field-xml "volume info $V0" "snapshotCount"
+EXPECT "1" get-cmd-field-xml "volume info $V1" "snapshotCount"
+
#Clean up
stop_force_volumes 2
EXPECT 'Stopped' volinfo_field $V0 'Status';
@@ -145,6 +160,11 @@ restore_snapshots
TEST ! snapshot_exists 1 ${V0}_snap
TEST ! snapshot_exists 1 ${V1}_snap
+EXPECT '0' volinfo_field $V0 'Snapshot Count';
+EXPECT '0' volinfo_field $V1 'Snapshot Count';
+EXPECT "0" get-cmd-field-xml "volume info $V0" "snapshotCount"
+EXPECT "0" get-cmd-field-xml "volume info $V1" "snapshotCount"
+
delete_volumes 2
EXPECT_WITHIN $CONFIG_UPDATE_TIMEOUT "N" volume_exists $V0
EXPECT_WITHIN $CONFIG_UPDATE_TIMEOUT "N" volume_exists $V1
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
index 0085dce5d4c..2c03c28168d 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
@@ -558,6 +558,11 @@ glusterd_add_volume_detail_to_dict (glusterd_volinfo_t *volinfo,
if (ret)
goto out;
+ snprintf (key, 256, "volume%d.snap_count", count);
+ ret = dict_set_int32 (volumes, key, volinfo->snap_count);
+ if (ret)
+ goto out;
+
#ifdef HAVE_BD_XLATOR
if (volinfo->caps) {
caps = 0;