Browse Source

Roll back code for relay node.

master
Con Kolivas 9 years ago
parent
commit
bce4cab176
  1. 25
      src/ckpool.c
  2. 5
      src/ckpool.h
  3. 26
      src/connector.c
  4. 35
      src/generator.c
  5. 11
      src/stratifier.c

25
src/ckpool.c

@ -1481,7 +1481,6 @@ static struct option long_options[] = {
{"killold", no_argument, 0, 'k'}, {"killold", no_argument, 0, 'k'},
{"log-shares", no_argument, 0, 'L'}, {"log-shares", no_argument, 0, 'L'},
{"loglevel", required_argument, 0, 'l'}, {"loglevel", required_argument, 0, 'l'},
{"node", no_argument, 0, 'N'},
{"name", required_argument, 0, 'n'}, {"name", required_argument, 0, 'n'},
{"passthrough", no_argument, 0, 'P'}, {"passthrough", no_argument, 0, 'P'},
{"proxy", no_argument, 0, 'p'}, {"proxy", no_argument, 0, 'p'},
@ -1500,7 +1499,6 @@ static struct option long_options[] = {
{"killold", no_argument, 0, 'k'}, {"killold", no_argument, 0, 'k'},
{"log-shares", no_argument, 0, 'L'}, {"log-shares", no_argument, 0, 'L'},
{"loglevel", required_argument, 0, 'l'}, {"loglevel", required_argument, 0, 'l'},
{"node", no_argument, 0, 'N'},
{"name", required_argument, 0, 'n'}, {"name", required_argument, 0, 'n'},
{"passthrough", no_argument, 0, 'P'}, {"passthrough", no_argument, 0, 'P'},
{"proxy", no_argument, 0, 'p'}, {"proxy", no_argument, 0, 'p'},
@ -1548,7 +1546,7 @@ int main(int argc, char **argv)
ckp.initial_args[ckp.args] = strdup(argv[ckp.args]); ckp.initial_args[ckp.args] = strdup(argv[ckp.args]);
ckp.initial_args[ckp.args] = NULL; ckp.initial_args[ckp.args] = NULL;
while ((c = getopt_long(argc, argv, "Ac:Dd:g:HhkLl:Nn:PpRS:s:", long_options, &i)) != -1) { while ((c = getopt_long(argc, argv, "Ac:Dd:g:HhkLl:n:PpRS:s:", long_options, &i)) != -1) {
switch (c) { switch (c) {
case 'A': case 'A':
ckp.standalone = true; ckp.standalone = true;
@ -1599,27 +1597,22 @@ int main(int argc, char **argv)
LOG_EMERG, LOG_DEBUG, ckp.loglevel); LOG_EMERG, LOG_DEBUG, ckp.loglevel);
} }
break; break;
case 'N':
if (ckp.proxy || ckp.redirector || ckp.passthrough)
quit(1, "Cannot set combinations of proxy, node, redirector and passthrough");
ckp.standalone = ckp.node = ckp.proxy = ckp.passthrough = true;
break;
case 'n': case 'n':
ckp.name = optarg; ckp.name = optarg;
break; break;
case 'P': case 'P':
if (ckp.node || ckp.proxy || ckp.redirector) if (ckp.proxy || ckp.redirector)
quit(1, "Cannot set combinations of proxy, node, redirector and passthrough"); quit(1, "Cannot set both proxy or redirector and passthrough mode");
ckp.standalone = ckp.proxy = ckp.passthrough = true; ckp.standalone = ckp.proxy = ckp.passthrough = true;
break; break;
case 'p': case 'p':
if (ckp.node || ckp.passthrough || ckp.redirector) if (ckp.passthrough || ckp.redirector)
quit(1, "Cannot set combinations of proxy, node, redirector and passthrough"); quit(1, "Cannot set both passthrough or redirector and proxy mode");
ckp.proxy = true; ckp.proxy = true;
break; break;
case 'R': case 'R':
if (ckp.node || ckp.proxy || ckp.passthrough) if (ckp.proxy || ckp.passthrough)
quit(1, "Cannot set combinations of proxy, node, redirector and passthrough"); quit(1, "Cannot set both proxy or passthrough and redirector modes");
ckp.standalone = ckp.proxy = ckp.passthrough = ckp.redirector = true; ckp.standalone = ckp.proxy = ckp.passthrough = ckp.redirector = true;
break; break;
case 'S': case 'S':
@ -1632,9 +1625,7 @@ int main(int argc, char **argv)
} }
if (!ckp.name) { if (!ckp.name) {
if (ckp.node) if (ckp.redirector)
ckp.name = "cknode";
else if (ckp.redirector)
ckp.name = "ckredirector"; ckp.name = "ckredirector";
else if (ckp.passthrough) else if (ckp.passthrough)
ckp.name = "ckpassthrough"; ckp.name = "ckpassthrough";

5
src/ckpool.h

@ -22,7 +22,6 @@
#define RPC_TIMEOUT 60 #define RPC_TIMEOUT 60
struct ckpool_instance; struct ckpool_instance;
typedef struct ckpool_instance ckpool_t; typedef struct ckpool_instance ckpool_t;
struct ckmsg { struct ckmsg {
@ -184,9 +183,6 @@ struct ckpool_instance {
/* Are we a redirecting passthrough */ /* Are we a redirecting passthrough */
bool redirector; bool redirector;
/* Are we a relay node passthrough */
bool node;
/* Are we running as a proxy */ /* Are we running as a proxy */
bool proxy; bool proxy;
@ -228,7 +224,6 @@ struct ckpool_instance {
char **proxyurl; char **proxyurl;
char **proxyauth; char **proxyauth;
char **proxypass; char **proxypass;
server_instance_t *btcdbackup;
/* Passthrough redirect options */ /* Passthrough redirect options */
int redirecturls; int redirecturls;

26
src/connector.c

@ -61,8 +61,6 @@ struct client_instance {
/* Is this the parent passthrough client */ /* Is this the parent passthrough client */
bool passthrough; bool passthrough;
/* Is this a parent relay passthrough node client */
bool node;
/* Linked list of shares in redirector mode.*/ /* Linked list of shares in redirector mode.*/
share_t *shares; share_t *shares;
@ -899,14 +897,13 @@ static bool client_exists(cdata_t *cdata, const int64_t id)
return !!client; return !!client;
} }
static void passthrough_client(cdata_t *cdata, client_instance_t *client, const bool node) static void passthrough_client(cdata_t *cdata, client_instance_t *client)
{ {
char *buf; char *buf;
LOGINFO("Connector adding passthrough %sclient %"PRId64, node ? "node " : "", client->id); LOGINFO("Connector adding passthrough client %"PRId64, client->id);
client->passthrough = true; client->passthrough = true;
client->node = node; ASPRINTF(&buf, "{\"result\": true}\n");
ASPRINTF(&buf, "{\"result\": true, \"node\": %s}\n", node ? "true" : "false");
send_client(cdata, client->id, buf); send_client(cdata, client->id, buf);
} }
@ -1093,22 +1090,7 @@ retry:
LOGINFO("Connector failed to find client id %"PRId64" to pass through", client_id); LOGINFO("Connector failed to find client id %"PRId64" to pass through", client_id);
goto retry; goto retry;
} }
passthrough_client(cdata, client, false); passthrough_client(cdata, client);
dec_instance_ref(cdata, client);
} else if (cmdmatch(buf, "node")) {
client_instance_t *client;
ret = sscanf(buf, "node=%"PRId64, &client_id);
if (ret < 0) {
LOGDEBUG("Connector failed to parse node command: %s", buf);
goto retry;
}
client = ref_client_by_id(cdata, client_id);
if (unlikely(!client)) {
LOGINFO("Connector failed to find client id %"PRId64" to node pass through", client_id);
goto retry;
}
passthrough_client(cdata, client, true);
dec_instance_ref(cdata, client); dec_instance_ref(cdata, client);
} else if (cmdmatch(buf, "getxfd")) { } else if (cmdmatch(buf, "getxfd")) {
int fdno = -1; int fdno = -1;

35
src/generator.c

@ -755,15 +755,15 @@ out:
return ret; return ret;
} }
static bool passthrough_stratum(connsock_t *cs, proxy_instance_t *proxi, const bool node) static bool passthrough_stratum(connsock_t *cs, proxy_instance_t *proxi)
{ {
json_t *req, *val = NULL, *res_val, *err_val; json_t *req, *val = NULL, *res_val, *err_val;
float timeout = 10; float timeout = 10;
bool ret = false; bool ret = false;
JSON_CPACK(req, "{s:s,s:[sb]}", JSON_CPACK(req, "{s:s,s:[s]}",
"method", "mining.passthrough", "method", "mining.passthrough",
"params", PACKAGE"/"VERSION, node); "params", PACKAGE"/"VERSION);
ret = send_json_msg(cs, req); ret = send_json_msg(cs, req);
json_decref(req); json_decref(req);
if (!ret) { if (!ret) {
@ -1761,7 +1761,7 @@ static bool proxy_alive(ckpool_t *ckp, proxy_instance_t *proxi, connsock_t *cs,
goto out; goto out;
} }
if (ckp->passthrough) { if (ckp->passthrough) {
if (!passthrough_stratum(cs, proxi, ckp->node)) { if (!passthrough_stratum(cs, proxi)) {
LOGWARNING("Failed initial passthrough to %s:%s !", LOGWARNING("Failed initial passthrough to %s:%s !",
cs->url, cs->port); cs->url, cs->port);
goto out; goto out;
@ -2029,7 +2029,7 @@ static void *proxy_recv(void *arg)
* has likely stopped responding. */ * has likely stopped responding. */
ret = epoll_wait(epfd, &event, 1, 600000); ret = epoll_wait(epfd, &event, 1, 600000);
if (likely(ret > 0)) { if (likely(ret > 0)) {
float timeout = 10; float timeout = 30;
subproxy = event.data.ptr; subproxy = event.data.ptr;
cs = &subproxy->cs; cs = &subproxy->cs;
@ -2707,31 +2707,6 @@ static int proxy_mode(ckpool_t *ckp, proc_instance_t *pi)
} }
} }
if (ckp->node) {
if (ckp->btcds) {
/* If we also have btcds set up in node mode, try to talk to
* one of them as a way to submit blocks if we find them when
* submitting them upstream. */
server_instance_t *si = ckp->btcdbackup = ckzalloc(sizeof(server_instance_t));
si->url = ckp->btcdurl[0];
si->auth = ckp->btcdauth[0];
si->pass = ckp->btcdpass[0];
if (server_alive(ckp, si, false)) {
LOGNOTICE("Node backup btcd %s:%s alive", si->cs.url, si->cs.port);
} else {
LOGWARNING("Node backup btcd %s:%s failed! Will run as ordinary passthrough",
si->cs.url, si->cs.port);
ckp->btcdbackup = NULL;
free(si);
ckp->node = false;
}
} else {
LOGWARNING("No backup btcd specified in node mode! Will run as ordinary passthrough");
ckp->node = false;
}
}
LOGWARNING("%s generator ready", ckp->name); LOGWARNING("%s generator ready", ckp->name);
ret = proxy_loop(pi); ret = proxy_loop(pi);

11
src/stratifier.c

@ -4817,21 +4817,14 @@ static void parse_method(ckpool_t *ckp, sdata_t *sdata, stratum_instance_t *clie
} }
if (unlikely(cmdmatch(method, "mining.passthrough"))) { if (unlikely(cmdmatch(method, "mining.passthrough"))) {
json_t *nodeval = json_array_get(params_val, 1);
char buf[256]; char buf[256];
bool node;
if (nodeval)
node = json_is_true(nodeval);
else
node = false;
/* We need to inform the connector process that this client /* We need to inform the connector process that this client
* is a passthrough and to manage its messages accordingly. No * is a passthrough and to manage its messages accordingly. No
* data from this client id should ever come back to this * data from this client id should ever come back to this
* stratifier after this so drop the client in the stratifier. */ * stratifier after this so drop the client in the stratifier. */
LOGNOTICE("Adding %spassthrough client %"PRId64" %s", node ? "node " : "", LOGNOTICE("Adding passthrough client %"PRId64" %s", client_id, client->address);
client_id, client->address); snprintf(buf, 255, "passthrough=%"PRId64, client_id);
snprintf(buf, 255, "%s=%"PRId64, node ? "node" : "passthrough", client_id);
send_proc(ckp->connector, buf); send_proc(ckp->connector, buf);
drop_client(ckp, sdata, client_id); drop_client(ckp, sdata, client_id);
return; return;

Loading…
Cancel
Save