-experimental wirewatch change to keep shard locks across history requests

This commit is contained in:
Christian Grothoff 2022-05-21 02:00:31 +02:00
parent 9e0df07a16
commit a6494f9905
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC

View File

@ -480,6 +480,16 @@ mark_shard_done (struct WireAccount *wa)
}
/**
* Continue with the credit history of the shard
* reserved as @a wa_pos.
*
* @param[in,out] wa_pos shard to continue processing
*/
static void
continue_with_shard (struct WireAccount *wa_pos);
/**
* We are finished with the current transaction, try
* to commit and then schedule the next iteration.
@ -490,9 +500,10 @@ static void
do_commit (struct WireAccount *wa)
{
enum GNUNET_DB_QueryStatus qs;
bool shard_done;
wa->started_transaction = false;
mark_shard_done (wa);
shard_done = mark_shard_done (wa);
qs = db_plugin->commit (db_plugin->cls);
switch (qs)
{
@ -509,7 +520,10 @@ do_commit (struct WireAccount *wa)
/* normal case */
break;
}
if (shard_done)
shard_completed (wa);
else
continue_with_shard (wa);
}
@ -681,7 +695,6 @@ static void
find_transfers (void *cls)
{
enum GNUNET_DB_QueryStatus qs;
unsigned int limit;
(void) cls;
task = NULL;
@ -761,15 +774,23 @@ find_transfers (void *cls)
break;
}
}
wa_pos->latest_row_off = wa_pos->batch_start;
continue_with_shard (wa_pos);
}
static void
continue_with_shard (struct WireAccount *wa_pos)
{
unsigned int limit;
limit = GNUNET_MIN (wa_pos->batch_size,
wa_pos->shard_end - wa_pos->batch_start);
wa_pos->shard_end - wa_pos->latest_row_off);
GNUNET_assert (NULL == wa_pos->hh);
wa_pos->latest_row_off = wa_pos->batch_start;
wa_pos->max_row_off = wa_pos->batch_start + limit - 1;
wa_pos->max_row_off = wa_pos->latest_row_off + limit - 1;
wa_pos->hh = TALER_BANK_credit_history (ctx,
wa_pos->ai->auth,
wa_pos->batch_start,
wa_pos->latest_row_off,
limit,
test_mode
? GNUNET_TIME_UNIT_ZERO