commit 3adf456741c4300d42f4fbccc2ffd9c4e29497f0
parent 240c4cf0c3a14cbf2d64188d0fd0cec28850ced5
Author: Christian Grothoff <christian@grothoff.org>
Date: Tue, 18 Feb 2025 20:46:15 +0100
fix #9563
Diffstat:
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,