odissey: do discard optimistically and only for new clients

This commit is contained in:
Dmitry Simonenko 2017-06-09 15:49:55 +03:00
parent 9dff1d7a5a
commit 5b3935e95f
3 changed files with 23 additions and 10 deletions

View File

@ -484,19 +484,20 @@ int od_backend_reset(od_server_t *server)
}
}
/* send reset query */
if (route->scheme->discard) {
char query_reset[] = "DISCARD ALL";
rc = od_backend_query(server, "reset", query_reset,
sizeof(query_reset));
if (rc == -1)
goto error;
}
/* ready to use */
/* ready to use (yet maybe discard is required) */
return 1;
drop:
return 0;
error:
return -1;
}
int od_backend_discard(od_server_t *server)
{
od_instance_t *instance = server->system->instance;
char query_discard[] = "DISCARD ALL";
od_debug_server(&instance->log, server->id, "discard",
"%s", query_discard);
return od_backend_query(server, "reset", query_discard,
sizeof(query_discard));
}

View File

@ -15,5 +15,6 @@ int od_backend_terminate(od_server_t*);
int od_backend_reset(od_server_t*);
int od_backend_ready(od_server_t*, uint8_t*, int);
int od_backend_configure(od_server_t*, so_bestartup_t*);
int od_backend_discard(od_server_t*);
#endif /* OD_BACKEND_H */

View File

@ -298,6 +298,17 @@ od_frontend_main(od_client_t *client)
"previously owned, no need to reconfigure S%" PRIu64,
server->id);
} else {
/* discard last server configuration, unless
* server has been just connected. */
od_route_t *route = client->route;
if (route->scheme->discard) {
if (server->last_client_id != UINT64_MAX) {
rc = od_backend_discard(client->server);
if (rc == -1)
return OD_RS_ESERVER_CONFIGURE;
}
}
/* set client parameters */
rc = od_backend_configure(client->server, &client->startup);
if (rc == -1)
return OD_RS_ESERVER_CONFIGURE;