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 <[email protected]> Authored: Tue Aug 19 19:16:41 2014 -0700 Committer: Jarek Jarcec Cecho <[email protected]> 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();
