dz
dz copied to clipboard
DZ fails to start if MQTT broker is unavailable
Expected Behavior
- DZ starts with the available device set;
- If the broker is unavailable either initially or at a later point in time, the failure of MQTT based sensors must not prevent other sensor types from working, and DZ from being partially operational;
- If the essential actuators are MQTT based, fast fail is still expected.
Actual Behavior
DZ fails to start even though there are available devices if an MQTT broker is unreachable.
Current Workaround
Make the MQTT broker reachable again, restart DZ.
Exception Trace
As of rev. e927c8e692f2a4fb5999ddef3dad794a14e50845:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sensor-flux-building-east-temperature' defined in file [/home/pi/dz/conf/building-cooling-reactive.xml]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [reactor.co
re.publisher.Flux]: Factory method 'getFlux' threw exception; nested exception is com.hivemq.client.mqtt.exceptions.ConnectionFailedException: io.netty.channel.ConnectTimeoutException: connection timed out: mqtt-broker-host/192.168.xxx.xxx:1883
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:142) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:85) ~[spring-context-5.3.9.jar:5.3.9]
at net.sf.dz3.runtime.Container.loadFromPath(Container.java:148) ~[dz3r-spring-3.6.8-SNAPSHOT.jar:?]
at net.sf.dz3.runtime.Container.loadConfiguration(Container.java:122) ~[dz3r-spring-3.6.8-SNAPSHOT.jar:?]
at net.sf.dz3.runtime.Container.run(Container.java:72) [dz3r-spring-3.6.8-SNAPSHOT.jar:?]
at net.sf.dz3.runtime.Container.main(Container.java:39) [dz3r-spring-3.6.8-SNAPSHOT.jar:?]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [reactor.core.publisher.Flux]: Factory method 'getFlux' threw exception; nested exception is com.hivemq.client.mqtt.exceptions.ConnectionFailedException: io.netty.channel.ConnectTimeoutException: connection timed out: mqtt-broker-host/192.168.xxx.xxx:1883
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.9.jar:5.3.9]
... 18 more
Caused by: com.hivemq.client.mqtt.exceptions.ConnectionFailedException: io.netty.channel.ConnectTimeoutException: connection timed out: mqtt-broker-host/192.168.xxx.xxx:1883
at com.hivemq.client.internal.mqtt.MqttBlockingClient.connect(MqttBlockingClient.java:101) ~[hivemq-mqtt-client-1.2.2.jar:?]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Assembly trace from producer [reactor.core.publisher.FluxMapFuseable] :
reactor.core.publisher.Flux.map
net.sf.dz3r.device.mqtt.v1.MqttListener.getFlux(MqttListener.java:141)
Error has been observed at the following site(s):
*__Flux.map ⇢ at net.sf.dz3r.device.mqtt.v1.MqttListener.getFlux(MqttListener.java:141)
Stack trace:
at com.hivemq.client.internal.mqtt.MqttBlockingClient.connect(MqttBlockingClient.java:101) ~[hivemq-mqtt-client-1.2.2.jar:?]
at com.hivemq.client.internal.mqtt.mqtt3.Mqtt3BlockingClientView.connect(Mqtt3BlockingClientView.java:77) ~[hivemq-mqtt-client-1.2.2.jar:?]
at com.hivemq.client.internal.mqtt.message.connect.mqtt3.Mqtt3ConnectViewBuilder$Send.send(Mqtt3ConnectViewBuilder.java:152) ~[hivemq-mqtt-client-1.2.2.jar:?]
at net.sf.dz3r.device.mqtt.v1.MqttListener.getClient(MqttListener.java:104) ~[dz3r-mqtt-3.6.8-SNAPSHOT.jar:?]
at net.sf.dz3r.device.mqtt.v1.MqttListener.createFlux(MqttListener.java:174) ~[dz3r-mqtt-3.6.8-SNAPSHOT.jar:?]
at net.sf.dz3r.device.mqtt.v1.MqttListener.lambda$getFlux$1(MqttListener.java:141) ~[dz3r-mqtt-3.6.8-SNAPSHOT.jar:?]
at java.util.Map.computeIfAbsent(Map.java:1003) ~[?:?]
at net.sf.dz3r.device.mqtt.v1.MqttListener.lambda$getFlux$2(MqttListener.java:141) ~[dz3r-mqtt-3.6.8-SNAPSHOT.jar:?]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:210) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxSubscribeOnCallable$CallableSubscribeOnSubscription.run(FluxSubscribeOnCallable.java:251) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) ~[reactor-core-3.4.11.jar:3.4.11]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
at java.lang.Thread.run(Thread.java:829) ~[?:?]
Suppressed: java.lang.Exception: #block terminated with an error
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:99) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.Flux.blockFirst(Flux.java:2599) ~[reactor-core-3.4.11.jar:3.4.11]
at net.sf.dz3r.device.mqtt.v1.MqttListener.getFlux(MqttListener.java:142) ~[dz3r-mqtt-3.6.8-SNAPSHOT.jar:?]
at net.sf.dz3r.device.esphome.v1.ESPHomeListener.getFlux(ESPHomeListener.java:61) ~[dz3r-mqtt-3.6.8-SNAPSHOT.jar:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.9.jar:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:142) ~[spring-context-5.3.9.jar:5.3.9]
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:85) ~[spring-context-5.3.9.jar:5.3.9]
at net.sf.dz3.runtime.Container.loadFromPath(Container.java:148) ~[dz3r-spring-3.6.8-SNAPSHOT.jar:?]
at net.sf.dz3.runtime.Container.loadConfiguration(Container.java:122) ~[dz3r-spring-3.6.8-SNAPSHOT.jar:?]
at net.sf.dz3.runtime.Container.run(Container.java:72) [dz3r-spring-3.6.8-SNAPSHOT.jar:?]
at net.sf.dz3.runtime.Container.main(Container.java:39) [dz3r-spring-3.6.8-SNAPSHOT.jar:?]
Caused by: io.netty.channel.ConnectTimeoutException: connection timed out: mqtt-broker-host/192.168.xxx.xxx:1883
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe$1.run(AbstractNioChannel.java:261) ~[netty-transport-4.1.63.Final.jar:4.1.63.Final]
at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) ~[netty-common-4.1.63.Final.jar:4.1.63.Final]
at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170) ~[netty-common-4.1.63.Final.jar:4.1.63.Final]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) ~[netty-common-4.1.63.Final.jar:4.1.63.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) ~[netty-common-4.1.63.Final.jar:4.1.63.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) ~[netty-transport-4.1.63.Final.jar:4.1.63.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.63.Final.jar:4.1.63.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.63.Final.jar:4.1.63.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.63.Final.jar:4.1.63.Final]
at java.lang.Thread.run(Thread.java:829) ~[?:?]