You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "clebert suconic (JIRA)" <ji...@apache.org> on 2015/06/15 06:55:00 UTC

[jira] [Closed] (ARTEMIS-103) java.lang.IllegalStateException: channel is closed when using JGroups channel

     [ 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)