You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ma...@apache.org on 2016/11/08 17:24:23 UTC

sqoop git commit: SQOOP-3034: HBase import should fail fast if using anything other than as-textfile

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 <ma...@apache.org>
Authored: Tue Nov 8 18:22:02 2016 +0100
Committer: Attila Szabo <ma...@apache.org>
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);