mirror of https://github.com/yandex/odyssey.git
odissey: add server CLOSE pool
This commit is contained in:
parent
78abe3b1ed
commit
3ff16fa745
|
@ -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)",
|
||||
|
|
|
@ -13,6 +13,7 @@ typedef enum {
|
|||
OD_SUNDEF,
|
||||
OD_SIDLE,
|
||||
OD_SEXPIRE,
|
||||
OD_SCLOSE,
|
||||
OD_SCONNECT,
|
||||
OD_SRESET,
|
||||
OD_SACTIVE
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue