Andreas Baumgart created ARTEMIS-5571:
-----------------------------------------

             Summary: AMQ214033/UnknownHostException on topology changed even 
if HA disabled
                 Key: ARTEMIS-5571
                 URL: https://issues.apache.org/jira/browse/ARTEMIS-5571
             Project: ActiveMQ Artemis
          Issue Type: Bug
          Components: Broker, Clustering
    Affects Versions: 2.41.0
            Reporter: Andreas Baumgart


Hi,

we have a setup with two Java servers which run an embedded Artemis broker (one 
primary, one backup) and multiple Java clients. 

The servers serv1, serv2 also act as JMS clients. For communication between 
servers other IPs/hostnames are used as for client/server communication. 
Servers connect among each other via hostnames serv1/serv2 but clients connect 
via hostnames serv1a,serv1b,serv2a,serv2b. The hostnames serv1 and serv2 are 
unknown on client side.

On client side we use a static list of broker addresses. And in general 
everything works fine including failover. The only issue is that on the client 
we get these kind of errors (which don't seem to have functional impact):
{code:java}
10.07.2025 03:59:23.561 ERROR 9104 --- [ttmSimulatorCluster] [-netty-threads)] 
[                                ]o.apache.activemq.artemis.core.client    : 
AMQ214033: Cannot resolve host java.net.UnknownHostException: The requested 
name is valid, but no data of the requested type was found (serv1)      at 
java.base/java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) at 
java.base/java.net.Inet4AddressImpl.lookupAllHostAddr(Inet4AddressImpl.java:43) 
     at 
java.base/java.net.InetAddress$PlatformResolver.lookupByName(InetAddress.java:1211)
  at 
java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1828)
    at 
java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:1139)  
     at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1818)  at 
java.base/java.net.InetAddress.getAllByName(InetAddress.java:1688)   at 
java.base/java.net.InetAddress.getByName(InetAddress.java:1568)      at 
org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnector.isSameHostAndPort(NettyConnector.java:1325)
      at 
org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnector.isEquivalent(NettyConnector.java:1304)
   at 
org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl.setBackupConnector(ClientSessionFactoryImpl.java:321)
  at 
org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.notifyNodeUp(ServerLocatorImpl.java:1565)
     at 
org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl$SessionFactoryTopologyHandler.notifyNodeUp(ClientSessionFactoryImpl.java:1530)
 at 
org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQClientProtocolManager$Channel0Handler.notifyTopologyChange(ActiveMQClientProtocolManager.java:538)
       at 
org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQClientProtocolManager$Channel0Handler.handlePacket(ActiveMQClientProtocolManager.java:493)
       at 
org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:854)
   at 
org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:408)
 at 
org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:381)
   at 
org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl$DelegatingBufferHandler.bufferReceived(ClientSessionFactoryImpl.java:1324)
     at 
org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelRead(ActiveMQChannelHandler.java:73)
      at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
     at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
     at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
       at 
io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
   at 
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
       at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
     at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
     at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
       at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1519) at 
io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1377)    at 
io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1428) at 
io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)
    at 
io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)
        at 
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
       at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
     at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
     at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
       at 
io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
    at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
     at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
     at 
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
     at 
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
      at 
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:796)  at 
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:732)
        at 
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:658) at 
io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) at 
io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
 at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)   
 at 
org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:120)
 {code}
In my current understanding the issue is that topology changes are published 
with server internal host names. I understand why this happens and I assume we 
can in general ignore it because we use a fixed list of server addresses in our 
connection url. 

I'm just wondering if I can avoid this error to be logged?! I thought I can 
avoid it by disabling HA via connection URL parameter (?ha=false) but the error 
still occurs. From the code I can see that in the affected method 
{{ServiceLocatorImpl.notifyNodeUp}} the state of HA is not checked where as in 
{{ServiceLocatorImpl.notifyNodeDown}} it is handled:

 
{code:java}
public void notifyNodeDown(final long eventTime, final String nodeID, boolean 
disconnect) { 
if (!ha) { // there's no topology here return; }
 {code}
Now I'm wondering if this is intended or a bug and if my general understading 
is correct that disabling HA should avoid UnknownHostException error.

 

Thanks and regards,

Andreas

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to