From c92a38927231949b4f5b9a133c6934b04031339c Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 2 Jan 2024 13:30:29 +0100 Subject: fix reconnect commit statement problem --- src/backenddb/pg_delete_otp.c | 1 - src/backenddb/pg_helper.c | 23 ++++++++++++++++++++--- src/backenddb/plugin_merchantdb_postgres.c | 11 +++-------- 3 files changed, 23 insertions(+), 12 deletions(-) (limited to 'src/backenddb') 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; } -- cgit v1.2.3