Don't consider a pool lagging if a request has only just been filed. This should decrease the false positives for "pool not providing work fast enough".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
diff --git a/main.c b/main.c
index 1706e9a..d98341e 100644
--- a/main.c
+++ b/main.c
@@ -4178,11 +4178,11 @@ static bool divide_work(struct timeval *now, struct work *work, uint32_t hash_di
static bool get_work(struct work *work, bool requested, struct thr_info *thr,
const int thr_id, uint32_t hash_div)
{
+ bool newreq = false, ret = false;
struct timespec abstime = {};
struct timeval now;
struct work *work_heap;
struct pool *pool;
- bool ret = false;
int failures = 0;
/* Tell the watchdog thread this thread is waiting on getwork and
@@ -4190,9 +4190,12 @@ static bool get_work(struct work *work, bool requested, struct thr_info *thr,
thread_reportout(thr);
retry:
pool = current_pool();
- if (unlikely((!requested || requests_queued() < opt_queue) && !queue_request(thr, true))) {
- applog(LOG_WARNING, "Failed to queue_request in get_work");
- goto out;
+ if (!requested || requests_queued() < opt_queue) {
+ if (unlikely(!queue_request(thr, true))) {
+ applog(LOG_WARNING, "Failed to queue_request in get_work");
+ goto out;
+ }
+ newreq = true;
}
if (can_roll(work) && should_roll(work)) {
@@ -4201,17 +4204,14 @@ retry:
goto out;
}
- if (!requests_staged()) {
- if (requested && requests_queued() >= mining_threads &&
- !pool_tset(pool, &pool->lagging)) {
- applog(LOG_WARNING, "Pool %d not providing work fast enough",
- pool->pool_no);
- pool->getfail_occasions++;
- total_go++;
- }
+ if (requested && !newreq && !requests_staged() && requests_queued() >= mining_threads &&
+ !pool_tset(pool, &pool->lagging)) {
+ applog(LOG_WARNING, "Pool %d not providing work fast enough", pool->pool_no);
+ pool->getfail_occasions++;
+ total_go++;
}
- requested = false;
+ newreq = requested = false;
gettimeofday(&now, NULL);
abstime.tv_sec = now.tv_sec + 60;