DUCO: Fehlermeldung 'Server Timeout', (host='server.duinocoin.com', port=443)

Was tun, wenn die Miner den Duinocoin-Server nicht kontaktieren können?

Steht das Duinocoin-Netzwerk unter (zu) hoher Last oder hat ein Komiker mal wieder einen DDoS-Angriff gestartet, laufen die Miner beim Verbindungsversuch in einen Timeout. Es gibt eine Lösung.

Manchmal antworten die Pool-Server - aus welchen Gründe auch immer - nicht auf Anfragen der Miner. Das ist einerseits lästig, weil in dem Moment die eigenen Miner keine DUCO erzeugen können. Andererseits kann das aber auch bei der Fehlersuche bei der eigenen Mining-Rig richtig viel Zeit kosten, denn ob der Fehler in der Software für die Rig oder bei den Servern liegt, ist im ersten Moment nicht immer klar.

Startet der PC-Miner oder der AVR-Miner, fragt er zunächst per HTTPS bei server.duinocoin.com nach der IP-Adresse und dem Port eins Mining-Nodes. Bei einer Überlastung des Servers bekommt der Miner keine Antwort, sondern läuft in einen Timeout.

/img/tipps_tricks/Error_I2C-Miner-Timeout.png

Dauer-Timeout beim Duinocoin-I²C-Miner für den Raspberry Pi

Dieser Timeout lag bei der älteren Mining-Software und beim DuinocoinI2C-Miner für den Raspberry Pi von JK-Rolling bei nur 5 Sekunden - das ist bei hoher Auslastung der Mining-Server etwas zu wenig.

Das Problem lokalisieren

Beim Start des AVR-I²C-Miners für den Raspberry Pi

python3 AVR_Miner_RPI.py

hagelt es im 20-Sekunden-Takt (5 Sekunden Timeout plus 15 Sekunden Wartezeit) Fehlermeldungen:

...
21:15:47  net0  Searching for the fastest node to connect to
21:14:52  net0  Error fetching mining node: HTTPSConnectionPool(host='server.duinocoin.com', port=443): Read  timed out. (read timeout=5), retrying in 15s
21:15:07  net0  Searching for the fastest node to connect to
21:15:12  net0  Error fetching mining node: HTTPSConnectionPool(host='server.duinocoin.com', port=443): Max retries exceeded with url: /getPool (Caused by ConnectTimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at 0xb5cbcb70>, 'Connection to server.duinocoin.com timed out. (connect timeout=5)')), retrying in 15s
...

Ein Duinocoin-Miner holt sich seine Verbindungsdaten vom Duinocoin-Hauptserver über eine "/getPool"-Anfrage. Das kann man sogar im Webbrowser simulieren

https://server.duinocoin.com/getPool

und erhält als Antwort beispielsweise

{"ip":"162.55.103.174","name":"diskos-pool-1","port":6000,"server":"duino-svko-1","success":true}*

Im Gegensatz zu den Minern wartet ein Webbrowser wesentlich länger, bis er mit einen Timeout abbricht. Diese (zu) hohe Last auf dem Duinocoin-Server bemerkt man meistens auch daran, dass die "Network stats & explorer"-Seite nicht oder nur teilweise lädt.

Lösung: Timeout erhöhen

Die Lösung ist in diesem Fall also recht einfach: Man erhöht den Timeout für die Abfrage in "AVR_Miner.py" beziehungsweise "AVR_Miner_RPI.py" (jk-rolling) ein wenig, beispielsweise wie unten gezeigt von 5 auf 30 Sekunden:

...
response = requests.get(
   "https://server.duinocoin.com/getPool",
   timeout=30).json()
...

Jetzt wartet der PC satte 30 Sekunden auf eine Antwort vom Mining-Server.

Achtung! Mit diesem hohen Wert blockiert man die Mining-Server! Den Wert sollte man möglichst schnell wieder auf 5 Sekunden setzen.