summaryrefslogtreecommitdiff
path: root/src/backenddb
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2024-01-02 13:30:29 +0100
committerChristian Grothoff <christian@grothoff.org>2024-01-02 13:30:29 +0100
commitc92a38927231949b4f5b9a133c6934b04031339c (patch)
tree0ec0f9f9e44acff62296597139620be8caf17395 /src/backenddb
parent673edc82adea15b687cafac882f3f71409ac5aad (diff)
downloadmerchant-c92a38927231949b4f5b9a133c6934b04031339c.tar.gz
merchant-c92a38927231949b4f5b9a133c6934b04031339c.tar.bz2
merchant-c92a38927231949b4f5b9a133c6934b04031339c.zip
fix reconnect commit statement problem
Diffstat (limited to 'src/backenddb')
-rw-r--r--src/backenddb/pg_delete_otp.c1
-rw-r--r--src/backenddb/pg_helper.c23
-rw-r--r--src/backenddb/plugin_merchantdb_postgres.c11
3 files changed, 23 insertions, 12 deletions
diff --git a/src/backenddb/pg_delete_otp.c b/src/backenddb/pg_delete_otp.c
index 7d32b3fb..b4c0687d 100644
--- a/src/backenddb/pg_delete_otp.c
+++ b/src/backenddb/pg_delete_otp.c
@@ -52,4 +52,3 @@ TMH_PG_delete_otp (void *cls,
"delete_otp",
params);
}
-
diff --git a/src/backenddb/pg_helper.c b/src/backenddb/pg_helper.c
index 2ac047b1..802abc21 100644
--- a/src/backenddb/pg_helper.c
+++ b/src/backenddb/pg_helper.c
@@ -38,6 +38,7 @@ TMH_PG_start (void *cls,
GNUNET_PQ_EXECUTE_STATEMENT_END
};
+ GNUNET_assert (NULL != name);
check_connection (pg);
postgres_preflight (pg);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -66,6 +67,7 @@ TMH_PG_start_read_committed (void *cls,
GNUNET_PQ_EXECUTE_STATEMENT_END
};
+ GNUNET_assert (NULL != name);
check_connection (pg);
postgres_preflight (pg);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -93,6 +95,8 @@ TMH_PG_rollback (void *cls)
GNUNET_PQ_EXECUTE_STATEMENT_END
};
+ if (NULL == pg->transaction_name)
+ return;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Rolling back merchant DB transaction `%s'\n",
pg->transaction_name);
@@ -110,12 +114,25 @@ TMH_PG_commit (void *cls)
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_end
};
+ enum GNUNET_DB_QueryStatus qs;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Committing merchant DB transaction %s\n",
pg->transaction_name);
+ check_connection (pg);
+ PREPARE (pg,
+ "merchant_commit",
+ "COMMIT");
+ qs = GNUNET_PQ_eval_prepared_non_select (pg->conn,
+ "merchant_commit",
+ params);
+ if (qs < 0)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Failed to commit transaction\n");
+ TMH_PG_rollback (pg);
+ return qs;
+ }
pg->transaction_name = NULL;
- return GNUNET_PQ_eval_prepared_non_select (pg->conn,
- "end_transaction",
- params);
+ return qs;
}
diff --git a/src/backenddb/plugin_merchantdb_postgres.c b/src/backenddb/plugin_merchantdb_postgres.c
index 38dd636e..30f5c169 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -300,21 +300,17 @@ check_connection (struct PostgresClosure *pg)
GNUNET_PQ_reconnect_if_down (pg->conn);
}
+
/**
* Establish connection to the database.
*
* @param cls plugin context
* @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
*/
-static int
+static enum GNUNET_GenericReturnValue
postgres_connect (void *cls)
{
struct PostgresClosure *pg = cls;
- struct GNUNET_PQ_PreparedStatement ps[] = {
- GNUNET_PQ_make_prepare ("end_transaction",
- "COMMIT"),
- GNUNET_PQ_PREPARED_STATEMENT_END
- };
struct GNUNET_PQ_ExecuteStatement es[] = {
GNUNET_PQ_make_try_execute ("SET search_path TO merchant;"),
GNUNET_PQ_EXECUTE_STATEMENT_END
@@ -324,7 +320,7 @@ postgres_connect (void *cls)
"merchantdb-postgres",
NULL,
es,
- ps);
+ NULL);
pg->prep_gen++;
if (NULL == pg->conn)
return GNUNET_SYSERR;
@@ -618,7 +614,6 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
= &TMH_PG_update_token_family;
-
return plugin;
}