odissey: add server CLOSE pool

This commit is contained in:
Dmitry Simonenko 2016-12-13 17:46:41 +03:00
parent 78abe3b1ed
commit 3ff16fa745
4 changed files with 23 additions and 3 deletions

View File

@ -76,7 +76,7 @@ void od_periodic(void *arg)
/* sweep */
for (;;) {
od_server_t *server =
od_routepool_pop(&pooler->route_pool, OD_SEXPIRE);
od_routepool_next(&pooler->route_pool, OD_SEXPIRE);
if (server == NULL)
break;
od_debug(&pooler->od->log, "S: closing idle connection (%d secs)",

View File

@ -13,6 +13,7 @@ typedef enum {
OD_SUNDEF,
OD_SIDLE,
OD_SEXPIRE,
OD_SCLOSE,
OD_SCONNECT,
OD_SRESET,
OD_SACTIVE

View File

@ -32,12 +32,14 @@ void od_serverpool_init(od_serverpool_t *p)
p->count_connect = 0;
p->count_reset = 0;
p->count_expire = 0;
p->count_close = 0;
p->count_idle = 0;
od_listinit(&p->active);
od_listinit(&p->connect);
od_listinit(&p->reset);
od_listinit(&p->idle);
od_listinit(&p->expire);
od_listinit(&p->close);
od_listinit(&p->link);
}
@ -53,6 +55,10 @@ void od_serverpool_free(od_serverpool_t *p)
server = od_container_of(i, od_server_t, link);
od_serverfree(server);
}
od_listforeach_safe(&p->close, i, n) {
server = od_container_of(i, od_server_t, link);
od_serverfree(server);
}
od_listforeach_safe(&p->connect, i, n) {
server = od_container_of(i, od_server_t, link);
od_serverfree(server);
@ -78,6 +84,9 @@ void od_serverpool_set(od_serverpool_t *p, od_server_t *server,
case OD_SEXPIRE:
p->count_expire--;
break;
case OD_SCLOSE:
p->count_close--;
break;
case OD_SIDLE:
p->count_idle--;
break;
@ -99,6 +108,10 @@ void od_serverpool_set(od_serverpool_t *p, od_server_t *server,
target = &p->expire;
p->count_expire++;
break;
case OD_SCLOSE:
target = &p->close;
p->count_close++;
break;
case OD_SIDLE:
target = &p->idle;
p->count_idle++;
@ -124,7 +137,7 @@ void od_serverpool_set(od_serverpool_t *p, od_server_t *server,
}
od_server_t*
od_serverpool_pop(od_serverpool_t *p, od_serverstate_t state)
od_serverpool_next(od_serverpool_t *p, od_serverstate_t state)
{
od_list_t *target = NULL;
switch (state) {
@ -132,6 +145,8 @@ od_serverpool_pop(od_serverpool_t *p, od_serverstate_t state)
break;
case OD_SEXPIRE: target = &p->expire;
break;
case OD_SCLOSE: target = &p->close;
break;
case OD_SCONNECT: target = &p->connect;
break;
case OD_SRESET: target = &p->reset;
@ -159,6 +174,8 @@ od_serverpool_foreach(od_serverpool_t *p, od_serverstate_t state,
break;
case OD_SEXPIRE: target = &p->expire;
break;
case OD_SCLOSE: target = &p->close;
break;
case OD_SCONNECT: target = &p->connect;
break;
case OD_SRESET: target = &p->reset;

View File

@ -16,11 +16,13 @@ struct od_serverpool_t {
od_list_t connect;
od_list_t reset;
od_list_t expire;
od_list_t close;
od_list_t idle;
int count_active;
int count_connect;
int count_reset;
int count_expire;
int count_close;
int count_idle;
od_list_t link;
};
@ -31,7 +33,7 @@ void od_serverpool_set(od_serverpool_t*, od_server_t*,
od_serverstate_t);
od_server_t*
od_serverpool_pop(od_serverpool_t*, od_serverstate_t);
od_serverpool_next(od_serverpool_t*, od_serverstate_t);
od_server_t*
od_serverpool_foreach(od_serverpool_t*, od_serverstate_t,