[ https://issues.apache.org/jira/browse/HBASE-5922?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13267424#comment-13267424 ]
Todd Johnson commented on HBASE-5922: ------------------------------------- I worked with Nate on this yesterday. We couldn't think of any reason you would want the delegate to search for the splitkey, nor any reason this method would need to recursively call itself. Our reading of the code was that there are two reasons to return false: if 'top' is true (you're in the top half of the split file) and the search key is greater than the splitkey (this works now) OR if 'top' is false (you're in the bottom half of the file) and the search key is less-than-or-equal-to the splitkey (presumably, the splitkey is stored in the top half, thus or-equal-to). If neither of those conditions exist, there is a possibility of finding the search key in the half-file you're looking at, so you call the delegate. > HalfStoreFileReader seekBefore causes StackOverflowError > -------------------------------------------------------- > > Key: HBASE-5922 > URL: https://issues.apache.org/jira/browse/HBASE-5922 > Project: HBase > Issue Type: Bug > Components: client, io > Affects Versions: 0.90.0 > Environment: HBase 0.90.4 > Reporter: Nate Putnam > Assignee: Nate Putnam > Fix For: 0.90.0 > > Attachments: HBASE-5922.patch, HBASE-5922.patch > > > Calling HRegionServer.getClosestRowBefore() can cause a stack overflow if the > underlying store file is a reference and the row key is in the bottom. > java.io.IOException: java.io.IOException: java.lang.StackOverflowError > at > org.apache.hadoop.hbase.regionserver.HRegionServer.convertThrowableToIOE(HRegionServer.java:990) > at > org.apache.hadoop.hbase.regionserver.HRegionServer.convertThrowableToIOE(HRegionServer.java:978) > at > org.apache.hadoop.hbase.regionserver.HRegionServer.getClosestRowBefore(HRegionServer.java:1651) > at sun.reflect.GeneratedMethodAccessor174.invoke(Unknown Source) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at org.apache.hadoop.hbase.ipc.HBaseRPC$Server.call(HBaseRPC.java:570) > at > org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1039) > Caused by: java.lang.StackOverflowError > at > org.apache.hadoop.hbase.io.HalfStoreFileReader$1.seekBefore(HalfStoreFileReader.java:147) > at > org.apache.hadoop.hbase.io.HalfStoreFileReader$1.seekBefore(HalfStoreFileReader.java:149) > at > org.apache.hadoop.hbase.io.HalfStoreFileReader$1.seekBefore(HalfStoreFileReader.java:149) > at > org.apache.hadoop.hbase.io.HalfStoreFileReader$1.seekBefore(HalfStoreFileReader.java:149) > at > org.apache.hadoop.hbase.io.HalfStoreFileReader$1.seekBefore(HalfStoreFileReader.java:149) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira