mirror of https://github.com/yandex/odyssey.git
odissey: move server connection close out of pooler
This commit is contained in:
parent
15f4977c09
commit
9d944b51f4
|
@ -52,15 +52,8 @@
|
|||
void od_backend_close(od_server_t *server)
|
||||
{
|
||||
assert(server->route == NULL);
|
||||
if (server->io) {
|
||||
machine_close(server->io);
|
||||
machine_io_free(server->io);
|
||||
server->io = NULL;
|
||||
}
|
||||
if (server->tls) {
|
||||
machine_tls_free(server->tls);
|
||||
server->tls = NULL;
|
||||
}
|
||||
assert(server->io == NULL);
|
||||
assert(server->tls == NULL);
|
||||
server->is_transaction = 0;
|
||||
server->idle_time = 0;
|
||||
shapito_key_init(&server->key);
|
||||
|
@ -68,7 +61,8 @@ void od_backend_close(od_server_t *server)
|
|||
od_server_free(server);
|
||||
}
|
||||
|
||||
int od_backend_terminate(od_server_t *server, shapito_stream_t *stream)
|
||||
static inline int
|
||||
od_backend_terminate(od_server_t *server, shapito_stream_t *stream)
|
||||
{
|
||||
shapito_stream_reset(stream);
|
||||
int rc;
|
||||
|
@ -81,6 +75,32 @@ int od_backend_terminate(od_server_t *server, shapito_stream_t *stream)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void od_backend_close_connection(od_server_t *server)
|
||||
{
|
||||
od_instance_t *instance = server->system->instance;
|
||||
|
||||
if (server->io == NULL)
|
||||
return;
|
||||
|
||||
if (machine_connected(server->io)) {
|
||||
shapito_stream_t *stream;
|
||||
stream = shapito_cache_pop(&instance->stream_cache);
|
||||
if (stream) {
|
||||
od_backend_terminate(server, stream);
|
||||
shapito_cache_push(&instance->stream_cache, stream);
|
||||
}
|
||||
}
|
||||
|
||||
machine_close(server->io);
|
||||
machine_io_free(server->io);
|
||||
server->io = NULL;
|
||||
|
||||
if (server->tls) {
|
||||
machine_tls_free(server->tls);
|
||||
server->tls = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void od_backend_error(od_server_t *server, char *context, char *data, int size)
|
||||
{
|
||||
od_instance_t *instance = server->system->instance;
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
int od_backend_connect(od_server_t*, shapito_stream_t*, char*);
|
||||
int od_backend_connect_cancel(od_server_t*, shapito_stream_t*, od_schemestorage_t*,
|
||||
shapito_key_t*);
|
||||
void od_backend_close_connection(od_server_t*);
|
||||
void od_backend_close(od_server_t*);
|
||||
int od_backend_terminate(od_server_t*, shapito_stream_t*);
|
||||
void od_backend_error(od_server_t*, char*, char*, int);
|
||||
int od_backend_ready(od_server_t*, char*, char*, int);
|
||||
int od_backend_ready_wait(od_server_t*, shapito_stream_t*, char*, int, uint32_t);
|
||||
|
|
|
@ -64,6 +64,7 @@ int od_cancel(od_system_t *system,
|
|||
od_server_init(&server);
|
||||
server.system = system;
|
||||
od_backend_connect_cancel(&server, stream, server_scheme, key);
|
||||
od_backend_close_connection(&server);
|
||||
od_backend_close(&server);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -277,11 +277,7 @@ od_periodic_expire(od_periodic_t *periodic)
|
|||
if (instance->is_shared)
|
||||
machine_io_attach(server->io);
|
||||
|
||||
shapito_stream_t *stream;
|
||||
stream = shapito_cache_pop(&instance->stream_cache);
|
||||
od_backend_terminate(server, stream);
|
||||
shapito_cache_push(&instance->stream_cache, stream);
|
||||
|
||||
od_backend_close_connection(server);
|
||||
od_backend_close(server);
|
||||
}
|
||||
|
||||
|
|
|
@ -389,7 +389,7 @@ od_router(void *arg)
|
|||
|
||||
case OD_MROUTER_CLOSE:
|
||||
{
|
||||
/* detach and close server connection */
|
||||
/* detach closed server connection */
|
||||
od_msgrouter_t *msg_detach;
|
||||
msg_detach = machine_msg_get_data(msg);
|
||||
|
||||
|
@ -405,8 +405,7 @@ od_router(void *arg)
|
|||
server->client = NULL;
|
||||
server->route = NULL;
|
||||
|
||||
if (instance->is_shared)
|
||||
machine_io_attach(server->io);
|
||||
assert(server->io == NULL);
|
||||
od_backend_close(server);
|
||||
|
||||
msg_detach->status = OD_ROK;
|
||||
|
@ -416,8 +415,7 @@ od_router(void *arg)
|
|||
|
||||
case OD_MROUTER_CLOSE_AND_UNROUTE:
|
||||
{
|
||||
/* detach and close server connection,
|
||||
* unroute client */
|
||||
/* detach closed server connection and unroute client */
|
||||
od_msgrouter_t *msg_close;
|
||||
msg_close = machine_msg_get_data(msg);
|
||||
|
||||
|
@ -430,19 +428,12 @@ od_router(void *arg)
|
|||
|
||||
/* remove client from route client pool */
|
||||
client->server = NULL;
|
||||
client->route = NULL;
|
||||
client->route = NULL;
|
||||
od_clientpool_set(&route->client_pool, client, OD_CUNDEF);
|
||||
assert(router->clients > 0);
|
||||
router->clients--;
|
||||
|
||||
if (machine_connected(server->io)) {
|
||||
if (instance->is_shared)
|
||||
machine_io_attach(server->io);
|
||||
shapito_stream_t *stream;
|
||||
stream = shapito_cache_pop(&instance->stream_cache);
|
||||
od_backend_terminate(server, stream);
|
||||
shapito_cache_push(&instance->stream_cache, stream);
|
||||
}
|
||||
assert(server->io == NULL);
|
||||
od_backend_close(server);
|
||||
|
||||
msg_close->status = OD_ROK;
|
||||
|
@ -600,20 +591,16 @@ od_router_detach_and_unroute(od_client_t *client)
|
|||
od_routerstatus_t
|
||||
od_router_close(od_client_t *client)
|
||||
{
|
||||
od_instance_t *instance = client->system->instance;
|
||||
od_server_t *server = client->server;
|
||||
if (instance->is_shared)
|
||||
machine_io_detach(server->io);
|
||||
od_backend_close_connection(server);
|
||||
return od_router_do(client, OD_MROUTER_CLOSE, 1);
|
||||
}
|
||||
|
||||
od_routerstatus_t
|
||||
od_router_close_and_unroute(od_client_t *client)
|
||||
{
|
||||
od_instance_t *instance = client->system->instance;
|
||||
od_server_t *server = client->server;
|
||||
if (instance->is_shared)
|
||||
machine_io_detach(server->io);
|
||||
od_backend_close_connection(server);
|
||||
return od_router_do(client, OD_MROUTER_CLOSE_AND_UNROUTE, 1);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue