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  | 
