[ https://issues.apache.org/jira/browse/AMQ-5016?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Gary Tully resolved AMQ-5016. ----------------------------- Resolution: Fixed Assignee: Gary Tully add long field so that existing serialized records can be read. http://git-wip-us.apache.org/repos/asf/activemq/commit/58ae402b > BitArrayBin doesn't work well with index larger than Integer.MAX_VALUE > ---------------------------------------------------------------------- > > Key: AMQ-5016 > URL: https://issues.apache.org/jira/browse/AMQ-5016 > Project: ActiveMQ > Issue Type: Bug > Components: JMS client > Affects Versions: 5.9.0 > Reporter: Dan Yu > Assignee: Gary Tully > Fix For: 5.11.0 > > Attachments: BitArrayBinTest.java > > > In BitArrayBin class, the index's unit type is long. It also has a variable > called firstIndex, which store the index where the window starts. And that > firstindex's unit is int. If the index is bigger than Integer.MAX_VALUE, > setBit() and getBit() starts to return bad value. > The defect causes activemq client to perform badly when receiving message > that sequence id is bigger than max interger. It spends most of the time to > shift window, and also blocks other consumer threads. Below is the jstack log > that shows the problem. > {code} > "ActiveMQ Session Task-869879" prio=10 tid=0x00007f412d6ee000 nid=0x3cbe > runnable [0x00007f405b7b6000] > java.lang.Thread.State: RUNNABLE > at java.util.LinkedList.linkLast(LinkedList.java:140) > at java.util.LinkedList.add(LinkedList.java:336) > at > org.apache.activemq.util.BitArrayBin.getBitArray(BitArrayBin.java:123) > at org.apache.activemq.util.BitArrayBin.setBit(BitArrayBin.java:59) > at org.apache.activemq.ActiveMQMessage > AuditNoSync.isDuplicate(ActiveMQMessageAuditNoSyn c.java:160) > at > org.apache.activemq.ActiveMQMessageAudit.isDuplicate(ActiveMQMessageAudit.java:59) > - locked <0x00007f46a0138ab0> (a > org.apache.activemq.ActiveMQMessageAudit) > at org.apache.activemq.ActiveMQMessage > AuditNoSync.isDuplicate(ActiveMQMessageAuditNoSyn c.java:140) > at > org.apache.activemq.ConnectionAudit.isDuplicate(ConnectionAudit.java:52) > - locked <0x00007f4881e6b968> (a org.apache.activemq.ConnectionAudit) > at > org.apache.activemq.ActiveMQConnection.isDuplicate(ActiveMQConnection.java:2291) > at > org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1223) > - locked <0x00007f45db222fb8> (a java.lang.Object) > at > org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:134) > at > org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:205) > at > org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:127) > at > org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) > at java.lang.Thread.run(Thread.java:722) > {code} -- This message was sent by Atlassian JIRA (v6.2#6252)