merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 3adf456741c4300d42f4fbccc2ffd9c4e29497f0
parent 240c4cf0c3a14cbf2d64188d0fd0cec28850ced5
Author: Christian Grothoff <christian@grothoff.org>
Date:   Tue, 18 Feb 2025 20:46:15 +0100

fix #9563

Diffstat:
Msrc/backend/taler-merchant-exchangekeyupdate.c | 15++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/backend/taler-merchant-exchangekeyupdate.c b/src/backend/taler-merchant-exchangekeyupdate.c @@ -106,6 +106,15 @@ struct Exchange * hard limit? */ bool limited; + + /** + * Are we force-retrying a /keys download because some keys + * were missing (and we thus should not cherry-pick, as + * a major reason for a force-reload would be an + * exchange that has lost keys and backfilled them, which + * breaks keys downloads with cherry-picking). + */ + bool force_retry; }; @@ -581,9 +590,12 @@ download_keys (void *cls) = GNUNET_TIME_STD_BACKOFF (e->retry_delay); e->conn = TALER_EXCHANGE_get_keys (ctx, e->exchange_url, - e->keys, + e->force_retry + ? NULL + : e->keys, &cert_cb, e); + e->force_retry = false; if (NULL != e->conn) { active_inquiries++; @@ -676,6 +688,7 @@ force_exchange_keys (void *cls, true)); if (NULL != e->retry_task) GNUNET_SCHEDULER_cancel (e->retry_task); + e->force_retry = true; e->retry_task = GNUNET_SCHEDULER_add_at (e->first_retry, &download_keys,