Infinispan not using specified JGroups configuration file and throwing Exception

4.6k views Asked by At

I'm relatively new to using JGroups and Infinispan and have a two part question:

configuration file infinispan.xml:

<jgroups>
    <stack-file name="configurationFile" path="cache/default-jgroups-tcp.xml"/>
</jgroups>
<threads />
<cache-container default-cache="dist" shutdown-hook="REGISTER">
    <jmx duplicate-domains="true"/> 
    <distributed-cache name="distCache" owners="2" mode="ASYNC" />
</cache-container>

default-jgroups-tcp.xml is located in src/main/resource/cache folder. The contents of default-jgroups-tcp.xml is copied from the pre-configured JGroups files provided by infinispan-core.jar.

When running infinispan I would see:

INFO  JGroupsTransport - ISPN000088: Unable to use any JGroups configuration mechanisms provided in properties {stackFilePath-configurationFile=cache/default-jgroups-tcp.xml, stack-configurationFile=configurationFile}. Using default JGroups configuration!

And right after that the exception would appear:

SEVERE: failed setting ip_ttl
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jgroups.protocols.UDP.setTimeToLive(UDP.java:339)
    at org.jgroups.protocols.UDP.createSockets(UDP.java:368)
    at org.jgroups.protocols.UDP.start(UDP.java:270)
    at org.jgroups.stack.ProtocolStack.startStack(ProtocolStack.java:965)
    at org.jgroups.JChannel.startStack(JChannel.java:885)
    at org.jgroups.JChannel._preConnect(JChannel.java:547)
    at org.jgroups.JChannel.connect(JChannel.java:282)
    at org.jgroups.JChannel.connect(JChannel.java:273)
    at org.infinispan.remoting.transport.jgroups.JGroupsTransport.startJGroupsChannelIfNeeded(JGroupsTransport.java:201)
    at org.infinispan.remoting.transport.jgroups.JGroupsTransport.start(JGroupsTransport.java:192)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.infinispan.commons.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:168)
    at org.infinispan.factories.AbstractComponentRegistry$PrioritizedMethod.invoke(AbstractComponentRegistry.java:869)
    at org.infinispan.factories.AbstractComponentRegistry.invokeStartMethods(AbstractComponentRegistry.java:638)
    at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:627)
    at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:530)
    at org.infinispan.factories.GlobalComponentRegistry.start(GlobalComponentRegistry.java:221)
    at org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:573)
    at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:539)
    at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:416)
    at com.viasat.sng.cache.Manager.getAsyncDistributedCache(Manager.java:43)
    at com.viasat.sng.controller.InfController.<init>(InfController.java:50)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1000)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:953)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5231)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5518)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1083)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1879)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Method not implemented!
    at java.net.DualStackPlainDatagramSocketImpl.setTimeToLive(Unknown Source)
    ... 69 more

I have two questions:

1) Why is my JGroups configuration not able to be used? I tried different path combinations and even having it point directly to the pre-configured JGroups file provided by infinispan-core.jar.

2) Why would using the default JGroups configuration cause the java.lang.reflect.InvocationTargetException to be thrown or fail to set the ip_ttl?

Any help or input would be greatly appreciated, thanks!

1

There are 1 answers

1
Bela Ban On BEST ANSWER

2) On Windows, there are 2 implementations of DatagramSocket: DualStackPlainDatagramSocketImpl and TwoStacksPlainDatagramSocketImpl. The first (used by default on Vista and higher) throws the exception. The second does implement setTimeToLive(). So you need to use the second. This can be done in 2 ways:

Set -Djava.net.preferIPv4Stack=true, or

Use the impl.prefix system property (google for details).

1) Seems that your classpath doesn't include the config file, have you tried setting an absolute rather than relative pather, e.g. /home/yourhome/config/jgroups-tcp.xml ?

Here's a link to the wiki: https://github.com/belaban/JGroups/wiki/FAQ