From 587d0df0c0d8870fd56cea70663cebbb2b5fb074 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 11 Feb 2015 22:13:02 +0000 Subject: [PATCH] Allow to specify keypairs cache externally. --- src/controller.c | 7 +++++-- src/libutil/http.c | 6 +++--- src/libutil/http.h | 3 ++- test/rspamd_http_test.c | 22 +++++++++++++++++----- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/controller.c b/src/controller.c index a8dbdec96..a0677f49e 100644 --- a/src/controller.c +++ b/src/controller.c @@ -1589,7 +1589,7 @@ start_controller_worker (struct rspamd_worker *worker) struct module_ctx *mctx; GHashTableIter iter; gpointer key, value; - + struct rspamd_keypair_cache *cache; ctx->ev_base = rspamd_prepare_worker (worker, "controller", @@ -1614,9 +1614,10 @@ start_controller_worker (struct rspamd_worker *worker) } } /* Accept event */ + cache = rspamd_keypair_cache_new (256); ctx->http = rspamd_http_router_new (rspamd_controller_error_handler, rspamd_controller_finish_handler, &ctx->io_tv, ctx->ev_base, - ctx->static_files_dir); + ctx->static_files_dir, cache); /* Add callbacks for different methods */ rspamd_http_router_add_path (ctx->http, @@ -1706,6 +1707,8 @@ start_controller_worker (struct rspamd_worker *worker) event_base_loop (ctx->ev_base, 0); g_mime_shutdown (); + rspamd_http_router_free (ctx->http); + rspamd_keypair_cache_destroy (cache); rspamd_log_close (rspamd_main->logger); exit (EXIT_SUCCESS); } diff --git a/src/libutil/http.c b/src/libutil/http.c index 2f948f452..cafcbf6ea 100644 --- a/src/libutil/http.c +++ b/src/libutil/http.c @@ -1600,7 +1600,8 @@ struct rspamd_http_connection_router * rspamd_http_router_new (rspamd_http_router_error_handler_t eh, rspamd_http_router_finish_handler_t fh, struct timeval *timeout, struct event_base *base, - const char *default_fs_path) + const char *default_fs_path, + struct rspamd_keypair_cache *cache) { struct rspamd_http_connection_router * new; struct stat st; @@ -1635,8 +1636,7 @@ rspamd_http_router_new (rspamd_http_router_error_handler_t eh, } } - /* XXX: stupid default value, should be configurable */ - new->cache = rspamd_keypair_cache_new (256); + new->cache = cache; return new; } diff --git a/src/libutil/http.h b/src/libutil/http.h index 1c79fb45c..c581cb6f6 100644 --- a/src/libutil/http.h +++ b/src/libutil/http.h @@ -333,7 +333,8 @@ struct rspamd_http_connection_router * rspamd_http_router_new ( rspamd_http_router_finish_handler_t fh, struct timeval *timeout, struct event_base *base, - const char *default_fs_path); + const char *default_fs_path, + struct rspamd_keypair_cache *cache); /** * Set encryption key for the HTTP router diff --git a/test/rspamd_http_test.c b/test/rspamd_http_test.c index 77b71cee6..2bb1c2dee 100644 --- a/test/rspamd_http_test.c +++ b/test/rspamd_http_test.c @@ -29,7 +29,7 @@ #include "ottery.h" #include "cryptobox.h" -static const int file_blocks = 8; +static const int file_blocks = 16; static const int pconns = 100; static const int ntests = 300; @@ -69,7 +69,7 @@ rspamd_server_accept (gint fd, short what, void *arg) static void rspamd_http_server_func (const gchar *path, rspamd_inet_addr_t *addr, - rspamd_mempool_mutex_t *mtx, gpointer kp) + rspamd_mempool_mutex_t *mtx, gpointer kp, struct rspamd_keypair_cache *c) { struct rspamd_http_connection_router *rt; struct event_base *ev_base = event_init (); @@ -77,7 +77,7 @@ rspamd_http_server_func (const gchar *path, rspamd_inet_addr_t *addr, gint fd; rt = rspamd_http_router_new (rspamd_server_error, rspamd_server_finish, - NULL, ev_base, path); + NULL, ev_base, path, c); g_assert (rt != NULL); rspamd_http_router_set_key (rt, kp); @@ -190,7 +190,7 @@ rspamd_http_test_func (void) g_assert (sfd != -1); if (sfd == 0) { - rspamd_http_server_func ("/tmp/", &addr, mtx, serv_key); + rspamd_http_server_func ("/tmp/", &addr, mtx, serv_key, c); exit (EXIT_SUCCESS); } @@ -242,12 +242,24 @@ rspamd_http_test_func (void) sizeof (buf) * file_blocks, total_diff, ntests * pconns / total_diff * 1000.); + /* Restart server */ + kill (sfd, SIGTERM); + wait (&i); + sfd = fork (); + g_assert (sfd != -1); + + if (sfd == 0) { + rspamd_http_server_func ("/tmp/", &addr, mtx, serv_key, NULL); + exit (EXIT_SUCCESS); + } + + rspamd_mempool_lock_mutex (mtx); total_diff = 0.0; for (i = 0; i < ntests; i ++) { for (j = 0; j < pconns; j ++) { rspamd_http_client_func (filepath + sizeof ("/tmp") - 1, &addr, - client_key, peer_key, NULL, ev_base); + client_key, peer_key, c, ev_base); } clock_gettime (CLOCK_MONOTONIC, &ts1); event_base_loop (ev_base, 0); -- 2.39.5