2019-01-23 15:43:52 +00:00
|
|
|
#ifndef ODYSSEY_STATUS_H
|
|
|
|
#define ODYSSEY_STATUS_H
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Odyssey.
|
|
|
|
*
|
|
|
|
* Scalable PostgreSQL connection pooler.
|
2020-04-02 11:00:56 +00:00
|
|
|
*/
|
2019-01-23 15:43:52 +00:00
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
OD_UNDEF,
|
|
|
|
OD_OK,
|
|
|
|
OD_SKIP,
|
2019-02-10 10:59:48 +00:00
|
|
|
OD_ATTACH,
|
2019-01-23 15:43:52 +00:00
|
|
|
OD_DETACH,
|
|
|
|
OD_STOP,
|
|
|
|
OD_EOOM,
|
|
|
|
OD_EATTACH,
|
2019-07-31 10:30:14 +00:00
|
|
|
OD_EATTACH_TOO_MANY_CONNECTIONS,
|
2019-01-23 15:43:52 +00:00
|
|
|
OD_ESERVER_CONNECT,
|
|
|
|
OD_ESERVER_READ,
|
|
|
|
OD_ESERVER_WRITE,
|
|
|
|
OD_ECLIENT_READ,
|
2020-07-08 06:26:17 +00:00
|
|
|
OD_ECLIENT_WRITE,
|
2020-07-09 17:07:41 +00:00
|
|
|
OD_ESYNC_BROKEN,
|
2020-07-08 06:26:17 +00:00
|
|
|
} od_frontend_status_t;
|
2019-01-23 15:43:52 +00:00
|
|
|
|
2020-02-06 12:00:06 +00:00
|
|
|
static inline char *
|
2020-07-08 06:26:17 +00:00
|
|
|
od_frontend_status_to_str(od_frontend_status_t status)
|
2020-04-02 11:00:56 +00:00
|
|
|
{
|
|
|
|
switch (status) {
|
2020-02-06 12:00:06 +00:00
|
|
|
case OD_UNDEF:
|
|
|
|
return "OD_UNDEF";
|
|
|
|
case OD_OK:
|
|
|
|
return "OD_OK";
|
|
|
|
case OD_SKIP:
|
|
|
|
return "OD_SKIP";
|
|
|
|
case OD_ATTACH:
|
|
|
|
return "OD_UNDEF";
|
|
|
|
case OD_DETACH:
|
|
|
|
return "OD_DETACH";
|
|
|
|
case OD_STOP:
|
|
|
|
return "OD_STOP";
|
|
|
|
case OD_EOOM:
|
|
|
|
return "OD_EOOM";
|
|
|
|
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";
|
2020-07-09 17:07:41 +00:00
|
|
|
case OD_ESYNC_BROKEN:
|
|
|
|
return "OD_ESYNC_BROKEN";
|
2020-02-06 12:00:06 +00:00
|
|
|
}
|
|
|
|
return "unkonown";
|
|
|
|
}
|
|
|
|
|
2020-07-08 06:26:17 +00:00
|
|
|
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,
|
2020-08-05 12:51:16 +00:00
|
|
|
OD_ECLIENT_READ,
|
2020-07-09 17:07:41 +00:00
|
|
|
OD_ESYNC_BROKEN,
|
2020-07-08 06:26:17 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#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_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])
|
|
|
|
|
2020-09-02 16:13:50 +00:00
|
|
|
/* 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])
|
|
|
|
|
2020-07-08 06:26:17 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2019-01-23 15:43:52 +00:00
|
|
|
#endif /* ODYSSEY_STATUS_H */
|