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.
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.