summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmar Tumballi <amar@gluster.com>2009-04-10 00:34:34 -0700
committerAnand V. Avati <avati@amp.gluster.com>2009-04-12 11:59:56 +0530
commit4a62b5af1c9add4a74ea38ab9008bf129e2b4110 (patch)
treedeeb56a05bd727bcfd2c991d086bb0daa51c76f7
parentbe9909606428d78ec23ea02900640c68ca2a40d2 (diff)
feature to disable volumefile's checksum
in server volume define, "option verify-volfile-checksum no" to disable the checksum feature. Signed-off-by: Anand V. Avati <avati@amp.gluster.com>
-rw-r--r--xlators/protocol/server/src/server-protocol.c66
-rw-r--r--xlators/protocol/server/src/server-protocol.h1
2 files changed, 47 insertions, 20 deletions
diff --git a/xlators/protocol/server/src/server-protocol.c b/xlators/protocol/server/src/server-protocol.c
index 4de990d454e..d4d75c1abe8 100644
--- a/xlators/protocol/server/src/server-protocol.c
+++ b/xlators/protocol/server/src/server-protocol.c
@@ -7147,7 +7147,8 @@ mop_getspec (call_frame_t *frame,
uint32_t flags = 0;
uint32_t keylen = 0;
char *key = NULL;
-
+ server_conf_t *conf = NULL;
+
req = gf_param (hdr);
flags = ntoh32 (req->flags);
keylen = ntoh32 (req->keylen);
@@ -7155,6 +7156,8 @@ mop_getspec (call_frame_t *frame,
key = req->key;
}
+ conf = frame->this->private;
+
filename = build_volfile_path (frame->this, key);
if (filename) {
/* to allocate the proper buffer to hold the file data */
@@ -7176,8 +7179,10 @@ mop_getspec (call_frame_t *frame,
}
ret = 0;
file_len = stbuf.st_size;
- get_checksum_for_file (spec_fd, &checksum);
- _volfile_update_checksum (frame->this, key, checksum);
+ if (conf->verify_volfile_checksum) {
+ get_checksum_for_file (spec_fd, &checksum);
+ _volfile_update_checksum (frame->this, key, checksum);
+ }
} else {
errno = ENOENT;
}
@@ -7451,25 +7456,30 @@ mop_setvolume (call_frame_t *frame, xlator_t *bound_xl,
goto fail;
}
- ret = dict_get_uint32 (params, "volfile-checksum", &checksum);
- if (ret == 0) {
- ret = dict_get_str (params, "volfile-key", &volfile_key);
-
- ret = _validate_volfile_checksum (trans->xl, volfile_key,
- checksum);
- if (-1 == ret) {
- ret = dict_set_str (reply, "ERROR",
- "volume-file checksum varies from "
- "earlier access");
- if (ret < 0)
- gf_log (trans->xl->name, GF_LOG_ERROR,
- "failed to set error msg");
+ if (conf->verify_volfile_checksum) {
+ ret = dict_get_uint32 (params, "volfile-checksum", &checksum);
+ if (ret == 0) {
+ ret = dict_get_str (params, "volfile-key",
+ &volfile_key);
- op_ret = -1;
- op_errno = ESTALE;
- goto fail;
+ ret = _validate_volfile_checksum (trans->xl,
+ volfile_key,
+ checksum);
+ if (-1 == ret) {
+ ret = dict_set_str (reply, "ERROR",
+ "volume-file checksum "
+ "varies from earlier "
+ "access");
+ if (ret < 0)
+ gf_log (trans->xl->name, GF_LOG_ERROR,
+ "failed to set error msg");
+
+ op_ret = -1;
+ op_errno = ESTALE;
+ goto fail;
+ }
}
- }
+ }
peerinfo = &trans->peerinfo;
@@ -8075,6 +8085,7 @@ init (xlator_t *this)
int32_t ret = -1;
transport_t *trans = NULL;
server_conf_t *conf = NULL;
+ data_t *data = NULL;
if (this->children == NULL) {
gf_log (this->name, GF_LOG_ERROR,
@@ -8137,6 +8148,18 @@ init (xlator_t *this)
DEFAULT_BLOCK_SIZE);
conf->max_block_size = DEFAULT_BLOCK_SIZE;
}
+
+ conf->verify_volfile_checksum = 1;
+ data = dict_get (this->options, "verify-volfile-checksum");
+ if (data) {
+ ret = gf_string2boolean(data->data,
+ &conf->verify_volfile_checksum);
+ if (ret != 0) {
+ gf_log (this->name, GF_LOG_DEBUG,
+ "wrong value for verify-volfile-checksum");
+ conf->verify_volfile_checksum = 1;
+ }
+ }
#ifndef GF_DARWIN_HOST_OS
{
@@ -8291,5 +8314,8 @@ struct volume_options options[] = {
{ .key = {"client-volume-filename"},
.type = GF_OPTION_TYPE_PATH
},
+ { .key = {"verify-volfile-checksum"},
+ .type = GF_OPTION_TYPE_BOOL
+ },
{ .key = {NULL} },
};
diff --git a/xlators/protocol/server/src/server-protocol.h b/xlators/protocol/server/src/server-protocol.h
index 2e6923fb4e2..1ea30cc6f66 100644
--- a/xlators/protocol/server/src/server-protocol.h
+++ b/xlators/protocol/server/src/server-protocol.h
@@ -105,6 +105,7 @@ typedef struct {
int32_t inode_lru_limit;
pthread_mutex_t mutex;
struct list_head conns;
+ gf_boolean_t verify_volfile_checksum;
} server_conf_t;