From f79de93d1e2513fd4b87dd286a0c17fa0a62d15e Mon Sep 17 00:00:00 2001 From: "Alan T. DeKok" Date: Wed, 22 Sep 2021 13:15:55 -0400 Subject: [PATCH] convert query timeout to time_delta --- raddb/mods-config/sql/driver/sqlite | 6 +----- .../rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c | 2 +- src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c | 8 ++++---- .../drivers/rlm_sql_postgresql/rlm_sql_postgresql.c | 8 ++++---- .../rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c | 4 +--- src/modules/rlm_sql/rlm_sql.c | 2 +- src/modules/rlm_sql/rlm_sql.h | 2 +- 7 files changed, 13 insertions(+), 19 deletions(-) diff --git a/raddb/mods-config/sql/driver/sqlite b/raddb/mods-config/sql/driver/sqlite index ec8fe3b7cb..783bc32e44 100644 --- a/raddb/mods-config/sql/driver/sqlite +++ b/raddb/mods-config/sql/driver/sqlite @@ -9,11 +9,7 @@ sqlite { # Path to the sqlite database filename = "/tmp/freeradius.db" -# - # How long to wait for write locks on the database to be - # released (in ms) before giving up. - busy_timeout = 200 -# + # If the file above does not exist and bootstrap is set # a new database file will be created, and the SQL statements # contained within the bootstrap file will be executed. diff --git a/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c b/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c index 8cc494fe03..170d24ff59 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c @@ -759,7 +759,7 @@ do {\ DO_CASS_OPTION("sql_server", cass_cluster_set_contact_points(cluster, config->sql_server)); if (config->sql_port) DO_CASS_OPTION("sql_port", cass_cluster_set_port(cluster, config->sql_port)); /* Can't fail */ - if (config->query_timeout) cass_cluster_set_request_timeout(cluster, config->query_timeout * 1000); + if (config->query_timeout) cass_cluster_set_request_timeout(cluster, fr_time_delta_to_msec(config->query_timeout)); /* Can't fail */ if (config->sql_login && config->sql_password) cass_cluster_set_credentials(cluster, config->sql_login, config->sql_password); diff --git a/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c b/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c index 801624b123..aa54b95709 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c @@ -288,22 +288,22 @@ static sql_rcode_t sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t *c mysql_options(&(conn->db), MYSQL_OPT_CONNECT_TIMEOUT, &connect_timeout); if (config->query_timeout) { - unsigned int read_timeout = config->query_timeout; - unsigned int write_timeout = config->query_timeout; + unsigned int read_timeout = fr_time_delta_to_sec(config->query_timeout); + unsigned int write_timeout = fr_time_delta_to_sec(config->query_timeout); /* * The timeout in seconds for each attempt to read from the server. * There are retries if necessary, so the total effective timeout * value is three times the option value. */ - if (config->query_timeout >= 3) read_timeout /= 3; + if (read_timeout >= 3) read_timeout /= 3; /* * The timeout in seconds for each attempt to write to the server. * There is a retry if necessary, so the total effective timeout * value is two times the option value. */ - if (config->query_timeout >= 2) write_timeout /= 2; + if (write_timeout >= 2) write_timeout /= 2; /* * Connect timeout is actually connect timeout (according to the diff --git a/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c b/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c index 5eaa8dc70e..1fd2241ff4 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c @@ -259,7 +259,7 @@ static CC_HINT(nonnull) sql_rcode_t sql_query(rlm_sql_handle_t *handle, rlm_sql_ { rlm_sql_postgres_conn_t *conn = handle->conn; rlm_sql_postgres_t *inst = config->driver; - fr_time_delta_t timeout = fr_time_delta_from_sec(config->query_timeout); + fr_time_delta_t timeout = config->query_timeout; fr_time_t start; int sockfd; PGresult *tmp_result; @@ -303,7 +303,7 @@ static CC_HINT(nonnull) sql_rcode_t sql_query(rlm_sql_handle_t *handle, rlm_sql_ r = select(sockfd + 1, &read_fd, NULL, NULL, config->query_timeout ? &fr_time_delta_to_timeval(timeout - elapsed) : NULL); if (r == 0) { too_long: - ERROR("Socket read timeout after %d seconds", config->query_timeout); + ERROR("Socket read timeout after %d seconds", (int) fr_time_delta_to_sec(config->query_timeout)); return RLM_SQL_RECONNECT; } if (r < 0) { @@ -579,7 +579,7 @@ static int mod_instantiate(rlm_sql_config_t const *config, void *instance, CONF_ } if (config->query_timeout) { - db_string = talloc_asprintf_append(db_string, " connect_timeout=%d", config->query_timeout); + db_string = talloc_asprintf_append(db_string, " connect_timeout=%d", (int) fr_time_delta_to_sec(config->query_timeout)); } if (inst->send_application_name) { @@ -611,7 +611,7 @@ static int mod_instantiate(rlm_sql_config_t const *config, void *instance, CONF_ } if ((config->query_timeout) && !strstr(db_string, "connect_timeout=")) { - db_string = talloc_asprintf_append(db_string, " connect_timeout=%d", config->query_timeout); + db_string = talloc_asprintf_append(db_string, " connect_timeout=%d", (int) fr_time_delta_to_sec(config->query_timeout)); } if (inst->send_application_name && !strstr(db_string, "application_name=")) { diff --git a/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c b/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c index ad1241de43..85896bf635 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c @@ -57,13 +57,11 @@ typedef struct { typedef struct { char const *filename; - fr_time_t busy_timeout; bool bootstrap; } rlm_sql_sqlite_t; static const CONF_PARSER driver_config[] = { { FR_CONF_OFFSET("filename", FR_TYPE_FILE_OUTPUT | FR_TYPE_REQUIRED, rlm_sql_sqlite_t, filename) }, - { FR_CONF_OFFSET("busy_timeout", FR_TYPE_TIME_DELTA, rlm_sql_sqlite_t, busy_timeout), .dflt = "200s" }, CONF_PARSER_TERMINATOR }; @@ -437,7 +435,7 @@ static int CC_HINT(nonnull) sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_co #endif return RLM_SQL_ERROR; } - status = sqlite3_busy_timeout(conn->db, fr_time_delta_to_sec(inst->busy_timeout)); + status = sqlite3_busy_timeout(conn->db, fr_time_delta_to_sec(config->query_timeout)); if (sql_check_error(conn->db, status) != RLM_SQL_OK) { sql_print_error(conn->db, status, "Error setting busy timeout"); return RLM_SQL_ERROR; diff --git a/src/modules/rlm_sql/rlm_sql.c b/src/modules/rlm_sql/rlm_sql.c index c336ec5f5b..7ae578e6e6 100644 --- a/src/modules/rlm_sql/rlm_sql.c +++ b/src/modules/rlm_sql/rlm_sql.c @@ -108,7 +108,7 @@ static const CONF_PARSER module_config[] = { /* * This only works for a few drivers. */ - { FR_CONF_OFFSET("query_timeout", FR_TYPE_UINT32, rlm_sql_config_t, query_timeout) }, + { FR_CONF_OFFSET("query_timeout", FR_TYPE_TIME_DELTA, rlm_sql_config_t, query_timeout) }, { FR_CONF_POINTER("accounting", FR_TYPE_SUBSECTION, NULL), .subcs = (void const *) acct_config }, diff --git a/src/modules/rlm_sql/rlm_sql.h b/src/modules/rlm_sql/rlm_sql.h index ef3d14325f..9a6310e332 100644 --- a/src/modules/rlm_sql/rlm_sql.h +++ b/src/modules/rlm_sql/rlm_sql.h @@ -120,7 +120,7 @@ typedef struct { //!< NULL drivers. char const *allowed_chars; //!< Chars which done need escaping.. - uint32_t query_timeout; //!< How long to allow queries to run for. + fr_time_delta_t query_timeout; //!< How long to allow queries to run for. char const *connect_query; //!< Query executed after establishing //!< new connection. -- 2.47.2