|
|
@ -831,7 +831,7 @@ static char *send_recv_generator(ckpool_t *ckp, const char *msg, const int prio) |
|
|
|
return buf; |
|
|
|
return buf; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void send_generator(ckpool_t *ckp, const char *msg, const int prio) |
|
|
|
static void send_generator(const ckpool_t *ckp, const char *msg, const int prio) |
|
|
|
{ |
|
|
|
{ |
|
|
|
sdata_t *sdata = ckp->data; |
|
|
|
sdata_t *sdata = ckp->data; |
|
|
|
bool set; |
|
|
|
bool set; |
|
|
@ -841,7 +841,7 @@ static void send_generator(ckpool_t *ckp, const char *msg, const int prio) |
|
|
|
set = true; |
|
|
|
set = true; |
|
|
|
} else |
|
|
|
} else |
|
|
|
set = false; |
|
|
|
set = false; |
|
|
|
async_send_proc(ckp, ckp->generator, msg); |
|
|
|
send_proc(ckp->generator, msg); |
|
|
|
if (set) |
|
|
|
if (set) |
|
|
|
sdata->gen_priority = 0; |
|
|
|
sdata->gen_priority = 0; |
|
|
|
} |
|
|
|
} |
|
|
@ -966,7 +966,7 @@ static void connector_drop_client(ckpool_t *ckp, const int64_t id) |
|
|
|
|
|
|
|
|
|
|
|
LOGDEBUG("Stratifier requesting connector drop client %"PRId64, id); |
|
|
|
LOGDEBUG("Stratifier requesting connector drop client %"PRId64, id); |
|
|
|
snprintf(buf, 255, "dropclient=%"PRId64, id); |
|
|
|
snprintf(buf, 255, "dropclient=%"PRId64, id); |
|
|
|
async_send_proc(ckp, ckp->connector, buf); |
|
|
|
send_proc(ckp->connector, buf); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void drop_allclients(ckpool_t *ckp) |
|
|
|
static void drop_allclients(ckpool_t *ckp) |
|
|
@ -1012,8 +1012,8 @@ static sdata_t *duplicate_sdata(const sdata_t *sdata) |
|
|
|
memcpy(dsdata->donkeytxnbin, sdata->donkeytxnbin, 25); |
|
|
|
memcpy(dsdata->donkeytxnbin, sdata->donkeytxnbin, 25); |
|
|
|
|
|
|
|
|
|
|
|
/* Use the same work queues for all subproxies */ |
|
|
|
/* Use the same work queues for all subproxies */ |
|
|
|
dsdata->ckwqs = sdata->ckwqs; |
|
|
|
|
|
|
|
dsdata->ssends = sdata->ssends; |
|
|
|
dsdata->ssends = sdata->ssends; |
|
|
|
|
|
|
|
dsdata->ckwqs = sdata->ckwqs; |
|
|
|
dsdata->ckdbq = sdata->ckdbq; |
|
|
|
dsdata->ckdbq = sdata->ckdbq; |
|
|
|
dsdata->sauthq = sdata->sauthq; |
|
|
|
dsdata->sauthq = sdata->sauthq; |
|
|
|
|
|
|
|
|
|
|
@ -1139,7 +1139,7 @@ out_unlock: |
|
|
|
|
|
|
|
|
|
|
|
static void reconnect_client(sdata_t *sdata, stratum_instance_t *client); |
|
|
|
static void reconnect_client(sdata_t *sdata, stratum_instance_t *client); |
|
|
|
|
|
|
|
|
|
|
|
static void generator_recruit(ckpool_t *ckp) |
|
|
|
static void generator_recruit(const ckpool_t *ckp) |
|
|
|
{ |
|
|
|
{ |
|
|
|
LOGINFO("Stratifer requesting more proxies from generator"); |
|
|
|
LOGINFO("Stratifer requesting more proxies from generator"); |
|
|
|
send_generator(ckp, "recruit", GEN_PRIORITY); |
|
|
|
send_generator(ckp, "recruit", GEN_PRIORITY); |
|
|
@ -1780,7 +1780,7 @@ static void connector_test_client(ckpool_t *ckp, const int64_t id) |
|
|
|
|
|
|
|
|
|
|
|
LOGDEBUG("Stratifier requesting connector test client %"PRId64, id); |
|
|
|
LOGDEBUG("Stratifier requesting connector test client %"PRId64, id); |
|
|
|
snprintf(buf, 255, "testclient=%"PRId64, id); |
|
|
|
snprintf(buf, 255, "testclient=%"PRId64, id); |
|
|
|
async_send_proc(ckp, ckp->connector, buf); |
|
|
|
send_proc(ckp->connector, buf); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* For creating a list of sends without locking that can then be concatenated
|
|
|
|
/* For creating a list of sends without locking that can then be concatenated
|
|
|
@ -2567,7 +2567,7 @@ static void stratum_send_message(sdata_t *sdata, const stratum_instance_t *clien |
|
|
|
* in proxy mode where we find a subproxy based on the current proxy with room |
|
|
|
* in proxy mode where we find a subproxy based on the current proxy with room |
|
|
|
* for more clients. Signal the generator to recruit more subproxies if we are |
|
|
|
* for more clients. Signal the generator to recruit more subproxies if we are |
|
|
|
* running out of room. */ |
|
|
|
* running out of room. */ |
|
|
|
static sdata_t *select_sdata(ckpool_t *ckp, sdata_t *ckp_sdata) |
|
|
|
static sdata_t *select_sdata(const ckpool_t *ckp, sdata_t *ckp_sdata) |
|
|
|
{ |
|
|
|
{ |
|
|
|
proxy_t *current, *proxy, *subproxy, *best = NULL, *tmp, *tmpsub; |
|
|
|
proxy_t *current, *proxy, *subproxy, *best = NULL, *tmp, *tmpsub; |
|
|
|
int best_id, best_subid = 0; |
|
|
|
int best_id, best_subid = 0; |
|
|
@ -3968,7 +3968,6 @@ static void send_transactions(ckpool_t *ckp, json_params_t *jp); |
|
|
|
static void parse_method(sdata_t *sdata, stratum_instance_t *client, const int64_t client_id, |
|
|
|
static void parse_method(sdata_t *sdata, stratum_instance_t *client, const int64_t client_id, |
|
|
|
json_t *id_val, json_t *method_val, json_t *params_val, const char *address) |
|
|
|
json_t *id_val, json_t *method_val, json_t *params_val, const char *address) |
|
|
|
{ |
|
|
|
{ |
|
|
|
ckpool_t *ckp = client->ckp; |
|
|
|
|
|
|
|
const char *method; |
|
|
|
const char *method; |
|
|
|
|
|
|
|
|
|
|
|
/* Random broken clients send something not an integer as the id so we
|
|
|
|
/* Random broken clients send something not an integer as the id so we
|
|
|
@ -4015,14 +4014,14 @@ static void parse_method(sdata_t *sdata, stratum_instance_t *client, const int64 |
|
|
|
* to it since it's unauthorised. Set the flag just in case. */ |
|
|
|
* to it since it's unauthorised. Set the flag just in case. */ |
|
|
|
client->authorised = false; |
|
|
|
client->authorised = false; |
|
|
|
snprintf(buf, 255, "passthrough=%"PRId64, client_id); |
|
|
|
snprintf(buf, 255, "passthrough=%"PRId64, client_id); |
|
|
|
async_send_proc(ckp, ckp->connector, buf); |
|
|
|
send_proc(client->ckp->connector, buf); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* We should only accept subscribed requests from here on */ |
|
|
|
/* We should only accept subscribed requests from here on */ |
|
|
|
if (!client->subscribed) { |
|
|
|
if (!client->subscribed) { |
|
|
|
LOGINFO("Dropping unsubscribed client %"PRId64, client_id); |
|
|
|
LOGINFO("Dropping unsubscribed client %"PRId64, client_id); |
|
|
|
connector_drop_client(ckp, client_id); |
|
|
|
connector_drop_client(client->ckp, client_id); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -4044,7 +4043,7 @@ static void parse_method(sdata_t *sdata, stratum_instance_t *client, const int64 |
|
|
|
* stratifier process to restart since it will have lost all |
|
|
|
* stratifier process to restart since it will have lost all |
|
|
|
* the stratum instance data. Clients will just reconnect. */ |
|
|
|
* the stratum instance data. Clients will just reconnect. */ |
|
|
|
LOGINFO("Dropping unauthorised client %"PRId64, client_id); |
|
|
|
LOGINFO("Dropping unauthorised client %"PRId64, client_id); |
|
|
|
connector_drop_client(ckp, client_id); |
|
|
|
connector_drop_client(client->ckp, client_id); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -4218,7 +4217,7 @@ static void ssend_process(ckpool_t *ckp, smsg_t *msg) |
|
|
|
* connector process to be delivered */ |
|
|
|
* connector process to be delivered */ |
|
|
|
json_object_set_new_nocheck(msg->json_msg, "client_id", json_integer(msg->client_id)); |
|
|
|
json_object_set_new_nocheck(msg->json_msg, "client_id", json_integer(msg->client_id)); |
|
|
|
s = json_dumps(msg->json_msg, 0); |
|
|
|
s = json_dumps(msg->json_msg, 0); |
|
|
|
async_send_proc(ckp, ckp->connector, s); |
|
|
|
send_proc(ckp->connector, s); |
|
|
|
free(s); |
|
|
|
free(s); |
|
|
|
free_smsg(msg); |
|
|
|
free_smsg(msg); |
|
|
|
} |
|
|
|
} |
|
|
@ -5081,7 +5080,7 @@ int stratifier(proc_instance_t *pi) |
|
|
|
sdata->ssends = create_ckmsgq(ckp, "ssender", &ssend_process); |
|
|
|
sdata->ssends = create_ckmsgq(ckp, "ssender", &ssend_process); |
|
|
|
/* Create as many generic workqueue threads as there are CPUs */ |
|
|
|
/* Create as many generic workqueue threads as there are CPUs */ |
|
|
|
threads = sysconf(_SC_NPROCESSORS_ONLN); |
|
|
|
threads = sysconf(_SC_NPROCESSORS_ONLN); |
|
|
|
ckp->ckwqs = sdata->ckwqs = create_ckwqs(ckp, "strat", threads); |
|
|
|
sdata->ckwqs = create_ckwqs(ckp, "strat", threads); |
|
|
|
sdata->sauthq = create_ckmsgq(ckp, "authoriser", &sauth_process); |
|
|
|
sdata->sauthq = create_ckmsgq(ckp, "authoriser", &sauth_process); |
|
|
|
if (!CKP_STANDALONE(ckp)) { |
|
|
|
if (!CKP_STANDALONE(ckp)) { |
|
|
|
sdata->ckdbq = create_ckmsgq(ckp, "ckdbqueue", &ckdbq_process); |
|
|
|
sdata->ckdbq = create_ckmsgq(ckp, "ckdbqueue", &ckdbq_process); |
|
|
|