aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-08-26 03:09:38 +0200
committerFlorian Dold <florian.dold@gmail.com>2019-08-26 03:09:38 +0200
commit613217be0354a02611f5e1a34e07989e2c5d5cfe (patch)
tree0623fdfbd32820e9055c954a337afc76fe465845
parent58b5700c87003749ec014baf84578b422eabcc6e (diff)
locking for known_coins
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index 75d124ce1..54f18da9d 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -849,6 +849,12 @@ postgres_prepare (PGconn *db_conn)
" WHERE coin_pub=$1"
" FOR UPDATE;",
1),
+ /* Lock deposit table; NOTE: we may want to eventually shard the
+ deposit table to avoid this lock being the main point of
+ contention limiting transaction performance. */
+ GNUNET_PQ_make_prepare ("lock_known_coins",
+ "LOCK TABLE known_coins;",
+ 0),
/* Used in #postgres_insert_known_coin() to store
the denomination public key and signature for
a coin known to the exchange. */
@@ -3462,6 +3468,14 @@ postgres_ensure_coin_known (void *cls,
struct PostgresClosure *pc = cls;
enum GNUNET_DB_QueryStatus qs;
struct TALER_CoinPublicInfo known_coin;
+ struct GNUNET_PQ_QueryParam no_params[] = {
+ GNUNET_PQ_query_param_end
+ };
+
+ if (0 > (qs = GNUNET_PQ_eval_prepared_non_select (session->conn,
+ "lock_known_coins",
+ no_params)))
+ return qs;
/* check if the coin is already known */
qs = postgres_get_known_coin (pc,