summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2022-05-24 09:52:23 +0200
committerChristian Grothoff <christian@grothoff.org>2022-05-24 09:52:23 +0200
commitdaddc69dc9bfdcc521bb7cada925e77441d36f7d (patch)
tree39995ac0f6eff93ab250eec6967a1a4914016990
parent1d84c284ad852622be1987f956710930cbc7165b (diff)
downloadexchange-daddc69dc9bfdcc521bb7cada925e77441d36f7d.tar.gz
exchange-daddc69dc9bfdcc521bb7cada925e77441d36f7d.tar.bz2
exchange-daddc69dc9bfdcc521bb7cada925e77441d36f7d.zip
-revise shard locking: resume open shards before starting new ones
m---------contrib/gana0
-rw-r--r--src/exchange/taler-exchange-wirewatch.c23
2 files changed, 23 insertions, 0 deletions
diff --git a/contrib/gana b/contrib/gana
-Subproject fa6373d8e2432cd63da881e05f4100240e688cd
+Subproject 99d8d9e0336bacebab5af4ae00c3f685ffd90f6
diff --git a/src/exchange/taler-exchange-wirewatch.c b/src/exchange/taler-exchange-wirewatch.c
index 7cc4ac382..a5efda72c 100644
--- a/src/exchange/taler-exchange-wirewatch.c
+++ b/src/exchange/taler-exchange-wirewatch.c
@@ -107,6 +107,11 @@ struct WireAccount
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
* for this account?
*/
@@ -138,6 +143,10 @@ struct WireAccount
*/
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);
shard_done = check_shard_done (wa);
wa->started_transaction = false;
+ if (shard_done)
+ wa->shard_open = false;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Committing %s progress (%llu,%llu] at %llu\n (%s)",
wa->job_name,
@@ -795,6 +806,16 @@ lock_shard (void *cls)
GNUNET_SCHEDULER_shutdown ();
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
workers expected, and how long we usually took to
process a shard. */
@@ -855,6 +876,8 @@ lock_shard (void *cls)
/* continued below */
break;
}
+ wa->shard_end_time = GNUNET_TIME_relative_to_absolute (delay);
+ wa->shard_open = true;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Starting with shard %s at (%llu,%llu] locked for %s\n",
wa->job_name,