odissey: log detailed server error messages

This commit is contained in:
Dmitry Simonenko 2017-06-15 16:16:44 +03:00
parent d3b196a9fc
commit cc4f45b86b
5 changed files with 39 additions and 5 deletions

@ -1 +1 @@
Subproject commit 3bcc0a82f93c8814c7f7b0f2eb3afecf48384278
Subproject commit 16878a14c0b54e8bf98bf1fa20f6a55b1434ce22

View File

@ -43,6 +43,7 @@
#include "od_pooler.h"
#include "od_relay.h"
#include "od_frontend.h"
#include "od_backend.h"
#include "od_auth.h"
static inline int
@ -440,8 +441,8 @@ int od_auth_backend(od_server_t *server)
}
return 0;
case 'E':
od_error_server(&instance->log, server->id, "auth",
"authentication error");
od_backend_error(server, "auth", stream->s,
so_stream_used(stream));
return -1;
}
}

View File

@ -109,6 +109,24 @@ od_backend_startup(od_server_t *server)
return 0;
}
void od_backend_error(od_server_t *server, char *state, uint8_t *data, int size)
{
od_instance_t *instance = server->system->instance;
so_feerror_t error;
int rc;
rc = so_feread_error(&error, data, size);
if (rc == -1) {
od_error_server(&instance->log, server->id, state,
"failed to parse error message from server");
return;
}
od_error_server(&instance->log, server->id, state,
"%s %s %s",
error.severity,
error.code,
error.message);
}
int od_backend_ready(od_server_t *server, uint8_t *data, int size)
{
int status;
@ -151,6 +169,11 @@ od_backend_ready_wait(od_server_t *server, char *procedure, int time_ms)
uint8_t type = stream->s[rc];
od_debug_server(&instance->log, server->id, procedure,
"%c", type);
/* ErrorResponse */
if (type == 'E') {
od_backend_error(server, procedure, stream->s,
so_stream_used(stream));
}
/* ReadyForQuery */
if (type == 'Z') {
od_backend_ready(server, stream->s + rc,
@ -204,11 +227,13 @@ od_backend_setup(od_server_t *server)
/* ParameterStatus */
case 'S':
break;
/* NoticeResponce */
/* NoticeResponse */
case 'N':
break;
/* ErrorResponce */
/* ErrorResponse */
case 'E':
od_backend_error(server, "setup", stream->s,
so_stream_used(stream));
return -1;
default:
od_debug_server(&instance->log, server->id, "setup",

View File

@ -13,6 +13,7 @@ od_backend_new(od_router_t*, od_route_t*);
void od_backend_close(od_server_t*);
int od_backend_terminate(od_server_t*);
int od_backend_reset(od_server_t*);
void od_backend_error(od_server_t*, char*, 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_discard(od_server_t*);

View File

@ -344,6 +344,13 @@ od_frontend_main(od_client_t *client)
od_debug_server(&instance->log, server->id, NULL,
"%c", type);
/* ErrorResponse */
if (type == 'E') {
od_backend_error(server, NULL,
stream->s + rc,
so_stream_used(stream) - rc);
}
/* ReadyForQuery */
if (type == 'Z') {
rc = od_backend_ready(server, stream->s + rc,