diff options
-rw-r--r-- | cli/src/cli-rpc-ops.c | 16 | ||||
-rw-r--r-- | libglusterfs/src/quota-common-utils.c | 14 | ||||
-rw-r--r-- | libglusterfs/src/quota-common-utils.h | 3 | ||||
-rw-r--r-- | tests/bugs/quota/afr-quota-xattr-mdata-heal.t | 3 | ||||
-rw-r--r-- | tests/bugs/quota/inode-quota.t | 14 | ||||
-rw-r--r-- | tests/volume.rc | 20 | ||||
-rw-r--r-- | xlators/features/marker/src/marker-quota.c | 12 |
7 files changed, 50 insertions, 32 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index bd0d4d8a2c2..dd92a15368f 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -3287,16 +3287,12 @@ print_quota_list_from_quotad (call_frame_t *frame, dict_t *rsp_dict) limits.hl = ntoh64 (size_limits->hl); limits.sl = ntoh64 (size_limits->sl); - ret = quota_dict_get_meta (rsp_dict, QUOTA_SIZE_KEY, &used_space); - if (ret == -2 && type == GF_QUOTA_OPTION_TYPE_LIST) { - ret = 0; - /* quota_dict_get_meta returns -2 if metadata for inode - * quotas is missing. - * This can happen when glusterfs is upgraded from 3.6 to 3.7 - * and the xattr healing is not completed. - * We can contiue as success if we are listing only file usage - */ - } + if (type == GF_QUOTA_OPTION_TYPE_LIST) + ret = quota_dict_get_meta (rsp_dict, QUOTA_SIZE_KEY, + &used_space); + else + ret = quota_dict_get_inode_meta (rsp_dict, QUOTA_SIZE_KEY, + &used_space); if (ret < 0) { gf_log ("cli", GF_LOG_WARNING, diff --git a/libglusterfs/src/quota-common-utils.c b/libglusterfs/src/quota-common-utils.c index 8c528c8bd3b..0c93303a5ae 100644 --- a/libglusterfs/src/quota-common-utils.c +++ b/libglusterfs/src/quota-common-utils.c @@ -57,7 +57,7 @@ out: } int32_t -quota_dict_get_meta (dict_t *dict, char *key, quota_meta_t *meta) +quota_dict_get_inode_meta (dict_t *dict, char *key, quota_meta_t *meta) { int32_t ret = -1; data_t *data = NULL; @@ -77,6 +77,18 @@ out: } int32_t +quota_dict_get_meta (dict_t *dict, char *key, quota_meta_t *meta) +{ + int32_t ret = -1; + + ret = quota_dict_get_inode_meta (dict, key, meta); + if (ret == -2) + ret = 0; + + return ret; +} + +int32_t quota_dict_set_meta (dict_t *dict, char *key, const quota_meta_t *meta, ia_type_t ia_type) { diff --git a/libglusterfs/src/quota-common-utils.h b/libglusterfs/src/quota-common-utils.h index 2c3632b903c..c930db8e86c 100644 --- a/libglusterfs/src/quota-common-utils.h +++ b/libglusterfs/src/quota-common-utils.h @@ -41,6 +41,9 @@ int32_t quota_data_to_meta (data_t *data, char *key, quota_meta_t *meta); int32_t +quota_dict_get_inode_meta (dict_t *dict, char *key, quota_meta_t *meta); + +int32_t quota_dict_get_meta (dict_t *dict, char *key, quota_meta_t *meta); int32_t diff --git a/tests/bugs/quota/afr-quota-xattr-mdata-heal.t b/tests/bugs/quota/afr-quota-xattr-mdata-heal.t index 6aa2d83e85f..82921ff7b86 100644 --- a/tests/bugs/quota/afr-quota-xattr-mdata-heal.t +++ b/tests/bugs/quota/afr-quota-xattr-mdata-heal.t @@ -15,6 +15,9 @@ TEST mkdir $M0/d TEST $CLI volume quota $V0 limit-usage /d 1MB TEST touch $M0/d/a echo abc > $M0/d/a + +EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "512Bytes" quota_usage "/" + #Set the acl xattrs directly on backend, for some reason on mount it gives error acl_access_val="0x0200000001000600ffffffff04000400ffffffff10000400ffffffff20000400ffffffff" acl_file_val="0x0000000400000001ffffffff0006000000000004ffffffff0004000000000010ffffffff0004000000000020ffffffff00040000" diff --git a/tests/bugs/quota/inode-quota.t b/tests/bugs/quota/inode-quota.t index 55a26fa0d2b..1b04f4062fb 100644 --- a/tests/bugs/quota/inode-quota.t +++ b/tests/bugs/quota/inode-quota.t @@ -4,20 +4,6 @@ . $(dirname $0)/../../volume.rc . $(dirname $0)/../../nfs.rc -function quota_list_field () { - local QUOTA_PATH=$1 - local FIELD=$2 - $CLI volume quota $V0 list $QUOTA_PATH | grep $QUOTA_PATH\ - | awk '{print $FIELD}' -} - -function quota_object_list_field () { - local QUOTA_PATH=$1 - local FIELD=$2 - $CLI volume quota $V0 list-objects $QUOTA_PATH | grep $QUOTA_PATH\ - | awk '{print $FIELD}' -} - cleanup; QDD=$(dirname $0)/quota diff --git a/tests/volume.rc b/tests/volume.rc index 02e5aed9d20..8782f461850 100644 --- a/tests/volume.rc +++ b/tests/volume.rc @@ -555,3 +555,23 @@ function drop_cache() { ;; esac } + +function quota_list_field () { + local QUOTA_PATH=$1 + local FIELD=$2 + $CLI volume quota $V0 list $QUOTA_PATH | grep $QUOTA_PATH\ + | awk '{print $FIELD}' +} + +function quota_object_list_field () { + local QUOTA_PATH=$1 + local FIELD=$2 + $CLI volume quota $V0 list-objects $QUOTA_PATH | grep $QUOTA_PATH\ + | awk '{print $FIELD}' +} + +function quota_usage() +{ + quota_list_field $1 4 +} + diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index 00488c8407a..a5ef0bb2321 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -2090,9 +2090,9 @@ _quota_dict_get_meta (xlator_t *this, dict_t *dict, char *key, priv = this->private; - ret = quota_dict_get_meta (dict, key, meta); + ret = quota_dict_get_inode_meta (dict, key, meta); if (ret == -2 && (priv->feature_enabled & GF_INODE_QUOTA) == 0) { - /* quota_dict_get_meta returns -2 if + /* quota_dict_get_inode_meta returns -2 if * inode quota xattrs are not present. * if inode quota self heal is turned off, * then we should skip healing inode quotas @@ -2461,9 +2461,8 @@ _mq_get_metadata (xlator_t *this, loc_t *loc, quota_meta_t *contri, if (size) { if (loc->inode->ia_type == IA_IFDIR) { - ret = _quota_dict_get_meta (this, rsp_dict, - QUOTA_SIZE_KEY, &meta, - IA_IFDIR, _gf_true); + ret = quota_dict_get_meta (rsp_dict, QUOTA_SIZE_KEY, + &meta); if (ret < 0) { gf_log (this->name, GF_LOG_ERROR, "dict_get failed."); @@ -2481,8 +2480,7 @@ _mq_get_metadata (xlator_t *this, loc_t *loc, quota_meta_t *contri, } if (contri && !loc_is_root(loc)) { - ret = _quota_dict_get_meta (this, rsp_dict, contri_key, &meta, - loc->inode->ia_type, _gf_false); + ret = quota_dict_get_meta (rsp_dict, contri_key, &meta); if (ret < 0) { contri->size = 0; contri->file_count = 0; |