You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Jason Rosenberg (JIRA)" <ji...@apache.org> on 2008/02/07 06:48:36 UTC

[jira] Updated: (AMQ-1116) deadlock when shutting down client that is configured with failover=true and is presently disconnected from broker

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

Jason Rosenberg updated AMQ-1116:
---------------------------------

    Attachment: ConnectionPool.java
                FailoverTransport.java

I've attached a patch that I created for several issues, against a recent 5.1-SNAPSHOT revision (svn rev 618082).

The file FailoverTransport.java, includes fixes for 4 issues, including Adam's fix for this issue.

The other issues that this patch includes fixes for are:

AMQ-1116
AMQ-1575
AMQ-1577
AMQ-1581

The file ConnectionPool.java is also needed for the fix for AMQ-1581

I've added comments in the code that clearly indicate which sections apply to which issue, so you can easily take edit to include only the fixes you want specifically.

Jason

> deadlock when shutting down client that is configured with failover=true and is presently disconnected from broker
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-1116
>                 URL: https://issues.apache.org/activemq/browse/AMQ-1116
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Transport
>    Affects Versions: 4.0.2
>            Reporter: Chris Hofstaedter
>             Fix For: 5.2.0
>
>         Attachments: ConnectionPool.java, DemandForwardingBridgeSupport.java, FailoverTransport.java, FailoverTransport.java, FailoverTransport_AMQ-1116.patch
>
>
> Sounds like a great idea to me :) Please go ahead and submit a jira with the patch and we'll get it integrated ASAP
> On 1/4/07, Chris Hofstaedter <ch...@nmwco.com> wrote:
> > I ran into this issue as well on <= 4.0.2.  I never tested it against
> > 4.1.    The FailoverTransport doesn't shutdown if it is disconnected at
> > the time of the shutdown.
> >
> > I believe that the root cause is in the 
> > FailoverTransport.oneway(Command
> > command) function which will hold onto the command and keep trying to
> > reconnect until the message is sent or the transport is disposed.
> >
> > I applied a local patch that seems to solve the problem.  Note that 
> > I've only tested the patch against 4.0.2.
> >
> > Specifically, I early return from the oneway function if the command 
> > is ShutdownInfo and the connectedTransport is null.  This seems to 
> > solve the problem in that I get clean shutdowns on the client when 
> > failover is true and the client is presently disconnected.
> >
> > Does this seem like a reasonable patch?  Should I create a JIRA with 
> > this info?
> >
> >
> >
> > -----Original Message-----
> > From: James Strachan [mailto:james.strachan@gmail.com]
> > Sent: Tuesday, December 12, 2006 4:46 AM
> > To: activemq-users@geronimo.apache.org
> > Subject: Re: failover mode and client shutdown
> >
> > There could be a bug relating to closes with the failover transport 
> > possibly, but the ActiveMQConnection does wait up to the closeTimeout 
> > for a close to succeed before shutting down - so you could try reduce 
> > the timeout.
> >
> > http://incubator.apache.org/activemq/maven/activemq-core/apidocs/org/a
> > pa
> > che/activemq/ActiveMQConnection.html#setCloseTimeout(int)
> >
> >
> > On 12/12/06, Keith Irwin <ke...@gmail.com> wrote:
> > > Folks--
> > >
> > > When we have clients running and we take down AMQ (<= 4.1.0), then 
> > > attempt to shutdown the clients with Control-C (rather than kill the 
> > > JVM with a -9), the clients won't shut down.  It's as if a "close" 
> > > on the failover connection never reaches the amq client classes.
> > >
> > > I note that in the 4.1.0 release notes, this issue is referenced, 
> > > and the advice is to set the maxReconnectAttempts (or similar) 
> > > property to something non-zero.
> > >
> > > The problem is that we don't want there to be a max number of 
> > > attempts.  Unless we specifically want to take down the client (say, 
> > > for an apt-get package upgrade), we want it to keep on trying 
> > > forever.
> > >
> > > SO, my question: Is there an architectural reason for not being able 
> > > to close a failover connection if AMQ is down?
> > >
> > > If it isn't impossible due to tradeoffs elsewhere in the code base, 
> > > we might be willing to submit a patch to fix the issue.
> > >
> > > Our only other recourse is to attempt to close the connections in 
> > > separate threads, then timeout those threads after a while and fall 
> > > out the end of the java process.
> > >
> > > For instance:
> > >
> > >   Thread th = new Thread(new Runnable() {
> > >       public void run() {
> > >          connection.close();
> > >       }
> > >    });
> > >    th.start();
> > >
> > >    // give up after 2 seconds
> > >    Thread.currentThread().join(2000);
> > >
> > > I guess this is do-able, but it seems, you know, some how, well,
> > wrong.
> > >
> > > So, is it worth investigating a patch to AMQ?
> > >
> > > Keith
> > >

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.