[ https://issues.apache.org/jira/browse/HBASE-1951?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12773326#action_12773326 ]
stack commented on HBASE-1951: ------------------------------ Looks good +1. I like the test. You going to fix HBASE-1781 too? > Stack overflow when calling HTable.checkAndPut() when deleting a lot of values > ------------------------------------------------------------------------------ > > Key: HBASE-1951 > URL: https://issues.apache.org/jira/browse/HBASE-1951 > Project: Hadoop HBase > Issue Type: Bug > Components: regionserver > Affects Versions: 0.20.1 > Environment: Running HBase 0.20.1 on Cloudera distribution of Hadoop > 0.20.1+152 on an EC2 test cluster with one master, one embedded zookeeper, > and only one region server > Reporter: Age Mooij > Fix For: 0.20.2, 0.21.0 > > Attachments: HBASE-1951-v2.patch, HBASE-1951.patch, stacktrace.txt > > > We get a stackoverflow when calling HTable.checkAndPut() from a map-reduce > job though the client API after doing a large number of deletes. > Our mapred job is a periodic job (which extends TableMapper) that merges the > versions for a value in a column into a new value/version and then deletes > the older versions. This is because we use versions to store data so we can > do append-only insertion. Our rows can have large/huge (from 1 till > 1M) > numbers of columns (aka key-values). > The problem seems to be that the > org.apache.hadoop.hbase.regionserver.GetDeleteTracker.isDeleted() method is > implemented with recursion but since Java has no tail recursion optimization, > this fails for cases where the number of deletes that are being tracked is > bigger than the stack size. I'm not sure why recursion is used here but it is > not safe without tail-call optimization and it should be optimized into a > simple loop. > I'll attach the stacktrace. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.