Merge branch 'master' into age-withdraw

This commit is contained in:
Özgür Kesim 2023-03-11 11:51:02 +01:00
commit 777a4c07cf
Signed by: oec
GPG Key ID: 3D76A56D79EDD9D7
8 changed files with 50 additions and 29 deletions

@ -1 +1 @@
Subproject commit 02132ededc12a0a1cfd81f0ca76c384304e15259 Subproject commit 1ec4596bf4925ee24fc06d3e74d2a553b8239870

View File

@ -8,11 +8,19 @@ PartOf=taler-exchange.target
[Service] [Service]
User=taler-exchange-httpd User=taler-exchange-httpd
Type=simple Type=simple
# Depending on the configuration, the service suicides and then
# needs to be restarted. # Depending on the configuration, the service process kills itself and then
# needs to be restarted. Thus no significant delay on restarts.
Restart=always Restart=always
# Do not dally on restarts.
RestartSec=1ms RestartSec=1ms
# Disable the service if more than 5 restarts are encountered within 5s.
# These are usually the systemd defaults, but can be overwritten, thus we set
# them here explicitly, as the exchange code assumes StartLimitInterval
# to be >=5s.
StartLimitBurst=5
StartLimitInterval=5s
ExecStart=/usr/bin/taler-exchange-httpd -c /etc/taler/taler.conf ExecStart=/usr/bin/taler-exchange-httpd -c /etc/taler/taler.conf
StandardOutput=journal StandardOutput=journal
StandardError=journal StandardError=journal

View File

@ -248,12 +248,15 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx,
{ {
if ( (0 < num_results) && if ( (0 < num_results) &&
(! GNUNET_TIME_relative_is_zero (timeout)) ) (! GNUNET_TIME_relative_is_zero (timeout)) )
/* 0 == start_row is implied, go with timeout into future */
GNUNET_snprintf (url, GNUNET_snprintf (url,
sizeof (url), sizeof (url),
"history/incoming?delta=%lld&long_poll_ms=%llu", "history/incoming?delta=%lld&long_poll_ms=%llu",
(long long) num_results, (long long) num_results,
tms); tms);
else else
/* Going back from current transaction or have no timeout;
hence timeout makes no sense */
GNUNET_snprintf (url, GNUNET_snprintf (url,
sizeof (url), sizeof (url),
"history/incoming?delta=%lld", "history/incoming?delta=%lld",
@ -263,6 +266,7 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx,
{ {
if ( (0 < num_results) && if ( (0 < num_results) &&
(! GNUNET_TIME_relative_is_zero (timeout)) ) (! GNUNET_TIME_relative_is_zero (timeout)) )
/* going forward from num_result */
GNUNET_snprintf (url, GNUNET_snprintf (url,
sizeof (url), sizeof (url),
"history/incoming?delta=%lld&start=%llu&long_poll_ms=%llu", "history/incoming?delta=%lld&start=%llu&long_poll_ms=%llu",
@ -270,6 +274,8 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx,
(unsigned long long) start_row, (unsigned long long) start_row,
tms); tms);
else else
/* going backwards or have no timeout;
hence timeout makes no sense */
GNUNET_snprintf (url, GNUNET_snprintf (url,
sizeof (url), sizeof (url),
"history/incoming?delta=%lld&start=%llu", "history/incoming?delta=%lld&start=%llu",

View File

@ -80,6 +80,11 @@
*/ */
#define UNIX_BACKLOG 50 #define UNIX_BACKLOG 50
/**
* How often will we try to connect to the database before giving up?
*/
#define MAX_DB_RETRIES 5
/** /**
* Above what request latency do we start to log? * Above what request latency do we start to log?
*/ */
@ -1965,11 +1970,20 @@ exchange_serve_process_config (void)
GNUNET_free (attr_enc_key_str); GNUNET_free (attr_enc_key_str);
} }
if (NULL == for (unsigned int i = 0; i<MAX_DB_RETRIES; i++)
(TEH_plugin = TALER_EXCHANGEDB_plugin_load (TEH_cfg))) {
TEH_plugin = TALER_EXCHANGEDB_plugin_load (TEH_cfg);
if (NULL != TEH_plugin)
break;
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Failed to connect to DB, will try again %u times\n",
MAX_DB_RETRIES - i);
sleep (1);
}
if (NULL == TEH_plugin)
{ {
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failed to initialize DB subsystem\n"); "Failed to initialize DB subsystem. Giving up.\n");
return GNUNET_SYSERR; return GNUNET_SYSERR;
} }
return GNUNET_OK; return GNUNET_OK;

View File

@ -234,12 +234,10 @@ TEH_handler_csr_withdraw (struct TEH_RequestContext *rc,
.cipher = TALER_DENOMINATION_CS .cipher = TALER_DENOMINATION_CS
}; };
struct GNUNET_JSON_Specification spec[] = { struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_fixed ("nonce", GNUNET_JSON_spec_fixed_auto ("nonce",
&nonce, &nonce),
sizeof (struct TALER_CsNonce)), GNUNET_JSON_spec_fixed_auto ("denom_pub_hash",
GNUNET_JSON_spec_fixed ("denom_pub_hash", &denom_pub_hash),
&denom_pub_hash,
sizeof (struct TALER_DenominationHashP)),
GNUNET_JSON_spec_end () GNUNET_JSON_spec_end ()
}; };
struct TEH_DenominationKey *dk; struct TEH_DenominationKey *dk;
@ -333,17 +331,11 @@ TEH_handler_csr_withdraw (struct TEH_RequestContext *rc,
} }
} }
{ return TALER_MHD_REPLY_JSON_PACK (
json_t *csr_obj; rc->connection,
MHD_HTTP_OK,
csr_obj = GNUNET_JSON_PACK ( TALER_JSON_pack_exchange_withdraw_values ("ewv",
TALER_JSON_pack_exchange_withdraw_values ("ewv", &ewv));
&ewv));
GNUNET_assert (NULL != csr_obj);
return TALER_MHD_reply_json_steal (rc->connection,
csr_obj,
MHD_HTTP_OK);
}
} }

