Uploaded image for project: 'ActiveMQ Artemis'
  1. ActiveMQ Artemis
  2. ARTEMIS-103

java.lang.IllegalStateException: channel is closed when using JGroups channel

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • None
    • 1.1.0
    • None
    • None

    Description

      use case:

      • start a server with replication-master.
      • the cluster-connection's discovery-group and the broadcast-group is using the same JGroups channel. In WildFly, the JGroups Channel is created by the jgroups subsystem and passed to resources (in this case, discovery group and broadcast group) that needs it.

      When the server starts, there is an IllegalStateException:

      11:07:34,912 WARN [org.apache.activemq.artemis.core.server] (ServerService Thread Pool – 68) AMQ222116: unable to start broadcast group bg-group1: java.lang.IllegalStateException: channel is closed
      at org.jgroups.JChannel.checkClosed(JChannel.java:959)
      at org.jgroups.JChannel._preConnect(JChannel.java:548)
      at org.jgroups.JChannel.connect(JChannel.java:288)
      at org.jgroups.JChannel.connect(JChannel.java:279)
      at org.apache.activemq.artemis.api.core.JGroupsBroadcastEndpoint$JChannelWrapper.connect(JGroupsBroadcastEndpoint.java:211)
      at org.apache.activemq.artemis.api.core.JGroupsBroadcastEndpoint.internalOpen(JGroupsBroadcastEndpoint.java:115)
      at org.apache.activemq.artemis.api.core.JGroupsBroadcastEndpoint.openBroadcaster(JGroupsBroadcastEndpoint.java:101)
      at org.apache.activemq.artemis.core.server.cluster.impl.BroadcastGroupImpl.start(BroadcastGroupImpl.java:105)
      at org.apache.activemq.artemis.core.server.cluster.ClusterManager.start(ClusterManager.java:288)
      at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.initialisePart2(ActiveMQServerImpl.java:1893)
      at org.apache.activemq.artemis.core.server.impl.SharedNothingLiveActivation.run(SharedNothingLiveActivation.java:104)
      at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.start(ActiveMQServerImpl.java:417)
      at org.apache.activemq.artemis.jms.server.impl.JMSServerManagerImpl.start(JMSServerManagerImpl.java:414)

      When the server starts its broadcast group, JGroups checks that the channel is not closed.
      The issue is that the channel was closed before.

      In SharedNothingLiveActivation#isNodeIdUsed(), closing the locator will also stop the discovery group and close its BroadcastEndpoint.
      In JGroupsBroadcastEndpoint.JChannelWrapper#close, the underlying channel is closed because refCount is 0.

      Afterwards, when the cluster manager will start the broadcast group, the same channel will be used but since it has been closed, JGroups will raise the IllegalStateException.

      Artemis should only close the channel if it created it.

      If JGroupsChannelBroadcastEndpoint is used (as it is the case in WildFly), the channel is passed to Artemis. Artemis does not own it and it is not its responsibility to close it (it is handled internally by WildFly's jgroups subsystem).

      Attachments

        Activity

          People

            clebertsuconic Clebert Suconic
            jmesnil Jeff Mesnil
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: