Bug 1332452

Summary: JMX interface is broken without ipv6
Product: [oVirt] ovirt-engine Reporter: Fabrice Bacchella <fabrice.bacchella>
Component: BLL.InfraAssignee: Ondra Machacek <omachace>
Status: CLOSED NOTABUG QA Contact: Pavel Stehlik <pstehlik>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 3.6.5.1CC: bugs, fabrice.bacchella, omachace
Target Milestone: ---Flags: rule-engine: planning_ack?
rule-engine: devel_ack?
rule-engine: testing_ack?
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-05-19 13:31:14 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: Infra RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Fabrice Bacchella 2016-05-03 09:00:47 UTC
When I set to ENGINE_JMX_INTERFACE=public to public on a server without IPv6 (the module ipv6.ko is blacklisted), ovirt-engine brake with this message :

2016-05-03 10:43:09,122 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC000001: Failed to start service jboss.serverManagement.controller.management.http: org.jboss.msc.service.StartException in service
 jboss.serverManagement.controller.management.http: JBAS015811: Failed to start the http-interface service
        at org.jboss.as.server.mgmt.UndertowHttpManagementService.start(UndertowHttpManagementService.java:258) [wildfly-server-8.2.1.Final.jar:8.2.1.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_74]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_74]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_74]
Caused by: java.lang.RuntimeException: java.net.SocketException: Protocol family unavailable
        at org.jboss.as.domain.http.server.ManagementHttpServer.start(ManagementHttpServer.java:156)
        at org.jboss.as.server.mgmt.UndertowHttpManagementService.start(UndertowHttpManagementService.java:224) [wildfly-server-8.2.1.Final.jar:8.2.1.Final]
        ... 5 more
Caused by: java.net.SocketException: Protocol family unavailable
        at sun.nio.ch.Net.bind0(Native Method) [rt.jar:1.8.0_74]
        at sun.nio.ch.Net.bind(Net.java:433) [rt.jar:1.8.0_74]
        at sun.nio.ch.Net.bind(Net.java:425) [rt.jar:1.8.0_74]
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) [rt.jar:1.8.0_74]
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) [rt.jar:1.8.0_74]
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67) [rt.jar:1.8.0_74]
        at org.xnio.nio.NioXnioWorker.createTcpConnectionServer(NioXnioWorker.java:182)

And the port 8706 is no longer open.
        at org.xnio.XnioWorker.createStreamConnectionServer(XnioWorker.java:243)
        at org.jboss.as.domain.http.server.ManagementHttpServer.start(ManagementHttpServer.java:135)
        ... 6 more

Comment 1 Ondra Machacek 2016-05-06 13:26:56 UTC
Can you please also share what OS and java vendor and version do you use?

Btw. you can workaround if you change <any-address/> to <any-ipv4-address/>,
but please be aware, that /usr/share/ovirt-engine/services/ovirt-engine/ovirt-engine.xml.in is rewritten 
during upgrades.

Comment 2 Fabrice Bacchella 2016-05-06 13:37:01 UTC
It was an up todate Centos 7.2.1511, fully patched, jvm is java-1.7.0-openjdk-1.7.0.101-2.6.6.1.el7_2.

I tried your workaround and it solve my problem. But it's difficult to use it in real life indeed.

Comment 3 Ondra Machacek 2016-05-09 15:41:04 UTC
Other option, which is not overridden during update is following:

$ cat /etc/ovirt-engine/engine.conf.d/99-ipv4.conf
ENGINE_PROPERTIES="${ENGINE_PROPERTIES} java.net.preferIPv4Stack=true"

If such solution is ok for you, please close this bz.

Comment 4 Ondra Machacek 2016-05-19 12:35:58 UTC
Btw. since wildfly10(oVirt 4) workaround from comment#1 won't work for you, so in order to use ipv4 only use comment#3 workaround.

More info available here[1] in section 'IPv4 versus IPv6':

The system properties java.net.preferIPv4Stack and java.net.preferIPv6Addresses are used to configure the JVM for use with IPv4 or IPv6 addresses. With WildFly, in order to run using IPv4 addresses, you need to specify java.net.preferIPv4Stack=true; in order to run with IPv6 addresses, you need to specify java.net.preferIPv4Stack=false (the JVM default) and java.net.preferIPv6Addresses=true. The latter ensures that any hostname to IP address conversions always return IPv6 address variants.

[1] https://docs.jboss.org/author/display/WFLY10/Interfaces+and+ports

Comment 5 Fabrice Bacchella 2016-05-19 13:31:14 UTC
java.net.preferIPv4Stack=true works for me.