-revise shard locking: resume open shards before starting new ones

This commit is contained in:
Christian Grothoff 2022-05-24 09:52:23 +02:00
parent 1d84c284ad
commit daddc69dc9
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
2 changed files with 24 additions and 1 deletions

@ -1 +1 @@
Subproject commit fa6373d8e2432cd63da881e05f4100240e688cdf Subproject commit 99d8d9e0336bacebab5af4ae00c3f685ffd90f60

View File

@ -106,6 +106,11 @@ struct WireAccount
*/ */
struct GNUNET_TIME_Absolute shard_start_time; struct GNUNET_TIME_Absolute shard_start_time;
/**
* For how long did we lock the shard?
*/
struct GNUNET_TIME_Absolute shard_end_time;
/** /**
* How long did we take to finish the last shard * How long did we take to finish the last shard
* for this account? * for this account?
@ -138,6 +143,10 @@ struct WireAccount
*/ */
bool started_transaction; bool started_transaction;
/**
* Is this shard still open for processing.
*/
bool shard_open;
}; };
@ -537,6 +546,8 @@ do_commit (struct WireAccount *wa)
GNUNET_assert (NULL == task); GNUNET_assert (NULL == task);
shard_done = check_shard_done (wa); shard_done = check_shard_done (wa);
wa->started_transaction = false; wa->started_transaction = false;
if (shard_done)
wa->shard_open = false;
GNUNET_log (GNUNET_ERROR_TYPE_INFO, GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Committing %s progress (%llu,%llu] at %llu\n (%s)", "Committing %s progress (%llu,%llu] at %llu\n (%s)",
wa->job_name, wa->job_name,
@ -795,6 +806,16 @@ lock_shard (void *cls)
GNUNET_SCHEDULER_shutdown (); GNUNET_SCHEDULER_shutdown ();
return; return;
} }
if ( (wa->shard_open) &&
(GNUNET_TIME_absolute_is_future (wa->shard_end_time)) )
{
wa->delay = true; /* default is to delay, unless
we find out that we're really busy */
wa->batch_start = wa->latest_row_off;
task = GNUNET_SCHEDULER_add_now (&continue_with_shard,
wa);
return;
}
/* How long we lock a shard depends on the number of /* How long we lock a shard depends on the number of
workers expected, and how long we usually took to workers expected, and how long we usually took to
process a shard. */ process a shard. */
@ -855,6 +876,8 @@ lock_shard (void *cls)
/* continued below */ /* continued below */
break; break;
} }
wa->shard_end_time = GNUNET_TIME_relative_to_absolute (delay);
wa->shard_open = true;
GNUNET_log (GNUNET_ERROR_TYPE_INFO, GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Starting with shard %s at (%llu,%llu] locked for %s\n", "Starting with shard %s at (%llu,%llu] locked for %s\n",
wa->job_name, wa->job_name,