View File

@ -738,7 +738,7 @@ free_denom_cb (void *cls,
* @param value the `struct HelperSignkey` to release * @param value the `struct HelperSignkey` to release
* @return #GNUNET_OK (continue to iterate) * @return #GNUNET_OK (continue to iterate)
*/ */
static int static enum GNUNET_GenericReturnValue
free_esign_cb (void *cls, free_esign_cb (void *cls,
const struct GNUNET_PeerIdentity *pid, const struct GNUNET_PeerIdentity *pid,
void *value) void *value)
@ -3616,6 +3616,7 @@ TEH_keys_management_get_keys_handler (const struct TEH_RequestHandler *rh,
if ( (GNUNET_is_zero (&denom_rsa_sm_pub)) && if ( (GNUNET_is_zero (&denom_rsa_sm_pub)) &&
(GNUNET_is_zero (&denom_cs_sm_pub)) ) (GNUNET_is_zero (&denom_cs_sm_pub)) )
{ {
/* Either IPC failed, or neither helper had any denominations configured. */
return TALER_MHD_reply_with_error (connection, return TALER_MHD_reply_with_error (connection,
MHD_HTTP_BAD_GATEWAY, MHD_HTTP_BAD_GATEWAY,
TALER_EC_EXCHANGE_DENOMINATION_HELPER_UNAVAILABLE, TALER_EC_EXCHANGE_DENOMINATION_HELPER_UNAVAILABLE,
@ -3628,7 +3629,6 @@ TEH_keys_management_get_keys_handler (const struct TEH_RequestHandler *rh,
TALER_EC_EXCHANGE_SIGNKEY_HELPER_UNAVAILABLE, TALER_EC_EXCHANGE_SIGNKEY_HELPER_UNAVAILABLE,
NULL); NULL);
} }
// then a secmod helper is not yet running and we should return an MHD_HTTP_BAD_GATEWAY!
GNUNET_assert (NULL != fbc.denoms); GNUNET_assert (NULL != fbc.denoms);
GNUNET_assert (NULL != fbc.signkeys); GNUNET_assert (NULL != fbc.signkeys);
GNUNET_CONTAINER_multihashmap_iterate (ksh->helpers->denom_keys, GNUNET_CONTAINER_multihashmap_iterate (ksh->helpers->denom_keys,

View File

@ -757,7 +757,7 @@ continue_with_shard (void *cls)
shard_end - latest_row_off); shard_end - latest_row_off);
GNUNET_assert (NULL == hh); GNUNET_assert (NULL == hh);
GNUNET_log (GNUNET_ERROR_TYPE_INFO, GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Requesting credit history staring from %llu\n", "Requesting credit history starting from %llu\n",
(unsigned long long) latest_row_off); (unsigned long long) latest_row_off);
hh_start_time = GNUNET_TIME_absolute_get (); hh_start_time = GNUNET_TIME_absolute_get ();
hh_returned_data = false; hh_returned_data = false;

View File

@ -168,9 +168,10 @@ handle_reserves_get_finished (void *cls,
rs.hr.ec = TALER_JSON_get_error_code (j); rs.hr.ec = TALER_JSON_get_error_code (j);
rs.hr.hint = TALER_JSON_get_error_hint (j); rs.hr.hint = TALER_JSON_get_error_hint (j);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Unexpected response code %u/%d for reserves get\n", "Unexpected response code %u/%d for GET %s\n",
(unsigned int) response_code, (unsigned int) response_code,
(int) rs.hr.ec); (int) rs.hr.ec,
rgh->url);
break; break;
} }
if (NULL != rgh->cb) if (NULL != rgh->cb)