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

Keith Turner commented on ACCUMULO-2131:
----------------------------------------

bq. While source changes, the loop condition will never be checked again after 
the return true.

oh yeah,  well that was not my intent.  I wanted it to recheck.   However for 
correctness, the source does not need to be rechecked.  If after getting the 
new source it becomes invalid then either one key or a row will be read before 
switching.   Its just not switching as soon as it could in this special case.  

My thinking was that getting the iterator could take a bit of time because it 
may involve I/O.  Therefore the new datasource could be invalidated by other 
concurrent actions (like bulk import or compactions).   I am not really sure if 
its worth handling this special case.   I would not be opposed to just changing 
to an if.

> while statement used as if statement
> ------------------------------------
>
>                 Key: ACCUMULO-2131
>                 URL: https://issues.apache.org/jira/browse/ACCUMULO-2131
>             Project: Accumulo
>          Issue Type: Bug
>          Components: tserver
>            Reporter: Eric Newton
>            Assignee: Keith Turner
>            Priority: Trivial
>             Fix For: 1.6.0
>
>
> Going through PMD output, and this looks a little sketchy in 
> SourceSwitchingIterator.java:
> {noformat}
>   private boolean switchSource() throws IOException {
>     while (!source.isCurrent()) {
>       source = source.getNewDataSource();
>       iter = source.iterator();
>       if (iflag != null)
>         ((InterruptibleIterator) iter).setInterruptFlag(iflag);
>       
>       return true;
>     }
>     
>     return false;
>   }
> {noformat}
> I'm wondering if that "while" should be "if"



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to