try to fix missing rollbacks for wirewatch

This commit is contained in:
Christian Grothoff 2018-08-11 02:47:58 +02:00
parent f9860f5370
commit ab239f3e54
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC

View File

@ -420,7 +420,7 @@ history_cb (void *cls,
{ {
struct RejectContext *rtc; struct RejectContext *rtc;
GNUNET_log (GNUNET_ERROR_TYPE_INFO, GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Wire transfer over %s has invalid subject `%s', sending it back!\n", "Wire transfer over %s has invalid subject `%s', sending it back!\n",
TALER_amount2s (&details->amount), TALER_amount2s (&details->amount),
details->wtid_s); details->wtid_s);
@ -443,6 +443,15 @@ history_cb (void *cls,
row_off_size, row_off_size,
&reject_cb, &reject_cb,
rtc); rtc);
if (NULL == rt)
{
GNUNET_break (0);
db_plugin->rollback (db_plugin->cls,
session);
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&find_transfers,
NULL);
}
return GNUNET_SYSERR; /* will continue later... */ return GNUNET_SYSERR; /* will continue later... */
} }
@ -474,7 +483,10 @@ history_cb (void *cls,
{ {
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Got DB soft error for reserve_in_insert\n"); "Got DB soft error for reserve_in_insert\n");
db_plugin->rollback (db_plugin->cls,
session);
/* try again */ /* try again */
GNUNET_assert (NULL == task);
task = GNUNET_SCHEDULER_add_now (&find_transfers, task = GNUNET_SCHEDULER_add_now (&find_transfers,
NULL); NULL);
return GNUNET_SYSERR; return GNUNET_SYSERR;
@ -540,6 +552,8 @@ find_transfers (void *cls)
{ {
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failed to obtain starting point for montoring from database!\n"); "Failed to obtain starting point for montoring from database!\n");
db_plugin->rollback (db_plugin->cls,
session);
global_ret = GNUNET_SYSERR; global_ret = GNUNET_SYSERR;
GNUNET_SCHEDULER_shutdown (); GNUNET_SCHEDULER_shutdown ();
return; return;
@ -547,6 +561,8 @@ find_transfers (void *cls)
if (GNUNET_DB_STATUS_SOFT_ERROR == qs) if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
{ {
/* try again */ /* try again */
db_plugin->rollback (db_plugin->cls,
session);
task = GNUNET_SCHEDULER_add_now (&find_transfers, task = GNUNET_SCHEDULER_add_now (&find_transfers,
NULL); NULL);
return; return;