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;