exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit 23243f568782339b16ca1e7c7eea78567b976b97
parent 2949329f5793f948cb2c5aa6fe9d083aee1d9bd7
Author: Christian Grothoff <grothoff@gnunet.org>
Date:   Sun, 19 Jul 2026 12:21:12 +0200

treat no-shard available as success

Diffstat:
Msrc/exchange/taler-exchange-aggregator.c | 14+++++++++++---
Msrc/exchangedb/begin_revolving_shard.c | 15+++++++--------
Msrc/include/exchange-database/begin_revolving_shard.h | 14+++++++-------
3 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/src/exchange/taler-exchange-aggregator.c b/src/exchange/taler-exchange-aggregator.c @@ -1285,9 +1285,9 @@ run_shard (void *cls) 1U + INT32_MAX, &s->shard_start, &s->shard_end); - if (0 >= qs) + switch (qs) { - if (GNUNET_DB_STATUS_SOFT_ERROR == qs) + case GNUNET_DB_STATUS_SOFT_ERROR: { static struct GNUNET_TIME_Relative delay; @@ -1300,14 +1300,22 @@ run_shard (void *cls) NULL); return; } + case GNUNET_DB_STATUS_HARD_ERROR: GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to begin shard (%d)!\n", qs); - GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR != qs); global_ret = EXIT_FAILURE; GNUNET_SCHEDULER_shutdown (); GNUNET_free (s); return; + case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS: + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "No open shard available\n"); + GNUNET_SCHEDULER_shutdown (); + GNUNET_free (s); + return; + case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT: + break; } GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Starting shard [%u:%u]!\n", diff --git a/src/exchangedb/begin_revolving_shard.c b/src/exchangedb/begin_revolving_shard.c @@ -34,7 +34,6 @@ TALER_EXCHANGEDB_begin_revolving_shard ( uint32_t *start_row, uint32_t *end_row) { - GNUNET_assert (shard_limit <= 1U + (uint32_t) INT_MAX); GNUNET_assert (shard_limit > 0); GNUNET_assert (shard_size > 0); @@ -61,7 +60,7 @@ TALER_EXCHANGEDB_begin_revolving_shard ( &last_end), GNUNET_PQ_result_spec_end }; - /* Used in #postgres_begin_revolving_shard() */ + PREPARE (pg, "get_last_revolving_shard", "SELECT" @@ -83,12 +82,12 @@ TALER_EXCHANGEDB_begin_revolving_shard ( case GNUNET_DB_STATUS_SOFT_ERROR: TALER_EXCHANGEDB_rollback (pg); continue; - case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT: - *start_row = 1U + last_end; - break; case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS: *start_row = 0; /* base-case: no shards yet */ break; /* continued below */ + case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT: + *start_row = 1U + last_end; + break; } } /* get_last_shard */ @@ -136,14 +135,14 @@ TALER_EXCHANGEDB_begin_revolving_shard ( case GNUNET_DB_STATUS_SOFT_ERROR: TALER_EXCHANGEDB_rollback (pg); continue; - case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT: - /* continued below (with commit) */ - break; case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS: /* someone else got this shard already, try again */ TALER_EXCHANGEDB_rollback (pg); continue; + case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT: + /* continued below (with commit) */ + break; } } /* end create fresh reovlving shard */ else diff --git a/src/include/exchange-database/begin_revolving_shard.h b/src/include/exchange-database/begin_revolving_shard.h @@ -37,12 +37,12 @@ * @return transaction status code */ enum GNUNET_DB_QueryStatus -TALER_EXCHANGEDB_begin_revolving_shard (struct - TALER_EXCHANGEDB_PostgresContext *pg, - const char *job_name, - uint32_t shard_size, - uint32_t shard_limit, - uint32_t *start_row, - uint32_t *end_row); +TALER_EXCHANGEDB_begin_revolving_shard ( + struct TALER_EXCHANGEDB_PostgresContext *pg, + const char *job_name, + uint32_t shard_size, + uint32_t shard_limit, + uint32_t *start_row, + uint32_t *end_row); #endif