mirror of https://github.com/yandex/odyssey.git
odissey: log detailed server error messages
This commit is contained in:
parent
d3b196a9fc
commit
cc4f45b86b
|
@ -1 +1 @@
|
|||
Subproject commit 3bcc0a82f93c8814c7f7b0f2eb3afecf48384278
|
||||
Subproject commit 16878a14c0b54e8bf98bf1fa20f6a55b1434ce22
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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*);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue