mirror of https://github.com/yandex/odyssey.git
odissey: do discard optimistically and only for new clients
This commit is contained in:
parent
9dff1d7a5a
commit
5b3935e95f
|
@ -484,19 +484,20 @@ int od_backend_reset(od_server_t *server)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* send reset query */
|
/* ready to use (yet maybe discard is required) */
|
||||||
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 */
|
|
||||||
return 1;
|
return 1;
|
||||||
drop:
|
drop:
|
||||||
return 0;
|
return 0;
|
||||||
error:
|
error:
|
||||||
return -1;
|
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));
|
||||||
|
}
|
||||||
|
|
|
@ -15,5 +15,6 @@ int od_backend_terminate(od_server_t*);
|
||||||
int od_backend_reset(od_server_t*);
|
int od_backend_reset(od_server_t*);
|
||||||
int od_backend_ready(od_server_t*, uint8_t*, int);
|
int od_backend_ready(od_server_t*, uint8_t*, int);
|
||||||
int od_backend_configure(od_server_t*, so_bestartup_t*);
|
int od_backend_configure(od_server_t*, so_bestartup_t*);
|
||||||
|
int od_backend_discard(od_server_t*);
|
||||||
|
|
||||||
#endif /* OD_BACKEND_H */
|
#endif /* OD_BACKEND_H */
|
||||||
|
|
|
@ -298,6 +298,17 @@ od_frontend_main(od_client_t *client)
|
||||||
"previously owned, no need to reconfigure S%" PRIu64,
|
"previously owned, no need to reconfigure S%" PRIu64,
|
||||||
server->id);
|
server->id);
|
||||||
} else {
|
} 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);
|
rc = od_backend_configure(client->server, &client->startup);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
return OD_RS_ESERVER_CONFIGURE;
|
return OD_RS_ESERVER_CONFIGURE;
|
||||||
|
|
Loading…
Reference in New Issue