Gary Tully created AMQ-6792: ------------------------------- Summary: masterslave: transport blocked socket write can block network bridge stop in error Key: AMQ-6792 URL: https://issues.apache.org/jira/browse/AMQ-6792 Project: ActiveMQ Issue Type: Bug Components: networkbridge Affects Versions: 5.15.0 Reporter: Gary Tully Assignee: Gary Tully Fix For: 5.16.0
With a blocked socket write, the failover (use for masterslave) transport holds the reconnect mutex. this blocks normal stop pending the completion of the write. If the write blocks and there is no timeout exception, the transport stays up in error even when stop is called on the network bridge which can block broker shutdown. Threads: {code}"ActiveMQ BrokerService[amq10] Task-147" - Thread t@45016 java.lang.Thread.State: RUNNABLE at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.__AW_socketWrite(SocketOutputStream.java:111) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java) at java.net.SocketOutputStream.write(SocketOutputStream.java:155) at sun.security.ssl.OutputRecord.writeBuffer(OutputRecord.java:431) at sun.security.ssl.OutputRecord.write(OutputRecord.java:417) at sun.security.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:886) at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:857) at sun.security.ssl.AppOutputStream.__AW_write(AppOutputStream.java:123) - locked <5ce0bde7> (a sun.security.ssl.AppOutputStream) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java) at org.apache.activemq.transport.tcp.TcpBufferedOutputStream.flush(TcpBufferedOutputStream.java:115) at java.io.DataOutputStream.flush(DataOutputStream.java:123) at org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:176) at org.apache.activemq.transport.AbstractInactivityMonitor.doOnewaySend(AbstractInactivityMonitor.java:335) at org.apache.activemq.transport.AbstractInactivityMonitor.oneway(AbstractInactivityMonitor.java:317) at org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:85) at org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:116) at org.apache.activemq.transport.failover.FailoverTransport.__AW_oneway(FailoverTransport.java:667) - locked <47e37945> (a java.lang.Object) at org.apache.activemq.transport.failover.FailoverTransport.oneway(FailoverTransport.java) at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68) at org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:81) at org.apache.activemq.network.DemandForwardingBridgeSupport.serviceLocalCommand(DemandForwardingBridgeSupport.java:1008) at org.apache.activemq.network.DemandForwardingBridgeSupport$2.onCommand(DemandForwardingBridgeSupport.java:207) at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116) at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50) at org.apache.activemq.transport.vm.VMTransport.doDispatch(VMTransport.java:162) at org.apache.activemq.transport.vm.VMTransport.dispatch(VMTransport.java:154) - locked <467f411f> (a java.util.concurrent.atomic.AtomicBoolean) at org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:131) at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68) at org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60) at org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:1457) at org.apache.activemq.broker.TransportConnection.processDispatch(TransportConnection.java:971) at org.apache.activemq.broker.TransportConnection.iterate(TransportConnection.java:1017) at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:133) at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748){code} {code}"IOExceptionHandler: stopping BrokerService[amq10]" - Thread t@201006 java.lang.Thread.State: BLOCKED at org.apache.activemq.transport.failover.FailoverTransport.__AW_stop(FailoverTransport.java:380) - waiting to lock <47e37945> (a java.lang.Object) owned by "ActiveMQ BrokerService[amq10] Task-147" t@45016 at org.apache.activemq.transport.failover.FailoverTransport.stop(FailoverTransport.java) at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:65) at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:65) at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:132) at org.apache.activemq.util.ServiceStopper.stop(ServiceStopper.java:41) at org.apache.activemq.network.DemandForwardingBridgeSupport.__AW_stop(DemandForwardingBridgeSupport.java:307) at org.apache.activemq.network.DemandForwardingBridgeSupport.stop(DemandForwardingBridgeSupport.java) at org.apache.activemq.network.DiscoveryNetworkConnector.handleStop(DiscoveryNetworkConnector.java:223) at org.apache.activemq.network.NetworkConnector$1.doStop(NetworkConnector.java:65) at org.apache.activemq.util.ServiceSupport.__AW_stop(ServiceSupport.java:71) at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java) at org.apache.activemq.network.NetworkConnector.stop(NetworkConnector.java:165) at org.apache.activemq.util.ServiceStopper.stop(ServiceStopper.java:41) at org.apache.activemq.broker.BrokerService.__AW_stopAllConnectors(BrokerService.java:2191) at org.apache.activemq.broker.BrokerService.stopAllConnectors(BrokerService.java) at org.apache.activemq.broker.BrokerService.__AW_stop(BrokerService.java:805) at org.apache.activemq.broker.BrokerService.stop(BrokerService.java) at org.apache.activemq.xbean.XBeanBrokerService.stop(XBeanBrokerService.java:122) at org.apache.activemq.util.DefaultIOExceptionHandler$2.run(DefaultIOExceptionHandler.java:181){code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)