Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8645:a90d1488bacf HEAD
quota plugin optimization: Don't look up quota values every time when iterating quota roots.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 17 Jan 2009 12:30:54 -0500 |
parents | bf53ab94db72 |
children | 7c568270c8df |
files | src/plugins/quota/quota-private.h src/plugins/quota/quota.c |
diffstat | 2 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/quota/quota-private.h Sat Jan 17 11:57:56 2009 -0500 +++ b/src/plugins/quota/quota-private.h Sat Jan 17 12:30:54 2009 -0500 @@ -100,6 +100,9 @@ may change these by reading the limits elsewhere (e.g. Maildir++, FS quota) */ int64_t bytes_limit, count_limit; + /* 1 = quota root has resources and should be returned when iterating + quota roots, 0 = not, -1 = unknown. */ + int resource_ret; /* Module-specific contexts. See quota_module_id. */ ARRAY_DEFINE(quota_module_contexts, void);
--- a/src/plugins/quota/quota.c Sat Jan 17 11:57:56 2009 -0500 +++ b/src/plugins/quota/quota.c Sat Jan 17 12:30:54 2009 -0500 @@ -142,6 +142,7 @@ const char *const *tmp; root = root_set->backend->v.alloc(); + root->resource_ret = -1; root->pool = pool_alloconly_create("quota root", 512); root->set = root_set; root->quota = quota; @@ -622,14 +623,18 @@ if (!quota_root_is_visible(roots[iter->i], iter->box, FALSE)) continue; - ret = quota_get_resource(roots[iter->i], "", - QUOTA_NAME_STORAGE_KILOBYTES, - &value, &limit); + ret = roots[iter->i]->resource_ret; + if (ret == -1) { + ret = quota_get_resource(roots[iter->i], "", + QUOTA_NAME_STORAGE_KILOBYTES, + &value, &limit); + } if (ret == 0) { ret = quota_get_resource(roots[iter->i], "", QUOTA_NAME_MESSAGES, &value, &limit); } + roots[iter->i]->resource_ret = ret; if (ret > 0) { root = roots[iter->i]; break;