odissey: properly reset client stream during deploy

This commit is contained in:
Dmitry Simonenko 2018-02-05 17:16:06 +03:00
parent 87bbd19700
commit 09894f9818
2 changed files with 26 additions and 12 deletions

View File

@ -474,14 +474,18 @@ od_backend_deploy(od_server_t *server, char *context,
rc = shapito_fe_read_parameter(request, request_size,
&name, &name_len, &value, &value_len);
if (rc == -1) {
od_error(&instance->logger, context, NULL, server,
od_error(&instance->logger, context, server->client, server,
"failed to parse ParameterStatus message");
return -1;
}
rc = shapito_parameters_add(&server->params, name, name_len,
value, value_len);
/* update parameter */
rc = shapito_parameters_update(&server->params, name, name_len,
value, value_len);
if (rc == -1)
return -1;
od_debug(&instance->logger, context, server->client, server,
"%.*s = %.*s",
name_len, name, value_len, value);
break;
}
case 'E':

View File

@ -556,6 +556,8 @@ od_frontend_remote_client(od_client_t *client)
shapito_stream_t *stream = &client->stream;
od_server_t *server = client->server;
od_frontend_stream_reset(client);
int request_count = 0;
int terminate = 0;
@ -570,7 +572,6 @@ od_frontend_remote_client(od_client_t *client)
request_count = server->deploy_sync;
}
od_frontend_stream_reset(client);
int rc;
for (;;)
{
@ -581,15 +582,24 @@ od_frontend_remote_client(od_client_t *client)
char *request = stream->start + request_start;
int request_size = shapito_stream_used(stream) - request_start;
/* update client recv stat */
od_server_stat_recv_client(server, request_size);
int type = *request;
od_debug(&instance->logger, "main", client, server,
"%c", type);
/* Terminate (client graceful shutdown) */
if (type == 'X') {
/* discard terminate request */
stream->pos = stream->start + request_start;
terminate = 1;
if (request_count == server->deploy_sync) {
od_frontend_stream_reset(client);
server->deploy_sync = 0;
}
break;
}
@ -634,16 +644,16 @@ od_frontend_remote_client(od_client_t *client)
break;
}
/* update client recv stat */
od_server_stat_recv_client(server, shapito_stream_used(stream));
/* forward to server */
rc = od_write(server->io, stream);
if (rc == -1)
return OD_FE_ESERVER_WRITE;
if (shapito_stream_used(stream) > 0)
{
rc = od_write(server->io, stream);
if (rc == -1)
return OD_FE_ESERVER_WRITE;
/* update server sync state */
od_server_stat_request(server, request_count);
/* update server sync state */
od_server_stat_request(server, request_count);
}
if (terminate)
return OD_FE_TERMINATE;