diff options
author | Bertrand Marc <beberking@gmail.com> | 2012-06-06 20:47:50 +0200 |
---|---|---|
committer | Bertrand Marc <beberking@gmail.com> | 2012-06-06 20:47:50 +0200 |
commit | 15d0a119987bc62675a17dea2c24b652a42c53e3 (patch) | |
tree | d6598fb09c24a8004da21bee1a19f3f1ea37c66c /src/datacache | |
parent | c47dd4e3165b7894669d8f7f800bac75ac8ad95c (diff) | |
parent | 740b30688bd745a527f96f9116c19acb3480971a (diff) |
Merge tag 'upstream/0.9.3'
Upstream version 0.9.3
Diffstat (limited to 'src/datacache')
-rw-r--r-- | src/datacache/Makefile.am | 2 | ||||
-rw-r--r-- | src/datacache/Makefile.in | 6 | ||||
-rw-r--r-- | src/datacache/datacache.c | 9 | ||||
-rw-r--r-- | src/datacache/plugin_datacache_mysql.c | 575 | ||||
-rw-r--r-- | src/datacache/plugin_datacache_postgres.c | 216 | ||||
-rw-r--r-- | src/datacache/plugin_datacache_sqlite.c | 20 |
6 files changed, 73 insertions, 755 deletions
diff --git a/src/datacache/Makefile.am b/src/datacache/Makefile.am index 6b3f916..d34e6e8 100644 --- a/src/datacache/Makefile.am +++ b/src/datacache/Makefile.am @@ -59,6 +59,7 @@ libgnunet_plugin_datacache_mysql_la_SOURCES = \ plugin_datacache_mysql.c libgnunet_plugin_datacache_mysql_la_LIBADD = \ $(top_builddir)/src/statistics/libgnunetstatistics.la \ + $(top_builddir)/src/mysql/libgnunetmysql.la \ $(top_builddir)/src/util/libgnunetutil.la \ $(GN_PLUGIN_LDFLAGS) $(MYSQL_LDFLAGS) -lmysqlclient libgnunet_plugin_datacache_mysql_la_CPPFLAGS = \ @@ -69,6 +70,7 @@ libgnunet_plugin_datacache_mysql_la_LDFLAGS = \ libgnunet_plugin_datacache_postgres_la_SOURCES = \ plugin_datacache_postgres.c libgnunet_plugin_datacache_postgres_la_LIBADD = \ + $(top_builddir)/src/postgres/libgnunetpostgres.la \ $(top_builddir)/src/statistics/libgnunetstatistics.la \ $(top_builddir)/src/util/libgnunetutil.la \ $(GN_PLUGIN_LDFLAGS) $(POSTGRES_LDFLAGS) -lpq diff --git a/src/datacache/Makefile.in b/src/datacache/Makefile.in index fd0d3e2..2acd972 100644 --- a/src/datacache/Makefile.in +++ b/src/datacache/Makefile.in @@ -86,6 +86,7 @@ LTLIBRARIES = $(lib_LTLIBRARIES) $(plugin_LTLIBRARIES) am__DEPENDENCIES_1 = libgnunet_plugin_datacache_mysql_la_DEPENDENCIES = \ $(top_builddir)/src/statistics/libgnunetstatistics.la \ + $(top_builddir)/src/mysql/libgnunetmysql.la \ $(top_builddir)/src/util/libgnunetutil.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libgnunet_plugin_datacache_mysql_la_OBJECTS = \ @@ -103,6 +104,7 @@ libgnunet_plugin_datacache_mysql_la_LINK = $(LIBTOOL) $(AM_V_lt) \ @HAVE_MYSQL_TRUE@am_libgnunet_plugin_datacache_mysql_la_rpath = \ @HAVE_MYSQL_TRUE@ -rpath $(plugindir) libgnunet_plugin_datacache_postgres_la_DEPENDENCIES = \ + $(top_builddir)/src/postgres/libgnunetpostgres.la \ $(top_builddir)/src/statistics/libgnunetstatistics.la \ $(top_builddir)/src/util/libgnunetutil.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) @@ -333,6 +335,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JAVAPORT = @JAVAPORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_DL = @LIBADD_DL@ @@ -366,6 +369,7 @@ LT_DLLOADERS = @LT_DLLOADERS@ LT_DLPREOPEN = @LT_DLPREOPEN@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ +MONKEYPREFIX = @MONKEYPREFIX@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ @@ -530,6 +534,7 @@ libgnunet_plugin_datacache_mysql_la_SOURCES = \ libgnunet_plugin_datacache_mysql_la_LIBADD = \ $(top_builddir)/src/statistics/libgnunetstatistics.la \ + $(top_builddir)/src/mysql/libgnunetmysql.la \ $(top_builddir)/src/util/libgnunetutil.la \ $(GN_PLUGIN_LDFLAGS) $(MYSQL_LDFLAGS) -lmysqlclient @@ -543,6 +548,7 @@ libgnunet_plugin_datacache_postgres_la_SOURCES = \ plugin_datacache_postgres.c libgnunet_plugin_datacache_postgres_la_LIBADD = \ + $(top_builddir)/src/postgres/libgnunetpostgres.la \ $(top_builddir)/src/statistics/libgnunetstatistics.la \ $(top_builddir)/src/util/libgnunetutil.la \ $(GN_PLUGIN_LDFLAGS) $(POSTGRES_LDFLAGS) -lpq diff --git a/src/datacache/datacache.c b/src/datacache/datacache.c index 936031b..b440af1 100644 --- a/src/datacache/datacache.c +++ b/src/datacache/datacache.c @@ -29,7 +29,6 @@ #include "gnunet_statistics_service.h" #include "gnunet_datacache_plugin.h" -#define DEBUG_DATACACHE GNUNET_EXTRA_LOGGING #define LOG(kind,...) GNUNET_log_from (kind, "datacache", __VA_ARGS__) @@ -108,10 +107,8 @@ env_delete_notify (void *cls, const GNUNET_HashCode * key, size_t size) { struct GNUNET_DATACACHE_Handle *h = cls; -#if DEBUG_DATACACHE LOG (GNUNET_ERROR_TYPE_DEBUG, "Content under key `%s' discarded\n", GNUNET_h2s (key)); -#endif GNUNET_assert (h->utilization >= size); h->utilization -= size; GNUNET_CONTAINER_bloomfilter_remove (h->filter, key); @@ -248,10 +245,8 @@ GNUNET_DATACACHE_put (struct GNUNET_DATACACHE_Handle *h, GNUNET_break (0); return GNUNET_SYSERR; } -#if DEBUG_DATACACHE LOG (GNUNET_ERROR_TYPE_DEBUG, "Stored data under key `%s' in cache\n", GNUNET_h2s (key)); -#endif GNUNET_STATISTICS_update (h->stats, gettext_noop ("# bytes stored"), size, GNUNET_NO); GNUNET_CONTAINER_bloomfilter_add (h->filter, key); @@ -280,20 +275,16 @@ GNUNET_DATACACHE_get (struct GNUNET_DATACACHE_Handle *h, { GNUNET_STATISTICS_update (h->stats, gettext_noop ("# requests received"), 1, GNUNET_NO); -#if DEBUG_DATACACHE LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing request for key `%s'\n", GNUNET_h2s (key)); -#endif if (GNUNET_OK != GNUNET_CONTAINER_bloomfilter_test (h->filter, key)) { GNUNET_STATISTICS_update (h->stats, gettext_noop ("# requests filtered by bloom filter"), 1, GNUNET_NO); -#if DEBUG_DATACACHE LOG (GNUNET_ERROR_TYPE_DEBUG, "Bloomfilter filters request for key `%s'\n", GNUNET_h2s (key)); -#endif return 0; /* can not be present */ } return h->api->get (h->api->cls, key, type, iter, iter_cls); diff --git a/src/datacache/plugin_datacache_mysql.c b/src/datacache/plugin_datacache_mysql.c index 9185c5c..8103429 100644 --- a/src/datacache/plugin_datacache_mysql.c +++ b/src/datacache/plugin_datacache_mysql.c @@ -80,9 +80,9 @@ #include "platform.h" #include "gnunet_util_lib.h" #include "gnunet_datacache_plugin.h" +#include "gnunet_mysql_lib.h" #include <mysql/mysql.h> -#define DEBUG_DATACACHE_MYSQL GNUNET_EXTRA_LOGGING /** * Estimate of the per-entry overhead (including indices). @@ -90,12 +90,6 @@ #define OVERHEAD ((4*2+4*2+8*2+8*2+sizeof(GNUNET_HashCode)*5+8)) /** - * Maximum number of supported parameters for a prepared - * statement. Increase if needed. - */ -#define MAX_PARAM 16 - -/** * Die with an error message that indicates * a failure of the command 'cmd' with the message given * by strerror(errno). @@ -109,20 +103,6 @@ */ #define LOG_MYSQL(level, cmd, dbh) do { GNUNET_log(level, _("`%s' failed at %s:%d with error: %s\n"), cmd, __FILE__, __LINE__, mysql_error((dbh)->dbf)); } while(0); -struct GNUNET_MysqlStatementHandle -{ - struct GNUNET_MysqlStatementHandle *next; - - struct GNUNET_MysqlStatementHandle *prev; - - char *query; - - MYSQL_STMT *statement; - - int valid; - -}; - /** * Context for all functions in this plugin. @@ -137,536 +117,32 @@ struct Plugin /** * Handle to the mysql database. */ - MYSQL *dbf; - - struct GNUNET_MysqlStatementHandle *shead; - - struct GNUNET_MysqlStatementHandle *stail; - - /** - * Filename of "my.cnf" (msyql configuration). - */ - char *cnffile; + struct GNUNET_MYSQL_Context *mc; #define SELECT_VALUE_STMT "SELECT value,expire FROM gn080dstore FORCE INDEX (hashidx) WHERE hash=? AND type=? AND expire >= ? LIMIT 1 OFFSET ?" - struct GNUNET_MysqlStatementHandle *select_value; + struct GNUNET_MYSQL_StatementHandle *select_value; #define COUNT_VALUE_STMT "SELECT count(*) FROM gn080dstore FORCE INDEX (hashidx) WHERE hash=? AND type=? AND expire >= ?" - struct GNUNET_MysqlStatementHandle *count_value; + struct GNUNET_MYSQL_StatementHandle *count_value; #define SELECT_OLD_VALUE_STMT "SELECT hash, vhash, type, value FROM gn080dstore FORCE INDEX (expireidx) ORDER BY puttime ASC LIMIT 1" - struct GNUNET_MysqlStatementHandle *select_old_value; + struct GNUNET_MYSQL_StatementHandle *select_old_value; #define DELETE_VALUE_STMT "DELETE FROM gn080dstore WHERE hash = ? AND vhash = ? AND type = ? AND value = ?" - struct GNUNET_MysqlStatementHandle *delete_value; + struct GNUNET_MYSQL_StatementHandle *delete_value; #define INSERT_VALUE_STMT "INSERT INTO gn080dstore (type, puttime, expire, hash, vhash, value) "\ "VALUES (?, ?, ?, ?, ?, ?)" - struct GNUNET_MysqlStatementHandle *insert_value; + struct GNUNET_MYSQL_StatementHandle *insert_value; #define UPDATE_VALUE_STMT "UPDATE gn080dstore FORCE INDEX (allidx) SET puttime=?, expire=? "\ "WHERE hash=? AND vhash=? AND type=?" - struct GNUNET_MysqlStatementHandle *update_value; + struct GNUNET_MYSQL_StatementHandle *update_value; }; /** - * Obtain the location of ".my.cnf". - * - * @param cfg our configuration - * @return NULL on error - */ -static char * -get_my_cnf_path (const struct GNUNET_CONFIGURATION_Handle *cfg) -{ - char *cnffile; - char *home_dir; - struct stat st; - -#ifndef WINDOWS - struct passwd *pw; -#endif - int configured; - -#ifndef WINDOWS - pw = getpwuid (getuid ()); - if (!pw) - { - GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "getpwuid"); - return NULL; - } - if (GNUNET_YES == - GNUNET_CONFIGURATION_have_value (cfg, "datacache-mysql", "CONFIG")) - { - GNUNET_assert (GNUNET_OK == - GNUNET_CONFIGURATION_get_value_filename (cfg, - "datacache-mysql", - "CONFIG", - &cnffile)); - configured = GNUNET_YES; - } - else - { - home_dir = GNUNET_strdup (pw->pw_dir); - GNUNET_asprintf (&cnffile, "%s/.my.cnf", home_dir); - GNUNET_free (home_dir); - configured = GNUNET_NO; - } -#else - home_dir = (char *) GNUNET_malloc (_MAX_PATH + 1); - plibc_conv_to_win_path ("~/", home_dir); - GNUNET_asprintf (&cnffile, "%s/.my.cnf", home_dir); - GNUNET_free (home_dir); - configured = GNUNET_NO; -#endif - GNUNET_log (GNUNET_ERROR_TYPE_INFO, - _("Trying to use file `%s' for MySQL configuration.\n"), cnffile); - if ((0 != STAT (cnffile, &st)) || (0 != ACCESS (cnffile, R_OK)) || - (!S_ISREG (st.st_mode))) - { - if (configured == GNUNET_YES) - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Could not access file `%s': %s\n"), cnffile, - STRERROR (errno)); - GNUNET_free (cnffile); - return NULL; - } - return cnffile; -} - - -/** - * Free a prepared statement. - * - * @param plugin plugin context - * @param s prepared statement - */ -static void -prepared_statement_destroy (struct Plugin *plugin, - struct GNUNET_MysqlStatementHandle *s) -{ - GNUNET_CONTAINER_DLL_remove (plugin->shead, plugin->stail, s); - if (s->valid) - mysql_stmt_close (s->statement); - GNUNET_free (s->query); - GNUNET_free (s); -} - - -/** - * Close database connection and all prepared statements (we got a DB - * disconnect error). - */ -static int -iclose (struct Plugin *plugin) -{ - while (NULL != plugin->shead) - prepared_statement_destroy (plugin, plugin->shead); - if (plugin->dbf != NULL) - { - mysql_close (plugin->dbf); - plugin->dbf = NULL; - } - return GNUNET_OK; -} - - -/** - * Open the connection with the database (and initialize - * our default options). - * - * @return GNUNET_OK on success - */ -static int -iopen (struct Plugin *ret) -{ - char *mysql_dbname; - char *mysql_server; - char *mysql_user; - char *mysql_password; - unsigned long long mysql_port; - my_bool reconnect; - unsigned int timeout; - - ret->dbf = mysql_init (NULL); - if (ret->dbf == NULL) - return GNUNET_SYSERR; - if (ret->cnffile != NULL) - mysql_options (ret->dbf, MYSQL_READ_DEFAULT_FILE, ret->cnffile); - mysql_options (ret->dbf, MYSQL_READ_DEFAULT_GROUP, "client"); - reconnect = 0; - mysql_options (ret->dbf, MYSQL_OPT_RECONNECT, &reconnect); - mysql_options (ret->dbf, MYSQL_OPT_CONNECT_TIMEOUT, (const void *) &timeout); - mysql_options (ret->dbf, MYSQL_SET_CHARSET_NAME, "UTF8"); - timeout = 60; /* in seconds */ - mysql_options (ret->dbf, MYSQL_OPT_READ_TIMEOUT, (const void *) &timeout); - mysql_options (ret->dbf, MYSQL_OPT_WRITE_TIMEOUT, (const void *) &timeout); - mysql_dbname = NULL; - if (GNUNET_YES == - GNUNET_CONFIGURATION_have_value (ret->env->cfg, "datacache-mysql", - "DATABASE")) - GNUNET_assert (GNUNET_OK == - GNUNET_CONFIGURATION_get_value_string (ret->env->cfg, - "datacache-mysql", - "DATABASE", - &mysql_dbname)); - else - mysql_dbname = GNUNET_strdup ("gnunet"); - mysql_user = NULL; - if (GNUNET_YES == - GNUNET_CONFIGURATION_have_value (ret->env->cfg, "datacache-mysql", - "USER")) - { - GNUNET_assert (GNUNET_OK == - GNUNET_CONFIGURATION_get_value_string (ret->env->cfg, - "datacache-mysql", - "USER", &mysql_user)); - } - mysql_password = NULL; - if (GNUNET_YES == - GNUNET_CONFIGURATION_have_value (ret->env->cfg, "datacache-mysql", - "PASSWORD")) - { - GNUNET_assert (GNUNET_OK == - GNUNET_CONFIGURATION_get_value_string (ret->env->cfg, - "datacache-mysql", - "PASSWORD", - &mysql_password)); - } - mysql_server = NULL; - if (GNUNET_YES == - GNUNET_CONFIGURATION_have_value (ret->env->cfg, "datacache-mysql", - "HOST")) - { - GNUNET_assert (GNUNET_OK == - GNUNET_CONFIGURATION_get_value_string (ret->env->cfg, - "datacache-mysql", - "HOST", - &mysql_server)); - } - mysql_port = 0; - if (GNUNET_YES == - GNUNET_CONFIGURATION_have_value (ret->env->cfg, "datacache-mysql", - "PORT")) - { - GNUNET_assert (GNUNET_OK == - GNUNET_CONFIGURATION_get_value_number (ret->env->cfg, - "datacache-mysql", - "PORT", &mysql_port)); - } - - GNUNET_assert (mysql_dbname != NULL); - mysql_real_connect (ret->dbf, mysql_server, mysql_user, mysql_password, - mysql_dbname, (unsigned int) mysql_port, NULL, - CLIENT_IGNORE_SIGPIPE); - GNUNET_free_non_null (mysql_server); - GNUNET_free_non_null (mysql_user); - GNUNET_free_non_null (mysql_password); - GNUNET_free (mysql_dbname); - if (mysql_error (ret->dbf)[0]) - { - LOG_MYSQL (GNUNET_ERROR_TYPE_ERROR, "mysql_real_connect", ret); - return GNUNET_SYSERR; - } - return GNUNET_OK; -} - - -/** - * Run the given MySQL statement. - * - * @return GNUNET_OK on success, GNUNET_SYSERR on error - */ -static int -run_statement (struct Plugin *plugin, const char *statement) -{ - if ((NULL == plugin->dbf) && (GNUNET_OK != iopen (plugin))) - return GNUNET_SYSERR; - mysql_query (plugin->dbf, statement); - if (mysql_error (plugin->dbf)[0]) - { - LOG_MYSQL (GNUNET_ERROR_TYPE_ERROR, "mysql_query", plugin); - iclose (plugin); - return GNUNET_SYSERR; - } - return GNUNET_OK; -} - -/** - * Create a prepared statement. - * - * @return NULL on error - */ -static struct GNUNET_MysqlStatementHandle * -prepared_statement_create (struct Plugin *plugin, const char *statement) -{ - struct GNUNET_MysqlStatementHandle *ret; - - ret = GNUNET_malloc (sizeof (struct GNUNET_MysqlStatementHandle)); - ret->query = GNUNET_strdup (statement); - GNUNET_CONTAINER_DLL_insert (plugin->shead, plugin->stail, ret); - return ret; -} - - -/** - * Prepare a statement for running. - * - * @return GNUNET_OK on success - */ -static int -prepare_statement (struct Plugin *plugin, - struct GNUNET_MysqlStatementHandle *ret) -{ - if (GNUNET_YES == ret->valid) - return GNUNET_OK; - if ((NULL == plugin->dbf) && (GNUNET_OK != iopen (plugin))) - return GNUNET_SYSERR; - ret->statement = mysql_stmt_init (plugin->dbf); - if (ret->statement == NULL) - { - iclose (plugin); - return GNUNET_SYSERR; - } - if (mysql_stmt_prepare (ret->statement, ret->query, strlen (ret->query))) - { - LOG_MYSQL (GNUNET_ERROR_TYPE_ERROR, "mysql_stmt_prepare", plugin); - mysql_stmt_close (ret->statement); - ret->statement = NULL; - iclose (plugin); - return GNUNET_SYSERR; - } - ret->valid = GNUNET_YES; - return GNUNET_OK; - -} - - -/** - * Bind the parameters for the given MySQL statement - * and run it. - * - * @param plugin plugin context - * @param s statement to bind and run - * @param ap arguments for the binding - * @return GNUNET_SYSERR on error, GNUNET_OK on success - */ -static int -init_params (struct Plugin *plugin, struct GNUNET_MysqlStatementHandle *s, - va_list ap) -{ - MYSQL_BIND qbind[MAX_PARAM]; - unsigned int pc; - unsigned int off; - enum enum_field_types ft; - - pc = mysql_stmt_param_count (s->statement); - if (pc > MAX_PARAM) - { - /* increase internal constant! */ - GNUNET_break (0); - return GNUNET_SYSERR; - } - memset (qbind, 0, sizeof (qbind)); - off = 0; - ft = 0; - while ((pc > 0) && (-1 != (int) (ft = va_arg (ap, enum enum_field_types)))) - { - qbind[off].buffer_type = ft; - switch (ft) - { - case MYSQL_TYPE_FLOAT: - qbind[off].buffer = va_arg (ap, float *); - - break; - case MYSQL_TYPE_LONGLONG: - qbind[off].buffer = va_arg (ap, unsigned long long *); - qbind[off].is_unsigned = va_arg (ap, int); - - break; - case MYSQL_TYPE_LONG: - qbind[off].buffer = va_arg (ap, unsigned int *); - qbind[off].is_unsigned = va_arg (ap, int); - - break; - case MYSQL_TYPE_VAR_STRING: - case MYSQL_TYPE_STRING: - case MYSQL_TYPE_BLOB: - qbind[off].buffer = va_arg (ap, void *); - qbind[off].buffer_length = va_arg (ap, unsigned long); - qbind[off].length = va_arg (ap, unsigned long *); - - break; - default: - /* unsupported type */ - GNUNET_break (0); - return GNUNET_SYSERR; - } - pc--; - off++; - } - if (!((pc == 0) && (-1 != (int) ft) && (va_arg (ap, int) == -1))) - { - GNUNET_break (0); - return GNUNET_SYSERR; - } - if (mysql_stmt_bind_param (s->statement, qbind)) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("`%s' failed at %s:%d with error: %s\n"), - "mysql_stmt_bind_param", __FILE__, __LINE__, - mysql_stmt_error (s->statement)); - iclose (plugin); - return GNUNET_SYSERR; - } - if (mysql_stmt_execute (s->statement)) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("`%s' failed at %s:%d with error: %s\n"), - "mysql_stmt_execute", __FILE__, __LINE__, - mysql_stmt_error (s->statement)); - iclose (plugin); - return GNUNET_SYSERR; - } - return GNUNET_OK; -} - -/** - * Type of a callback that will be called for each - * data set returned from MySQL. - * - * @param cls user-defined argument - * @param num_values number of elements in values - * @param values values returned by MySQL - * @return GNUNET_OK to continue iterating, GNUNET_SYSERR to abort - */ -typedef int (*GNUNET_MysqlDataProcessor) (void *cls, unsigned int num_values, - MYSQL_BIND * values); - - -/** - * Run a prepared SELECT statement. - * - * @param plugin plugin context - * @param s handle to SELECT statment - * @param result_size number of elements in results array - * @param results pointer to already initialized MYSQL_BIND - * array (of sufficient size) for passing results - * @param processor function to call on each result - * @param processor_cls extra argument to processor - * @param ... pairs and triplets of "MYSQL_TYPE_XXX" keys and their respective - * values (size + buffer-reference for pointers); terminated - * with "-1" - * @return GNUNET_SYSERR on error, otherwise - * the number of successfully affected (or queried) rows - */ -static int -prepared_statement_run_select (struct Plugin *plugin, - struct GNUNET_MysqlStatementHandle *s, - unsigned int result_size, MYSQL_BIND * results, - GNUNET_MysqlDataProcessor processor, - void *processor_cls, ...) -{ - va_list ap; - int ret; - unsigned int rsize; - int total; - - if (GNUNET_OK != prepare_statement (plugin, s)) - { - GNUNET_break (0); - return GNUNET_SYSERR; - } - va_start (ap, processor_cls); - if (GNUNET_OK != init_params (plugin, s, ap)) - { - GNUNET_break (0); - va_end (ap); - return GNUNET_SYSERR; - } - va_end (ap); - rsize = mysql_stmt_field_count (s->statement); - if (rsize > result_size) - { - GNUNET_break (0); - return GNUNET_SYSERR; - } - if (mysql_stmt_bind_result (s->statement, results)) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("`%s' failed at %s:%d with error: %s\n"), - "mysql_stmt_bind_result", __FILE__, __LINE__, - mysql_stmt_error (s->statement)); - iclose (plugin); - return GNUNET_SYSERR; - } - - total = 0; - while (1) - { - ret = mysql_stmt_fetch (s->statement); - if (ret == MYSQL_NO_DATA) - break; - if (ret != 0) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("`%s' failed at %s:%d with error: %s\n"), - "mysql_stmt_fetch", __FILE__, __LINE__, - mysql_stmt_error (s->statement)); - iclose (plugin); - return GNUNET_SYSERR; - } - if (processor != NULL) - if (GNUNET_OK != processor (processor_cls, rsize, results)) - break; - total++; - } - mysql_stmt_reset (s->statement); - return total; -} - - - -/** - * Run a prepared statement that does NOT produce results. - * - * @param plugin plugin context - * @param s handle to SELECT statment - * @param ... pairs and triplets of "MYSQL_TYPE_XXX" keys and their respective - * values (size + buffer-reference for pointers); terminated - * with "-1" - * @param insert_id NULL or address where to store the row ID of whatever - * was inserted (only for INSERT statements!) - * @return GNUNET_SYSERR on error, otherwise - * the number of successfully affected rows - */ -static int -prepared_statement_run (struct Plugin *plugin, - struct GNUNET_MysqlStatementHandle *s, - unsigned long long *insert_id, ...) -{ - va_list ap; - int affected; - - if (GNUNET_OK != prepare_statement (plugin, s)) - return GNUNET_SYSERR; - va_start (ap, insert_id); - if (GNUNET_OK != init_params (plugin, s, ap)) - { - va_end (ap); - return GNUNET_SYSERR; - } - va_end (ap); - affected = mysql_stmt_affected_rows (s->statement); - if (NULL != insert_id) - *insert_id = (unsigned long long) mysql_stmt_insert_id (s->statement); - mysql_stmt_reset (s->statement); - return affected; -} - - -/** * Create temporary table and prepare statements. * * @param plugin plugin context @@ -675,7 +151,7 @@ prepared_statement_run (struct Plugin *plugin, static int itable (struct Plugin *plugin) { -#define MRUNS(a) (GNUNET_OK != run_statement (plugin, a) ) +#define MRUNS(a) (GNUNET_OK != GNUNET_MYSQL_statement_run (plugin->mc, a) ) if (MRUNS ("CREATE TEMPORARY TABLE gn080dstore (" " type INT(11) UNSIGNED NOT NULL DEFAULT 0," @@ -689,7 +165,7 @@ itable (struct Plugin *plugin) ") ENGINE=InnoDB") || MRUNS ("SET AUTOCOMMIT = 1")) return GNUNET_SYSERR; #undef MRUNS -#define PINIT(a,b) (NULL == (a = prepared_statement_create(plugin, b))) +#define PINIT(a,b) (NULL == (a = GNUNET_MYSQL_statement_prepare (plugin->mc, b))) if (PINIT (plugin->select_value, SELECT_VALUE_STMT) || PINIT (plugin->count_value, COUNT_VALUE_STMT) || PINIT (plugin->select_old_value, SELECT_OLD_VALUE_STMT) || @@ -742,7 +218,7 @@ mysql_plugin_put (void *cls, const GNUNET_HashCode * key, size_t size, v_now = (unsigned long long) now.abs_value; v_discard_time = (unsigned long long) discard_time.abs_value; if (GNUNET_OK == - prepared_statement_run (plugin, plugin->update_value, NULL, + GNUNET_MYSQL_statement_run_prepared (plugin->mc, plugin->update_value, NULL, MYSQL_TYPE_LONGLONG, &v_now, GNUNET_YES, MYSQL_TYPE_LONGLONG, &v_discard_time, GNUNET_YES, MYSQL_TYPE_BLOB, key, sizeof (GNUNET_HashCode), @@ -757,7 +233,7 @@ mysql_plugin_put (void *cls, const GNUNET_HashCode * key, size_t size, v_length = size; if (GNUNET_OK != (ret = - prepared_statement_run (plugin, plugin->insert_value, NULL, + GNUNET_MYSQL_statement_run_prepared (plugin->mc, plugin->insert_value, NULL, MYSQL_TYPE_LONG, &type, GNUNET_YES, MYSQL_TYPE_LONGLONG, &v_now, GNUNET_YES, MYSQL_TYPE_LONGLONG, &v_discard_time, GNUNET_YES, @@ -825,7 +301,7 @@ mysql_plugin_get (void *cls, const GNUNET_HashCode * key, v_now = (unsigned long long) now.abs_value; if ((GNUNET_OK != (ret = - prepared_statement_run_select (plugin, plugin->count_value, 1, rbind, + GNUNET_MYSQL_statement_run_prepared_select (plugin->mc, plugin->count_value, 1, rbind, return_ok, NULL, MYSQL_TYPE_BLOB, key, sizeof (GNUNET_HashCode), &h_length, MYSQL_TYPE_LONG, &v_type, GNUNET_YES, @@ -854,7 +330,7 @@ mysql_plugin_get (void *cls, const GNUNET_HashCode * key, off = (off + 1) % total; if (GNUNET_OK != (ret = - prepared_statement_run_select (plugin, plugin->select_value, 2, rbind, + GNUNET_MYSQL_statement_run_prepared_select (plugin->mc, plugin->select_value, 2, rbind, return_ok, NULL, MYSQL_TYPE_BLOB, key, sizeof (GNUNET_HashCode), &h_length, MYSQL_TYPE_LONG, &v_type, GNUNET_YES, @@ -917,11 +393,11 @@ mysql_plugin_del (void *cls) rbind[3].buffer = buffer; if ((GNUNET_OK != (ret = - prepared_statement_run_select (plugin, plugin->select_old_value, 4, + GNUNET_MYSQL_statement_run_prepared_select (plugin->mc, plugin->select_old_value, 4, rbind, return_ok, NULL, -1))) || (GNUNET_OK != (ret = - prepared_statement_run (plugin, plugin->delete_value, NULL, + GNUNET_MYSQL_statement_run_prepared (plugin->mc, plugin->delete_value, NULL, MYSQL_TYPE_BLOB, &v_key, sizeof (GNUNET_HashCode), &k_length, MYSQL_TYPE_BLOB, &vhash, @@ -956,17 +432,12 @@ libgnunet_plugin_datacache_mysql_init (void *cls) plugin = GNUNET_malloc (sizeof (struct Plugin)); plugin->env = env; - plugin->cnffile = get_my_cnf_path (env->cfg); - if (GNUNET_OK != iopen (plugin)) - { - GNUNET_free_non_null (plugin->cnffile); - GNUNET_free (plugin); - return NULL; - } - if (GNUNET_OK != itable (plugin)) + plugin->mc = GNUNET_MYSQL_context_create (env->cfg, "datacache-mysql"); + if ( (NULL == plugin->mc) || + (GNUNET_OK != itable (plugin)) ) { - iclose (plugin); - GNUNET_free_non_null (plugin->cnffile); + if (NULL != plugin->mc) + GNUNET_MYSQL_context_destroy (plugin->mc); GNUNET_free (plugin); return NULL; } @@ -993,11 +464,9 @@ libgnunet_plugin_datacache_mysql_done (void *cls) struct GNUNET_DATACACHE_PluginFunctions *api = cls; struct Plugin *plugin = api->cls; - iclose (plugin); - GNUNET_free_non_null (plugin->cnffile); + GNUNET_MYSQL_context_destroy (plugin->mc); GNUNET_free (plugin); GNUNET_free (api); - mysql_library_end (); return NULL; } diff --git a/src/datacache/plugin_datacache_postgres.c b/src/datacache/plugin_datacache_postgres.c index 3486d76..b40f1fd 100644 --- a/src/datacache/plugin_datacache_postgres.c +++ b/src/datacache/plugin_datacache_postgres.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet - (C) 2006, 2009, 2010 Christian Grothoff (and other contributing authors) + (C) 2006, 2009, 2010, 2012 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -25,10 +25,11 @@ */ #include "platform.h" #include "gnunet_util_lib.h" +#include "gnunet_postgres_lib.h" #include "gnunet_datacache_plugin.h" #include <postgresql/libpq-fe.h> -#define DEBUG_POSTGRES GNUNET_EXTRA_LOGGING +#define LOG(kind,...) GNUNET_log_from (kind, "datacache-postgres", __VA_ARGS__) /** * Per-entry overhead estimate @@ -54,104 +55,20 @@ struct Plugin /** - * Check if the result obtained from Postgres has - * the desired status code. If not, log an error, clear the - * result and return GNUNET_SYSERR. - * - * @return GNUNET_OK if the result is acceptable - */ -static int -check_result (struct Plugin *plugin, PGresult * ret, int expected_status, - const char *command, const char *args, int line) -{ - if (ret == NULL) - { - GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, - "datastore-postgres", - "Postgres failed to allocate result for `%s:%s' at %d\n", - command, args, line); - return GNUNET_SYSERR; - } - if (PQresultStatus (ret) != expected_status) - { - GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, - "datastore-postgres", - _("`%s:%s' failed at %s:%d with error: %s"), command, args, - __FILE__, line, PQerrorMessage (plugin->dbh)); - PQclear (ret); - return GNUNET_SYSERR; - } - return GNUNET_OK; -} - - -/** - * Run simple SQL statement (without results). - */ -static int -pq_exec (struct Plugin *plugin, const char *sql, int line) -{ - PGresult *ret; - - ret = PQexec (plugin->dbh, sql); - if (GNUNET_OK != - check_result (plugin, ret, PGRES_COMMAND_OK, "PQexec", sql, line)) - return GNUNET_SYSERR; - PQclear (ret); - return GNUNET_OK; -} - - -/** - * Prepare SQL statement. - */ -static int -pq_prepare (struct Plugin *plugin, const char *name, const char *sql, - int nparms, int line) -{ - PGresult *ret; - - ret = PQprepare (plugin->dbh, name, sql, nparms, NULL); - if (GNUNET_OK != - check_result (plugin, ret, PGRES_COMMAND_OK, "PQprepare", sql, line)) - return GNUNET_SYSERR; - PQclear (ret); - return GNUNET_OK; -} - - -/** * @brief Get a database handle + * + * @param plugin global context * @return GNUNET_OK on success, GNUNET_SYSERR on error */ static int init_connection (struct Plugin *plugin) { - char *conninfo; PGresult *ret; - /* Open database and precompile statements */ - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_string (plugin->env->cfg, - "datacache-postgres", "CONFIG", - &conninfo)) - conninfo = NULL; - plugin->dbh = PQconnectdb (conninfo == NULL ? "" : conninfo); - GNUNET_free_non_null (conninfo); + plugin->dbh = GNUNET_POSTGRES_connect (plugin->env->cfg, + "datacache-postgres"); if (NULL == plugin->dbh) - { - /* FIXME: warn about out-of-memory? */ - return GNUNET_SYSERR; - } - if (PQstatus (plugin->dbh) != CONNECTION_OK) - { - GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "datacache-postgres", - _("Unable to initialize Postgres: %s"), - PQerrorMessage (plugin->dbh)); - PQfinish (plugin->dbh); - plugin->dbh = NULL; return GNUNET_SYSERR; - } ret = PQexec (plugin->dbh, "CREATE TEMPORARY TABLE gn090dc (" @@ -164,8 +81,8 @@ init_connection (struct Plugin *plugin) (ret, PG_DIAG_SQLSTATE))))) { - (void) check_result (plugin, ret, PGRES_COMMAND_OK, "CREATE TABLE", - "gn090dc", __LINE__); + (void) GNUNET_POSTGRES_check_result (plugin->dbh, ret, PGRES_COMMAND_OK, "CREATE TABLE", + "gn090dc"); PQfinish (plugin->dbh); plugin->dbh = NULL; return GNUNET_SYSERR; @@ -173,10 +90,9 @@ init_connection (struct Plugin *plugin) if (PQresultStatus (ret) == PGRES_COMMAND_OK) { if ((GNUNET_OK != - pq_exec (plugin, "CREATE INDEX idx_key ON gn090dc (key)", __LINE__)) || + GNUNET_POSTGRES_exec (plugin->dbh, "CREATE INDEX idx_key ON gn090dc (key)")) || (GNUNET_OK != - pq_exec (plugin, "CREATE INDEX idx_dt ON gn090dc (discard_time)", - __LINE__))) + GNUNET_POSTGRES_exec (plugin->dbh, "CREATE INDEX idx_dt ON gn090dc (discard_time)"))) { PQclear (ret); PQfinish (plugin->dbh); @@ -185,13 +101,11 @@ init_connection (struct Plugin *plugin) } } PQclear (ret); -#if 1 ret = PQexec (plugin->dbh, "ALTER TABLE gn090dc ALTER value SET STORAGE EXTERNAL"); if (GNUNET_OK != - check_result (plugin, ret, PGRES_COMMAND_OK, "ALTER TABLE", "gn090dc", - __LINE__)) + GNUNET_POSTGRES_check_result (plugin->dbh, ret, PGRES_COMMAND_OK, "ALTER TABLE", "gn090dc")) { PQfinish (plugin->dbh); plugin->dbh = NULL; @@ -200,34 +114,31 @@ init_connection (struct Plugin *plugin) PQclear (ret); ret = PQexec (plugin->dbh, "ALTER TABLE gn090dc ALTER key SET STORAGE PLAIN"); if (GNUNET_OK != - check_result (plugin, ret, PGRES_COMMAND_OK, "ALTER TABLE", "gn090dc", - __LINE__)) + GNUNET_POSTGRES_check_result (plugin->dbh, ret, PGRES_COMMAND_OK, "ALTER TABLE", "gn090dc")) { PQfinish (plugin->dbh); plugin->dbh = NULL; return GNUNET_SYSERR; } PQclear (ret); -#endif if ((GNUNET_OK != - pq_prepare (plugin, "getkt", + GNUNET_POSTGRES_prepare (plugin->dbh, "getkt", "SELECT discard_time,type,value FROM gn090dc " - "WHERE key=$1 AND type=$2 ", 2, __LINE__)) || + "WHERE key=$1 AND type=$2 ", 2)) || (GNUNET_OK != - pq_prepare (plugin, "getk", + GNUNET_POSTGRES_prepare (plugin->dbh, "getk", "SELECT discard_time,type,value FROM gn090dc " - "WHERE key=$1", 1, __LINE__)) || + "WHERE key=$1", 1)) || (GNUNET_OK != - pq_prepare (plugin, "getm", + GNUNET_POSTGRES_prepare (plugin->dbh, "getm", "SELECT length(value),oid,key FROM gn090dc " - "ORDER BY discard_time ASC LIMIT 1", 0, __LINE__)) || + "ORDER BY discard_time ASC LIMIT 1", 0)) || (GNUNET_OK != - pq_prepare (plugin, "delrow", "DELETE FROM gn090dc WHERE oid=$1", 1, - __LINE__)) || + GNUNET_POSTGRES_prepare (plugin->dbh, "delrow", "DELETE FROM gn090dc WHERE oid=$1", 1)) || (GNUNET_OK != - pq_prepare (plugin, "put", + GNUNET_POSTGRES_prepare (plugin->dbh, "put", "INSERT INTO gn090dc (type, discard_time, key, value) " - "VALUES ($1, $2, $3, $4)", 4, __LINE__))) + "VALUES ($1, $2, $3, $4)", 4))) { PQfinish (plugin->dbh); plugin->dbh = NULL; @@ -238,35 +149,6 @@ init_connection (struct Plugin *plugin) /** - * Delete the row identified by the given rowid (qid - * in postgres). - * - * @return GNUNET_OK on success - */ -static int -delete_by_rowid (struct Plugin *plugin, uint32_t rowid) -{ - uint32_t brow = htonl (rowid); - const char *paramValues[] = { (const char *) &brow }; - int paramLengths[] = { sizeof (brow) }; - const int paramFormats[] = { 1 }; - PGresult *ret; - - ret = - PQexecPrepared (plugin->dbh, "delrow", 1, paramValues, paramLengths, - paramFormats, 1); - if (GNUNET_OK != - check_result (plugin, ret, PGRES_COMMAND_OK, "PQexecPrepared", "delrow", - __LINE__)) - { - return GNUNET_SYSERR; - } - PQclear (ret); - return GNUNET_OK; -} - - -/** * Store an item in the datastore. * * @param cls closure (our "struct Plugin") @@ -305,8 +187,7 @@ postgres_plugin_put (void *cls, const GNUNET_HashCode * key, size_t size, PQexecPrepared (plugin->dbh, "put", 4, paramValues, paramLengths, paramFormats, 1); if (GNUNET_OK != - check_result (plugin, ret, PGRES_COMMAND_OK, "PQexecPrepared", "put", - __LINE__)) + GNUNET_POSTGRES_check_result (plugin->dbh, ret, PGRES_COMMAND_OK, "PQexecPrepared", "put")) return GNUNET_SYSERR; PQclear (ret); return size + OVERHEAD; @@ -352,23 +233,19 @@ postgres_plugin_get (void *cls, const GNUNET_HashCode * key, (type == 0) ? 1 : 2, paramValues, paramLengths, paramFormats, 1); if (GNUNET_OK != - check_result (plugin, res, PGRES_TUPLES_OK, "PQexecPrepared", - (type == 0) ? "getk" : "getkt", __LINE__)) + GNUNET_POSTGRES_check_result (plugin->dbh, res, PGRES_TUPLES_OK, "PQexecPrepared", + (type == 0) ? "getk" : "getkt")) { -#if DEBUG_POSTGRES - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "datacache-postgres", - "Ending iteration (postgres error)\n"); -#endif + LOG (GNUNET_ERROR_TYPE_DEBUG, + "Ending iteration (postgres error)\n"); return 0; } if (0 == (cnt = PQntuples (res))) { /* no result */ -#if DEBUG_POSTGRES - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "datacache-postgres", - "Ending iteration (no more results)\n"); -#endif + LOG (GNUNET_ERROR_TYPE_DEBUG, + "Ending iteration (no more results)\n"); PQclear (res); return 0; } @@ -390,19 +267,15 @@ postgres_plugin_get (void *cls, const GNUNET_HashCode * key, GNUNET_ntohll (*(uint64_t *) PQgetvalue (res, i, 0)); type = ntohl (*(uint32_t *) PQgetvalue (res, i, 1)); size = PQgetlength (res, i, 2); -#if DEBUG_POSTGRES - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "datacache-postgres", - "Found result of size %u bytes and type %u in database\n", - (unsigned int) size, (unsigned int) type); -#endif + LOG (GNUNET_ERROR_TYPE_DEBUG, + "Found result of size %u bytes and type %u in database\n", + (unsigned int) size, (unsigned int) type); if (GNUNET_SYSERR == iter (iter_cls, expiration_time, key, size, PQgetvalue (res, i, 2), (enum GNUNET_BLOCK_Type) type)) { -#if DEBUG_POSTGRES - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "datacache-postgres", - "Ending iteration (client error)\n"); -#endif + LOG (GNUNET_ERROR_TYPE_DEBUG, + "Ending iteration (client error)\n"); PQclear (res); return cnt; } @@ -430,22 +303,17 @@ postgres_plugin_del (void *cls) res = PQexecPrepared (plugin->dbh, "getm", 0, NULL, NULL, NULL, 1); if (GNUNET_OK != - check_result (plugin, res, PGRES_TUPLES_OK, "PQexecPrepared", "getm", - __LINE__)) + GNUNET_POSTGRES_check_result (plugin->dbh, res, PGRES_TUPLES_OK, "PQexecPrepared", "getm")) { -#if DEBUG_POSTGRES - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "datacache-postgres", - "Ending iteration (postgres error)\n"); -#endif + LOG (GNUNET_ERROR_TYPE_DEBUG, + "Ending iteration (postgres error)\n"); return 0; } if (0 == PQntuples (res)) { /* no result */ -#if DEBUG_POSTGRES - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "datacache-postgres", - "Ending iteration (no more results)\n"); -#endif + LOG (GNUNET_ERROR_TYPE_DEBUG, + "Ending iteration (no more results)\n"); PQclear (res); return GNUNET_SYSERR; } @@ -461,7 +329,7 @@ postgres_plugin_del (void *cls) oid = ntohl (*(uint32_t *) PQgetvalue (res, 0, 1)); memcpy (&key, PQgetvalue (res, 0, 2), sizeof (GNUNET_HashCode)); PQclear (res); - if (GNUNET_OK != delete_by_rowid (plugin, oid)) + if (GNUNET_OK != GNUNET_POSTGRES_delete_by_rowid (plugin->dbh, "delrow", oid)) return GNUNET_SYSERR; plugin->env->delete_notify (plugin->env->cls, &key, size + OVERHEAD); return GNUNET_OK; @@ -495,8 +363,8 @@ libgnunet_plugin_datacache_postgres_init (void *cls) api->get = &postgres_plugin_get; api->put = &postgres_plugin_put; api->del = &postgres_plugin_del; - GNUNET_log_from (GNUNET_ERROR_TYPE_INFO, "datacache-postgres", - _("Postgres datacache running\n")); + LOG (GNUNET_ERROR_TYPE_INFO, + _("Postgres datacache running\n")); return api; } diff --git a/src/datacache/plugin_datacache_sqlite.c b/src/datacache/plugin_datacache_sqlite.c index f852d3b..db27de3 100644 --- a/src/datacache/plugin_datacache_sqlite.c +++ b/src/datacache/plugin_datacache_sqlite.c @@ -28,8 +28,6 @@ #include "gnunet_datacache_plugin.h" #include <sqlite3.h> -#define DEBUG_DATACACHE_SQLITE GNUNET_EXTRA_LOGGING - #define LOG(kind,...) GNUNET_log_from (kind, "datacache-sqlite", __VA_ARGS__) #define LOG_STRERROR_FILE(kind,op,fn) GNUNET_log_from_strerror_file (kind, "datacache-sqlite", op, fn) @@ -108,13 +106,11 @@ sqlite_plugin_put (void *cls, const GNUNET_HashCode * key, size_t size, sqlite3_stmt *stmt; int64_t dval; -#if DEBUG_DATACACHE_SQLITE LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing `%s' of %u bytes with key `%4s' and expiration %llums\n", "PUT", (unsigned int) size, GNUNET_h2s (key), (unsigned long long) GNUNET_TIME_absolute_get_remaining (discard_time).rel_value); -#endif dval = (int64_t) discard_time.abs_value; if (dval < 0) dval = INT64_MAX; @@ -182,10 +178,8 @@ sqlite_plugin_get (void *cls, const GNUNET_HashCode * key, int64_t ntime; now = GNUNET_TIME_absolute_get (); -#if DEBUG_DATACACHE_SQLITE LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing `%s' for key `%4s'\n", "GET", GNUNET_h2s (key)); -#endif if (sq_prepare (plugin->dbh, "SELECT count(*) FROM ds090 WHERE key=? AND type=? AND expire >= ?", @@ -214,23 +208,19 @@ sqlite_plugin_get (void *cls, const GNUNET_HashCode * key, LOG_SQLITE (plugin->dbh, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, "sqlite_step"); sqlite3_finalize (stmt); -#if DEBUG_DATACACHE_SQLITE LOG (GNUNET_ERROR_TYPE_DEBUG, "No content found when processing `%s' for key `%4s'\n", "GET", GNUNET_h2s (key)); -#endif return 0; } total = sqlite3_column_int (stmt, 0); sqlite3_finalize (stmt); if ((total == 0) || (iter == NULL)) { -#if DEBUG_DATACACHE_SQLITE if (0 == total) LOG (GNUNET_ERROR_TYPE_DEBUG, "No content found when processing `%s' for key `%4s'\n", "GET", GNUNET_h2s (key)); -#endif return total; } @@ -268,11 +258,9 @@ sqlite_plugin_get (void *cls, const GNUNET_HashCode * key, if (ntime == INT64_MAX) exp = GNUNET_TIME_UNIT_FOREVER_ABS; cnt++; -#if DEBUG_DATACACHE_SQLITE LOG (GNUNET_ERROR_TYPE_DEBUG, "Found %u-byte result when processing `%s' for key `%4s'\n", (unsigned int) size, "GET", GNUNET_h2s (key)); -#endif if (GNUNET_OK != iter (iter_cls, exp, key, size, dat, type)) { sqlite3_finalize (stmt); @@ -301,9 +289,7 @@ sqlite_plugin_del (void *cls) sqlite3_stmt *dstmt; GNUNET_HashCode hc; -#if DEBUG_DATACACHE_SQLITE LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing `%s'\n", "DEL"); -#endif stmt = NULL; dstmt = NULL; if (sq_prepare @@ -458,15 +444,11 @@ libgnunet_plugin_datacache_sqlite_done (void *cls) stmt = sqlite3_next_stmt (plugin->dbh, NULL); while (stmt != NULL) { -#if DEBUG_SQLITE LOG (GNUNET_ERROR_TYPE_DEBUG, "Closing statement %p\n", stmt); -#endif result = sqlite3_finalize (stmt); -#if DEBUG_SQLITE if (result != SQLITE_OK) - LOG (GNUNET_ERROR_TYPE_DEBUG, "Failed to close statement %p: %d\n", + LOG (GNUNET_ERROR_TYPE_WARNING, _("Failed to close statement %p: %d\n"), stmt, result); -#endif stmt = sqlite3_next_stmt (plugin->dbh, NULL); } result = sqlite3_close (plugin->dbh); |