Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-1034

DefaultCacheManager becomes corrupted after component start Exception

    XMLWordPrintable

Details

    Description

      If Jgroups cluster startup throws an Exception the CacheManager becomes "corrupted", and a retry to get the cache from the CacheManager fails even with the underlying issue removed.

      For example, with the following code:

      =============================================================
      private Cache initCache(String name)
      {
      Cache cache;
      for(int i = 0; i < 2; i++)
      {
      try

      { System.out.println(i + " cacheManager.getCache"); cache = cacheManager.getCache(name); System.out.println(i + " cache.start()"); cache.start(); System.out.println(i + " done"); return cache; }

      catch (Exception e)
      {
      System.out.println(i + " exception:");
      e.printStackTrace(System.out);
      try

      { Thread.sleep(5000); }

      catch (InterruptedException e1)

      { // ignore }

      }
      }

      return null;
      }
      =============================================================

      I can get the following output when JGroups does not start (due to an unrelated issue – http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7032558):

      0 cacheManager.getCache
      0 exception:
      org.infinispan.CacheException: Unable to invoke method public abstract void org.infinispan.remoting.transport.Transport.start() on object
      at org.infinispan.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:174)
      at org.infinispan.factories.AbstractComponentRegistry$PrioritizedMethod.invoke(AbstractComponentRegistry.java:889)
      at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:687)
      at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:589)
      at org.infinispan.factories.GlobalComponentRegistry.start(GlobalComponentRegistry.java:137)
      at org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:137)
      at org.infinispan.CacheDelegate.start(CacheDelegate.java:323)
      at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:516)
      at org.infinispan.manager.DefaultCacheManager.getCache(DefaultCacheManager.java:439)
      at com.algo.msg.mobjectcache.InfinispanCacheStore.initCache(InfinispanCacheStore.java:105)
      at com.algo.msg.mobjectcache.InfinispanCacheStore.init(InfinispanCacheStore.java:88)
      at com.algo.msg.mobjectcache.InfinispanCacheStore.main(InfinispanCacheStore.java:396)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)
      Caused by: java.lang.reflect.InvocationTargetException
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.infinispan.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:171)
      ... 16 more
      Caused by: org.infinispan.CacheException: org.jgroups.ChannelException: unable to setup the protocol stack
      at org.infinispan.remoting.transport.jgroups.JGroupsTransport.buildChannel(JGroupsTransport.java:261)
      at org.infinispan.remoting.transport.jgroups.JGroupsTransport.initChannel(JGroupsTransport.java:211)
      at org.infinispan.remoting.transport.jgroups.JGroupsTransport.initChannelAndRPCDispatcher(JGroupsTransport.java:227)
      at org.infinispan.remoting.transport.jgroups.JGroupsTransport.start(JGroupsTransport.java:154)
      ... 21 more
      Caused by: org.jgroups.ChannelException: unable to setup the protocol stack
      at org.jgroups.JChannel.init(JChannel.java:1728)
      at org.jgroups.JChannel.<init>(JChannel.java:249)
      at org.jgroups.JChannel.<init>(JChannel.java:215)
      at org.infinispan.remoting.transport.jgroups.JGroupsTransport.buildChannel(JGroupsTransport.java:258)
      ... 24 more
      Caused by: java.net.SocketException: No such device
      at java.net.NetworkInterface.isUp0(Native Method)
      at java.net.NetworkInterface.isUp(NetworkInterface.java:327)
      at org.jgroups.util.Util.getAddress(Util.java:3406)
      at org.jgroups.util.Util.getNonLoopbackAddress(Util.java:3392)
      at org.jgroups.stack.Configurator.setDefaultValues(Configurator.java:726)
      at org.jgroups.stack.Configurator.setupProtocolStack(Configurator.java:114)
      at org.jgroups.stack.Configurator.setupProtocolStack(Configurator.java:53)
      at org.jgroups.stack.ProtocolStack.setup(ProtocolStack.java:534)
      at org.jgroups.JChannel.init(JChannel.java:1725)
      ... 27 more
      1 cacheManager.getCache
      1 cache.start()
      1 exception:
      org.infinispan.CacheException: Unable to invoke method private void org.infinispan.transaction.xa.TransactionTable.start() on object
      at org.infinispan.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:174)
      at org.infinispan.factories.AbstractComponentRegistry$PrioritizedMethod.invoke(AbstractComponentRegistry.java:889)
      at org.infinispan.factories.AbstractComponentRegistry.internalStart(AbstractComponentRegistry.java:687)
      at org.infinispan.factories.AbstractComponentRegistry.start(AbstractComponentRegistry.java:589)
      at org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:147)
      at org.infinispan.CacheDelegate.start(CacheDelegate.java:323)
      at com.algo.msg.mobjectcache.InfinispanCacheStore.initCache(InfinispanCacheStore.java:108)
      at com.algo.msg.mobjectcache.InfinispanCacheStore.init(InfinispanCacheStore.java:88)
      at com.algo.msg.mobjectcache.InfinispanCacheStore.main(InfinispanCacheStore.java:396)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)
      Caused by: java.lang.reflect.InvocationTargetException
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.infinispan.util.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:171)
      ... 13 more
      Caused by: java.lang.NullPointerException
      at org.infinispan.manager.DefaultCacheManager.addListener(DefaultCacheManager.java:562)
      at org.infinispan.transaction.xa.TransactionTable.start(TransactionTable.java:105)
      ... 18 more

      On the second attempt, the Exception is no longer the same, but rather a NPE in the DefaultCacheManager.

      The NPE occurs EVEN WHEN the underlying cause of the first Exception(in my case a network interface that was causing JGroups channel init to fail) has been removed during the sleep time between the attempts, and therefore the program is stuck until a new DefaultCacheManager is created. With a dependency injection approach, creating a new manager for retries is not always feasible or desirable.

      Attachments

        Activity

          People

            manik_jira Manik Surtani (Inactive)
            rocketraman Raman Gupta (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: