diff options
-rw-r--r-- | rpc/xdr/src/cli1-xdr.x | 1 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/Makefile.am | 2 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 44 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-quota.c | 13 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-quota.h | 17 |
5 files changed, 61 insertions, 16 deletions
diff --git a/rpc/xdr/src/cli1-xdr.x b/rpc/xdr/src/cli1-xdr.x index 55a9b3de19c..c2d26a9ebcd 100644 --- a/rpc/xdr/src/cli1-xdr.x +++ b/rpc/xdr/src/cli1-xdr.x @@ -94,6 +94,7 @@ enum gf_quota_type { GF_QUOTA_OPTION_TYPE_LIST_OBJECTS, GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS, GF_QUOTA_OPTION_TYPE_ENABLE_OBJECTS, + GF_QUOTA_OPTION_TYPE_UPGRADE, GF_QUOTA_OPTION_TYPE_MAX }; diff --git a/xlators/mgmt/glusterd/src/Makefile.am b/xlators/mgmt/glusterd/src/Makefile.am index 5a7a4a7a9a6..67f4e42f386 100644 --- a/xlators/mgmt/glusterd/src/Makefile.am +++ b/xlators/mgmt/glusterd/src/Makefile.am @@ -31,7 +31,7 @@ endif noinst_HEADERS = glusterd.h glusterd-utils.h glusterd-op-sm.h \ glusterd-sm.h glusterd-store.h glusterd-mem-types.h \ glusterd-pmap.h glusterd-volgen.h glusterd-mountbroker.h \ - glusterd-syncop.h glusterd-hooks.h glusterd-locks.h \ + glusterd-syncop.h glusterd-hooks.h glusterd-locks.h glusterd-quota.h \ glusterd-mgmt.h glusterd-messages.h glusterd-peer-utils.h \ glusterd-statedump.h glusterd-snapshot-utils.h glusterd-geo-rep.h \ glusterd-conn-mgmt.h glusterd-conn-helper.h glusterd-proc-mgmt.h \ diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 45fd74ded77..56622538ad8 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -36,6 +36,7 @@ #include "glusterd-locks.h" #include "glusterd-messages.h" #include "glusterd-utils.h" +#include "glusterd-quota.h" #include "syscall.h" #include "cli1-xdr.h" #include "common-utils.h" @@ -2330,17 +2331,19 @@ static int glusterd_op_set_all_volume_options (xlator_t *this, dict_t *dict, char **op_errstr) { - char *key = NULL; - char *key_fixed = NULL; - char *value = NULL; - char *dup_value = NULL; - int ret = -1; - glusterd_conf_t *conf = NULL; - dict_t *dup_opt = NULL; - char *next_version = NULL; - gf_boolean_t quorum_action = _gf_false; - uint32_t op_version = 0; - glusterd_volinfo_t *volinfo = NULL; + char *key = NULL; + char *key_fixed = NULL; + char *value = NULL; + char *dup_value = NULL; + int ret = -1; + glusterd_conf_t *conf = NULL; + dict_t *dup_opt = NULL; + char *next_version = NULL; + gf_boolean_t quorum_action = _gf_false; + uint32_t op_version = 0; + glusterd_volinfo_t *volinfo = NULL; + glusterd_volinfo_t *tmp_volinfo = NULL; + glusterd_volinfo_t *voliter = NULL; conf = this->private; ret = dict_get_str (dict, "key1", &key); @@ -2386,6 +2389,25 @@ glusterd_op_set_all_volume_options (xlator_t *this, dict_t *dict, if (op_version >= conf->op_version) { conf->op_version = op_version; + + /* When a bump up happens, update the quota.conf file + * as well. This is because, till 3.7 we had a quota + * conf version v1.1 in quota.conf. When inode-quota + * feature is introduced, this needs to be changed to + * v1.2 in quota.conf and 16 bytes uuid in quota.conf + * needs to be changed to 17 bytes. Look + * glusterd_store_quota_config for more details. + */ + cds_list_for_each_entry (voliter, &conf->volumes, vol_list) { + tmp_volinfo = voliter; + ret = glusterd_store_quota_config (tmp_volinfo, + NULL, NULL, + GF_QUOTA_OPTION_TYPE_UPGRADE, + NULL); + if (ret) + goto out; + } + ret = glusterd_store_global_info (this); if (ret) { gf_msg (this->name, GF_LOG_ERROR, 0, diff --git a/xlators/mgmt/glusterd/src/glusterd-quota.c b/xlators/mgmt/glusterd/src/glusterd-quota.c index d5111fef657..c1c95ae5170 100644 --- a/xlators/mgmt/glusterd/src/glusterd-quota.c +++ b/xlators/mgmt/glusterd/src/glusterd-quota.c @@ -23,6 +23,7 @@ #include "byte-order.h" #include "compat-errno.h" #include "quota-common-utils.h" +#include "glusterd-quota.h" #include <sys/wait.h> #include <dlfcn.h> @@ -55,12 +56,10 @@ const char *gd_quota_op_list[GF_QUOTA_OPTION_TYPE_MAX + 1] = { [GF_QUOTA_OPTION_TYPE_LIST_OBJECTS] = "list-objects", [GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS] = "remove-objects", [GF_QUOTA_OPTION_TYPE_ENABLE_OBJECTS] = "enable-objects", + [GF_QUOTA_OPTION_TYPE_UPGRADE] = "upgrade", [GF_QUOTA_OPTION_TYPE_MAX] = NULL }; -int -glusterd_store_quota_config (glusterd_volinfo_t *volinfo, char *path, - char *gfid_str, int opcode, char **op_errstr); gf_boolean_t glusterd_is_quota_supported (int32_t type, char **op_errstr) @@ -1098,9 +1097,15 @@ glusterd_store_quota_config (glusterd_volinfo_t *volinfo, char *path, if (ret) goto out; + /* Just create empty quota.conf file if create */ if (GF_QUOTA_OPTION_TYPE_ENABLE == opcode || - GF_QUOTA_OPTION_TYPE_ENABLE_OBJECTS == opcode) { + GF_QUOTA_OPTION_TYPE_ENABLE_OBJECTS == opcode || + GF_QUOTA_OPTION_TYPE_UPGRADE == opcode) { + /* Opcode will be GF_QUOTA_OPTION_TYPE_UPGRADE when there is + * an upgrade from 3.6 to 3.7. Just upgrade the quota.conf + * file even during an op-version bumpup and exit. + */ modified = _gf_true; goto out; } diff --git a/xlators/mgmt/glusterd/src/glusterd-quota.h b/xlators/mgmt/glusterd/src/glusterd-quota.h new file mode 100644 index 00000000000..9efff41b436 --- /dev/null +++ b/xlators/mgmt/glusterd/src/glusterd-quota.h @@ -0,0 +1,17 @@ +/* + Copyright (c) 2016 Red Hat, Inc. <http://www.redhat.com> + This file is part of GlusterFS. + + This file is licensed to you under your choice of the GNU Lesser + General Public License, version 3 or any later version (LGPLv3 or + later), or the GNU General Public License, version 2 (GPLv2), in all + cases as published by the Free Software Foundation. +*/ +#ifndef _GLUSTERD_QUOTA_ +#define _GLUSTERD_QUOTA_ + +int +glusterd_store_quota_config (glusterd_volinfo_t *volinfo, char *path, + char *gfid_str, int opcode, char **op_errstr); + +#endif |