From f69e85511645fcbd0526e38ca88dd3e5bf0ed917 Mon Sep 17 00:00:00 2001 From: Prashanth Pai Date: Mon, 17 Feb 2014 20:42:42 +0530 Subject: feature/compress: Validate option and enable doc * Validate network.compression option * Enable descriptions of xlator configurable options * Improve indentation in code * Make network.compression.mode not configurable by user. This is similar to "iam-self-heal-daemon" option in AFR xlator. Fixes BUGs: 1065658, 1065640, 1065655 Change-Id: I99d82b574ee0e5c8c2baf5f5d52dbf8d015d330a BUG: 1065640 Signed-off-by: Prashanth Pai Reviewed-on: http://review.gluster.org/7024 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- tests/basic/cdc.t | 8 +-- xlators/features/compress/src/cdc.c | 78 ++++++++++++------------- xlators/mgmt/glusterd/src/glusterd-volgen.c | 15 +++-- xlators/mgmt/glusterd/src/glusterd-volume-set.c | 15 +---- 4 files changed, 55 insertions(+), 61 deletions(-) diff --git a/tests/basic/cdc.t b/tests/basic/cdc.t index 69f39f7d1..70d2171a8 100755 --- a/tests/basic/cdc.t +++ b/tests/basic/cdc.t @@ -21,18 +21,16 @@ EXPECT 'off' volinfo_field $V0 'performance.io-cache' TEST $CLI volume set $V0 performance.quick-read off EXPECT 'off' volinfo_field $V0 'performance.quick-read' -TEST $CLI volume set $V0 strict-write-ordering on +TEST $CLI volume set $V0 performance.strict-write-ordering on EXPECT 'on' volinfo_field $V0 'performance.strict-write-ordering' ## Turn on cdc xlator by setting network.compression to on TEST $CLI volume set $V0 network.compression on EXPECT 'on' volinfo_field $V0 'network.compression' -EXPECT 'server' volinfo_field $V0 'network.compression.mode' ## Make sure that user cannot change network.compression.mode ## This would break the cdc xlator if allowed! -TEST $CLI volume set $V0 network.compression.mode client -EXPECT 'server' volinfo_field $V0 'network.compression.mode' +TEST ! $CLI volume set $V0 network.compression.mode client ## Turn on network.compression.debug option ## This will dump compressed data onto disk as gzip file @@ -44,6 +42,7 @@ EXPECT 'on' volinfo_field $V0 'network.compression.debug' TEST $CLI volume start $V0; EXPECT 'Started' volinfo_field $V0 'Status'; +sleep 2 ## Mount FUSE with caching disabled TEST glusterfs --entry-timeout=0 --attribute-timeout=0 -s $H0 --volfile-id $V0 $M0; @@ -121,7 +120,6 @@ TEST umount $M0 ## Reset the network.compression options TEST $CLI volume reset $V0 network.compression.debug TEST $CLI volume reset $V0 network.compression.min-size -TEST $CLI volume reset $V0 network.compression.mode TEST $CLI volume reset $V0 network.compression ## Stop the volume diff --git a/xlators/features/compress/src/cdc.c b/xlators/features/compress/src/cdc.c index eb7d87c56..a334c7e06 100644 --- a/xlators/features/compress/src/cdc.c +++ b/xlators/features/compress/src/cdc.c @@ -115,8 +115,8 @@ cdc_writev_cbk (call_frame_t *frame, struct iatt *postbuf, dict_t *xdata) { - STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf, postbuf, xdata); - return 0; + STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf, postbuf, xdata); + return 0; } int32_t @@ -129,24 +129,23 @@ cdc_writev (call_frame_t *frame, uint32_t flags, struct iobref *iobref, dict_t *xdata) { - int ret = -1; - cdc_priv_t *priv = NULL; - cdc_info_t ci = {0,}; - size_t isize = 0; + int ret = -1; + cdc_priv_t *priv = NULL; + cdc_info_t ci = {0,}; + size_t isize = 0; - GF_VALIDATE_OR_GOTO ("cdc", this, default_out); - GF_VALIDATE_OR_GOTO (this->name, frame, default_out); + GF_VALIDATE_OR_GOTO ("cdc", this, default_out); + GF_VALIDATE_OR_GOTO (this->name, frame, default_out); - priv = this->private; + priv = this->private; - isize = iov_length(vector, count); + isize = iov_length(vector, count); - if (isize <= 0) - goto default_out; + if (isize <= 0) + goto default_out; - if ( (priv->min_file_size != 0) - && (isize < priv->min_file_size) ) - goto default_out; + if ( (priv->min_file_size != 0) && (isize < priv->min_file_size) ) + goto default_out; ci.count = count; ci.ibytes = isize; @@ -159,18 +158,18 @@ cdc_writev (call_frame_t *frame, /* A writev compresses on the client side and decompresses on the server side */ - if (priv->op_mode == GF_CDC_MODE_CLIENT) { - ret = cdc_compress (this, priv, &ci, &xdata); - } else if (priv->op_mode == GF_CDC_MODE_SERVER) { - ret = cdc_decompress (this, priv, &ci, xdata); - } else { - gf_log (this->name, GF_LOG_ERROR, "Invalid operation mode (%d) ", priv->op_mode); - } - - if (ret) - goto default_out; - - STACK_WIND (frame, + if (priv->op_mode == GF_CDC_MODE_CLIENT) { + ret = cdc_compress (this, priv, &ci, &xdata); + } else if (priv->op_mode == GF_CDC_MODE_SERVER) { + ret = cdc_decompress (this, priv, &ci, xdata); + } else { + gf_log (this->name, GF_LOG_ERROR, "Invalid operation mode (%d) ", priv->op_mode); + } + + if (ret) + goto default_out; + + STACK_WIND (frame, cdc_writev_cbk, FIRST_CHILD (this), FIRST_CHILD (this)->fops->writev, @@ -181,13 +180,13 @@ cdc_writev (call_frame_t *frame, return 0; default_out: - STACK_WIND (frame, + STACK_WIND (frame, cdc_writev_cbk, FIRST_CHILD (this), FIRST_CHILD (this)->fops->writev, fd, vector, count, offset, flags, iobref, xdata); - return 0; + return 0; } int32_t @@ -309,17 +308,17 @@ struct volume_options options[] = { { .key = {"mem-level"}, .default_value = "8", .type = GF_OPTION_TYPE_INT, - .description = "Memory allocated for internal compression state.\ - 1 uses minimum memory but is slow and reduces \ - compression ratio; memLevel=9 uses maximum memory \ - for optimal speed. The default value is 8." + .description = "Memory allocated for internal compression state. " + "1 uses minimum memory but is slow and reduces " + "compression ratio; memLevel=9 uses maximum memory " + "for optimal speed. The default value is 8." }, { .key = {"compression-level"}, .default_value = "-1", .type = GF_OPTION_TYPE_INT, - .description = "Compression levels \ - 0 : no compression, 1 : best speed, \ - 9 : best compression, -1 : default compression " + .description = "Compression levels \n" + "0 : no compression, 1 : best speed, \n" + "9 : best compression, -1 : default compression " }, { .key = {"min-size"}, .default_value = "0", @@ -329,13 +328,14 @@ struct volume_options options[] = { { .key = {"mode"}, .value = {"server", "client"}, .type = GF_OPTION_TYPE_STR, - .description = "Set on the basis of where the xlator is loaded." + .description = "Set on the basis of where the xlator is loaded. " + "This option should NOT be configured by user." }, { .key = {"debug"}, .default_value = "false", .type = GF_OPTION_TYPE_BOOL, - .description = "This is used in testing. Will dump compressed data \ - to disk as a gzip file." + .description = "This is used in testing. Will dump compressed data " + "to disk as a gzip file." }, { .key = {NULL} }, diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 7cb858b01..001825941 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -1666,13 +1666,16 @@ server_graph_builder (volgen_graph_t *graph, glusterd_volinfo_t *volinfo, } /* Check for compress volume option, and add it to the graph on server side */ - if (dict_get_str_boolean (set_dict, "network.compression", 0)) { + ret = dict_get_str_boolean (set_dict, "network.compression", 0); + if (ret == -1) + goto out; + if (ret) { xl = volgen_graph_add (graph, "features/cdc", volname); if (!xl) { ret = -1; goto out; } - ret = dict_set_str (set_dict, "network.compression.mode", "server"); + ret = xlator_set_option (xl, "mode", "server"); if (ret) goto out; } @@ -2543,16 +2546,18 @@ client_graph_builder (volgen_graph_t *graph, glusterd_volinfo_t *volinfo, goto out; /* Check for compress volume option, and add it to the graph on client side */ - if (dict_get_str_boolean (set_dict, "network.compression", 0)) { + ret = dict_get_str_boolean (set_dict, "network.compression", 0); + if (ret == -1) + goto out; + if (ret) { xl = volgen_graph_add (graph, "features/cdc", volname); if (!xl) { ret = -1; goto out; } - ret = dict_set_str (set_dict, "network.compression.mode", "client"); + ret = xlator_set_option (xl, "mode", "client"); if (ret) goto out; - } ret = glusterd_volinfo_get_boolean (volinfo, "features.encryption"); diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c index 6e7a80b92..7f094c439 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c @@ -1020,39 +1020,30 @@ struct volopt_map_entry glusterd_volopt_map[] = { */ { .key = "network.compression", .voltype = "features/cdc", + .option = "!feat", .value = "off", - .type = NO_DOC, .op_version = 3, - .description = "enable/disable network compression translator" - }, - { .key = "network.compression.mode", - .voltype = "features/cdc", - .option = "mode", - .type = NO_DOC, - .op_version = 3 + .description = "enable/disable network compression translator", + .flags = OPT_FLAG_XLATOR_OPT }, { .key = "network.compression.window-size", .voltype = "features/cdc", .option = "window-size", - .type = NO_DOC, .op_version = 3 }, { .key = "network.compression.mem-level", .voltype = "features/cdc", .option = "mem-level", - .type = NO_DOC, .op_version = 3 }, { .key = "network.compression.min-size", .voltype = "features/cdc", .option = "min-size", - .type = NO_DOC, .op_version = 3 }, { .key = "network.compression.compression-level", .voltype = "features/cdc", .option = "compression-level", - .type = NO_DOC, .op_version = 3 }, { .key = "network.compression.debug", -- cgit