diff options
-rw-r--r-- | tests/bugs/bug-1075087.t | 33 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.c | 10 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.h | 1 |
3 files changed, 44 insertions, 0 deletions
diff --git a/tests/bugs/bug-1075087.t b/tests/bugs/bug-1075087.t new file mode 100644 index 00000000000..89aab028de6 --- /dev/null +++ b/tests/bugs/bug-1075087.t @@ -0,0 +1,33 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd + +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}0 $H0:$B0/${V0}1 \ + $H0:$B0/${V0}2 $H0:$B0/${V0}3 +TEST $CLI volume start $V0 + +## Mount FUSE +TEST glusterfs -s $H0 --volfile-id=$V0 $M0; + +TEST mkdir $M0/dir{1..10}; +TEST touch $M0/dir{1..10}/files{1..10}; + +TEST $CLI volume add-brick $V0 $H0:$B0/${V0}4 $H0:/$B0/${V0}5 + +TEST $CLI volume rebalance $V0 start force +EXPECT_WITHIN 60 "completed" rebalance_status_field $V0 + +TEST pkill gluster +TEST glusterd +TEST pidof glusterd + +# status should be "completed" immediate after glusterd has respawned. +EXPECT_WITHIN 5 "completed" rebalance_status_field $V0 + +cleanup; diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index c5fdc805bb1..98fc8b592e3 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -1136,6 +1136,13 @@ glusterd_store_node_state_write (int fd, glusterd_volinfo_t *volinfo) if (ret) goto out; + snprintf (buf, sizeof (buf), "%d", volinfo->rebal.defrag_status); + ret = gf_store_save_value (fd, GLUSTERD_STORE_KEY_VOL_DEFRAG_STATUS, + buf); + if (ret) + goto out; + + snprintf (buf, sizeof (buf), "%d", volinfo->rebal.op); ret = gf_store_save_value (fd, GLUSTERD_STORE_KEY_DEFRAG_OP, buf); if (ret) @@ -2281,6 +2288,9 @@ glusterd_store_retrieve_node_state (glusterd_volinfo_t *volinfo) if (!strncmp (key, GLUSTERD_STORE_KEY_VOL_DEFRAG, strlen (GLUSTERD_STORE_KEY_VOL_DEFRAG))) { volinfo->rebal.defrag_cmd = atoi (value); + } else if (!strncmp (key, GLUSTERD_STORE_KEY_VOL_DEFRAG_STATUS, + strlen (GLUSTERD_STORE_KEY_VOL_DEFRAG_STATUS))) { + volinfo->rebal.defrag_status = atoi (value); } else if (!strncmp (key, GF_REBALANCE_TID_KEY, strlen (GF_REBALANCE_TID_KEY))) { uuid_parse (value, volinfo->rebal.rebalance_id); diff --git a/xlators/mgmt/glusterd/src/glusterd-store.h b/xlators/mgmt/glusterd/src/glusterd-store.h index 01973bb7ae6..dd5c6ec0dd7 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.h +++ b/xlators/mgmt/glusterd/src/glusterd-store.h @@ -54,6 +54,7 @@ typedef enum glusterd_store_ver_ac_{ #define GLUSTERD_STORE_KEY_RB_DST_BRICK "rb_dst" #define GLUSTERD_STORE_KEY_RB_DST_PORT "rb_port" #define GLUSTERD_STORE_KEY_VOL_DEFRAG "rebalance_status" +#define GLUSTERD_STORE_KEY_VOL_DEFRAG_STATUS "status" #define GLUSTERD_STORE_KEY_DEFRAG_OP "rebalance_op" #define GLUSTERD_STORE_KEY_USERNAME "username" #define GLUSTERD_STORE_KEY_PASSWORD "password" |