diff options
author | Atin Mukherjee <amukherj@redhat.com> | 2014-08-30 16:15:36 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2015-03-24 06:53:11 -0700 |
commit | ef158c75d1d6fac76635e95a9a43145433169b44 (patch) | |
tree | 488c342d2890234017ac7a1ca7ca0d1485580117 /xlators/features/read-only/src/read-only.c | |
parent | a20101e2e4d5f5595655544cfc798eb1d445638c (diff) | |
download | glusterfs-ef158c75d1d6fac76635e95a9a43145433169b44.tar.gz glusterfs-ef158c75d1d6fac76635e95a9a43145433169b44.tar.xz glusterfs-ef158c75d1d6fac76635e95a9a43145433169b44.zip |
read-only: read-only/worm translator should be in brick graph by default
Problem:
read-only/worm translator is not loaded by default in brick graph because of which
when read-only option is set through volume set volume still remains writable
untill the bricks are restarted as the translator does not have an inmemory flag
to decide whether the read-only/worm option is turned or not.
Solution:
read-only/worm should be loaded by default in brick graph and the read-only/worm
option can be toggled through volume set command. read-only/worm translator now'
has an in-memory flag to decide whether the volume is read-only or not and based
on that either reject the fop or proceed.
Change-Id: Ic79328698f6a72c50433cff15ecadb1a92acc643
BUG: 1134822
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-on: http://review.gluster.org/8571
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/features/read-only/src/read-only.c')
-rw-r--r-- | xlators/features/read-only/src/read-only.c | 68 |
1 files changed, 63 insertions, 5 deletions
diff --git a/xlators/features/read-only/src/read-only.c b/xlators/features/read-only/src/read-only.c index e49e54a1b3..173c4f51e2 100644 --- a/xlators/features/read-only/src/read-only.c +++ b/xlators/features/read-only/src/read-only.c @@ -12,14 +12,31 @@ #include "config.h" #endif -#include "xlator.h" #include "defaults.h" #include "read-only-common.h" +#include "read-only-mem-types.h" +#include "read-only.h" + +int32_t +mem_acct_init (xlator_t *this) +{ + int ret = -1; + + ret = xlator_mem_acct_init (this, gf_read_only_mt_end + 1); + if (ret) + gf_log (this->name, GF_LOG_ERROR, "Memory accounting " + "initialization failed."); + + return ret; +} int32_t init (xlator_t *this) { - if (!this->children || this->children->next) { + int ret = -1; + read_only_priv_t *priv = NULL; + + if (!this->children || this->children->next) { gf_log (this->name, GF_LOG_ERROR, "translator not configured with exactly one child"); return -1; @@ -30,14 +47,50 @@ init (xlator_t *this) "dangling volume. check volfile "); } - return 0; + priv = GF_CALLOC (1, sizeof (*priv), gf_read_only_mt_priv_t); + if (!priv) + goto out; + + GF_OPTION_INIT ("read-only", priv->readonly_or_worm_enabled, bool, out); + + this->private = priv; + ret = 0; +out: + return ret; } +int +reconfigure (xlator_t *this, dict_t *options) +{ + read_only_priv_t *priv = NULL; + int ret = -1; + gf_boolean_t readonly_or_worm_enabled = _gf_false; + + priv = this->private; + GF_ASSERT (priv); + + GF_OPTION_RECONF ("read-only", readonly_or_worm_enabled, options, bool, + out); + priv->readonly_or_worm_enabled = readonly_or_worm_enabled; + ret = 0; +out: + gf_log (this->name, GF_LOG_DEBUG, "returning %d", ret); + return ret; +} void fini (xlator_t *this) { - return; + read_only_priv_t *priv = NULL; + + priv = this->private; + if (!priv) + return; + + this->private = NULL; + GF_FREE (priv); + + return; } @@ -73,5 +126,10 @@ struct xlator_cbks cbks = { }; struct volume_options options[] = { - { .key = {NULL} }, + { .key = {"read-only"}, + .type = GF_OPTION_TYPE_BOOL, + .default_value = "off", + .description = "When \"on\", makes a volume read-only. It is turned " + "\"off\" by default." + }, }; |