aboutsummaryrefslogtreecommitdiff
path: root/src/datacache
diff options
context:
space:
mode:
authorBertrand Marc <beberking@gmail.com>2012-06-06 20:47:50 +0200
committerBertrand Marc <beberking@gmail.com>2012-06-06 20:47:50 +0200
commit15d0a119987bc62675a17dea2c24b652a42c53e3 (patch)
treed6598fb09c24a8004da21bee1a19f3f1ea37c66c /src/datacache
parentc47dd4e3165b7894669d8f7f800bac75ac8ad95c (diff)
parent740b30688bd745a527f96f9116c19acb3480971a (diff)
Merge tag 'upstream/0.9.3'
Upstream version 0.9.3
Diffstat (limited to 'src/datacache')
-rw-r--r--src/datacache/Makefile.am2
-rw-r--r--src/datacache/Makefile.in6
-rw-r--r--src/datacache/datacache.c9
-rw-r--r--src/datacache/plugin_datacache_mysql.c575
-rw-r--r--src/datacache/plugin_datacache_postgres.c216
-rw-r--r--src/datacache/plugin_datacache_sqlite.c20
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);