mirror of https://github.com/yandex/odyssey.git
165 lines
3.7 KiB
C
165 lines
3.7 KiB
C
#ifndef ODYSSEY_STATUS_H
|
|
#define ODYSSEY_STATUS_H
|
|
|
|
/*
|
|
* Odyssey.
|
|
*
|
|
* Scalable PostgreSQL connection pooler.
|
|
*/
|
|
|
|
typedef enum {
|
|
OD_UNDEF,
|
|
OD_OK,
|
|
OD_SKIP,
|
|
OD_REQ_SYNC,
|
|
OD_ATTACH,
|
|
OD_DETACH,
|
|
OD_WAIT_SYNC,
|
|
OD_READ_FULL,
|
|
OD_STOP,
|
|
OD_EOOM,
|
|
OD_EATTACH,
|
|
OD_EATTACH_TOO_MANY_CONNECTIONS,
|
|
OD_ESERVER_CONNECT,
|
|
OD_ESERVER_READ,
|
|
OD_ESERVER_WRITE,
|
|
OD_ECLIENT_READ,
|
|
OD_ECLIENT_WRITE,
|
|
OD_ESYNC_BROKEN,
|
|
OD_ECATCHUP_TIMEOUT,
|
|
} od_frontend_status_t;
|
|
|
|
static inline char *od_frontend_status_to_str(od_frontend_status_t status)
|
|
{
|
|
switch (status) {
|
|
case OD_UNDEF:
|
|
return "OD_UNDEF";
|
|
case OD_OK:
|
|
return "OD_OK";
|
|
case OD_SKIP:
|
|
return "OD_SKIP";
|
|
case OD_REQ_SYNC:
|
|
return "OD_REQ_SYNC";
|
|
case OD_ATTACH:
|
|
return "OD_ATTACH";
|
|
case OD_DETACH:
|
|
return "OD_DETACH";
|
|
case OD_WAIT_SYNC:
|
|
return "OD_WAIT_SYNC";
|
|
case OD_STOP:
|
|
return "OD_STOP";
|
|
case OD_EOOM:
|
|
return "OD_EOOM";
|
|
case OD_READ_FULL:
|
|
return "OD_READ_FULL";
|
|
case OD_EATTACH:
|
|
return "OD_EATTACH";
|
|
case OD_EATTACH_TOO_MANY_CONNECTIONS:
|
|
return "OD_EATTACH_TOO_MANY_CONNECTIONS";
|
|
case OD_ESERVER_CONNECT:
|
|
return "OD_ESERVER_CONNECT";
|
|
case OD_ESERVER_READ:
|
|
return "OD_ESERVER_READ";
|
|
case OD_ESERVER_WRITE:
|
|
return "OD_ESERVER_WRITE";
|
|
case OD_ECLIENT_READ:
|
|
return "OD_ECLIENT_READ";
|
|
case OD_ECLIENT_WRITE:
|
|
return "OD_ECLIENT_WRITE";
|
|
case OD_ESYNC_BROKEN:
|
|
return "OD_ESYNC_BROKEN";
|
|
case OD_ECATCHUP_TIMEOUT:
|
|
return "OD_ECATCHUP_TIMEOUT";
|
|
}
|
|
return "UNKNOWN";
|
|
}
|
|
|
|
static const od_frontend_status_t od_frontend_status_errs[] = {
|
|
OD_EOOM,
|
|
OD_EATTACH,
|
|
OD_EATTACH_TOO_MANY_CONNECTIONS,
|
|
OD_ESERVER_CONNECT,
|
|
OD_ESERVER_READ,
|
|
OD_ESERVER_WRITE,
|
|
OD_ECLIENT_WRITE,
|
|
OD_ECLIENT_READ,
|
|
OD_ESYNC_BROKEN,
|
|
OD_ECATCHUP_TIMEOUT,
|
|
};
|
|
|
|
#define OD_FRONTEND_STATUS_ERRORS_TYPES_COUNT \
|
|
sizeof(od_frontend_status_errs) / sizeof(od_frontend_status_errs[0])
|
|
|
|
static inline bool od_frontend_status_is_err(od_frontend_status_t status)
|
|
{
|
|
for (size_t i = 0; i < OD_FRONTEND_STATUS_ERRORS_TYPES_COUNT; ++i) {
|
|
if (od_frontend_status_errs[i] == status) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
typedef enum {
|
|
OD_ROUTER_OK,
|
|
OD_ROUTER_ERROR,
|
|
OD_ROUTER_ERROR_NOT_FOUND,
|
|
OD_ROUTER_ERROR_LIMIT,
|
|
OD_ROUTER_ERROR_LIMIT_ROUTE,
|
|
OD_ROUTER_ERROR_TIMEDOUT,
|
|
OD_ROUTER_ERROR_REPLICATION,
|
|
OD_ROUTER_INSUFFICIENT_ACCESS,
|
|
} od_router_status_t;
|
|
|
|
static inline char *od_router_status_to_str(od_router_status_t status)
|
|
{
|
|
switch (status) {
|
|
case OD_ROUTER_OK:
|
|
return "OD_ROUTER_OK";
|
|
case OD_ROUTER_ERROR:
|
|
return "OD_ROUTER_ERROR";
|
|
case OD_ROUTER_ERROR_NOT_FOUND:
|
|
return "OD_ROUTER_ERROR_NOT_FOUND";
|
|
case OD_ROUTER_ERROR_LIMIT:
|
|
return "OD_ROUTER_ERROR_LIMIT";
|
|
case OD_ROUTER_ERROR_LIMIT_ROUTE:
|
|
return "OD_ROUTER_ERROR_LIMIT_ROUTE";
|
|
case OD_ROUTER_ERROR_TIMEDOUT:
|
|
return "OD_ROUTER_ERROR_TIMEDOUT";
|
|
case OD_ROUTER_ERROR_REPLICATION:
|
|
return "OD_ROUTER_ERROR_REPLICATION";
|
|
default:
|
|
return "unkonown";
|
|
}
|
|
}
|
|
|
|
static const od_router_status_t od_router_status_errs[] = {
|
|
OD_ROUTER_ERROR, OD_ROUTER_ERROR_NOT_FOUND,
|
|
OD_ROUTER_ERROR_LIMIT, OD_ROUTER_ERROR_LIMIT_ROUTE,
|
|
OD_ROUTER_ERROR_TIMEDOUT, OD_ROUTER_ERROR_REPLICATION
|
|
};
|
|
|
|
#define OD_ROUTER_STATUS_ERRORS_TYPES_COUNT \
|
|
sizeof(od_router_status_errs) / sizeof(od_router_status_errs[0])
|
|
|
|
/* errors that could be counted per route */
|
|
static const od_router_status_t od_router_route_status_errs[] = {
|
|
OD_ROUTER_ERROR_LIMIT_ROUTE,
|
|
};
|
|
|
|
#define OD_ROUTER_ROUTE_STATUS_ERRORS_TYPES_COUNT \
|
|
sizeof(od_router_route_status_errs) / \
|
|
sizeof(od_router_route_status_errs[0])
|
|
|
|
static inline bool od_router_status_is_err(od_router_status_t status)
|
|
{
|
|
for (size_t i = 0; i < OD_ROUTER_STATUS_ERRORS_TYPES_COUNT; ++i) {
|
|
if (od_router_status_errs[i] == status) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
#endif /* ODYSSEY_STATUS_H */
|