aboutsummaryrefslogtreecommitdiff
path: root/src/exchangedb
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-05-02 06:36:58 +0200
committerChristian Grothoff <christian@grothoff.org>2016-05-02 06:36:58 +0200
commit1cbba4bec1551a4662029e2899e5120cc4793c4b (patch)
treea08bbdd6a87e4017cb598cf5028be188cc67cee0 /src/exchangedb
parent53e7547aaf74a0d34584e221ea92bea85c452d66 (diff)
fixing #4462: avoid temporary schemata altogether
Diffstat (limited to 'src/exchangedb')
-rw-r--r--src/exchangedb/perf_taler_exchangedb_interpreter.c15
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c85
-rw-r--r--src/exchangedb/test_exchangedb.c23
3 files changed, 56 insertions, 67 deletions
diff --git a/src/exchangedb/perf_taler_exchangedb_interpreter.c b/src/exchangedb/perf_taler_exchangedb_interpreter.c
index 897a06eed..cb805a0b3 100644
--- a/src/exchangedb/perf_taler_exchangedb_interpreter.c
+++ b/src/exchangedb/perf_taler_exchangedb_interpreter.c
@@ -1369,7 +1369,7 @@ interpret (struct PERF_TALER_EXCHANGEDB_interpreter_state *state)
break;
case PERF_TALER_EXCHANGEDB_CMD_NEW_SESSION:
- state->session = state->plugin->get_session (state->plugin->cls, GNUNET_YES);
+ state->session = state->plugin->get_session (state->plugin->cls);
break;
case PERF_TALER_EXCHANGEDB_CMD_START_TRANSACTION:
@@ -1816,8 +1816,7 @@ PERF_TALER_EXCHANGEDB_interpret (struct TALER_EXCHANGEDB_Plugin *db_plugin,
ret = cmd_init (cmd);
if (GNUNET_SYSERR == ret)
return ret;
- state.session = db_plugin->get_session (db_plugin->cls,
- GNUNET_YES);
+ state.session = db_plugin->get_session (db_plugin->cls);
GNUNET_assert (NULL != state.session);
ret = interpret (&state);
cmd_clean (cmd);
@@ -1943,8 +1942,7 @@ PERF_TALER_EXCHANGEDB_run_benchmark (const char *benchmark_name,
"Error connectiong to the database\n");
return GNUNET_NO;
}
- ret = plugin->create_tables (plugin->cls,
- GNUNET_YES);
+ ret = plugin->create_tables (plugin->cls);
if (GNUNET_OK != ret)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -1981,10 +1979,9 @@ PERF_TALER_EXCHANGEDB_run_benchmark (const char *benchmark_name,
{
struct TALER_EXCHANGEDB_Session *session;
- session = plugin->get_session (plugin->cls,
- GNUNET_YES);
- ret = plugin->drop_temporary (plugin->cls,
- session);
+ session = plugin->get_session (plugin->cls);
+ ret = plugin->drop_tables (plugin->cls,
+ session);
if (GNUNET_OK != ret)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index ad5b5d982..1cc64ce4d 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -30,15 +30,6 @@
#include "plugin_exchangedb_common.c"
/**
- * For testing / experiments, we set the Postgres schema to
- * #TALER_TEMP_SCHEMA_NAME so we can easily purge everything
- * associated with a test. We *also* should use the database
- * "talercheck" instead of "taler" for testing, but we're doing
- * both: better safe than sorry.
- */
-#define TALER_TEMP_SCHEMA_NAME "taler_temporary"
-
-/**
* Log a query error.
*
* @param result PQ result object of the query that failed
@@ -138,39 +129,48 @@ struct PostgresClosure
-/**
- * Set the given connection to use a temporary schema
- *
- * @param db the database connection
- * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon error
- */
-static int
-set_temporary_schema (PGconn *db)
-{
- SQLEXEC_(db,
- "CREATE SCHEMA IF NOT EXISTS " TALER_TEMP_SCHEMA_NAME ";"
- "SET search_path to " TALER_TEMP_SCHEMA_NAME ";");
- return GNUNET_OK;
- SQLEXEC_fail:
- return GNUNET_SYSERR;
-}
-
/**
- * Drop the temporary taler schema. This is only useful for testcases
+ * Drop all Taler tables. This should only be used by testcases.
*
* @param cls the `struct PostgresClosure` with the plugin-specific state
* @param session database session to use
* @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
*/
static int
-postgres_drop_temporary (void *cls,
- struct TALER_EXCHANGEDB_Session *session)
+postgres_drop_tables (void *cls,
+ struct TALER_EXCHANGEDB_Session *session)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Dropping temporary tables\n");
+ "Dropping ALL tables\n");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS prewire;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS aggregation_tracking;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS deposits;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS refresh_out;");
SQLEXEC_ (session->conn,
- "DROP SCHEMA " TALER_TEMP_SCHEMA_NAME " CASCADE;");
+ "DROP TABLE IF EXISTS refresh_commit_coin;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS refresh_commit_link;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS refresh_order;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS refresh_melts;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS refresh_sessions;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS known_coins;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS reserves_out;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS reserves_in;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS reserves;");
+ SQLEXEC_ (session->conn,
+ "DROP TABLE IF EXISTS denominations;");
return GNUNET_OK;
SQLEXEC_fail:
return GNUNET_SYSERR;
@@ -215,12 +215,10 @@ pq_notice_processor_cb (void *arg,
* Create the necessary tables if they are not present
*
* @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param temporary should we use a temporary schema
* @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
*/
static int
-postgres_create_tables (void *cls,
- int temporary)
+postgres_create_tables (void *cls)
{
struct PostgresClosure *pc = cls;
PGconn *conn;
@@ -239,12 +237,6 @@ postgres_create_tables (void *cls,
PQsetNoticeProcessor (conn,
&pq_notice_processor_cb,
NULL);
- if ( (GNUNET_YES == temporary) &&
- (GNUNET_SYSERR == set_temporary_schema (conn)))
- {
- PQfinish (conn);
- return GNUNET_SYSERR;
- }
#define SQLEXEC(sql) SQLEXEC_(conn, sql);
#define SQLEXEC_INDEX(sql) SQLEXEC_IGNORE_ERROR_(conn, sql);
/* Denomination table for holding the publicly available information of
@@ -1200,13 +1192,10 @@ db_conn_destroy (void *cls)
* Connect to the db if the connection does not exist yet.
*
* @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param temporary #GNUNET_YES to use a temporary schema; #GNUNET_NO to use the
- * database default one
* @return the database connection, or NULL on error
*/
static struct TALER_EXCHANGEDB_Session *
-postgres_get_session (void *cls,
- int temporary)
+postgres_get_session (void *cls)
{
struct PostgresClosure *pc = cls;
PGconn *db_conn;
@@ -1229,12 +1218,6 @@ postgres_get_session (void *cls,
PQsetNoticeProcessor (db_conn,
&pq_notice_processor_cb,
NULL);
- if ( (GNUNET_YES == temporary) &&
- (GNUNET_SYSERR == set_temporary_schema(db_conn)) )
- {
- GNUNET_break (0);
- return NULL;
- }
if (GNUNET_OK !=
postgres_prepare (db_conn))
{
@@ -4243,7 +4226,7 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
plugin = GNUNET_new (struct TALER_EXCHANGEDB_Plugin);
plugin->cls = pg;
plugin->get_session = &postgres_get_session;
- plugin->drop_temporary = &postgres_drop_temporary;
+ plugin->drop_tables = &postgres_drop_tables;
plugin->create_tables = &postgres_create_tables;
plugin->start = &postgres_start;
plugin->commit = &postgres_commit;
diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c
index 16ee95f9c..2ef7f5d72 100644
--- a/src/exchangedb/test_exchangedb.c
+++ b/src/exchangedb/test_exchangedb.c
@@ -663,18 +663,27 @@ run (void *cls)
result = 77;
return;
}
+ if (NULL !=
+ (session = plugin->get_session (plugin->cls)))
+ {
+ if (GNUNET_OK !=
+ plugin->drop_tables (plugin->cls,
+ session))
+ {
+ result = 77;
+ goto drop;
+ }
+ }
if (GNUNET_OK !=
- plugin->create_tables (plugin->cls,
- GNUNET_YES))
+ plugin->create_tables (plugin->cls))
{
result = 77;
goto drop;
}
if (NULL ==
- (session = plugin->get_session (plugin->cls,
- GNUNET_YES)))
+ (session = plugin->get_session (plugin->cls)))
{
- result = 3;
+ result = 77;
goto drop;
}
RND_BLK (&reserve_pub);
@@ -934,8 +943,8 @@ run (void *cls)
rh = NULL;
if (NULL != session)
GNUNET_break (GNUNET_OK ==
- plugin->drop_temporary (plugin->cls,
- session));
+ plugin->drop_tables (plugin->cls,
+ session));
if (NULL != dkp)
destroy_denom_key_pair (dkp);
if (NULL != cbc.sig.rsa_signature)