You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "王庆焕 (JIRA)" <ji...@apache.org> on 2016/09/18 05:59:20 UTC

[jira] [Comment Edited] (AMQ-5016) BitArrayBin doesn't work well with index larger than Integer.MAX_VALUE

    [ https://issues.apache.org/jira/browse/AMQ-5016?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15496523#comment-15496523 ] 

王庆焕 edited comment on AMQ-5016 at 9/18/16 5:58 AM:
---------------------------------------------------

I downloaded activemq 5.11.0 source.jar, i found the only change is that firstIndex is declared as long type. Then  I run the example :
 {code}   
public static void main(String[] args) {
       BitArrayBin toTest = new BitArrayBin(1024);
       //I  commented out the following code
       //toTest.setBit(1, true);       
       long largeNum = Integer.MAX_VALUE*2L +100L;
       toTest.setBit(largeNum, true);
       System.out.println(toTest.getBit(largeNum));   
	  
   }
    {code}
the result  of running the above code is "false".  I expect the results to be true,but I got a false


was (Author: wangqinghuan):
I downloaded activemq 5.11.0 source.jar, i found the only change is that firstIndex is declared as long type. Then  I run the example :
    
public static void main(String[] args) {
       BitArrayBin toTest = new BitArrayBin(1024);
       //I  commented out the following code
       //toTest.setBit(1, true);       
       long largeNum = Integer.MAX_VALUE*2L +100L;
       toTest.setBit(largeNum, true);
       System.out.println(toTest.getBit(largeNum));   
	  
   }
    
the result  of running the above code is "false".  I expect the results to be true,but I got a false

> 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.3.4#6332)