From: Sebastian Harl Date: Tue, 5 Mar 2013 01:11:13 +0000 (+0100) Subject: Merged branch 'master' of git://git.tokkee.org/sysdb.git. X-Git-Tag: sysdb-0.1.0~438 X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=commitdiff_plain;h=1905dca54fb53caed8171da2fcb842afc9f33216;hp=e0a9f17bbae0ca01b2246b601a2524e8d7457a99 Merged branch 'master' of git://git.tokkee.org/sysdb.git. --- diff --git a/src/backend/puppet-storeconfigs.c b/src/backend/puppet-storeconfigs.c index 1129a5a..f033808 100644 --- a/src/backend/puppet-storeconfigs.c +++ b/src/backend/puppet-storeconfigs.c @@ -150,6 +150,12 @@ sdb_puppet_stcfg_collect(sdb_object_t *user_data) return -1; client = SDB_OBJ_WRAPPER(user_data)->data; + if (sdb_dbi_client_check_conn(client)) { + fprintf(stderr, "puppet storeconfigs backend: " + "Connection to storeconfigs DB failed.\n"); + return -1; + } + if (sdb_dbi_exec_query(client, "SELECT name, updated_at FROM hosts;", sdb_puppet_stcfg_get_hosts, NULL, /* #columns = */ 2, /* col types = */ SDB_TYPE_STRING, SDB_TYPE_DATETIME)) { diff --git a/src/include/utils/dbi.h b/src/include/utils/dbi.h index 77d0042..c249041 100644 --- a/src/include/utils/dbi.h +++ b/src/include/utils/dbi.h @@ -113,6 +113,17 @@ sdb_dbi_client_set_options(sdb_dbi_client_t *client, int sdb_dbi_client_connect(sdb_dbi_client_t *client); +/* + * sdb_dbi_client_check_conn: + * Check the database-connection and try to reconnect if that fails. + * + * Returns: + * - 0 on success (the connection is connected after the call) + * - a negative value else (failed to reconnect) + */ +int +sdb_dbi_client_check_conn(sdb_dbi_client_t *client); + /* * sdb_dbi_exec_query: * Execute an SQL query on the database. The specified 'callback' will be diff --git a/src/utils/dbi.c b/src/utils/dbi.c index ee2280c..380a841 100644 --- a/src/utils/dbi.c +++ b/src/utils/dbi.c @@ -346,6 +346,20 @@ sdb_dbi_client_connect(sdb_dbi_client_t *client) return 0; } /* sdb_dbi_client_connect */ +int +sdb_dbi_client_check_conn(sdb_dbi_client_t *client) +{ + if (! client) + return -1; + + if (! client->conn) + return sdb_dbi_client_connect(client); + + if (dbi_conn_ping(client->conn)) + return 0; + return sdb_dbi_client_connect(client); +} /* sdb_dbi_client_check_conn */ + int sdb_dbi_exec_query(sdb_dbi_client_t *client, const char *query, sdb_dbi_data_cb callback, sdb_object_t *user_data, int n, ...) @@ -355,7 +369,7 @@ sdb_dbi_exec_query(sdb_dbi_client_t *client, const char *query, int status; - if ((! client) || (! query)) + if ((! client) || (! client->conn) || (! query)) return -1; res = dbi_conn_query(client->conn, query);