From a017aef5f3617a513d5b5794bd898fccb252a39a Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Wed, 6 Jan 2016 17:36:52 +1100 Subject: [PATCH] Delay responses to miners on startup to avoid failed subscribes on handover and console message spam, but give warnings for extended delays. --- src/stratifier.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/stratifier.c b/src/stratifier.c index 6c3d29d2..e574735a 100644 --- a/src/stratifier.c +++ b/src/stratifier.c @@ -5442,6 +5442,7 @@ static void parse_instance_msg(ckpool_t *ckp, sdata_t *sdata, smsg_t *msg, strat { json_t *val = msg->json_msg, *id_val, *method, *params; int64_t client_id = msg->client_id; + int delays = 0; if (client->reject == 2) { LOGINFO("Dropping client %"PRId64" %s tagged for lazy invalidation", @@ -5480,6 +5481,14 @@ static void parse_instance_msg(ckpool_t *ckp, sdata_t *sdata, smsg_t *msg, strat send_json_err(sdata, client_id, id_val, "-1:params not found"); goto out; } + /* At startup we block until there's a current workbase otherwise we + * will reject miners with the initialising message. A slightly delayed + * response to subscribe is better tolerated. */ + while (unlikely(!sdata->current_workbase)) { + cksleep_ms(100); + if (!(++delays % 50)) + LOGWARNING("%d Second delay waiting for bitcoind at startup", delays / 10); + } parse_method(ckp, sdata, client, client_id, id_val, method, params); out: free_smsg(msg);