From e9eeca8a95275bd51c0e3dc5f210fe222523d486 Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko Date: Tue, 12 Sep 2017 16:45:04 +0300 Subject: [PATCH] odissey: add client_fwd_error configuration tweak --- odissey.conf | 1 + sources/config.c | 109 +++++++++++++++++++++++++---------------------- sources/scheme.c | 69 ++++++++++++++++-------------- sources/scheme.h | 17 ++++---- 4 files changed, 106 insertions(+), 90 deletions(-) diff --git a/odissey.conf b/odissey.conf index 77ae32d2..0e415220 100644 --- a/odissey.conf +++ b/odissey.conf @@ -77,6 +77,7 @@ database default pool_discard yes pool_rollback yes + #client_fwd_error no #client_max 100 #client_encoding "UTF8" #datestyle "ISO" diff --git a/sources/config.c b/sources/config.c index 3a107ee6..f34d5007 100644 --- a/sources/config.c +++ b/sources/config.c @@ -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)) diff --git a/sources/scheme.c b/sources/scheme.c index 6430e394..680679af 100644 --- a/sources/scheme.c +++ b/sources/scheme.c @@ -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, ""); } } diff --git a/sources/scheme.h b/sources/scheme.h index 417bf8fc..424a8a2e 100644 --- a/sources/scheme.h +++ b/sources/scheme.h @@ -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;