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_pooler.h"
|
||||||
#include "od_relay.h"
|
#include "od_relay.h"
|
||||||
#include "od_frontend.h"
|
#include "od_frontend.h"
|
||||||
|
#include "od_backend.h"
|
||||||
#include "od_auth.h"
|
#include "od_auth.h"
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
|
@ -440,8 +441,8 @@ int od_auth_backend(od_server_t *server)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
case 'E':
|
case 'E':
|
||||||
od_error_server(&instance->log, server->id, "auth",
|
od_backend_error(server, "auth", stream->s,
|
||||||
"authentication error");
|
so_stream_used(stream));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,6 +109,24 @@ od_backend_startup(od_server_t *server)
|
||||||
return 0;
|
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 od_backend_ready(od_server_t *server, uint8_t *data, int size)
|
||||||
{
|
{
|
||||||
int status;
|
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];
|
uint8_t type = stream->s[rc];
|
||||||
od_debug_server(&instance->log, server->id, procedure,
|
od_debug_server(&instance->log, server->id, procedure,
|
||||||
"%c", type);
|
"%c", type);
|
||||||
|
/* ErrorResponse */
|
||||||
|
if (type == 'E') {
|
||||||
|
od_backend_error(server, procedure, stream->s,
|
||||||
|
so_stream_used(stream));
|
||||||
|
}
|
||||||
/* ReadyForQuery */
|
/* ReadyForQuery */
|
||||||
if (type == 'Z') {
|
if (type == 'Z') {
|
||||||
od_backend_ready(server, stream->s + rc,
|
od_backend_ready(server, stream->s + rc,
|
||||||
|
@ -204,11 +227,13 @@ od_backend_setup(od_server_t *server)
|
||||||
/* ParameterStatus */
|
/* ParameterStatus */
|
||||||
case 'S':
|
case 'S':
|
||||||
break;
|
break;
|
||||||
/* NoticeResponce */
|
/* NoticeResponse */
|
||||||
case 'N':
|
case 'N':
|
||||||
break;
|
break;
|
||||||
/* ErrorResponce */
|
/* ErrorResponse */
|
||||||
case 'E':
|
case 'E':
|
||||||
|
od_backend_error(server, "setup", stream->s,
|
||||||
|
so_stream_used(stream));
|
||||||
return -1;
|
return -1;
|
||||||
default:
|
default:
|
||||||
od_debug_server(&instance->log, server->id, "setup",
|
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*);
|
void od_backend_close(od_server_t*);
|
||||||
int od_backend_terminate(od_server_t*);
|
int od_backend_terminate(od_server_t*);
|
||||||
int od_backend_reset(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_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*);
|
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,
|
od_debug_server(&instance->log, server->id, NULL,
|
||||||
"%c", type);
|
"%c", type);
|
||||||
|
|
||||||
|
/* ErrorResponse */
|
||||||
|
if (type == 'E') {
|
||||||
|
od_backend_error(server, NULL,
|
||||||
|
stream->s + rc,
|
||||||
|
so_stream_used(stream) - rc);
|
||||||
|
}
|
||||||
|
|
||||||
/* ReadyForQuery */
|
/* ReadyForQuery */
|
||||||
if (type == 'Z') {
|
if (type == 'Z') {
|
||||||
rc = od_backend_ready(server, stream->s + rc,
|
rc = od_backend_ready(server, stream->s + rc,
|
||||||
|
|
Loading…
Reference in New Issue