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

Anoop Sam John commented on HBASE-17487:
----------------------------------------

I did not check the details with the code..  From the comments what I read was 
that in this loop, we dont expect it to run more than 2 times.. Either 1st time 
or 2nd time it has to work.  If not within this 2 times (Will never happen as 
of now), that is an issue..     But Ted saying that as per the code, even in 
3rd iteration it is trying to do some work in a buggy way (I read it correct 
Ted?)..  If so lets be clear in this part of the code.. Just for the sake for 
better readability.. This loop is in push segments as snapshot which is invoked 
by snapshot() call..   Throwing an exception in a not handled way will impact 
the RS process itself?  May be.. My point was that this should never happen.   
EOD , when at any rare chance this iteration not succed in 2 chances, lets have 
a clear log error and fail the snapshot op..   The way Ted suggested was to 
throw Exception which is ok as we do similar way in many other places.. Upper 
layers will handle the Exception..  As in this code, this is a buggy situation 
which this method dont know how to handle.. SO it throws an Exception..  Upper 
layer know that even if this method throw an Exception its ok.. Its not end of 
the world.. Lets just suppress it by failing the snapshot..   Even this method 
, if returns a boolean or so can indicate the success/fail and upper layer can 
take action..  Am I making my stand clear?
So rather than this particular method trying to do some work in a buggy way in 
a case which will never happen at all, lets be more clear and fail the op.  
(Again I did not check in detail abt this new code)

> Throw exception when pushing pipeline to snapshot fails twice
> -------------------------------------------------------------
>
>                 Key: HBASE-17487
>                 URL: https://issues.apache.org/jira/browse/HBASE-17487
>             Project: HBase
>          Issue Type: Improvement
>            Reporter: Ted Yu
>            Assignee: Ted Yu
>            Priority: Minor
>         Attachments: 17487.v2.txt
>
>
> In CompactingMemStore#pushPipelineToSnapshot() , there is limit of 3 
> iterations of pipeline.swap() call after which an empty ImmutableSegment is 
> used as snapshot.
> However, there should be at most two iterations in pushPipelineToSnapshot() 
> since during the second iteration there is no concurrent write to memstore.
> We should throw exception in the 3rd iteration to signify that this scenario 
> should never happen.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to