SQOOP-3034: HBase import should fail fast if using anything other than as-textfile
(Boglarka Egyed via Attila Szabo)
diff --git a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
index 13a9697..468bf34 100644
--- a/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
+++ b/src/java/org/apache/sqoop/tool/BaseSqoopTool.java
@@ -1689,6 +1689,11 @@
BaseSqoopTool.HBASE_TABLE_ARG);
throw new InvalidOptionsException(validationMessage);
}
+
+ if (options.getHBaseTable() != null && options.getFileLayout() != SqoopOptions.FileLayout.TextFile) {
+ String validationMessage = String.format("Can't run HBase import with file layout: %s", options.getFileLayout());
+ throw new InvalidOptionsException(validationMessage);
+ }
}
/**
diff --git a/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java b/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
index 503a863..a792151 100644
--- a/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
+++ b/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
@@ -5,12 +5,39 @@
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+import java.util.Arrays;
+
+import static com.cloudera.sqoop.SqoopOptions.FileLayout.SequenceFile;
+import static com.cloudera.sqoop.SqoopOptions.FileLayout.AvroDataFile;
+import static com.cloudera.sqoop.SqoopOptions.FileLayout.ParquetFile;
+import static com.cloudera.sqoop.SqoopOptions.FileLayout.TextFile;
+
+@RunWith(Parameterized.class)
public class ImportToolValidateOptionsTest {
+ @Parameters(name = "fileLayout = {0}, validationMessage = {1}")
+ public static Iterable<? extends Object> fileLayoutAndValidationMessageParameters() {
+ return Arrays.asList(new Object[] {SequenceFile, String.format("Can't run HBase import with file layout: %s", SequenceFile)},
+ new Object[] {AvroDataFile, String.format("Can't run HBase import with file layout: %s", AvroDataFile)},
+ new Object[] {ParquetFile, String.format("Can't run HBase import with file layout: %s", ParquetFile)});
+ }
+
private static final String TABLE_NAME = "testTableName";
private static final String CONNECT_STRING = "testConnectString";
private static final String CHECK_COLUMN_NAME = "checkColumnName";
+ private static final String HBASE_TABLE_NAME = "testHBaseTableName";
+ private static final String HBASE_COL_FAMILY = "testHBaseColumnFamily";
+ private SqoopOptions.FileLayout fileLayout;
+ private String validationMessage;
+
+ public ImportToolValidateOptionsTest(SqoopOptions.FileLayout fileLayout, String validationMessage) {
+ this.fileLayout = fileLayout;
+ this.validationMessage = validationMessage;
+ }
@Rule
public ExpectedException thrown = ExpectedException.none();
@@ -81,6 +108,31 @@
importTool.validateOptions(options);
}
+ @Test
+ public void testValidationFailsWithHBaseImportAndFileLayoutDifferentFromTexFile() throws Exception {
+ SqoopOptions options = buildBaseSqoopOptions();
+ options.setHBaseTable(HBASE_TABLE_NAME);
+ options.setHBaseColFamily(HBASE_COL_FAMILY);
+ options.setFileLayout(fileLayout);
+
+ thrown.expect(SqoopOptions.InvalidOptionsException.class);
+ thrown.expectMessage(validationMessage);
+
+ importTool.validateOptions(options);
+ }
+
+ @Test
+ public void testValidationSucceedsWithHBaseImportAndAsTextFile() throws Exception {
+ SqoopOptions options = buildBaseSqoopOptions();
+ options.setHBaseTable(HBASE_TABLE_NAME);
+ options.setHBaseColFamily(HBASE_COL_FAMILY);
+ options.setFileLayout(TextFile);
+
+ thrown.none();
+
+ importTool.validateOptions(options);
+ }
+
private SqoopOptions buildBaseSqoopOptions() {
SqoopOptions result = new SqoopOptions();
result.setTableName(TABLE_NAME);