Browse Source

Implement connections counters

tags/1.0.5
Vsevolod Stakhov 8 years ago
parent
commit
61a36e0d18
3 changed files with 13 additions and 8 deletions
  1. 4
    0
      src/controller.c
  2. 3
    0
      src/fuzzy_storage.c
  3. 6
    8
      src/worker.c

+ 4
- 0
src/controller.c View File

@@ -177,6 +177,7 @@ struct rspamd_controller_worker_ctx {

struct rspamd_controller_session {
struct rspamd_controller_worker_ctx *ctx;
struct rspamd_worker *wrk;
rspamd_mempool_t *pool;
struct rspamd_task *task;
struct rspamd_classifier_config *cl;
@@ -2018,6 +2019,7 @@ rspamd_controller_finish_handler (struct rspamd_http_connection_entry *conn_ent)
rspamd_mempool_delete (session->pool);
}

session->wrk->nconns --;
rspamd_inet_address_destroy (session->from_addr);
msg_debug_session ("destroy session %p", session);
g_slice_free1 (sizeof (struct rspamd_controller_session), session);
@@ -2050,6 +2052,8 @@ rspamd_controller_accept_socket (gint fd, short what, void *arg)
session->ctx = ctx;

session->from_addr = addr;
session->wrk = worker;
worker->nconns ++;

rspamd_http_router_handle_socket (ctx->http, nfd, session);
}

+ 3
- 0
src/fuzzy_storage.c View File

@@ -386,6 +386,8 @@ accept_fuzzy_socket (gint fd, short what, void *arg)

/* Got some data */
if (what == EV_READ) {
worker->nconns++;

while ((r = rspamd_inet_address_recvfrom (fd, buf, sizeof (buf), 0,
&session.addr)) == -1) {
if (errno == EINTR) {
@@ -408,6 +410,7 @@ accept_fuzzy_socket (gint fd, short what, void *arg)
}

rspamd_inet_address_destroy (session.addr);
worker->nconns --;
}

rspamd_explicit_memzero (session.nm, sizeof (session.nm));

+ 6
- 8
src/worker.c View File

@@ -92,8 +92,6 @@ struct rspamd_worker_ctx {
gboolean allow_learn;
/* DNS resolver */
struct rspamd_dns_resolver *resolver;
/* Current tasks */
guint32 tasks;
/* Limit of tasks */
guint32 max_tasks;
/* Events base */
@@ -112,9 +110,9 @@ struct rspamd_worker_ctx {
static void
reduce_tasks_count (gpointer arg)
{
guint32 *tasks = arg;
guint *nconns = arg;

(*tasks)--;
(*nconns)--;
}

static gint
@@ -192,9 +190,9 @@ accept_socket (gint fd, short what, void *arg)

ctx = worker->ctx;

if (ctx->max_tasks != 0 && ctx->tasks > ctx->max_tasks) {
if (ctx->max_tasks != 0 && worker->nconns > ctx->max_tasks) {
msg_info_ctx ("current tasks is now: %uD while maximum is: %uD",
ctx->tasks,
worker->nconns,
ctx->max_tasks);
return;
}
@@ -237,9 +235,9 @@ accept_socket (gint fd, short what, void *arg)
RSPAMD_HTTP_SERVER,
ctx->keys_cache);
task->ev_base = ctx->ev_base;
ctx->tasks++;
worker->nconns++;
rspamd_mempool_add_destructor (task->task_pool,
(rspamd_mempool_destruct_t)reduce_tasks_count, &ctx->tasks);
(rspamd_mempool_destruct_t)reduce_tasks_count, &worker->nconns);

/* Set up async session */
task->s = rspamd_session_create (task->task_pool, rspamd_task_fin,

Loading…
Cancel
Save