Browse Source

Use the best userproxy headroom only to determine if we need to recruit more subproxies.

master
Con Kolivas 8 years ago
parent
commit
193d0f22e8
  1. 15
      src/stratifier.c

15
src/stratifier.c

@ -2213,13 +2213,17 @@ out_unlock:
return headroom; return headroom;
} }
static int64_t proxy_headroom(sdata_t *sdata, const int userid) /* Returns the headroom available for more clients of the best alive user proxy
* for userid. */
static int64_t best_userproxy_headroom(sdata_t *sdata, const int userid)
{ {
proxy_t *proxy, *subproxy, *tmp, *subtmp; proxy_t *proxy, *subproxy, *tmp, *subtmp;
int64_t headroom = 0; int64_t headroom = 0;
mutex_lock(&sdata->proxy_lock); mutex_lock(&sdata->proxy_lock);
HASH_ITER(hh, sdata->proxies, proxy, tmp) { HASH_ITER(hh, sdata->proxies, proxy, tmp) {
bool alive = false;
if (proxy->userid < userid) if (proxy->userid < userid)
continue; continue;
if (proxy->userid > userid) if (proxy->userid > userid)
@ -2227,8 +2231,13 @@ static int64_t proxy_headroom(sdata_t *sdata, const int userid)
HASH_ITER(sh, proxy->subproxies, subproxy, subtmp) { HASH_ITER(sh, proxy->subproxies, subproxy, subtmp) {
if (subproxy->dead) if (subproxy->dead)
continue; continue;
alive = true;
headroom += subproxy->max_clients - subproxy->clients; headroom += subproxy->max_clients - subproxy->clients;
} }
/* Proxies are ordered by priority so first available will be
* the best priority */
if (alive)
break;
} }
mutex_unlock(&sdata->proxy_lock); mutex_unlock(&sdata->proxy_lock);
@ -2542,7 +2551,7 @@ static void recruit_best_userproxy(sdata_t *sdata, const int userid, const int r
* that are not bound to it that should be */ * that are not bound to it that should be */
static void check_userproxies(sdata_t *sdata, proxy_t *proxy, const int userid) static void check_userproxies(sdata_t *sdata, proxy_t *proxy, const int userid)
{ {
int64_t headroom = proxy_headroom(sdata, userid); int64_t headroom = best_userproxy_headroom(sdata, userid);
stratum_instance_t *client, *tmpclient; stratum_instance_t *client, *tmpclient;
int reconnects = 0; int reconnects = 0;
@ -4416,7 +4425,7 @@ static sdata_t *select_sdata(const ckpool_t *ckp, sdata_t *ckp_sdata, const int
if (best->id != global->id || current_headroom(ckp_sdata, &proxy) < 2) if (best->id != global->id || current_headroom(ckp_sdata, &proxy) < 2)
generator_recruit(ckp, global->id, 1); generator_recruit(ckp, global->id, 1);
} else { } else {
if (proxy_headroom(ckp_sdata, userid) < 2) if (best_userproxy_headroom(ckp_sdata, userid) < 2)
generator_recruit(ckp, best->id, 1); generator_recruit(ckp, best->id, 1);
} }
return best->sdata; return best->sdata;

Loading…
Cancel
Save