Persistence Service automatisch neu starten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Persistence Service automatisch neu starten

Beitrag von nw378 »

Moinsen,

als Persistenz habe habe ich Influxdb in einem Docker Container.
Wenn dieser mal nicht erreichbar ist (Update oder ähnliches), ballert mir OH Fehlermeldungen ins Log.
Und zwar solange, bis ich in OH den Persistence Service neu starte, indem ich die Einstellungen (unverändert) speichere.

Die erste Fehlermeldung lautet:

Code: Alles auswählen

2024-09-20 16:30:55.814 [WARN ] [rnal.influx2.InfluxDB2RepositoryImpl] - database not ready
Und anschließend bei jedem Zugriffsversuch:

Code: Alles auswählen

2024-09-20 16:30:55.805 [WARN ] [influxdb.internal.AbstractRestClient] - Ping request wasn't successful
java.net.ConnectException: Failed to connect to /192.168.178.26:8087
	at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:297) ~[?:?]
	at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207) ~[?:?]
	at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226) ~[?:?]
	at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106) ~[?:?]
	at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74) ~[?:?]
	at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255) ~[?:?]
	at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32) ~[?:?]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[?:?]
	at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95) ~[?:?]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[?:?]
	at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83) ~[?:?]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[?:?]
	at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76) ~[?:?]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[?:?]
	at com.influxdb.client.internal.GzipInterceptor.intercept(GzipInterceptor.java:91) ~[?:?]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[?:?]
	at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.kt:154) ~[?:?]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[?:?]
	at com.influxdb.client.internal.AuthenticateInterceptor.intercept(AuthenticateInterceptor.java:103) ~[?:?]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[?:?]
	at com.influxdb.internal.UserAgentInterceptor.intercept(UserAgentInterceptor.java:60) ~[?:?]
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[?:?]
	at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201) ~[?:?]
	at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154) ~[?:?]
	at retrofit2.OkHttpCall.execute(OkHttpCall.java:207) ~[?:?]
	at com.influxdb.internal.AbstractRestClient.ping(AbstractRestClient.java:194) ~[?:?]
	at com.influxdb.client.internal.InfluxDBClientImpl.ping(InfluxDBClientImpl.java:277) ~[?:?]
	at org.openhab.persistence.influxdb.internal.influx2.InfluxDB2RepositoryImpl.checkConnectionStatus(InfluxDB2RepositoryImpl.java:127) ~[?:?]
	at org.openhab.persistence.influxdb.internal.influx2.InfluxDB2RepositoryImpl.connect(InfluxDB2RepositoryImpl.java:104) ~[?:?]
	at org.openhab.persistence.influxdb.InfluxDBPersistenceService.checkConnection(InfluxDBPersistenceService.java:277) ~[?:?]
	at org.openhab.persistence.influxdb.InfluxDBPersistenceService.commit(InfluxDBPersistenceService.java:283) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt
	at sun.nio.ch.Net.pollConnect(Native Method) ~[?:?]
	at sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[?:?]
	at sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:554) ~[?:?]
	at sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:602) ~[?:?]
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[?:?]
	at java.net.Socket.connect(Socket.java:633) ~[?:?]
	at okhttp3.internal.platform.Platform.connectSocket(Platform.kt:128) ~[?:?]
	at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295) ~[?:?]
	... 36 more
Nach dem "Neustart" folgt dann:

Code: Alles auswählen

2024-09-20 16:36:10.860 [INFO ] [.influxdb.InfluxDBPersistenceService] - InfluxDB persistence service stopped.
2024-09-20 16:36:10.887 [INFO ] [.influxdb.InfluxDBPersistenceService] - InfluxDB persistence service started.
Die Fehlermeldungen im Log sind nicht das Problem, das wird ja rollierend überschrieben.
Aber die Datenbank wird nicht mehr gefüttert.

Meine Frage: kann man das Erkennen der Nichterreichbarkeit und den Neustart über eine Regel automatisieren?
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Benutzeravatar
udo1toni
Beiträge: 15241
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Persistence Service automatisch neu starten

Beitrag von udo1toni »

Eigentlich sollte die Persistence selbständig neu starten...

Den Neustart kannst Du übrigens auch über die Karaf Konsole auslösen:
bundle:restart org.openhab.persistence.influxdb
Ob das auch über die API geht (also z.B. mit einem http-get-request) weiß ich nicht, der Karaf Aufruf lässt sich aber z.B über executeCommandLine aus einer Rule heraus automatisieren.

Das größere Problem dabei ist aber, auszuwerten, ob die Persistence gerade ein Problem hat, mir wäre jedenfalls kein Event bekannt, welches ich dazu heranziehen könnte.

Mein Tipp an der Stelle wäre daher, eine Anfrage im englischen Forum zu stellen, denn (siehe Eingangssatz) openHAB merkt ja, dass da was nicht ganz so läuft, wie es soll, warum also klappt der automatische Reconnect nicht?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Persistence Service automatisch neu starten

Beitrag von nw378 »

Hallo Udo,

danke für Deine Einschätzung.
Dann probiere ich mein Glück mal im englischen Forum.

Gruß
Nico
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Persistence Service automatisch neu starten

Beitrag von nw378 »

Für den Trigger habe ich aus dem englischen Forum den heißen Tipp des https://www.openhab.org/addons/bindings/logreader/ bekommen.

Dann habe ich noch eine Bool-Variabel und einen Timer ergänzt, sonst kommen viiiiiiele Meldungen...
Den Karaf Aufruf habe ich in ein SH File ausgelagert.
Die Regel sieht jetzt so aus:

Code: Alles auswählen

var boolean bInflux = false

rule "LogReader: Influx neustarten"
when
    Channel "logreader:reader:openhablog:newWarningEvent" triggered
then
    if (bInflux)      
      return;
    var warning = logreaderLastWarning.state.toString.split("-").get(3)
    if (warning == " database not ready") {
      bInflux = true
      createTimer(now.plusMinutess(2),[        
        logInfo("Test","Influx" + warning)
        sendNotification("mail@gmx.de","Influx" + warning)  
        restart_influx.sendCommand(ON) 
        bInflux = false]) }
end
und das SH-File:

Code: Alles auswählen

#!/bin/sh
echo bundle:restart org.openhab.persistence.influxdb | /usr/bin/openhab-cli console -p habopen
Mal gucken, ob's klappt...
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Persistence Service automatisch neu starten

Beitrag von nw378 »

Ergebnis: klappt!

Interessant: Dein
udo1toni hat geschrieben: 21. Sep 2024 12:48 Eigentlich sollte die Persistence selbständig neu starten...
stimmt auch, eigentlich.

Wenn ich zu Testzwecken den Docker Container stoppe und wieder neu starte, startet auch OH die Persistence wieder.

Aber eben nicht, wenn ich ein Update des Docker Images einspiele.
Hintergrund: ich wollte den Watchtower installieren, um Updates zu automatisieren.
Aber wenn dann eben OH ins Nirvana speichert und ich davon nix mitkriege... Egal, ist ja jetzt Vergangenheit.

Edit: oder war ich dann nicht geduldig genug?
Rückmeldung aus dem englischen Forum ist ebenfalls, dass OH das selbständig macht. ich werde beobachten und berichten.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Antworten