[ 
https://issues.apache.org/jira/browse/ARTEMIS-103?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

clebert suconic closed ARTEMIS-103.
-----------------------------------
    Resolution: Fixed
      Assignee: clebert suconic

Done By John Ament

> java.lang.IllegalStateException: channel is closed when using JGroups channel
> -----------------------------------------------------------------------------
>
>                 Key: ARTEMIS-103
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-103
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>            Reporter: Jeff Mesnil
>            Assignee: clebert suconic
>            Priority: Critical
>             Fix For: 1.0.1
>
>
> 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).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to