diff --git a/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java b/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java index e41c214..a3e4ce5 100644 --- a/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java +++ b/src/contrib/transactional/src/java/org/apache/hadoop/hbase/regionserver/tableindexed/IndexedRegion.java @@ -240,7 +240,7 @@ class IndexedRegion extends TransactionalRegion { @Override public void delete(Delete delete, final Integer lockid, boolean writeToWAL) throws IOException { - + // first remove the indexes. if (!getIndexes().isEmpty()) { // Need all columns NavigableSet neededColumns = getColumnsForIndexes(getIndexes()); @@ -249,21 +249,25 @@ class IndexedRegion extends TransactionalRegion { for (byte [] col : neededColumns) { get.addColumn(col); } - + Result oldRow = super.get(get, null); SortedMap oldColumnValues = convertToValueMap(oldRow); - for (IndexSpecification indexSpec : getIndexes()) { removeOldIndexEntry(indexSpec, delete.getRow(), oldColumnValues); } + } + // run the delete. + super.delete(delete, lockid, writeToWAL); + + // rebuild indexes for the row, if it still exists. + if (!getIndexes().isEmpty()) { + Get get = new Get(delete.getRow()); // Handle if there is still a version visible. - if (delete.getTimeStamp() != HConstants.LATEST_TIMESTAMP) { - get.setTimeRange(1, delete.getTimeStamp()); - oldRow = super.get(get, null); - SortedMap currentColumnValues = convertToValueMap(oldRow); - + Result currentRow = super.get(get, null); + if (!currentRow.isEmpty()) { + SortedMap currentColumnValues = convertToValueMap(currentRow); for (IndexSpecification indexSpec : getIndexes()) { if (IndexMaintenanceUtils.doesApplyToIndex(indexSpec, currentColumnValues)) { updateIndex(indexSpec, delete.getRow(), currentColumnValues); @@ -271,7 +275,7 @@ class IndexedRegion extends TransactionalRegion { } } } - super.delete(delete, lockid, writeToWAL); + } private SortedMap convertToValueMap(Result result) {