mirror of
https://github.com/GOSTSec/sgminer
synced 2025-08-26 13:52:02 +00:00
Implement the actual switch logic which changes over after 5 minutes of local work generation.
This commit is contained in:
parent
81ff7fb3dc
commit
f91a048ae7
26
main.c
26
main.c
@ -182,6 +182,7 @@ static unsigned int total_lo, total_ro;
|
|||||||
|
|
||||||
static struct pool *pools = NULL;
|
static struct pool *pools = NULL;
|
||||||
static struct pool *currentpool;
|
static struct pool *currentpool;
|
||||||
|
static int pool_no;
|
||||||
static int total_pools;
|
static int total_pools;
|
||||||
|
|
||||||
static bool curses_active = false;
|
static bool curses_active = false;
|
||||||
@ -260,10 +261,15 @@ static struct pool *current_pool(void)
|
|||||||
return pool;
|
return pool;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_current_pool(struct pool *pool)
|
static void switch_pools(void)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&control_lock);
|
pthread_mutex_lock(&control_lock);
|
||||||
currentpool = pool;
|
pool_no++;
|
||||||
|
if (pool_no >= total_pools)
|
||||||
|
pool_no = 0;
|
||||||
|
currentpool = &pools[pool_no];
|
||||||
|
gettimeofday(¤tpool->tv_localgen, NULL);
|
||||||
|
applog(LOG_WARNING, "Prolonged outage. Attempting to switch to %s", currentpool->rpc_url);
|
||||||
pthread_mutex_unlock(&control_lock);
|
pthread_mutex_unlock(&control_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -689,6 +695,7 @@ static void curses_print_status(int thr_id)
|
|||||||
wclrtoeol(statuswin);
|
wclrtoeol(statuswin);
|
||||||
wmove(statuswin, 4, 0);
|
wmove(statuswin, 4, 0);
|
||||||
wprintw(statuswin, " Connected to %s as user %s", pool->rpc_url, pool->rpc_user);
|
wprintw(statuswin, " Connected to %s as user %s", pool->rpc_url, pool->rpc_user);
|
||||||
|
wclrtoeol(statuswin);
|
||||||
wmove(statuswin, 5, 0);
|
wmove(statuswin, 5, 0);
|
||||||
wprintw(statuswin, " Block %s started: %s", current_block + 4, blockdate);
|
wprintw(statuswin, " Block %s started: %s", current_block + 4, blockdate);
|
||||||
wmove(statuswin, 6, 0);
|
wmove(statuswin, 6, 0);
|
||||||
@ -1406,12 +1413,13 @@ static void flush_requests(bool longpoll)
|
|||||||
|
|
||||||
static bool get_work(struct work *work, bool queued)
|
static bool get_work(struct work *work, bool queued)
|
||||||
{
|
{
|
||||||
struct pool *pool = current_pool();
|
|
||||||
struct work *work_heap;
|
struct work *work_heap;
|
||||||
|
struct pool *pool;
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
int failures = 0;
|
int failures = 0;
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
|
pool = current_pool();
|
||||||
if (unlikely(!queued && !queue_request())) {
|
if (unlikely(!queued && !queue_request())) {
|
||||||
applog(LOG_WARNING, "Failed to queue_request in get_work");
|
applog(LOG_WARNING, "Failed to queue_request in get_work");
|
||||||
goto out;
|
goto out;
|
||||||
@ -1432,7 +1440,14 @@ retry:
|
|||||||
|
|
||||||
gettimeofday(&tv_now, NULL);
|
gettimeofday(&tv_now, NULL);
|
||||||
timeval_subtract(&diff, &tv_now, &pool->tv_localgen);
|
timeval_subtract(&diff, &tv_now, &pool->tv_localgen);
|
||||||
if (diff.tv_sec > 600) {
|
if (total_pools > 1) {
|
||||||
|
/* Attempt to switch pools if this one has been unresponsive for >half
|
||||||
|
* a block's duration */
|
||||||
|
if (diff.tv_sec > 300) {
|
||||||
|
switch_pools();
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
} else if (diff.tv_sec > 600) {
|
||||||
/* A new block appears on average every 10 mins */
|
/* A new block appears on average every 10 mins */
|
||||||
applog(LOG_WARNING, "Prolonged outage. Going idle till network recovers.");
|
applog(LOG_WARNING, "Prolonged outage. Going idle till network recovers.");
|
||||||
/* Force every thread to wait for new work */
|
/* Force every thread to wait for new work */
|
||||||
@ -2427,7 +2442,8 @@ int main (int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
set_current_pool(pools);
|
/* Set the current pool to pool 0 */
|
||||||
|
currentpool = pools;
|
||||||
|
|
||||||
#ifdef HAVE_SYSLOG_H
|
#ifdef HAVE_SYSLOG_H
|
||||||
if (use_syslog)
|
if (use_syslog)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user