diff options
author | Avra Sengupta <asengupt@redhat.com> | 2012-11-29 14:06:30 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2012-11-29 13:34:32 -0800 |
commit | 9864b3a8e46c2813a5793ce7ac7d3029ed324828 (patch) | |
tree | e2f8feb7cd30031baccdfa07e29041de0b867204 | |
parent | 48d749dda368149a8f05ea5c09cab93f58835d0b (diff) |
debug/error-gen : Added dumpops to print private values of error-gen in the statedump.
Change-Id: I4aa299bd8ecdaa82cdfdc2d97a89fcddcbb25930
BUG: 767095
Signed-off-by: Avra Sengupta <asengupt@redhat.com>
Reviewed-on: http://review.gluster.org/4245
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
-rwxr-xr-x | tests/bugs/bug-767095.t | 51 | ||||
-rw-r--r-- | xlators/debug/error-gen/src/error-gen.c | 38 |
2 files changed, 89 insertions, 0 deletions
diff --git a/tests/bugs/bug-767095.t b/tests/bugs/bug-767095.t new file mode 100755 index 00000000000..a8842bd54b3 --- /dev/null +++ b/tests/bugs/bug-767095.t @@ -0,0 +1,51 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + +## Start and create a volume +TEST glusterd; +TEST pidof glusterd; +TEST $CLI volume info; + +TEST $CLI volume create $V0 replica 2 stripe 2 $H0:$B0/${V0}{1,2,3,4,5,6,7,8}; + +function volinfo_field() +{ + local vol=$1; + local field=$2; + + $CLI volume info $vol | grep "^$field: " | sed 's/.*: //'; +} + +dump_dir='/tmp/gerrit_glusterfs' +TEST mkdir -p $dump_dir; +## Verify volume is is created +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; +TEST $CLI volume set $V0 error-gen posix; +TEST $CLI volume set $V0 server.statedump-path $dump_dir; + +## Start volume and verify +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + +TEST PID=`gluster volume status $V0 | grep patchy1 | awk {'print $5'}`; +TEST kill -USR1 $PID; +sleep 2; +for file_name in $(ls $dump_dir) +do + TEST grep "error-gen.priv" $dump_dir/$file_name; +done + +## Finish up +TEST $CLI volume stop $V0; +EXPECT 'Stopped' volinfo_field $V0 'Status'; + +TEST $CLI volume delete $V0; +TEST ! $CLI volume info $V0; + +TEST rm -rf $dump_dir; + +cleanup; diff --git a/xlators/debug/error-gen/src/error-gen.c b/xlators/debug/error-gen/src/error-gen.c index f6e1efc217e..2194a90ee1f 100644 --- a/xlators/debug/error-gen/src/error-gen.c +++ b/xlators/debug/error-gen/src/error-gen.c @@ -14,6 +14,7 @@ #include "xlator.h" #include "error-gen.h" +#include "statedump.h" sys_error_t error_no_list[] = { [GF_FOP_LOOKUP] = { .error_no_count = 4, @@ -1954,6 +1955,39 @@ error_gen_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, } int32_t +error_gen_priv_dump (xlator_t *this) +{ + char key_prefix[GF_DUMP_MAX_BUF_LEN]; + int ret = -1; + eg_t *conf = NULL; + + if (!this) + goto out; + + conf = this->private; + if (!conf) + goto out; + + ret = TRY_LOCK(&conf->lock); + if (ret != 0) { + return ret; + } + + gf_proc_dump_add_section("xlator.debug.error-gen.%s.priv", this->name); + gf_proc_dump_build_key(key_prefix,"xlator.debug.error-gen","%s.priv", + this->name); + + gf_proc_dump_write("op_count", "%d", conf->op_count); + gf_proc_dump_write("failure_iter_no", "%d", conf->failure_iter_no); + gf_proc_dump_write("error_no", "%s", conf->error_no); + gf_proc_dump_write("random_failure", "%d", conf->random_failure); + + UNLOCK(&conf->lock); +out: + return ret; +} + +int32_t mem_acct_init (xlator_t *this) { int ret = -1; @@ -2093,6 +2127,10 @@ fini (xlator_t *this) return; } +struct xlator_dumpops dumpops = { + .priv = error_gen_priv_dump, +}; + struct xlator_fops cbks = { }; |