Repository: sqoop Updated Branches: refs/heads/trunk b60aef1ff -> 53b490e14
SQOOP-3034: HBase import should fail fast if using anything other than as-textfile (Boglarka Egyed via Attila Szabo) Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/53b490e1 Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/53b490e1 Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/53b490e1 Branch: refs/heads/trunk Commit: 53b490e146e9b5c71fc2e94640d8c8e1d03d9eb7 Parents: b60aef1 Author: Attila Szabo <[email protected]> Authored: Tue Nov 8 18:22:02 2016 +0100 Committer: Attila Szabo <[email protected]> Committed: Tue Nov 8 18:23:52 2016 +0100 ---------------------------------------------------------------------- .../org/apache/sqoop/tool/BaseSqoopTool.java | 5 ++ .../tool/ImportToolValidateOptionsTest.java | 52 ++++++++++++++++++++ 2 files changed, 57 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/53b490e1/src/java/org/apache/sqoop/tool/BaseSqoopTool.java ---------------------------------------------------------------------- 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 @@ public abstract class BaseSqoopTool extends com.cloudera.sqoop.tool.SqoopTool { 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); + } } /** http://git-wip-us.apache.org/repos/asf/sqoop/blob/53b490e1/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java ---------------------------------------------------------------------- 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.Before; 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 @@ public class ImportToolValidateOptionsTest { 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);
