Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-2527

Intermittent hang of AMQ2102Test with ibm jdk - demonstrated sync issue with message properties and dlq processing for topics

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 5.3.0
    • 5.3.1, 5.4.0
    • Broker
    • None

    Description

      Stack traces of all threads when the test is hanging. Looks like the issue is with concurrent access to the message properties hashmap during message copy.

      ActiveMQ Transport: tcp:///127.0.0.1:56744[1] where all
      main:
        [1] sun.misc.Unsafe.park (native method)
        [2] java.util.concurrent.locks.LockSupport.parkNanos (LockSupport.java:213)
        [3] java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos (AbstractQueuedSynchronizer.java:958)
        [4] java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos (AbstractQueuedSynchronizer.java:1,250)
        [5] java.util.concurrent.CountDownLatch.await (CountDownLatch.java:264)
        [6] org.apache.activemq.broker.TransportConnection.stop (TransportConnection.java:905)
        [7] org.apache.activemq.util.ServiceStopper.stop (ServiceStopper.java:41)
        [8] org.apache.activemq.broker.TransportConnector.stop (TransportConnector.java:281)
        [9] org.apache.activemq.util.ServiceStopper.stop (ServiceStopper.java:41)
        [10] org.apache.activemq.broker.BrokerService.stopAllConnectors (BrokerService.java:1,536)
        [11] org.apache.activemq.broker.BrokerService.stop (BrokerService.java:508)
        [12] org.apache.activemq.bugs.AMQ2021Test.tearDown (AMQ2021Test.java:94)
        [13] junit.framework.TestCase.runBare (TestCase.java:140)
        [14] junit.framework.TestResult$1.protect (TestResult.java:110)
        [15] junit.framework.TestResult.runProtected (TestResult.java:128)
        [16] junit.framework.TestResult.run (TestResult.java:113)
        [17] junit.framework.TestCase.run (TestCase.java:124)
        [18] junit.framework.TestSuite.runTest (TestSuite.java:232)
        [19] junit.framework.TestSuite.run (TestSuite.java:227)
        [20] org.junit.internal.runners.JUnit38ClassRunner.run (JUnit38ClassRunner.java:79)
        [21] org.apache.maven.surefire.junit4.JUnit4TestSet.execute (JUnit4TestSet.java:62)
        [22] org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet (AbstractDirectoryTestSuite.java:140)
        [23] org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute (AbstractDirectoryTestSuite.java:165)
        [24] org.apache.maven.surefire.Surefire.run (Surefire.java:107)
        [25] sun.reflect.NativeMethodAccessorImpl.invoke0 (native method)
        [26] sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)
        [27] sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:37)
        [28] java.lang.reflect.Method.invoke (Method.java:599)
        [29] org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess (SurefireBooter.java:289)
        [30] org.apache.maven.surefire.booter.SurefireBooter.main (SurefireBooter.java:1,005)
      JIT Compilation Thread:
      Signal Dispatcher:
        [1] com.ibm.misc.SignalDispatcher.waitForSignal (native method)
        [2] com.ibm.misc.SignalDispatcher.run (SignalDispatcher.java:54)
      Gc Slave Thread:
      Gc Slave Thread:
      Gc Slave Thread:
      Finalizer thread:
      ActiveMQ Scheduler:
        [1] java.lang.Object.wait (native method)
        [2] java.lang.Object.wait (Object.java:196)
        [3] java.util.Timer$TimerImpl.run (Timer.java:230)
      ActiveMQ Data File Writer:
        [1] java.lang.Object.wait (native method)
        [2] java.lang.Object.wait (Object.java:167)
        [3] org.apache.activemq.kaha.impl.async.NIODataFileAppender.processQueue (NIODataFileAppender.java:79)
        [4] org.apache.activemq.kaha.impl.async.DataFileAppender$2.run (DataFileAppender.java:234)
      MemoryPoolMXBean notification dispatcher:
        [1] com.ibm.lang.management.MemoryNotificationThread.processNotificationLoop (native method)
        [2] com.ibm.lang.management.MemoryNotificationThread.run (MemoryNotificationThread.java:55)
      OperatingSystemMXBean notification dispatcher:
        [1] com.ibm.lang.management.OperatingSystemNotificationThread.processNotificationLoop (native method)
        [2] com.ibm.lang.management.OperatingSystemNotificationThread.run (OperatingSystemNotificationThread.java:39)
      RMI Scheduler(0):
        [1] sun.misc.Unsafe.park (native method)
        [2] java.util.concurrent.locks.LockSupport.parkNanos (LockSupport.java:213)
        [3] java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos (AbstractQueuedSynchronizer.java:1,974)
        [4] java.util.concurrent.DelayQueue.take (DelayQueue.java:175)
        [5] java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take (ScheduledThreadPoolExecutor.java:593)
        [6] java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take (ScheduledThreadPoolExecutor.java:586)
        [7] java.util.concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:957)
        [8] java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:917)
        [9] java.lang.Thread.run (Thread.java:735)
      RMI TCP Accept-1099:
        [1] java.net.PlainSocketImpl.socketAccept (native method)
        [2] java.net.PlainSocketImpl.accept (PlainSocketImpl.java:414)
        [3] java.net.ServerSocket.implAccept (ServerSocket.java:464)
        [4] java.net.ServerSocket.accept (ServerSocket.java:432)
        [5] sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop (TCPTransport.java:381)
        [6] sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run (TCPTransport.java:353)
        [7] java.lang.Thread.run (Thread.java:735)
      RMI TCP Accept-0:
        [1] java.net.PlainSocketImpl.socketAccept (native method)
        [2] java.net.PlainSocketImpl.accept (PlainSocketImpl.java:414)
        [3] java.net.ServerSocket.implAccept (ServerSocket.java:464)
        [4] java.net.ServerSocket.accept (ServerSocket.java:432)
        [5] sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop (TCPTransport.java:381)
        [6] sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run (TCPTransport.java:353)
        [7] java.lang.Thread.run (Thread.java:735)
      RMI Reaper:
        [1] java.lang.Object.wait (native method)
        [2] java.lang.Object.wait (Object.java:196)
        [3] java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:107)
        [4] java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:79)
        [5] sun.rmi.transport.ObjectTable$Reaper.run (ObjectTable.java:350)
        [6] java.lang.Thread.run (Thread.java:735)
      GC Daemon:
        [1] java.lang.Object.wait (native method)
        [2] java.lang.Object.wait (Object.java:196)
        [3] sun.misc.GC$Daemon.run (GC.java:112)
      RMI RenewClean-[10.65.4.113:56702]:
        [1] java.lang.Object.wait (native method)
        [2] java.lang.Object.wait (Object.java:196)
        [3] java.lang.ref.ReferenceQueue.remove (ReferenceQueue.java:107)
        [4] sun.rmi.transport.DGCClient$EndpointEntry$RenewCleanThread.run (DGCClient.java:528)
        [5] java.lang.Thread.run (Thread.java:735)
      ActiveMQ Transport: tcp://localhost/127.0.0.1:61616:
        [1] java.net.SocketInputStream.socketRead0 (native method)
        [2] java.net.SocketInputStream.read (SocketInputStream.java:140)
        [3] org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill (TcpBufferedInputStream.java:50)
        [4] org.apache.activemq.transport.tcp.TcpBufferedInputStream.read (TcpBufferedInputStream.java:58)
        [5] java.io.DataInputStream.readInt (DataInputStream.java:381)
        [6] org.apache.activemq.openwire.OpenWireFormat.unmarshal (OpenWireFormat.java:272)
        [7] org.apache.activemq.transport.tcp.TcpTransport.readCommand (TcpTransport.java:210)
        [8] org.apache.activemq.transport.tcp.TcpTransport.doRun (TcpTransport.java:202)
        [9] org.apache.activemq.transport.tcp.TcpTransport.run (TcpTransport.java:185)
        [10] java.lang.Thread.run (Thread.java:735)
      ActiveMQ Transport: tcp://localhost/127.0.0.1:61616:
        [1] java.net.SocketInputStream.socketRead0 (native method)
        [2] java.net.SocketInputStream.read (SocketInputStream.java:140)
        [3] org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill (TcpBufferedInputStream.java:50)
        [4] org.apache.activemq.transport.tcp.TcpBufferedInputStream.read (TcpBufferedInputStream.java:58)
        [5] java.io.DataInputStream.readInt (DataInputStream.java:381)
        [6] org.apache.activemq.openwire.OpenWireFormat.unmarshal (OpenWireFormat.java:272)
        [7] org.apache.activemq.transport.tcp.TcpTransport.readCommand (TcpTransport.java:210)
        [8] org.apache.activemq.transport.tcp.TcpTransport.doRun (TcpTransport.java:202)
        [9] org.apache.activemq.transport.tcp.TcpTransport.run (TcpTransport.java:185)
        [10] java.lang.Thread.run (Thread.java:735)
      ActiveMQ Transport: tcp:///127.0.0.1:56744:
        [1] java.util.HashMap.putAllImpl (HashMap.java:679)
        [2] java.util.HashMap.<init> (HashMap.java:369)
        [3] org.apache.activemq.command.Message.copy (Message.java:120)
        [4] org.apache.activemq.command.ActiveMQMessage.copy (ActiveMQMessage.java:64)
        [5] org.apache.activemq.command.ActiveMQTextMessage.copy (ActiveMQTextMessage.java:57)
        [6] org.apache.activemq.command.ActiveMQTextMessage.copy (ActiveMQTextMessage.java:52)
        [7] org.apache.activemq.broker.region.RegionBroker.sendToDeadLetterQueue (RegionBroker.java:710)
        [8] org.apache.activemq.broker.region.PrefetchSubscription.sendToDLQ (PrefetchSubscription.java:462)
        [9] org.apache.activemq.broker.region.PrefetchSubscription.acknowledge (PrefetchSubscription.java:365)
        [10] org.apache.activemq.broker.region.AbstractRegion.acknowledge (AbstractRegion.java:369)
        [11] org.apache.activemq.broker.region.RegionBroker.acknowledge (RegionBroker.java:470)
        [12] org.apache.activemq.broker.TransactionBroker.acknowledge (TransactionBroker.java:195)
        [13] org.apache.activemq.broker.BrokerFilter.acknowledge (BrokerFilter.java:74)
        [14] org.apache.activemq.broker.BrokerFilter.acknowledge (BrokerFilter.java:74)
        [15] org.apache.activemq.broker.MutableBrokerFilter.acknowledge (MutableBrokerFilter.java:85)
        [16] org.apache.activemq.broker.TransportConnection.processMessageAck (TransportConnection.java:466)
        [17] org.apache.activemq.command.MessageAck.visit (MessageAck.java:205)
        [18] org.apache.activemq.broker.TransportConnection.service (TransportConnection.java:309)
        [19] org.apache.activemq.broker.TransportConnection$1.onCommand (TransportConnection.java:179)
        [20] org.apache.activemq.transport.TransportFilter.onCommand (TransportFilter.java:68)
        [21] org.apache.activemq.transport.WireFormatNegotiator.onCommand (WireFormatNegotiator.java:113)
        [22] org.apache.activemq.transport.InactivityMonitor.onCommand (InactivityMonitor.java:210)
        [23] org.apache.activemq.transport.TransportSupport.doConsume (TransportSupport.java:84)
        [24] org.apache.activemq.transport.tcp.TcpTransport.doRun (TcpTransport.java:203)
        [25] org.apache.activemq.transport.tcp.TcpTransport.run (TcpTransport.java:185)
        [26] java.lang.Thread.run (Thread.java:735)
      ActiveMQ Transport: tcp:///127.0.0.1:56733:
        [1] java.util.HashMap.putAllImpl (HashMap.java:679)
        [2] java.util.HashMap.<init> (HashMap.java:369)
        [3] org.apache.activemq.command.Message.copy (Message.java:120)
        [4] org.apache.activemq.command.ActiveMQMessage.copy (ActiveMQMessage.java:64)
        [5] org.apache.activemq.command.ActiveMQTextMessage.copy (ActiveMQTextMessage.java:57)
        [6] org.apache.activemq.command.ActiveMQTextMessage.copy (ActiveMQTextMessage.java:52)
        [7] org.apache.activemq.broker.region.RegionBroker.sendToDeadLetterQueue (RegionBroker.java:710)
        [8] org.apache.activemq.broker.region.PrefetchSubscription.sendToDLQ (PrefetchSubscription.java:462)
        [9] org.apache.activemq.broker.region.PrefetchSubscription.acknowledge (PrefetchSubscription.java:365)
        [10] org.apache.activemq.broker.region.AbstractRegion.acknowledge (AbstractRegion.java:369)
        [11] org.apache.activemq.broker.region.RegionBroker.acknowledge (RegionBroker.java:470)
        [12] org.apache.activemq.broker.TransactionBroker.acknowledge (TransactionBroker.java:195)
        [13] org.apache.activemq.broker.BrokerFilter.acknowledge (BrokerFilter.java:74)
        [14] org.apache.activemq.broker.BrokerFilter.acknowledge (BrokerFilter.java:74)
        [15] org.apache.activemq.broker.MutableBrokerFilter.acknowledge (MutableBrokerFilter.java:85)
        [16] org.apache.activemq.broker.TransportConnection.processMessageAck (TransportConnection.java:466)
        [17] org.apache.activemq.command.MessageAck.visit (MessageAck.java:205)
        [18] org.apache.activemq.broker.TransportConnection.service (TransportConnection.java:309)
        [19] org.apache.activemq.broker.TransportConnection$1.onCommand (TransportConnection.java:179)
        [20] org.apache.activemq.transport.TransportFilter.onCommand (TransportFilter.java:68)
        [21] org.apache.activemq.transport.WireFormatNegotiator.onCommand (WireFormatNegotiator.java:113)
        [22] org.apache.activemq.transport.InactivityMonitor.onCommand (InactivityMonitor.java:210)
        [23] org.apache.activemq.transport.TransportSupport.doConsume (TransportSupport.java:84)
        [24] org.apache.activemq.transport.tcp.TcpTransport.doRun (TcpTransport.java:203)
        [25] org.apache.activemq.transport.tcp.TcpTransport.run (TcpTransport.java:185)
        [26] java.lang.Thread.run (Thread.java:735)
      InactivityMonitor ReadCheck:
        [1] java.lang.Object.wait (native method)
        [2] java.lang.Object.wait (Object.java:196)
        [3] java.util.Timer$TimerImpl.run (Timer.java:230)
      InactivityMonitor WriteCheck:
        [1] java.lang.Object.wait (native method)
        [2] java.lang.Object.wait (Object.java:196)
        [3] java.util.Timer$TimerImpl.run (Timer.java:230)
      ActiveMQ Transport: tcp://localhost/127.0.0.1:61616:
        [1] java.net.SocketInputStream.socketRead0 (native method)
        [2] java.net.SocketInputStream.read (SocketInputStream.java:140)
        [3] org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill (TcpBufferedInputStream.java:50)
        [4] org.apache.activemq.transport.tcp.TcpBufferedInputStream.read (TcpBufferedInputStream.java:58)
        [5] java.io.DataInputStream.readInt (DataInputStream.java:381)
        [6] org.apache.activemq.openwire.OpenWireFormat.unmarshal (OpenWireFormat.java:272)
        [7] org.apache.activemq.transport.tcp.TcpTransport.readCommand (TcpTransport.java:210)
        [8] org.apache.activemq.transport.tcp.TcpTransport.doRun (TcpTransport.java:202)
        [9] org.apache.activemq.transport.tcp.TcpTransport.run (TcpTransport.java:185)
        [10] java.lang.Thread.run (Thread.java:735)
      ActiveMQ Transport: tcp:///127.0.0.1:56754:
        [1] org.apache.activemq.broker.region.PrefetchSubscription.dispatchPending (PrefetchSubscription.java:582)
        [2] org.apache.activemq.broker.region.PrefetchSubscription.add (PrefetchSubscription.java:158)
        [3] org.apache.activemq.broker.region.DurableTopicSubscription.add (DurableTopicSubscription.java:199)
        [4] org.apache.activemq.broker.region.policy.SimpleDispatchPolicy.dispatch (SimpleDispatchPolicy.java:49)
        [5] org.apache.activemq.broker.region.Topic.dispatch (Topic.java:588)
        [6] org.apache.activemq.broker.region.Topic.doMessageSend (Topic.java:442)
        [7] org.apache.activemq.broker.region.Topic.send (Topic.java:376)
        [8] org.apache.activemq.broker.region.AbstractRegion.send (AbstractRegion.java:354)
        [9] org.apache.activemq.broker.region.RegionBroker.send (RegionBroker.java:445)
        [10] org.apache.activemq.broker.TransactionBroker.send (TransactionBroker.java:227)
        [11] org.apache.activemq.broker.BrokerFilter.send (BrokerFilter.java:126)
        [12] org.apache.activemq.broker.CompositeDestinationBroker.send (CompositeDestinationBroker.java:95)
        [13] org.apache.activemq.broker.MutableBrokerFilter.send (MutableBrokerFilter.java:133)
        [14] org.apache.activemq.broker.TransportConnection.processMessage (TransportConnection.java:459)
        [15] org.apache.activemq.command.ActiveMQMessage.visit (ActiveMQMessage.java:631)
        [16] org.apache.activemq.broker.TransportConnection.service (TransportConnection.java:309)
        [17] org.apache.activemq.broker.TransportConnection$1.onCommand (TransportConnection.java:179)
        [18] org.apache.activemq.transport.TransportFilter.onCommand (TransportFilter.java:68)
        [19] org.apache.activemq.transport.WireFormatNegotiator.onCommand (WireFormatNegotiator.java:113)
        [20] org.apache.activemq.transport.InactivityMonitor.onCommand (InactivityMonitor.java:210)
        [21] org.apache.activemq.transport.TransportSupport.doConsume (TransportSupport.java:84)
        [22] org.apache.activemq.transport.tcp.TcpTransport.doRun (TcpTransport.java:203)
        [23] org.apache.activemq.transport.tcp.TcpTransport.run (TcpTransport.java:185)
        [24] java.lang.Thread.run (Thread.java:735)
      QueueThread:queue://ActiveMQ.DLQ:
        [1] sun.misc.Unsafe.park (native method)
        [2] java.util.concurrent.locks.LockSupport.park (LockSupport.java:173)
        [3] java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await (AbstractQueuedSynchronizer.java:1,936)
        [4] java.util.concurrent.LinkedBlockingQueue.take (LinkedBlockingQueue.java:369)
        [5] java.util.concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:957)
        [6] java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:917)
        [7] java.lang.Thread.run (Thread.java:735)
      ActiveMQ Transport Stopper: /127.0.0.1:56733:
        [1] sun.misc.Unsafe.park (native method)
        [2] java.util.concurrent.locks.LockSupport.park (LockSupport.java:173)
        [3] java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt (AbstractQueuedSynchronizer.java:758)
        [4] java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued (AbstractQueuedSynchronizer.java:789)
        [5] java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire (AbstractQueuedSynchronizer.java:1,125)
        [6] java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock (ReentrantReadWriteLock.java:818)
        [7] org.apache.activemq.broker.TransportConnection$3.run (TransportConnection.java:931)
      InactivityMonitor Async Task: java.util.concurrent.ThreadPoolExecutor$Worker@4700470:
        [1] sun.misc.Unsafe.park (native method)
        [2] java.util.concurrent.locks.LockSupport.parkNanos (LockSupport.java:213)
        [3] java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill (SynchronousQueue.java:435)
        [4] java.util.concurrent.SynchronousQueue$TransferStack.transfer (SynchronousQueue.java:334)
        [5] java.util.concurrent.SynchronousQueue.poll (SynchronousQueue.java:885)
        [6] java.util.concurrent.ThreadPoolExecutor.getTask (ThreadPoolExecutor.java:955)
        [7] java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:917)
        [8] java.lang.Thread.run (Thread.java:735)
      

      Attachments

        1. AMQ-2527.patch.txt
          12 kB
          Gary Tully

        Activity

          People

            gtully Gary Tully
            gtully Gary Tully
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: