-revise shard locking: resume open shards before starting new ones
This commit is contained in:
parent
1d84c284ad
commit
daddc69dc9
@ -1 +1 @@
|
|||||||
Subproject commit fa6373d8e2432cd63da881e05f4100240e688cdf
|
Subproject commit 99d8d9e0336bacebab5af4ae00c3f685ffd90f60
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user