From c5c0d04c8c496810fedb19937d970b5cdf0edd6d Mon Sep 17 00:00:00 2001 From: Bhupendra Date: Tue, 8 Sep 2015 18:54:57 +0530 Subject: [PATCH] HBASE-14366: NPE in case visibility expression is not present in labels table during importtsv run --- .../hbase/mapreduce/DefaultVisibilityExpressionResolver.java | 10 +++++++++- .../org/apache/hadoop/hbase/mapreduce/TextSortReducer.java | 8 ++++++++ .../org/apache/hadoop/hbase/mapreduce/TsvImporterMapper.java | 3 ++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/DefaultVisibilityExpressionResolver.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/DefaultVisibilityExpressionResolver.java index 2712d1c..9a65f03 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/DefaultVisibilityExpressionResolver.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/DefaultVisibilityExpressionResolver.java @@ -53,6 +53,8 @@ public class DefaultVisibilityExpressionResolver implements VisibilityExpression private Configuration conf; private final Map labels = new HashMap(); + + private static final int NON_EXIST_LABEL_ORDINAL = 0; @Override public Configuration getConf() { @@ -125,7 +127,13 @@ public class DefaultVisibilityExpressionResolver implements VisibilityExpression VisibilityLabelOrdinalProvider provider = new VisibilityLabelOrdinalProvider() { @Override public int getLabelOrdinal(String label) { - return labels.get(label); + Integer ordinal = null; + ordinal = labels.get(label); + if (ordinal != null) { + return ordinal.intValue(); + } + // 0 denotes not available + return NON_EXIST_LABEL_ORDINAL; } @Override diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TextSortReducer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TextSortReducer.java index 5056f0b..7488763 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TextSortReducer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TextSortReducer.java @@ -34,6 +34,7 @@ import org.apache.hadoop.hbase.KeyValueUtil; import org.apache.hadoop.hbase.Tag; import org.apache.hadoop.hbase.TagType; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; +import org.apache.hadoop.hbase.security.visibility.InvalidLabelException; import org.apache.hadoop.hbase.util.Base64; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.io.Text; @@ -185,6 +186,13 @@ public class TextSortReducer extends kvs.add(kv); curSize += kv.heapSize(); } + } catch (InvalidLabelException badLine) { + if (skipBadLines) { + System.err.println("Bad line." + badLine.getMessage()); + incrementBadLineCount(1); + continue; + } + throw new IOException(badLine); } catch (ImportTsv.TsvParser.BadTsvLineException badLine) { if (skipBadLines) { System.err.println("Bad line." + badLine.getMessage()); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TsvImporterMapper.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TsvImporterMapper.java index 9f1b4c3..ce57103 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TsvImporterMapper.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TsvImporterMapper.java @@ -32,6 +32,7 @@ import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.mapreduce.ImportTsv.TsvParser.BadTsvLineException; import org.apache.hadoop.hbase.security.visibility.CellVisibility; +import org.apache.hadoop.hbase.security.visibility.InvalidLabelException; import org.apache.hadoop.hbase.util.Base64; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.io.LongWritable; @@ -165,7 +166,7 @@ extends Mapper populatePut(lineBytes, parsed, put, i); } context.write(rowKey, put); - } catch (ImportTsv.TsvParser.BadTsvLineException|IllegalArgumentException badLine) { + } catch (ImportTsv.TsvParser.BadTsvLineException|IllegalArgumentException|InvalidLabelException badLine) { if (logBadLines) { System.err.println(value); } -- 1.8.4.msysgit.0