dovecot: Use dicts directly instead of caching them. Caching doe...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Sep 22 19:40:52 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/e81e56e67ba1
changeset: 6481:e81e56e67ba1
user: Timo Sirainen <tss at iki.fi>
date: Sat Sep 22 19:40:43 2007 +0300
description:
Use dicts directly instead of caching them. Caching doesn't help much here.
diffstat:
4 files changed, 4 insertions(+), 101 deletions(-)
src/dict/Makefile.am | 2 -
src/dict/dict-cache.c | 72 ------------------------------------------------
src/dict/dict-cache.h | 13 --------
src/dict/dict-server.c | 18 ++----------
diffs (176 lines):
diff -r 7596339a9452 -r e81e56e67ba1 src/dict/Makefile.am
--- a/src/dict/Makefile.am Sat Sep 22 19:40:06 2007 +0300
+++ b/src/dict/Makefile.am Sat Sep 22 19:40:43 2007 +0300
@@ -26,10 +26,8 @@ dict_DEPENDENCIES = $(libs)
dict_DEPENDENCIES = $(libs)
dict_SOURCES = \
- dict-cache.c \
dict-server.c \
main.c
noinst_HEADERS = \
- dict-cache.h \
dict-server.h
diff -r 7596339a9452 -r e81e56e67ba1 src/dict/dict-cache.c
--- a/src/dict/dict-cache.c Sat Sep 22 19:40:06 2007 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/* Copyright (c) 2005-2007 Dovecot authors, see the included COPYING file */
-
-#include "lib.h"
-#include "hash.h"
-#include "dict.h"
-#include "dict-cache.h"
-
-struct dict_entry {
- int refcount;
- char *user_uri;
- struct dict *dict;
-};
-
-struct dict_cache {
- struct hash_table *dicts; /* uri -> struct dict_entry */
-};
-
-struct dict_cache *dict_cache_init(void)
-{
- struct dict_cache *cache;
-
- cache = i_new(struct dict_cache, 1);
- cache->dicts = hash_create(default_pool, default_pool, 0, str_hash,
- (hash_cmp_callback_t *)strcmp);
- return cache;
-}
-
-void dict_cache_deinit(struct dict_cache *cache)
-{
- hash_destroy(&cache->dicts);
- i_free(cache);
-}
-
-struct dict *dict_cache_get(struct dict_cache *cache, const char *uri,
- enum dict_data_type value_type,
- const char *username)
-{
- struct dict_entry *entry;
- char *user_uri;
-
- user_uri = i_strdup_printf("%s\t%s", username, uri);
- entry = hash_lookup(cache->dicts, user_uri);
- if (entry == NULL) {
- entry = i_new(struct dict_entry, 1);
- entry->dict = dict_init(uri, value_type, username);
- entry->user_uri = user_uri;
- hash_insert(cache->dicts, entry->user_uri, entry);
- } else {
- i_free(user_uri);
- }
- entry->refcount++;
- return entry->dict;
-}
-
-void dict_cache_unref(struct dict_cache *cache, const char *uri,
- const char *username)
-{
- struct dict_entry *entry;
-
- t_push();
- entry = hash_lookup(cache->dicts,
- t_strdup_printf("%s\t%s", username, uri));
- i_assert(entry != NULL && entry->refcount > 0);
-
- if (--entry->refcount == 0) {
- hash_remove(cache->dicts, entry->user_uri);
- dict_deinit(&entry->dict);
- i_free(entry->user_uri);
- i_free(entry);
- }
- t_pop();
-}
diff -r 7596339a9452 -r e81e56e67ba1 src/dict/dict-cache.h
--- a/src/dict/dict-cache.h Sat Sep 22 19:40:06 2007 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-#ifndef DICT_CACHE_H
-#define DICT_CACHE_H
-
-struct dict_cache *dict_cache_init(void);
-void dict_cache_deinit(struct dict_cache *cache);
-
-struct dict *dict_cache_get(struct dict_cache *cache, const char *uri,
- enum dict_data_type value_type,
- const char *username);
-void dict_cache_unref(struct dict_cache *cache, const char *uri,
- const char *username);
-
-#endif
diff -r 7596339a9452 -r e81e56e67ba1 src/dict/dict-server.c
--- a/src/dict/dict-server.c Sat Sep 22 19:40:06 2007 +0300
+++ b/src/dict/dict-server.c Sat Sep 22 19:40:43 2007 +0300
@@ -7,7 +7,6 @@
#include "istream.h"
#include "ostream.h"
#include "dict.h"
-#include "dict-cache.h"
#include "dict-client.h"
#include "dict-server.h"
@@ -23,7 +22,7 @@ struct dict_client_connection {
struct dict_server *server;
char *username;
- char *name, *uri;
+ char *name;
struct dict *dict;
enum dict_data_type value_type;
@@ -41,8 +40,6 @@ struct dict_server {
char *path;
int fd;
struct io *io;
-
- struct dict_cache *cache;
};
struct dict_client_cmd {
@@ -347,9 +344,7 @@ static int dict_client_dict_init(struct
return -1;
}
- conn->uri = i_strdup(uri);
- conn->dict = dict_cache_get(conn->server->cache, conn->uri,
- conn->value_type, conn->username);
+ conn->dict = dict_init(uri, conn->value_type, conn->username);
if (conn->dict == NULL) {
/* dictionary initialization failed */
i_error("Failed to initialize dictionary '%s'", conn->name);
@@ -430,12 +425,9 @@ static void dict_client_connection_deini
if (close(conn->fd) < 0)
i_error("close(dict client) failed: %m");
- if (conn->dict != NULL) {
- dict_cache_unref(conn->server->cache, conn->uri,
- conn->username);
- }
+ if (conn->dict != NULL)
+ dict_deinit(&conn->dict);
i_free(conn->name);
- i_free(conn->uri);
i_free(conn->username);
i_free(conn);
}
@@ -497,13 +489,11 @@ struct dict_server *dict_server_init(con
server->io = io_add(server->fd, IO_READ,
dict_server_listener_accept, server);
- server->cache = dict_cache_init();
return server;
}
void dict_server_deinit(struct dict_server *server)
{
- dict_cache_deinit(server->cache);
io_remove(&server->io);
if (close(server->fd) < 0)
i_error("close(%s) failed: %m", server->path);
More information about the dovecot-cvs
mailing list