summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-06-18 14:43:28 +0200
committerChristian Grothoff <christian@grothoff.org>2017-06-19 00:17:15 +0200
commit75b0879f4e5d0feb16f5cee6c775a587c9d47ecf (patch)
treedece7ede5e883a743e8acdbdb1ea735a0f362bfc /src
parent7f9e6272fd0e16d060da432c3a9b67c49465470e (diff)
downloadexchange-75b0879f4e5d0feb16f5cee6c775a587c9d47ecf.tar.gz
exchange-75b0879f4e5d0feb16f5cee6c775a587c9d47ecf.tar.bz2
exchange-75b0879f4e5d0feb16f5cee6c775a587c9d47ecf.zip
convert another function for #5010
Diffstat (limited to 'src')
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c60
1 files changed, 33 insertions, 27 deletions
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index 510f8cec8..c2f4ffa5a 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -1951,11 +1951,9 @@ postgres_reserve_get (void *cls,
* @param session the database connection
* @param reserve the reserve structure whose data will be used to update the
* corresponding record in the database.
- * @return #GNUNET_OK upon successful update;
- * #GNUNET_NO if we failed but should retry the transaction
- * #GNUNET_SYSERR upon any error
+ * @return transaction status
*/
-static int
+static enum GNUNET_DB_QueryStatus
reserves_update (void *cls,
struct TALER_EXCHANGEDB_Session *session,
const struct TALER_EXCHANGEDB_Reserve *reserve)
@@ -1967,9 +1965,9 @@ reserves_update (void *cls,
GNUNET_PQ_query_param_end
};
- return execute_prepared_non_select (session,
- "reserve_update",
- params);
+ return GNUNET_PQ_eval_prepared_non_select (session->conn,
+ "reserve_update",
+ params);
}
@@ -2128,7 +2126,8 @@ postgres_reserves_in_insert (void *cls,
back for duplicate transactions; like this, we should virtually
never actually have to rollback anything. */
struct TALER_EXCHANGEDB_Reserve updated_reserve;
-
+ enum GNUNET_DB_QueryStatus qs;
+
updated_reserve.pub = reserve.pub;
if (GNUNET_OK !=
TALER_amount_add (&updated_reserve.balance,
@@ -2142,11 +2141,17 @@ postgres_reserves_in_insert (void *cls,
}
updated_reserve.expiry = GNUNET_TIME_absolute_max (expiry,
reserve.expiry);
- if (GNUNET_OK !=
- reserves_update (cls,
- session,
- &updated_reserve))
- goto rollback;
+ qs = reserves_update (cls,
+ session,
+ &updated_reserve);
+ if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
+ goto rollback; /* FIXME: #5010 */
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
+ {
+ postgres_rollback (cls,
+ session);
+ return GNUNET_SYSERR;
+ }
}
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
postgres_commit (cls,
@@ -2337,7 +2342,7 @@ postgres_insert_withdraw_info (void *cls,
TALER_PQ_query_param_amount (&collectable->amount_with_fee),
GNUNET_PQ_query_param_end
};
- int ret;
+ enum GNUNET_DB_QueryStatus qs;
now = GNUNET_TIME_absolute_get ();
GNUNET_CRYPTO_rsa_public_key_hash (collectable->denom_pub.rsa_public_key,
@@ -2382,15 +2387,15 @@ postgres_insert_withdraw_info (void *cls,
pg->idle_reserve_expiration_time);
reserve.expiry = GNUNET_TIME_absolute_max (expiry,
reserve.expiry);
- ret = reserves_update (cls,
- session,
- &reserve);
- if (GNUNET_SYSERR == ret)
+ qs = reserves_update (cls,
+ session,
+ &reserve);
+ if (0 >= qs)
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
- return ret;
+ return GNUNET_OK;
}
@@ -4979,15 +4984,15 @@ postgres_insert_reserve_closed (void *cls,
return GNUNET_NO;
}
GNUNET_break (GNUNET_NO == ret);
- ret = reserves_update (cls,
- session,
- &reserve);
- if (GNUNET_SYSERR == ret)
+ qs = reserves_update (cls,
+ session,
+ &reserve);
+ if (0 >= qs)
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
- return ret;
+ return GNUNET_OK;
}
@@ -6140,6 +6145,7 @@ postgres_insert_payback_request (void *cls,
GNUNET_PQ_query_param_end
};
int ret;
+ enum GNUNET_DB_QueryStatus qs;
/* check if the coin is already known */
ret = get_known_coin (cls,
@@ -6197,15 +6203,15 @@ postgres_insert_payback_request (void *cls,
pg->idle_reserve_expiration_time);
reserve.expiry = GNUNET_TIME_absolute_max (expiry,
reserve.expiry);
- ret = reserves_update (cls,
+ qs = reserves_update (cls,
session,
&reserve);
- if (GNUNET_SYSERR == ret)
+ if (0 >= qs)
{
GNUNET_break (0);
return GNUNET_SYSERR;
}
- return ret;
+ return GNUNET_OK;
}