You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ja...@apache.org on 2014/08/20 04:17:12 UTC

git commit: SQOOP-1451: Sqoop2: From/To: Add API for supported directions

Repository: sqoop
Updated Branches:
  refs/heads/SQOOP-1367 2b214cdd2 -> 71279480e


SQOOP-1451: Sqoop2: From/To: Add API for supported directions

(Abraham Elmahrek via Jarek Jarcec Cecho)


Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/71279480
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/71279480
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/71279480

Branch: refs/heads/SQOOP-1367
Commit: 71279480e8dd45f751572ce4e34e6365a2bdae82
Parents: 2b214cd
Author: Jarek Jarcec Cecho <ja...@apache.org>
Authored: Tue Aug 19 19:16:41 2014 -0700
Committer: Jarek Jarcec Cecho <ja...@apache.org>
Committed: Tue Aug 19 19:16:41 2014 -0700

----------------------------------------------------------------------
 .../sqoop/connector/ConnectorHandler.java       | 24 +++++++++++++++-----
 .../apache/sqoop/framework/FrameworkError.java  |  2 ++
 .../org/apache/sqoop/framework/JobManager.java  | 11 +++++++++
 .../apache/sqoop/handler/JobRequestHandler.java | 10 ++++++++
 .../sqoop/connector/spi/SqoopConnector.java     | 12 ++++++++++
 5 files changed, 53 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/71279480/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java b/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java
index d17ebef..8782209 100644
--- a/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java
+++ b/core/src/main/java/org/apache/sqoop/connector/ConnectorHandler.java
@@ -19,6 +19,7 @@ package org.apache.sqoop.connector;
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Properties;
 
 import org.apache.log4j.Logger;
@@ -29,6 +30,7 @@ import org.apache.sqoop.model.MConnectionForms;
 import org.apache.sqoop.model.MConnector;
 import org.apache.sqoop.common.SqoopException;
 import org.apache.sqoop.connector.spi.SqoopConnector;
+import org.apache.sqoop.model.MForm;
 import org.apache.sqoop.model.MJobForms;
 
 public final class ConnectorHandler {
@@ -91,13 +93,23 @@ public final class ConnectorHandler {
     }
 
     // Initialize Metadata
-    MJobForms fromJobForms = new MJobForms(FormUtils.toForms(
-      connector.getJobConfigurationClass(Direction.FROM)));
+    MJobForms fromJobForms = null;
+    MJobForms toJobForms = null;
+    if (connector.getSupportedDirections().contains(Direction.FROM)) {
+      fromJobForms = new MJobForms(FormUtils.toForms(
+          connector.getJobConfigurationClass(Direction.FROM)));
+    } else {
+      fromJobForms = new MJobForms(new ArrayList<MForm>());
+    }
+
+    if (connector.getSupportedDirections().contains(Direction.TO)) {
+      toJobForms = new MJobForms(FormUtils.toForms(
+          connector.getJobConfigurationClass(Direction.TO)));
+    } else {
+      toJobForms = new MJobForms(new ArrayList<MForm>());
+    }
+
     MConnectionForms connectionForms = new MConnectionForms(
-      FormUtils.toForms(connector.getConnectionConfigurationClass()));
-    MJobForms toJobForms = new MJobForms(FormUtils.toForms(
-        connector.getJobConfigurationClass(Direction.TO)));
-    MConnectionForms toConnectionForms = new MConnectionForms(
         FormUtils.toForms(connector.getConnectionConfigurationClass()));
 
     String connectorVersion = connector.getVersion();

http://git-wip-us.apache.org/repos/asf/sqoop/blob/71279480/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java b/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java
index f7a6b67..8ecb197 100644
--- a/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java
+++ b/core/src/main/java/org/apache/sqoop/framework/FrameworkError.java
@@ -46,6 +46,8 @@ public enum FrameworkError implements ErrorCode {
 
   FRAMEWORK_0010("Connection for this job has been disabled. Cannot submit this job."),
 
+  FRAMEWORK_0011("Connector does not support direction. Cannot submit this job."),
+
   ;
 
   private final String message;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/71279480/core/src/main/java/org/apache/sqoop/framework/JobManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/framework/JobManager.java b/core/src/main/java/org/apache/sqoop/framework/JobManager.java
index 48360ea..5571928 100644
--- a/core/src/main/java/org/apache/sqoop/framework/JobManager.java
+++ b/core/src/main/java/org/apache/sqoop/framework/JobManager.java
@@ -298,6 +298,17 @@ public class JobManager implements Reconfigurable {
     SqoopConnector toConnector =
         ConnectorManager.getInstance().getConnector(job.getConnectorId(Direction.TO));
 
+    // Make sure that connectors support the directions they will be used from.
+    if (!fromConnector.getSupportedDirections().contains(Direction.FROM)) {
+      throw new SqoopException(FrameworkError.FRAMEWORK_0011,
+          "Connector: " + fromConnector.getClass().getCanonicalName());
+    }
+
+    if (!toConnector.getSupportedDirections().contains(Direction.TO)) {
+      throw new SqoopException(FrameworkError.FRAMEWORK_0011,
+          "Connector: " + toConnector.getClass().getCanonicalName());
+    }
+
     // Transform forms to fromConnector specific classes
     Object fromConnectorConnection = ClassUtils.instantiate(
         fromConnector.getConnectionConfigurationClass());

http://git-wip-us.apache.org/repos/asf/sqoop/blob/71279480/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java b/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java
index 6f2df93..fba5b1c 100644
--- a/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java
+++ b/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java
@@ -186,6 +186,16 @@ public class JobRequestHandler implements RequestHandler {
     SqoopConnector toConnector =
       ConnectorManager.getInstance().getConnector(job.getConnectorId(Direction.TO));
 
+    if (!fromConnector.getSupportedDirections().contains(Direction.FROM)) {
+      throw new SqoopException(ServerError.SERVER_0004, "Connector " + fromConnector.getClass().getCanonicalName()
+          + " does not support FROM direction.");
+    }
+
+    if (!toConnector.getSupportedDirections().contains(Direction.TO)) {
+      throw new SqoopException(ServerError.SERVER_0004, "Connector " + toConnector.getClass().getCanonicalName()
+          + " does not support TO direction.");
+    }
+
     // Get validator objects
     Validator fromConnectorValidator = fromConnector.getValidator();
     Validator frameworkValidator = FrameworkManager.getInstance().getValidator();

http://git-wip-us.apache.org/repos/asf/sqoop/blob/71279480/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java
----------------------------------------------------------------------
diff --git a/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java b/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java
index 2112bf7..2774e8b 100644
--- a/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java
+++ b/spi/src/main/java/org/apache/sqoop/connector/spi/SqoopConnector.java
@@ -17,6 +17,8 @@
  */
 package org.apache.sqoop.connector.spi;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Locale;
 import java.util.ResourceBundle;
 
@@ -46,6 +48,16 @@ public abstract class SqoopConnector {
   public abstract ResourceBundle getBundle(Locale locale);
 
   /**
+   * @return The supported directions
+   */
+  public List<Direction> getSupportedDirections() {
+    return Arrays.asList(new Direction[]{
+        Direction.FROM,
+        Direction.TO
+    });
+  }
+
+  /**
    * @return Get connection configuration class
    */
   public abstract Class getConnectionConfigurationClass();