From eab56b032a83e1dfb797fde96af6264fbb2dcca3 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Tue, 29 Dec 2015 11:10:38 +1100 Subject: [PATCH] Set up local bitcoind connections in node mode --- src/ckpool.c | 2 +- src/generator.c | 53 +++++++++++++++++++++++++++++++++++++------------ 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/ckpool.c b/src/ckpool.c index 9d63db74..384b8a00 100644 --- a/src/ckpool.c +++ b/src/ckpool.c @@ -1736,7 +1736,7 @@ int main(int argc, char **argv) parse_config(&ckp); /* Set defaults if not found in config file */ - if (!ckp.btcds && !ckp.proxy) { + if (!ckp.btcds) { ckp.btcds = 1; ckp.btcdurl = ckzalloc(sizeof(char *)); ckp.btcdauth = ckzalloc(sizeof(char *)); diff --git a/src/generator.c b/src/generator.c index 16225b2e..36cd2647 100644 --- a/src/generator.c +++ b/src/generator.c @@ -2740,14 +2740,31 @@ static void parse_globaluser(ckpool_t *ckp, gdata_t *gdata, const char *buf) static int proxy_loop(proc_instance_t *pi) { proxy_instance_t *proxi = NULL, *cproxy; + server_instance_t *si = NULL, *old_si; ckpool_t *ckp = pi->ckp; gdata_t *gdata = ckp->data; unix_msg_t *umsg = NULL; + bool started = false; char *buf = NULL; int ret = 0; reconnect: clear_unix_msg(&umsg); + + if (ckp->node) { + connsock_t *cs; + + old_si = si; + si = live_server(ckp); + if (!si) + goto out; + cs = &si->cs; + if (!old_si) + LOGWARNING("Connected to bitcoind: %s:%s", cs->url, cs->port); + else if (si != old_si) + LOGWARNING("Failed over to bitcoind: %s:%s", cs->url, cs->port); + } + /* This does not necessarily mean we reconnect, but a change has * occurred and we need to reexamine the proxies. */ cproxy = wait_best_proxy(ckp, gdata); @@ -2755,13 +2772,13 @@ reconnect: goto out; if (proxi != cproxy) { proxi = cproxy; - if (ckp->node) { - LOGWARNING("Successfully connected to pool %d %s as proxy node", - proxi->id, proxi->url); - } else { - LOGWARNING("Successfully connected to pool %d %s as proxy%s", - proxi->id, proxi->url, ckp->passthrough ? " in passthrough mode" : ""); - } + LOGWARNING("Successfully connected to pool %d %s as proxy%s", + proxi->id, proxi->url, ckp->passthrough ? " in passthrough mode" : ""); + } + + if (unlikely(!started)) { + started = true; + LOGWARNING("%s generator ready", ckp->name); } retry: clear_unix_msg(&umsg); @@ -2859,14 +2876,14 @@ static void *server_watchdog(void *arg) return NULL; } -static int server_mode(ckpool_t *ckp, proc_instance_t *pi) +static void setup_servers(ckpool_t *ckp) { pthread_t pth_watchdog; - server_instance_t *si; - int i, ret; + int i; ckp->servers = ckalloc(sizeof(server_instance_t *) * ckp->btcds); for (i = 0; i < ckp->btcds; i++) { + server_instance_t *si; connsock_t *cs; ckp->servers[i] = ckzalloc(sizeof(server_instance_t)); @@ -2882,10 +2899,19 @@ static int server_mode(ckpool_t *ckp, proc_instance_t *pi) } create_pthread(&pth_watchdog, server_watchdog, ckp); +} + +static int server_mode(ckpool_t *ckp, proc_instance_t *pi) +{ + int i, ret; + + setup_servers(ckp); + ret = gen_loop(pi); for (i = 0; i < ckp->btcds; i++) { - si = ckp->servers[i]; + server_instance_t *si = ckp->servers[i]; + kill_server(si); dealloc(si); } @@ -2924,6 +2950,9 @@ static int proxy_mode(ckpool_t *ckp, proc_instance_t *pi) mutex_init(&gdata->notify_lock); mutex_init(&gdata->share_lock); + if (ckp->node) + setup_servers(ckp); + /* Create all our proxy structures and pointers */ for (i = 0; i < ckp->proxies; i++) { proxy = __add_proxy(ckp, gdata, i); @@ -2939,8 +2968,6 @@ static int proxy_mode(ckpool_t *ckp, proc_instance_t *pi) } } - LOGWARNING("%s generator ready", ckp->name); - ret = proxy_loop(pi); return ret;