odissey: add client_fwd_error configuration tweak

This commit is contained in:
Dmitry Simonenko 2017-09-12 16:45:04 +03:00
parent a08eb30987
commit e9eeca8a95
4 changed files with 106 additions and 90 deletions

View File

@ -77,6 +77,7 @@ database default
pool_discard yes
pool_rollback yes
#client_fwd_error no
#client_max 100
#client_encoding "UTF8"
#datestyle "ISO"

View File

@ -64,6 +64,7 @@ enum
OD_LPIPELINING,
OD_LWORKERS,
OD_LCLIENT_MAX,
OD_LCLIENT_FWD_ERROR,
OD_LCLIENT_ENCODING,
OD_LDATESTYLE,
OD_LTIMEZONE,
@ -105,60 +106,61 @@ typedef struct
static od_keyword_t od_config_keywords[] =
{
/* main */
od_keyword("yes", OD_LYES),
od_keyword("no", OD_LNO),
od_keyword("include", OD_LINCLUDE),
od_keyword("daemonize", OD_LDAEMONIZE),
od_keyword("log_debug", OD_LLOG_DEBUG),
od_keyword("log_to_stdout", OD_LLOG_TO_STDOUT),
od_keyword("log_config", OD_LLOG_CONFIG),
od_keyword("log_session", OD_LLOG_SESSION),
od_keyword("log_file", OD_LLOG_FILE),
od_keyword("log_format", OD_LLOG_FORMAT),
od_keyword("log_stats", OD_LLOG_STATS),
od_keyword("pid_file", OD_LPID_FILE),
od_keyword("syslog", OD_LSYSLOG),
od_keyword("syslog_ident", OD_LSYSLOG_IDENT),
od_keyword("syslog_facility", OD_LSYSLOG_FACILITY),
od_keyword("stats_interval", OD_LSTATS_INTERVAL),
od_keyword("yes", OD_LYES),
od_keyword("no", OD_LNO),
od_keyword("include", OD_LINCLUDE),
od_keyword("daemonize", OD_LDAEMONIZE),
od_keyword("log_debug", OD_LLOG_DEBUG),
od_keyword("log_to_stdout", OD_LLOG_TO_STDOUT),
od_keyword("log_config", OD_LLOG_CONFIG),
od_keyword("log_session", OD_LLOG_SESSION),
od_keyword("log_file", OD_LLOG_FILE),
od_keyword("log_format", OD_LLOG_FORMAT),
od_keyword("log_stats", OD_LLOG_STATS),
od_keyword("pid_file", OD_LPID_FILE),
od_keyword("syslog", OD_LSYSLOG),
od_keyword("syslog_ident", OD_LSYSLOG_IDENT),
od_keyword("syslog_facility", OD_LSYSLOG_FACILITY),
od_keyword("stats_interval", OD_LSTATS_INTERVAL),
/* listen */
od_keyword("listen", OD_LLISTEN),
od_keyword("host", OD_LHOST),
od_keyword("port", OD_LPORT),
od_keyword("backlog", OD_LBACKLOG),
od_keyword("nodelay", OD_LNODELAY),
od_keyword("keepalive", OD_LKEEPALIVE),
od_keyword("readahead", OD_LREADAHEAD),
od_keyword("pipelining", OD_LPIPELINING),
od_keyword("workers", OD_LWORKERS),
od_keyword("client_max", OD_LCLIENT_MAX),
od_keyword("client_encoding", OD_LCLIENT_ENCODING),
od_keyword("datestyle", OD_LDATESTYLE),
od_keyword("timezone", OD_LTIMEZONE),
od_keyword("tls", OD_LTLS),
od_keyword("tls_ca_file", OD_LTLS_CA_FILE),
od_keyword("tls_key_file", OD_LTLS_KEY_FILE),
od_keyword("tls_cert_file", OD_LTLS_CERT_FILE),
od_keyword("tls_protocols", OD_LTLS_PROTOCOLS),
od_keyword("listen", OD_LLISTEN),
od_keyword("host", OD_LHOST),
od_keyword("port", OD_LPORT),
od_keyword("backlog", OD_LBACKLOG),
od_keyword("nodelay", OD_LNODELAY),
od_keyword("keepalive", OD_LKEEPALIVE),
od_keyword("readahead", OD_LREADAHEAD),
od_keyword("pipelining", OD_LPIPELINING),
od_keyword("workers", OD_LWORKERS),
od_keyword("client_max", OD_LCLIENT_MAX),
od_keyword("client_fwd_error", OD_LCLIENT_FWD_ERROR),
od_keyword("client_encoding", OD_LCLIENT_ENCODING),
od_keyword("datestyle", OD_LDATESTYLE),
od_keyword("timezone", OD_LTIMEZONE),
od_keyword("tls", OD_LTLS),
od_keyword("tls_ca_file", OD_LTLS_CA_FILE),
od_keyword("tls_key_file", OD_LTLS_KEY_FILE),
od_keyword("tls_cert_file", OD_LTLS_CERT_FILE),
od_keyword("tls_protocols", OD_LTLS_PROTOCOLS),
/* storage */
od_keyword("storage", OD_LSTORAGE),
od_keyword("type", OD_LTYPE),
od_keyword("default", OD_LDEFAULT),
od_keyword("storage", OD_LSTORAGE),
od_keyword("type", OD_LTYPE),
od_keyword("default", OD_LDEFAULT),
/* database */
od_keyword("database", OD_LDATABASE),
od_keyword("user", OD_LUSER),
od_keyword("password", OD_LPASSWORD),
od_keyword("pool", OD_LPOOL),
od_keyword("pool_size", OD_LPOOL_SIZE),
od_keyword("pool_timeout", OD_LPOOL_TIMEOUT),
od_keyword("pool_ttl", OD_LPOOL_TTL),
od_keyword("pool_cancel", OD_LPOOL_CANCEL),
od_keyword("pool_discard", OD_LPOOL_DISCARD),
od_keyword("pool_rollback", OD_LPOOL_ROLLBACK),
od_keyword("storage_db", OD_LSTORAGE_DB),
od_keyword("storage_user", OD_LSTORAGE_USER),
od_keyword("storage_password", OD_LSTORAGE_PASSWORD),
od_keyword("authentication", OD_LAUTHENTICATION),
od_keyword("database", OD_LDATABASE),
od_keyword("user", OD_LUSER),
od_keyword("password", OD_LPASSWORD),
od_keyword("pool", OD_LPOOL),
od_keyword("pool_size", OD_LPOOL_SIZE),
od_keyword("pool_timeout", OD_LPOOL_TIMEOUT),
od_keyword("pool_ttl", OD_LPOOL_TTL),
od_keyword("pool_cancel", OD_LPOOL_CANCEL),
od_keyword("pool_discard", OD_LPOOL_DISCARD),
od_keyword("pool_rollback", OD_LPOOL_ROLLBACK),
od_keyword("storage_db", OD_LSTORAGE_DB),
od_keyword("storage_user", OD_LSTORAGE_USER),
od_keyword("storage_password", OD_LSTORAGE_PASSWORD),
od_keyword("authentication", OD_LAUTHENTICATION),
{ 0, 0, 0 }
};
@ -623,6 +625,11 @@ od_config_parse_route(od_config_t *config, char *db_name, int db_name_len,
return -1;
route->client_max_set = 1;
continue;
/* client_fwd_error */
case OD_LCLIENT_FWD_ERROR:
if (! od_config_next_yes_no(config, &route->client_fwd_error))
return -1;
continue;
/* client_encoding */
case OD_LCLIENT_ENCODING:
if (! od_config_next_string(config, &route->client_encoding))

View File

@ -561,6 +561,10 @@ int od_schemeroute_compare(od_schemeroute_t *a, od_schemeroute_t *b)
if (a->client_max != b->client_max)
return 0;
/* client_fwd_error */
if (a->client_fwd_error != b->client_fwd_error)
return 0;
return 1;
}
@ -846,19 +850,19 @@ void od_scheme_print(od_scheme_t *scheme, od_logger_t *logger, int routes_only)
od_schemelisten_t *listen;
listen = od_container_of(i, od_schemelisten_t, link);
od_log(logger, "listen");
od_log(logger, " host %s", listen->host);
od_log(logger, " port %d", listen->port);
od_log(logger, " backlog %d", listen->backlog);
od_log(logger, " host %s", listen->host);
od_log(logger, " port %d", listen->port);
od_log(logger, " backlog %d", listen->backlog);
if (listen->tls)
od_log(logger, " tls %s", listen->tls);
od_log(logger, " tls %s", listen->tls);
if (listen->tls_ca_file)
od_log(logger, " tls_ca_file %s", listen->tls_ca_file);
od_log(logger, " tls_ca_file %s", listen->tls_ca_file);
if (listen->tls_key_file)
od_log(logger, " tls_key_file %s", listen->tls_key_file);
od_log(logger, " tls_key_file %s", listen->tls_key_file);
if (listen->tls_cert_file)
od_log(logger, " tls_cert_file %s", listen->tls_cert_file);
od_log(logger, " tls_cert_file %s", listen->tls_cert_file);
if (listen->tls_protocols)
od_log(logger, " tls_protocols %s", listen->tls_protocols);
od_log(logger, " tls_protocols %s", listen->tls_protocols);
od_log(logger, "");
}
log_routes:;
@ -869,45 +873,48 @@ log_routes:;
route->db_name,
route->user_name, route->version,
route->is_obsolete ? "(obsolete)" : "");
od_log(logger, " authentication %s", route->auth);
od_log(logger, " pool %s", route->pool_sz);
od_log(logger, " pool_size %d", route->pool_size);
od_log(logger, " pool_timeout %d", route->pool_timeout);
od_log(logger, " pool_ttl %d", route->pool_ttl);
od_log(logger, " pool_cancel %s",
od_log(logger, " authentication %s", route->auth);
od_log(logger, " pool %s", route->pool_sz);
od_log(logger, " pool_size %d", route->pool_size);
od_log(logger, " pool_timeout %d", route->pool_timeout);
od_log(logger, " pool_ttl %d", route->pool_ttl);
od_log(logger, " pool_cancel %s",
route->pool_cancel ? "yes" : "no");
od_log(logger, " pool_rollback %s",
od_log(logger, " pool_rollback %s",
route->pool_rollback ? "yes" : "no");
od_log(logger, " pool_discard %s",
od_log(logger, " pool_discard %s",
route->pool_discard ? "yes" : "no");
if (route->client_max_set)
od_log(logger, " client_max %d", route->client_max);
od_log(logger, " client_max %d", route->client_max);
if (route->client_fwd_error)
od_log(logger, " client_fwd_error %s",
od_scheme_yes_no(route->client_fwd_error));
if (route->client_encoding)
od_log(logger, " client_encoding %s", route->client_encoding);
od_log(logger, " client_encoding %s", route->client_encoding);
if (route->datestyle)
od_log(logger, " datestyle %s", route->datestyle);
od_log(logger, " datestyle %s", route->datestyle);
if (route->timezone)
od_log(logger, " timezone %s", route->timezone);
od_log(logger, " storage %s", route->storage_name);
od_log(logger, " type %s", route->storage->type);
od_log(logger, " timezone %s", route->timezone);
od_log(logger, " storage %s", route->storage_name);
od_log(logger, " type %s", route->storage->type);
if (route->storage->host)
od_log(logger, " host %s", route->storage->host);
od_log(logger, " host %s", route->storage->host);
if (route->storage->port)
od_log(logger, " port %d", route->storage->port);
od_log(logger, " port %d", route->storage->port);
if (route->storage->tls)
od_log(logger, " tls %s", route->storage->tls);
od_log(logger, " tls %s", route->storage->tls);
if (route->storage->tls_ca_file)
od_log(logger, " tls_ca_file %s", route->storage->tls_ca_file);
od_log(logger, " tls_ca_file %s", route->storage->tls_ca_file);
if (route->storage->tls_key_file)
od_log(logger, " tls_key_file %s", route->storage->tls_key_file);
od_log(logger, " tls_key_file %s", route->storage->tls_key_file);
if (route->storage->tls_cert_file)
od_log(logger, " tls_cert_file %s", route->storage->tls_cert_file);
od_log(logger, " tls_cert_file %s", route->storage->tls_cert_file);
if (route->storage->tls_protocols)
od_log(logger, " tls_protocols %s", route->storage->tls_protocols);
od_log(logger, " tls_protocols %s", route->storage->tls_protocols);
if (route->storage_db)
od_log(logger, " storage_db %s", route->storage_db);
od_log(logger, " storage_db %s", route->storage_db);
if (route->storage_user)
od_log(logger, " storage_user %s", route->storage_user);
od_log(logger, " storage_user %s", route->storage_user);
od_log(logger, "");
}
}

View File

@ -90,13 +90,6 @@ struct od_schemeroute
int storage_user_len;
char *storage_password;
int storage_password_len;
/* client options */
char *client_encoding;
int client_encoding_len;
char *datestyle;
int datestyle_len;
char *timezone;
int timezone_len;
/* pool */
od_pooling_t pool;
char *pool_sz;
@ -106,7 +99,15 @@ struct od_schemeroute
int pool_cancel;
int pool_discard;
int pool_rollback;
/* limits */
/* client options */
char *client_encoding;
int client_encoding_len;
char *datestyle;
int datestyle_len;
char *timezone;
int timezone_len;
/* misc */
int client_fwd_error;
int client_max_set;
int client_max;
od_list_t link;