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 2015/12/08 14:58:39 UTC

sqoop git commit: SQOOP-2703: Sqoop2: Use connector name in MJob

Repository: sqoop
Updated Branches:
  refs/heads/sqoop2 6c4743de1 -> e70b9c259


SQOOP-2703: Sqoop2: Use connector name in MJob

(Colin Ma 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/e70b9c25
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/e70b9c25
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/e70b9c25

Branch: refs/heads/sqoop2
Commit: e70b9c259a90b6499a3bcd60d5dc13cf6c3f0d94
Parents: 6c4743d
Author: Jarek Jarcec Cecho <ja...@apache.org>
Authored: Tue Dec 8 14:58:09 2015 +0100
Committer: Jarek Jarcec Cecho <ja...@apache.org>
Committed: Tue Dec 8 14:58:09 2015 +0100

----------------------------------------------------------------------
 .../org/apache/sqoop/client/SqoopClient.java    |  4 +--
 .../java/org/apache/sqoop/json/JobBean.java     | 32 ++++++++---------
 .../main/java/org/apache/sqoop/model/MJob.java  | 36 ++++++++++----------
 .../java/org/apache/sqoop/json/TestJobBean.java |  4 +--
 .../org/apache/sqoop/json/TestJobsBean.java     |  4 +--
 .../apache/sqoop/json/util/BeanTestUtil.java    |  6 ++--
 .../java/org/apache/sqoop/model/TestMJob.java   | 14 ++++----
 .../org/apache/sqoop/driver/JobManager.java     | 17 +++++++--
 .../org/apache/sqoop/repository/Repository.java | 30 ++++++++--------
 .../org/apache/sqoop/driver/TestJobManager.java | 22 ++++++------
 .../sqoop/repository/TestJdbcRepository.java    | 26 +++++++-------
 .../common/CommonRepositoryHandler.java         |  8 ++---
 .../sqoop/repository/derby/TestJobHandling.java |  2 +-
 .../repository/mysql/MySqlTestCase.java         |  4 +--
 .../postgresql/PostgresqlTestCase.java          |  4 +--
 .../apache/sqoop/handler/JobRequestHandler.java | 25 +++++++-------
 .../apache/sqoop/shell/CloneJobFunction.java    |  7 ++--
 .../apache/sqoop/shell/CreateJobFunction.java   |  4 +--
 .../org/apache/sqoop/shell/ShowJobFunction.java | 22 +++---------
 .../apache/sqoop/shell/UpdateJobFunction.java   |  8 ++---
 .../apache/sqoop/shell/TestCloneCommand.java    |  4 +--
 .../apache/sqoop/shell/TestCreateCommand.java   | 12 +++----
 .../org/apache/sqoop/shell/TestShowCommand.java |  4 +--
 .../apache/sqoop/shell/TestUpdateCommand.java   |  4 +--
 .../sqoop/tools/tool/RepositoryLoadTool.java    |  8 ++---
 25 files changed, 153 insertions(+), 158 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/client/src/main/java/org/apache/sqoop/client/SqoopClient.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/sqoop/client/SqoopClient.java b/client/src/main/java/org/apache/sqoop/client/SqoopClient.java
index 4abee77..f39ea6a 100644
--- a/client/src/main/java/org/apache/sqoop/client/SqoopClient.java
+++ b/client/src/main/java/org/apache/sqoop/client/SqoopClient.java
@@ -393,8 +393,8 @@ public class SqoopClient {
     MConnector connectorForToLink = getConnector(toLink.getConnectorName());
 
     return new MJob(
-      connectorForFromLink.getPersistenceId(),
-      connectorForToLink.getPersistenceId(),
+      connectorForFromLink.getUniqueName(),
+      connectorForToLink.getUniqueName(),
       fromLink.getPersistenceId(),
       toLink.getPersistenceId(),
       connectorForFromLink.getFromConfig().clone(false),

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/common/src/main/java/org/apache/sqoop/json/JobBean.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/json/JobBean.java b/common/src/main/java/org/apache/sqoop/json/JobBean.java
index b703987..2a59c25 100644
--- a/common/src/main/java/org/apache/sqoop/json/JobBean.java
+++ b/common/src/main/java/org/apache/sqoop/json/JobBean.java
@@ -50,8 +50,8 @@ public class JobBean implements JsonBean {
 
   static final String FROM_LINK_ID = "from-link-id";
   static final String TO_LINK_ID = "to-link-id";
-  static final String FROM_CONNECTOR_ID = "from-connector-id";
-  static final String TO_CONNECTOR_ID = "to-connector-id";
+  static final String FROM_CONNECTOR_NAME = "from-connector-name";
+  static final String TO_CONNECTOR_NAME = "to-connector-name";
   static final String FROM_CONFIG_VALUES = "from-config-values";
   static final String TO_CONFIG_VALUES = "to-config-values";
   static final String DRIVER_CONFIG_VALUES = "driver-config-values";
@@ -61,7 +61,7 @@ public class JobBean implements JsonBean {
   private List<MJob> jobs;
 
   // Optional
-  private Map<Long, ResourceBundle> connectorConfigBundles;
+  private Map<String, ResourceBundle> connectorConfigBundles;
   private ResourceBundle driverConfigBundle;
 
   // For "extract"
@@ -78,27 +78,27 @@ public class JobBean implements JsonBean {
 
   // For "restore"
   public JobBean() {
-    connectorConfigBundles = new HashMap<Long, ResourceBundle>();
+    connectorConfigBundles = new HashMap<String, ResourceBundle>();
   }
 
   public void setDriverConfigBundle(ResourceBundle driverConfigBundle) {
     this.driverConfigBundle = driverConfigBundle;
   }
 
-  public void addConnectorConfigBundle(Long id, ResourceBundle connectorConfigBundle) {
-    connectorConfigBundles.put(id, connectorConfigBundle);
+  public void addConnectorConfigBundle(String connectorName, ResourceBundle connectorConfigBundle) {
+    connectorConfigBundles.put(connectorName, connectorConfigBundle);
   }
 
-  public boolean hasConnectorConfigBundle(Long id) {
-    return connectorConfigBundles.containsKey(id);
+  public boolean hasConnectorConfigBundle(String connectorName) {
+    return connectorConfigBundles.containsKey(connectorName);
   }
 
   public List<MJob> getJobs() {
     return jobs;
   }
 
-  public ResourceBundle getConnectorConfigBundle(Long id) {
-    return connectorConfigBundles.get(id);
+  public ResourceBundle getConnectorConfigBundle(String connectorName) {
+    return connectorConfigBundles.get(connectorName);
   }
 
   public ResourceBundle getDriverConfigBundle() {
@@ -134,8 +134,8 @@ public class JobBean implements JsonBean {
     object.put(UPDATE_DATE, job.getLastUpdateDate().getTime());
     // job link associated connectors
     // TODO(SQOOP-1634): fix not to require the connectorIds in the post data
-    object.put(FROM_CONNECTOR_ID, job.getFromConnectorId());
-    object.put(TO_CONNECTOR_ID, job.getToConnectorId());
+    object.put(FROM_CONNECTOR_NAME, job.getFromConnectorName());
+    object.put(TO_CONNECTOR_NAME, job.getToConnectorName());
     // job associated links
     object.put(FROM_LINK_ID, job.getFromLinkId());
     object.put(TO_LINK_ID, job.getToLinkId());
@@ -168,8 +168,8 @@ public class JobBean implements JsonBean {
 
   private MJob restoreJob(Object obj) {
     JSONObject object = (JSONObject) obj;
-    long fromConnectorId = JSONUtils.getLong(object, FROM_CONNECTOR_ID);
-    long toConnectorId = JSONUtils.getLong(object, TO_CONNECTOR_ID);
+    String fromConnectorName = JSONUtils.getString(object, FROM_CONNECTOR_NAME);
+    String toConnectorName = JSONUtils.getString(object, TO_CONNECTOR_NAME);
     long fromConnectionId = JSONUtils.getLong(object, FROM_LINK_ID);
     long toConnectionId = JSONUtils.getLong(object, TO_LINK_ID);
     JSONObject fromConfigJson = JSONUtils.getJSONObject(object, FROM_CONFIG_VALUES);
@@ -186,8 +186,8 @@ public class JobBean implements JsonBean {
     List<MValidator> driverValidators = restoreValidator(JSONUtils.getJSONArray(driverConfigJson, ConfigInputConstants.CONFIG_VALIDATORS));
 
     MJob job = new MJob(
-      fromConnectorId,
-      toConnectorId,
+      fromConnectorName,
+      toConnectorName,
       fromConnectionId,
       toConnectionId,
       new MFromConfig(fromConfigs, fromValidators),

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/common/src/main/java/org/apache/sqoop/model/MJob.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/sqoop/model/MJob.java b/common/src/main/java/org/apache/sqoop/model/MJob.java
index 4be020a..59bc646 100644
--- a/common/src/main/java/org/apache/sqoop/model/MJob.java
+++ b/common/src/main/java/org/apache/sqoop/model/MJob.java
@@ -35,8 +35,8 @@ public class MJob extends MAccountableEntity implements MClonable {
    * dependency through link object, but having this dependency explicitly
    * carried along helps with not having to make the DB call everytime
    */
-  private final long fromConnectorId;
-  private final long toConnectorId;
+  private final String fromConnectorName;
+  private final String toConnectorName;
   private final long fromLinkId;
   private final long toLinkId;
 
@@ -55,15 +55,15 @@ public class MJob extends MAccountableEntity implements MClonable {
    * @param toConfig TO job config
    * @param driverConfig driver config
    */
-  public MJob(long fromConnectorId,
-              long toConnectorId,
+  public MJob(String fromConnectorName,
+              String toConnectorName,
               long fromLinkId,
               long toLinkId,
               MFromConfig fromConfig,
               MToConfig toConfig,
               MDriverConfig driverConfig) {
-    this.fromConnectorId = fromConnectorId;
-    this.toConnectorId = toConnectorId;
+    this.fromConnectorName = fromConnectorName;
+    this.toConnectorName = toConnectorName;
     this.fromLinkId = fromLinkId;
     this.toLinkId = toLinkId;
     this.fromConfig = fromConfig;
@@ -97,8 +97,8 @@ public class MJob extends MAccountableEntity implements MClonable {
   public MJob(MJob other, MFromConfig fromConfig, MToConfig toConfig, MDriverConfig driverConfig) {
     super(other);
 
-    this.fromConnectorId = other.getFromConnectorId();
-    this.toConnectorId = other.getToConnectorId();
+    this.fromConnectorName = other.getFromConnectorName();
+    this.toConnectorName = other.getToConnectorName();
     this.fromLinkId = other.getFromLinkId();
     this.toLinkId = other.getToLinkId();
     this.fromConfig = fromConfig;
@@ -125,12 +125,12 @@ public class MJob extends MAccountableEntity implements MClonable {
     return toLinkId;
   }
 
-  public long getFromConnectorId() {
-    return fromConnectorId;
+  public String getFromConnectorName() {
+    return fromConnectorName;
   }
 
-  public long getToConnectorId() {
-    return toConnectorId;
+  public String getToConnectorName() {
+    return toConnectorName;
   }
 
   public MFromConfig getFromJobConfig() {
@@ -151,8 +151,8 @@ public class MJob extends MAccountableEntity implements MClonable {
       return new MJob(this);
     } else {
       return new MJob(
-          getFromConnectorId(),
-          getToConnectorId(),
+          getFromConnectorName(),
+          getToConnectorName(),
           getFromLinkId(),
           getToLinkId(),
           getFromJobConfig().clone(false),
@@ -172,8 +172,8 @@ public class MJob extends MAccountableEntity implements MClonable {
     }
 
     MJob job = (MJob)object;
-    return (job.getFromConnectorId() == this.getFromConnectorId())
-        && (job.getToConnectorId() == this.getToConnectorId())
+    return (job.getFromConnectorName().equals(this.getFromConnectorName()))
+        && (job.getToConnectorName().equals(this.getToConnectorName()))
         && (job.getFromLinkId() == this.getFromLinkId())
         && (job.getToLinkId() == this.getToLinkId())
         && (job.getPersistenceId() == this.getPersistenceId())
@@ -184,8 +184,8 @@ public class MJob extends MAccountableEntity implements MClonable {
 
   @Override
   public int hashCode() {
-    int result = (int) (fromConnectorId ^ (fromConnectorId >>> 32));
-    result = 31 * result + (int) (toConnectorId ^ (toConnectorId >>> 32));
+    int result = fromConnectorName != null ? fromConnectorName.hashCode() : 0;
+    result = 31 * result + (toConnectorName != null ? toConnectorName.hashCode() : 0);
     result = 31 * result + (int) (fromLinkId ^ (fromLinkId >>> 32));
     result = 31 * result + (int) (toLinkId ^ (toLinkId >>> 32));
     result = 31 * result + (fromConfig != null ? fromConfig.hashCode() : 0);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/common/src/test/java/org/apache/sqoop/json/TestJobBean.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/json/TestJobBean.java b/common/src/test/java/org/apache/sqoop/json/TestJobBean.java
index 5b5aa91..0e8933e 100644
--- a/common/src/test/java/org/apache/sqoop/json/TestJobBean.java
+++ b/common/src/test/java/org/apache/sqoop/json/TestJobBean.java
@@ -63,8 +63,8 @@ public class TestJobBean {
 
     assertEquals(target.getFromLinkId(), 1);
     assertEquals(target.getToLinkId(), 2);
-    assertEquals(target.getFromConnectorId(), 1);
-    assertEquals(target.getToConnectorId(), 2);
+    assertEquals(target.getFromConnectorName(), "from_ahoj");
+    assertEquals(target.getToConnectorName(), "to_ahoj");
     assertEquals(created, target.getCreationDate());
     assertEquals(updated, target.getLastUpdateDate());
     assertEquals(false, target.getEnabled());

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/common/src/test/java/org/apache/sqoop/json/TestJobsBean.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/json/TestJobsBean.java b/common/src/test/java/org/apache/sqoop/json/TestJobsBean.java
index 2a9570f..2849497 100644
--- a/common/src/test/java/org/apache/sqoop/json/TestJobsBean.java
+++ b/common/src/test/java/org/apache/sqoop/json/TestJobsBean.java
@@ -74,8 +74,8 @@ public class TestJobsBean {
 
     assertEquals(retrievedJob1.getFromLinkId(), 1);
     assertEquals(retrievedJob1.getToLinkId(), 2);
-    assertEquals(retrievedJob1.getFromConnectorId(), 1);
-    assertEquals(retrievedJob1.getToConnectorId(), 2);
+    assertEquals(retrievedJob1.getFromConnectorName(), "from_ahoj");
+    assertEquals(retrievedJob1.getToConnectorName(), "to_ahoj");
     assertEquals(created, retrievedJob1.getCreationDate());
     assertEquals(updated, retrievedJob1.getLastUpdateDate());
     assertEquals(false, retrievedJob1.getEnabled());

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/common/src/test/java/org/apache/sqoop/json/util/BeanTestUtil.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/json/util/BeanTestUtil.java b/common/src/test/java/org/apache/sqoop/json/util/BeanTestUtil.java
index 13774c8..90435c6 100644
--- a/common/src/test/java/org/apache/sqoop/json/util/BeanTestUtil.java
+++ b/common/src/test/java/org/apache/sqoop/json/util/BeanTestUtil.java
@@ -77,8 +77,10 @@ public class BeanTestUtil {
   }
 
   public static MJob getJob(String connectorName) {
-    return new MJob(1, 2, 1, 2, getConnector(1L, connectorName).getFromConfig(), getConnector(1L, connectorName)
-        .getToConfig(), ConfigTestUtil.getDriverConfig());
+    String fromConnectorName = "from_" + connectorName;
+    String toConnectorName = "to_" + connectorName;
+    return new MJob(fromConnectorName, toConnectorName, 1, 2, getConnector(1L, fromConnectorName).getFromConfig(),
+            getConnector(2L, toConnectorName).getToConfig(), ConfigTestUtil.getDriverConfig());
   }
 
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/common/src/test/java/org/apache/sqoop/model/TestMJob.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/sqoop/model/TestMJob.java b/common/src/test/java/org/apache/sqoop/model/TestMJob.java
index 17388cd..7d1c2c1 100644
--- a/common/src/test/java/org/apache/sqoop/model/TestMJob.java
+++ b/common/src/test/java/org/apache/sqoop/model/TestMJob.java
@@ -36,8 +36,8 @@ public class TestMJob {
   public void testInitialization() {
     // Test default constructor
     MJob job = job();
-    assertEquals(123l, job.getFromConnectorId());
-    assertEquals(456l, job.getToConnectorId());
+    assertEquals("fromConnectorName", job.getFromConnectorName());
+    assertEquals("toConnectorName", job.getToConnectorName());
     assertEquals("Buffy", job.getCreationUser());
     assertEquals("Vampire", job.getName());
     assertEquals(fromConfig(), job.getFromJobConfig());
@@ -46,8 +46,8 @@ public class TestMJob {
 
     // Test copy constructor
     MJob copy = new MJob(job);
-    assertEquals(123l, copy.getFromConnectorId());
-    assertEquals(456l, copy.getToConnectorId());
+    assertEquals("fromConnectorName", copy.getFromConnectorName());
+    assertEquals("toConnectorName", copy.getToConnectorName());
     assertEquals("Buffy", copy.getCreationUser());
     assertEquals("Vampire", copy.getName());
     assertEquals(fromConfig(), copy.getFromJobConfig());
@@ -56,8 +56,8 @@ public class TestMJob {
 
     // Test constructor for metadata upgrade (the order of configs is different)
     MJob upgradeCopy = new MJob(job, fromConfig(), toConfig(), driverConfig());
-    assertEquals(123l, upgradeCopy.getFromConnectorId());
-    assertEquals(456l, upgradeCopy.getToConnectorId());
+    assertEquals("fromConnectorName", upgradeCopy.getFromConnectorName());
+    assertEquals("toConnectorName", upgradeCopy.getToConnectorName());
     assertEquals("Buffy", upgradeCopy.getCreationUser());
     assertEquals("Vampire", upgradeCopy.getName());
     assertEquals(fromConfig(), upgradeCopy.getFromJobConfig());
@@ -98,7 +98,7 @@ public class TestMJob {
         .getConfig("CONFIGFROMNAME").getInput("STRING-INPUT").getValue());  }
 
   private MJob job() {
-    MJob job = new MJob(123l, 456l, 1L, 2L, fromConfig(), toConfig(), driverConfig());
+    MJob job = new MJob("fromConnectorName", "toConnectorName", 1L, 2L, fromConfig(), toConfig(), driverConfig());
     job.setName("Vampire");
     job.setCreationUser("Buffy");
     return job;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/core/src/main/java/org/apache/sqoop/driver/JobManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/driver/JobManager.java b/core/src/main/java/org/apache/sqoop/driver/JobManager.java
index 35c4451..021aafe 100644
--- a/core/src/main/java/org/apache/sqoop/driver/JobManager.java
+++ b/core/src/main/java/org/apache/sqoop/driver/JobManager.java
@@ -496,6 +496,7 @@ public class JobManager implements Reconfigurable {
     return link;
   }
 
+  // TODO: this method should be removed when MSubmission link job with jobName
   MJob getJob(long jobId) {
     MJob job = RepositoryManager.getInstance().getRepository().findJob(jobId);
     if (job == null) {
@@ -508,6 +509,18 @@ public class JobManager implements Reconfigurable {
     return job;
   }
 
+  MJob getJob(String jobName) {
+    MJob job = RepositoryManager.getInstance().getRepository().findJob(jobName);
+    if (job == null) {
+      throw new SqoopException(DriverError.DRIVER_0004, "Unknown job name: " + jobName);
+    }
+
+    if (!job.getEnabled()) {
+      throw new SqoopException(DriverError.DRIVER_0009, "Job: " + jobName);
+    }
+    return job;
+  }
+
   @SuppressWarnings({ "unchecked", "rawtypes" })
   private void initializeConnector(JobRequest jobRequest, Direction direction, Initializer initializer, InitializerContext initializerContext) {
     // Initialize submission from the connector perspective
@@ -569,8 +582,8 @@ public class JobManager implements Reconfigurable {
     try {
       MJob job = getJob(submission.getJobId());
 
-      SqoopConnector fromConnector = getSqoopConnector(job.getFromConnectorId());
-      SqoopConnector toConnector = getSqoopConnector(job.getToConnectorId());
+      SqoopConnector fromConnector = getSqoopConnector(job.getFromConnectorName());
+      SqoopConnector toConnector = getSqoopConnector(job.getToConnectorName());
 
       MLink fromConnection = getLink(job.getFromLinkId());
       MLink toConnection = getLink(job.getToLinkId());

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/core/src/main/java/org/apache/sqoop/repository/Repository.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/sqoop/repository/Repository.java b/core/src/main/java/org/apache/sqoop/repository/Repository.java
index 9396ef6..975e2aa 100644
--- a/core/src/main/java/org/apache/sqoop/repository/Repository.java
+++ b/core/src/main/java/org/apache/sqoop/repository/Repository.java
@@ -447,7 +447,7 @@ public abstract class Repository {
   public final void upgradeConnector(MConnector oldConnector, MConnector newConnector) {
     LOG.info("Upgrading connector: " + oldConnector.getUniqueName());
     long connectorId = oldConnector.getPersistenceId();
-    String connectorName = oldConnector.getUniqueName();
+    String oldConnectorName = oldConnector.getUniqueName();
     String oldVersion = oldConnector.getVersion();
     newConnector.setPersistenceId(connectorId);
 
@@ -460,7 +460,7 @@ public abstract class Repository {
       // 1. Get an upgrader for the connector
       ConnectorConfigurableUpgrader upgrader = connector.getConfigurableUpgrader(oldVersion);
       // 2. Get all links associated with the connector.
-      List<MLink> existingLinksByConnector = findLinksForConnectorUpgrade(connectorName);
+      List<MLink> existingLinksByConnector = findLinksForConnectorUpgrade(oldConnectorName);
       // 3. Get all jobs associated with the connector.
       List<MJob> existingJobsByConnector = findJobsForConnectorUpgrade(connectorId);
       // -- BEGIN TXN --
@@ -476,7 +476,7 @@ public abstract class Repository {
       // dont always rely on the repository implementation to return empty list for links
       if (existingLinksByConnector != null) {
         for (MLink link : existingLinksByConnector) {
-          LOG.info(" Link upgrade for link:" + link.getName() + " for connector:" + connectorName);
+          LOG.info(" Link upgrade for link:" + link.getName() + " for connector:" + oldConnectorName);
           // Make a new copy of the configs
           MConfigList linkConfig = newConnector.getLinkConfig().clone(false);
           MLinkConfig newLinkConfig = new MLinkConfig(linkConfig.getConfigs(), linkConfig.getCloneOfValidators());
@@ -496,7 +496,7 @@ public abstract class Repository {
             // and stop the bootup of Sqoop server
             logInvalidModelObject("link", newlink, validationResult);
             upgradeSuccessful = false;
-            LOG.info(" LINK config upgrade FAILED for link: " + link.getName() + " for connector:" + connectorName);
+            LOG.info(" LINK config upgrade FAILED for link: " + link.getName() + " for connector:" + oldConnectorName);
           }
         }
       }
@@ -506,14 +506,15 @@ public abstract class Repository {
         for (MJob job : existingJobsByConnector) {
           // every job has 2 parts, the FROM and the TO links and their
           // corresponding connectors.
-          LOG.info(" Job upgrade for job:" + job.getName()+ " for connector:" + connectorName);
+          LOG.info(" Job upgrade for job:" + job.getName()+ " for connector:" + oldConnectorName);
 
           SupportedDirections supportedDirections = newConnector.getSupportedDirections();
 
+          // compare the old connector name with job's connector name
           if (supportedDirections.isDirectionSupported(Direction.FROM)
-              && job.getFromConnectorId() == newConnector.getPersistenceId()
+              && job.getFromConnectorName().equals(oldConnectorName)
               && supportedDirections.isDirectionSupported(Direction.TO)
-              && job.getToConnectorId() == newConnector.getPersistenceId()) {
+              && job.getToConnectorName().equals(oldConnectorName)) {
             // Upgrade both configs
             MFromConfig newFromConfig = new MFromConfig(newConnector.getFromConfig().clone(false).getConfigs(), newConnector.getFromConfig().getCloneOfValidators());
             MFromConfig oldFromConfig = job.getFromJobConfig();
@@ -528,16 +529,15 @@ public abstract class Repository {
                 newJob.getFromJobConfig().getConfigs(),
                 connector.getJobConfigurationClass(Direction.FROM)
             );
-
             if (validationResult.getStatus().canProceed()) {
               updateJob(newJob, tx);
             } else {
               logInvalidModelObject("job", newJob, validationResult);
               upgradeSuccessful = false;
-              LOG.error(" JOB config upgrade FAILED for job: " + job.getName() + " for connector:" + connectorName);
+              LOG.error(" JOB config upgrade FAILED for job: " + job.getName() + " for connector:" + oldConnectorName);
             }
           } else if (supportedDirections.isDirectionSupported(Direction.FROM)
-              && job.getFromConnectorId() == newConnector.getPersistenceId()) {
+              && job.getFromConnectorName().equals(oldConnectorName)) {
             MFromConfig newFromConfig = new MFromConfig(newConnector.getFromConfig().clone(false).getConfigs(), newConnector.getFromConfig().getCloneOfValidators());
             MFromConfig oldFromConfig = job.getFromJobConfig();
             upgrader.upgradeFromJobConfig(oldFromConfig, newFromConfig);
@@ -556,10 +556,10 @@ public abstract class Repository {
             } else {
               logInvalidModelObject("job", newJob, validationResult);
               upgradeSuccessful = false;
-              LOG.error(" FROM JOB config upgrade FAILED for job: " + job.getName() + " for connector:" + connectorName);
+              LOG.error(" FROM JOB config upgrade FAILED for job: " + job.getName() + " for connector:" + oldConnectorName);
             }
           } else if (supportedDirections.isDirectionSupported(Direction.TO)
-              && job.getToConnectorId() == newConnector.getPersistenceId()) {
+              && job.getToConnectorName().equals(oldConnectorName)) {
             MToConfig oldToConfig = job.getToJobConfig();
             MToConfig newToConfig = new MToConfig(newConnector.getToConfig().clone(false).getConfigs(), newConnector.getToConfig().getCloneOfValidators());
             upgrader.upgradeToJobConfig(oldToConfig, newToConfig);
@@ -578,7 +578,7 @@ public abstract class Repository {
             } else {
               logInvalidModelObject("job", newJob, validationResult);
               upgradeSuccessful = false;
-              LOG.error(" TO JOB config upgrade FAILED for job: " + job.getName() + " for connector:" + connectorName);
+              LOG.error(" TO JOB config upgrade FAILED for job: " + job.getName() + " for connector:" + oldConnectorName);
             }
           }
         }
@@ -587,7 +587,7 @@ public abstract class Repository {
       if (upgradeSuccessful) {
         tx.commit();
       } else {
-        throw new SqoopException(RepositoryError.JDBCREPO_0027, " for connector:" + connectorName);
+        throw new SqoopException(RepositoryError.JDBCREPO_0027, " for connector:" + oldConnectorName);
       }
     } catch (SqoopException ex) {
       if (tx != null) {
@@ -603,7 +603,7 @@ public abstract class Repository {
       if (tx != null) {
         tx.close();
       }
-      LOG.info("Connector upgrade finished for: " + connectorName);
+      LOG.info("Connector upgrade finished for: " + oldConnectorName);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/core/src/test/java/org/apache/sqoop/driver/TestJobManager.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/sqoop/driver/TestJobManager.java b/core/src/test/java/org/apache/sqoop/driver/TestJobManager.java
index 3b200e9..ef4d359 100644
--- a/core/src/test/java/org/apache/sqoop/driver/TestJobManager.java
+++ b/core/src/test/java/org/apache/sqoop/driver/TestJobManager.java
@@ -141,19 +141,19 @@ public class TestJobManager {
 
   @Test
   public void testGetJob() {
-    MJob testJob = job(123l, 456l);
+    MJob testJob = job("jobName", "fromConnectorName", "toConnectorName");
     testJob.setEnabled(true);
     MJob mJobSpy = org.mockito.Mockito.spy(testJob);
     when(repositoryManagerMock.getRepository()).thenReturn(jdbcRepoMock);
-    when(jdbcRepoMock.findJob(123l)).thenReturn(mJobSpy);
-    assertEquals(jobManager.getJob(123l), mJobSpy);
+    when(jdbcRepoMock.findJob("jobName")).thenReturn(mJobSpy);
+    assertEquals(jobManager.getJob("jobName"), mJobSpy);
     verify(repositoryManagerMock, times(1)).getRepository();
-    verify(jdbcRepoMock, times(1)).findJob(123l);
+    verify(jdbcRepoMock, times(1)).findJob("jobName");
   }
 
   @Test
   public void testDisabledJob() {
-    MJob testJob = job(123l, 456l);
+    MJob testJob = job("jobName", "fromConnectorName", "toConnectorName");
     testJob.setEnabled(false);
     testJob.setPersistenceId(1111);
     SqoopException exception = new SqoopException(DriverError.DRIVER_0009, "Job: "
@@ -161,13 +161,13 @@ public class TestJobManager {
 
     MJob mJobSpy = org.mockito.Mockito.spy(testJob);
     when(repositoryManagerMock.getRepository()).thenReturn(jdbcRepoMock);
-    when(jdbcRepoMock.findJob(123l)).thenReturn(mJobSpy);
+    when(jdbcRepoMock.findJob("jobName")).thenReturn(mJobSpy);
     try {
-      jobManager.getJob(123l);
+      jobManager.getJob("jobName");
     } catch (SqoopException ex) {
       assertEquals(ex.getMessage(), exception.getMessage());
       verify(repositoryManagerMock, times(1)).getRepository();
-      verify(jdbcRepoMock, times(1)).findJob(123l);
+      verify(jdbcRepoMock, times(1)).findJob("jobName");
     }
   }
 
@@ -187,9 +187,9 @@ public class TestJobManager {
     }
   }
 
-  private MJob job(long fromId, long toId) {
-    MJob job = new MJob(fromId, toId, 1L, 2L, null, null, null);
-    job.setName("Vampire");
+  private MJob job(String jobName, String fromConnectorName, String toConnectorName) {
+    MJob job = new MJob(fromConnectorName, toConnectorName, 1L, 2L, null, null, null);
+    job.setName(jobName);
     job.setCreationUser("Buffy");
     return job;
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java b/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
index a665fd1..04c88c6 100644
--- a/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
+++ b/core/src/test/java/org/apache/sqoop/repository/TestJdbcRepository.java
@@ -229,7 +229,7 @@ public class TestJdbcRepository {
     // prepare the links and jobs
     // the connector Id for both are the same
     List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 2));
+    List<MJob> jobList = jobs(job(1, "JA", "A1", "A1", 1, 1), job(2, "JB", "A1", "A1", 2, 2));
 
     // mock necessary methods for upgradeConnector() procedure
     doReturn(linkList).when(repoSpy).findLinksForConnectorUpgrade(anyString());
@@ -277,7 +277,7 @@ public class TestJdbcRepository {
 
     when(driverMock.getConfigurableUpgrader(DriverBean.CURRENT_DRIVER_VERSION)).thenReturn(driverUpgraderMock);
     when(driverMock.getDriverJobConfigurationClass()).thenReturn(ValidConfiguration.class);
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
+    List<MJob> jobList = jobs(job(1, "JA", "fromConnectorName", "toConnectorName", 1, 1), job(2, "JB", "fromConnectorName", "toConnectorName", 2, 1));
 
     doReturn(jobList).when(repoSpy).findJobs();
     doNothing().when(repoSpy).updateLink(any(MLink.class), any(RepositoryTransaction.class));
@@ -315,7 +315,7 @@ public class TestJdbcRepository {
 
     when(driverMock.getConfigurableUpgrader(DriverBean.CURRENT_DRIVER_VERSION)).thenReturn(driverUpgraderMock);
     when(driverMock.getDriverJobConfigurationClass()).thenReturn(InvalidConfiguration.class);
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
+    List<MJob> jobList = jobs(job(1, "JA", "fromConnectorName", "toConnectorName", 1, 1), job(2, "JB", "fromConnectorName", "toConnectorName", 2, 1));
 
     doReturn(jobList).when(repoSpy).findJobs();
     doNothing().when(repoSpy).updateJob(any(MJob.class), any(RepositoryTransaction.class));
@@ -425,7 +425,7 @@ public class TestJdbcRepository {
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
     List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
+    List<MJob> jobList = jobs(job(1, "JA", "fromConnectorName", "toConnectorName", 1, 1), job(2, "JB", "fromConnectorName", "toConnectorName", 2, 1));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
     doReturn(jobList).when(repoHandlerMock).findJobsForConnectorUpgrade
       (anyLong(), any(Connection.class));
@@ -463,7 +463,7 @@ public class TestJdbcRepository {
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
     List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
+    List<MJob> jobList = jobs(job(1, "JA", "fromConnectorName", "toConnectorName", 1, 1), job(2, "JB", "fromConnectorName", "toConnectorName", 2, 1));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
     doReturn(jobList).when(repoHandlerMock).findJobsForConnectorUpgrade(anyLong(), any(Connection.class));
     doNothing().when(repoHandlerMock).deleteJobInputs(anyString(), any(Connection.class));
@@ -501,7 +501,7 @@ public class TestJdbcRepository {
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
     List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
+    List<MJob> jobList = jobs(job(1, "JA", "fromConnectorName", "toConnectorName", 1, 1), job(2, "JB", "fromConnectorName", "toConnectorName", 2, 1));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
     doReturn(jobList).when(repoHandlerMock).findJobsForConnectorUpgrade(anyLong(), any(Connection.class));
     doNothing().when(repoHandlerMock).deleteJobInputs(anyString(), any(Connection.class));
@@ -543,7 +543,7 @@ public class TestJdbcRepository {
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
     List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
+    List<MJob> jobList = jobs(job(1, "JA", "fromConnectorName", "toConnectorName", 1, 1), job(2, "JB", "fromConnectorName", "toConnectorName", 2, 1));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
     doReturn(jobList).when(repoHandlerMock).findJobsForConnectorUpgrade(anyLong(), any(Connection.class));
     doNothing().when(repoHandlerMock).deleteJobInputs(anyString(), any(Connection.class));
@@ -589,7 +589,7 @@ public class TestJdbcRepository {
     when(connectorMgrMock.getSqoopConnector(anyString())).thenReturn(sqconnector);
 
     List<MLink> linkList = links(link(1, "LA", oldConnector.getUniqueName()), link(2, "LB", oldConnector.getUniqueName()));;
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
+    List<MJob> jobList = jobs(job(1, "JA", "A1", "A1", 1, 1), job(2, "JB", "A1", "A1", 2, 1));
     doReturn(linkList).when(repoHandlerMock).findLinksForConnectorUpgrade(anyString(), any(Connection.class));
     doReturn(jobList).when(repoHandlerMock).findJobsForConnectorUpgrade(anyLong(), any(Connection.class));
     doNothing().when(repoHandlerMock).deleteJobInputs(anyString(), any(Connection.class));
@@ -659,7 +659,7 @@ public class TestJdbcRepository {
 
     when(driverMock.getConfigurableUpgrader(DriverBean.CURRENT_DRIVER_VERSION)).thenReturn(driverUpgraderMock);
 
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
+    List<MJob> jobList = jobs(job(1, "JA", "fromConnectorName", "toConnectorName", 1, 1), job(2, "JB", "fromConnectorName", "toConnectorName", 2, 1));
     doReturn(jobList).when(repoHandlerMock).findJobs(any(Connection.class));
 
     SqoopException exception = new SqoopException(RepositoryError.JDBCREPO_0000,
@@ -689,7 +689,7 @@ public class TestJdbcRepository {
 
     when(driverMock.getConfigurableUpgrader(DriverBean.CURRENT_DRIVER_VERSION)).thenReturn(driverUpgraderMock);
 
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
+    List<MJob> jobList = jobs(job(1, "JA", "fromConnectorName", "toConnectorName", 1, 1), job(2, "JB", "fromConnectorName", "toConnectorName", 2, 1));
     doReturn(jobList).when(repoHandlerMock).findJobs(any(Connection.class));
     doNothing().when(repoHandlerMock).deleteJobInputs(anyString(), any(Connection.class));
     doNothing().when(repoHandlerMock).deleteLinkInputs(anyString(), any(Connection.class));
@@ -723,7 +723,7 @@ public class TestJdbcRepository {
 
     when(driverMock.getConfigurableUpgrader(DriverBean.CURRENT_DRIVER_VERSION)).thenReturn(driverUpgraderMock);
     when(driverMock.getDriverJobConfigurationClass()).thenReturn(ValidConfiguration.class);
-    List<MJob> jobList = jobs(job(1, "JA", 1, 1, 1, 1), job(2, "JB", 1, 1, 2, 1));
+    List<MJob> jobList = jobs(job(1, "JA", "fromConnectorName", "toConnectorName", 1, 1), job(2, "JB", "fromConnectorName", "toConnectorName", 2, 1));
     doReturn(jobList).when(repoHandlerMock).findJobs(any(Connection.class));
     doNothing().when(repoHandlerMock).deleteJobInputs(anyString(), any(Connection.class));
     doNothing().when(repoHandlerMock).upgradeDriverAndConfigs(any(MDriver.class), any(Connection.class));
@@ -782,8 +782,8 @@ public class TestJdbcRepository {
     return link;
   }
 
-  private MJob job(long id, String jobName, long fromConnectorId, long toConnectorId, long fromLinkId, long toLinkId) {
-    MJob job = new MJob(fromConnectorId, toConnectorId, fromLinkId, toLinkId,
+  private MJob job(long id, String jobName, String fromConnectorName, String toConnectorName, long fromLinkId, long toLinkId) {
+    MJob job = new MJob(fromConnectorName, toConnectorName, fromLinkId, toLinkId,
         new MFromConfig(new LinkedList<MConfig>(), new LinkedList<MValidator>()),
         new MToConfig(new LinkedList<MConfig>(), new LinkedList<MValidator>()),
         new MDriverConfig(new LinkedList<MConfig>(), new LinkedList<MValidator>()));

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/repository/repository-common/src/main/java/org/apache/sqoop/repository/common/CommonRepositoryHandler.java
----------------------------------------------------------------------
diff --git a/repository/repository-common/src/main/java/org/apache/sqoop/repository/common/CommonRepositoryHandler.java b/repository/repository-common/src/main/java/org/apache/sqoop/repository/common/CommonRepositoryHandler.java
index 586ef12..7db8718 100644
--- a/repository/repository-common/src/main/java/org/apache/sqoop/repository/common/CommonRepositoryHandler.java
+++ b/repository/repository-common/src/main/java/org/apache/sqoop/repository/common/CommonRepositoryHandler.java
@@ -1539,7 +1539,6 @@ public abstract class CommonRepositoryHandler extends JdbcRepositoryHandler {
             connectorConfigInputStatement, 2, conn);
 
         MLink link = new MLink(connectorName, new MLinkConfig(connectorLinkConfig, Collections.EMPTY_LIST));
-
         link.setPersistenceId(id);
         link.setName(name);
         link.setCreationUser(creationUser);
@@ -1581,7 +1580,6 @@ public abstract class CommonRepositoryHandler extends JdbcRepositoryHandler {
         loadInputsForConfigs(connectorLinkConfig, configStmt, inputStmt);
 
         MLink link = new MLink(connectorName, connectorLinkConfig);
-
         link.setPersistenceId(id);
         link.setName(name);
         link.setCreationUser(creationUser);
@@ -1624,6 +1622,8 @@ public abstract class CommonRepositoryHandler extends JdbcRepositoryHandler {
         Date creationDate = rsJob.getTimestamp(9);
         String updateBy = rsJob.getString(10);
         Date lastUpdateDate = rsJob.getTimestamp(11);
+        String fromConnectorName = rsJob.getString(12);
+        String toConnectorName = rsJob.getString(13);
 
         fromConfigFetchStmt.setLong(1, fromConnectorId);
         toConfigFetchStmt.setLong(1,toConnectorId);
@@ -1652,7 +1652,7 @@ public abstract class CommonRepositoryHandler extends JdbcRepositoryHandler {
         loadDriverConfigs(driverConfig, driverConfigfetchStmt, jobInputFetchStmt, 2, conn);
 
         MJob job = new MJob(
-            fromConnectorId, toConnectorId,
+            fromConnectorName, toConnectorName,
             fromLinkId, toLinkId,
             new MFromConfig(fromConnectorFromJobConfig, Collections.EMPTY_LIST),
             new MToConfig(toConnectorToJobConfig, Collections.EMPTY_LIST),
@@ -1727,7 +1727,7 @@ public abstract class CommonRepositoryHandler extends JdbcRepositoryHandler {
         loadDriverConfigs(driverConfig, driverConfigfetchStmt, jobInputFetchStmt, 2, conn);
 
         MJob job = new MJob(
-          fromConnectorId, toConnectorId,
+          fromConnectorName, toConnectorName,
           fromLinkId, toLinkId,
           new MFromConfig(mFromConfig.getConfigs(), Collections.EMPTY_LIST),
           new MToConfig(mToConfig.getConfigs(), Collections.EMPTY_LIST),

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
----------------------------------------------------------------------
diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
index a9e1881..acacaa9 100644
--- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
+++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestJobHandling.java
@@ -343,7 +343,7 @@ public class TestJobHandling extends DerbyTestCase {
   }
 
   public MJob getJob() {
-    return new MJob(1, 1, 1, 1, handler.findConnector("A", derbyConnection).getFromConfig(),
+    return new MJob("A", "A", 1, 1, handler.findConnector("A", derbyConnection).getFromConfig(),
         handler.findConnector("A", derbyConnection).getToConfig(), handler.findDriver(
             MDriver.DRIVER_NAME, derbyConnection).getDriverConfig());
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/repository/repository-mysql/src/test/java/org/apache/sqoop/integration/repository/mysql/MySqlTestCase.java
----------------------------------------------------------------------
diff --git a/repository/repository-mysql/src/test/java/org/apache/sqoop/integration/repository/mysql/MySqlTestCase.java b/repository/repository-mysql/src/test/java/org/apache/sqoop/integration/repository/mysql/MySqlTestCase.java
index 53e4da5..90fffae 100644
--- a/repository/repository-mysql/src/test/java/org/apache/sqoop/integration/repository/mysql/MySqlTestCase.java
+++ b/repository/repository-mysql/src/test/java/org/apache/sqoop/integration/repository/mysql/MySqlTestCase.java
@@ -105,8 +105,8 @@ abstract public class MySqlTestCase {
       MConnector connectorB, MLink linkA, MLink linkB) {
     MDriver driver = handler.findDriver(MDriver.DRIVER_NAME,
         provider.getConnection());
-    MJob job = new MJob(connectorA.getPersistenceId(),
-        connectorB.getPersistenceId(), linkA.getPersistenceId(),
+    MJob job = new MJob(connectorA.getUniqueName(),
+        connectorB.getUniqueName(), linkA.getPersistenceId(),
         linkB.getPersistenceId(), connectorA.getFromConfig(),
         connectorB.getToConfig(), driver.getDriverConfig());
     job.setName(name);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/repository/repository-postgresql/src/test/java/org/apache/sqoop/integration/repository/postgresql/PostgresqlTestCase.java
----------------------------------------------------------------------
diff --git a/repository/repository-postgresql/src/test/java/org/apache/sqoop/integration/repository/postgresql/PostgresqlTestCase.java b/repository/repository-postgresql/src/test/java/org/apache/sqoop/integration/repository/postgresql/PostgresqlTestCase.java
index 18e33fc..dae3760 100644
--- a/repository/repository-postgresql/src/test/java/org/apache/sqoop/integration/repository/postgresql/PostgresqlTestCase.java
+++ b/repository/repository-postgresql/src/test/java/org/apache/sqoop/integration/repository/postgresql/PostgresqlTestCase.java
@@ -92,8 +92,8 @@ abstract public class PostgresqlTestCase {
   protected MJob getJob(String name, MConnector connectorA, MConnector connectorB, MLink linkA, MLink linkB) {
     MDriver driver = handler.findDriver(MDriver.DRIVER_NAME, provider.getConnection());
     MJob job = new MJob(
-        connectorA.getPersistenceId(),
-        connectorB.getPersistenceId(),
+        connectorA.getUniqueName(),
+        connectorB.getUniqueName(),
         linkA.getPersistenceId(),
         linkB.getPersistenceId(),
         connectorA.getFromConfig(),

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/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 80f7681..ad67a23 100644
--- a/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java
+++ b/server/src/main/java/org/apache/sqoop/handler/JobRequestHandler.java
@@ -191,9 +191,9 @@ public class JobRequestHandler implements RequestHandler {
 
     // Verify that user is not trying to spoof us
     MFromConfig fromConfig = ConnectorManager.getInstance()
-        .getConnectorConfigurable(postedJob.getFromConnectorId()).getFromConfig();
+        .getConnectorConfigurable(postedJob.getFromConnectorName()).getFromConfig();
     MToConfig toConfig = ConnectorManager.getInstance()
-        .getConnectorConfigurable(postedJob.getToConnectorId()).getToConfig();
+        .getConnectorConfigurable(postedJob.getToConnectorName()).getToConfig();
     MDriverConfig driverConfig = Driver.getInstance().getDriver().getDriverConfig();
 
     if (!fromConfig.equals(postedJob.getFromJobConfig())
@@ -213,9 +213,9 @@ public class JobRequestHandler implements RequestHandler {
 
     // Corresponding connectors for this
     SqoopConnector fromConnector = ConnectorManager.getInstance().getSqoopConnector(
-        postedJob.getFromConnectorId());
+        postedJob.getFromConnectorName());
     SqoopConnector toConnector = ConnectorManager.getInstance().getSqoopConnector(
-        postedJob.getToConnectorId());
+        postedJob.getToConnectorName());
 
     if (!fromConnector.getSupportedDirections().contains(Direction.FROM)) {
       throw new SqoopException(ServerError.SERVER_0004, "Connector "
@@ -325,16 +325,17 @@ public class JobRequestHandler implements RequestHandler {
   private void addConnectorConfigBundle(JobBean bean, Locale locale) {
     // Add associated resources into the bean
     for (MJob job : bean.getJobs()) {
-      long fromConnectorId = job.getFromConnectorId();
-      long toConnectorId = job.getToConnectorId();
+      String fromConnectorName = job.getFromConnectorName();
+      String toConnectorName = job.getToConnectorName();
+
       // replace it only if it does not already exist
-      if (!bean.hasConnectorConfigBundle(fromConnectorId)) {
-        bean.addConnectorConfigBundle(fromConnectorId, ConnectorManager.getInstance()
-            .getResourceBundle(fromConnectorId, locale));
+      if (!bean.hasConnectorConfigBundle(fromConnectorName)) {
+        bean.addConnectorConfigBundle(fromConnectorName, ConnectorManager.getInstance()
+            .getResourceBundle(fromConnectorName, locale));
       }
-      if (!bean.hasConnectorConfigBundle(toConnectorId)) {
-        bean.addConnectorConfigBundle(toConnectorId, ConnectorManager.getInstance()
-            .getResourceBundle(toConnectorId, locale));
+      if (!bean.hasConnectorConfigBundle(toConnectorName)) {
+        bean.addConnectorConfigBundle(toConnectorName, ConnectorManager.getInstance()
+            .getResourceBundle(toConnectorName, locale));
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/shell/src/main/java/org/apache/sqoop/shell/CloneJobFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/CloneJobFunction.java b/shell/src/main/java/org/apache/sqoop/shell/CloneJobFunction.java
index 5e8391c..5191f43 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/CloneJobFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/CloneJobFunction.java
@@ -67,13 +67,10 @@ public class CloneJobFunction extends SqoopFunction {
     MJob job = client.getJob(jobArg);
     job.setPersistenceId(MPersistableEntity.PERSISTANCE_ID_DEFAULT);
 
-    // TODO: the job should be related with connector by connectorName
-    MConnector fromConnector = getClient().getConnector(job.getFromConnectorId());
-    MConnector toConnector = getClient().getConnector(job.getToConnectorId());
     ResourceBundle fromConnectorBundle = client.getConnectorConfigBundle(
-            fromConnector.getUniqueName());
+            job.getFromConnectorName());
     ResourceBundle toConnectorBundle = client.getConnectorConfigBundle(
-            toConnector.getUniqueName());
+            job.getToConnectorName());
     ResourceBundle driverConfigBundle = client.getDriverConfigBundle();
 
     Status status = Status.OK;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/shell/src/main/java/org/apache/sqoop/shell/CreateJobFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/CreateJobFunction.java b/shell/src/main/java/org/apache/sqoop/shell/CreateJobFunction.java
index b0adb3d..4f1d51d 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/CreateJobFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/CreateJobFunction.java
@@ -77,13 +77,13 @@ public class CreateJobFunction extends  SqoopFunction {
     ConsoleReader reader = getConsoleReader();
     MJob job = getClient().createJob(fromLinkArg, toLinkArg);
 
-    MConnector fromConnector = getClient().getConnector(job.getFromConnectorId());
+    MConnector fromConnector = getClient().getConnector(job.getFromConnectorName());
     if (!fromConnector.getSupportedDirections().isDirectionSupported(Direction.FROM)) {
       errorMessage("Connector " + fromConnector.getUniqueName() + " does not support direction " + Direction.FROM);
       return Status.ERROR;
     }
 
-    MConnector toConnector = getClient().getConnector(job.getToConnectorId());
+    MConnector toConnector = getClient().getConnector(job.getToConnectorName());
     if (!toConnector.getSupportedDirections().isDirectionSupported(Direction.TO)) {
       errorMessage("Connector " + toConnector.getUniqueName() + " does not support direction " + Direction.TO);
       return Status.ERROR;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/shell/src/main/java/org/apache/sqoop/shell/ShowJobFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/ShowJobFunction.java b/shell/src/main/java/org/apache/sqoop/shell/ShowJobFunction.java
index faad505..e36a903 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/ShowJobFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/ShowJobFunction.java
@@ -99,12 +99,7 @@ public class ShowJobFunction extends SqoopFunction {
       if (fromLink != null) {
         fromLinkName = fromLink.getName();
       }
-      String fromConnectorName = "";
-      MConnector fromConnector = client.getConnector(job.getFromConnectorId());
-      if (fromConnector != null) {
-        fromConnectorName = fromConnector.getUniqueName();
-      }
-      fromConnectors.add(fromLinkName + " (" + fromConnectorName + ")");
+      fromConnectors.add(fromLinkName + " (" + job.getFromConnectorName() + ")");
 
       // To link and connector
       String toLinkName = "";
@@ -112,12 +107,7 @@ public class ShowJobFunction extends SqoopFunction {
       if (toLink != null) {
         toLinkName = toLink.getName();
       }
-      String toConnnectorName = "";
-      MConnector toConnector = client.getConnector(job.getToConnectorId());
-      if (toConnector != null) {
-        toConnnectorName = toConnector.getUniqueName();
-      }
-      toConnectors.add(toLinkName + " (" + toConnnectorName + ")");
+      toConnectors.add(toLinkName + " (" + job.getToConnectorName() + ")");
 
       availabilities.add(String.valueOf(job.getEnabled()));
     }
@@ -160,19 +150,15 @@ public class ShowJobFunction extends SqoopFunction {
       formatter.format(job.getLastUpdateDate())
     );
 
-    // TODO: should be removed when MJob link with Connector by name.
-    MConnector fromConnector = getClient().getConnector(job.getFromConnectorId());
-    MConnector toConnector = getClient().getConnector(job.getToConnectorId());
-
     displayConfig(job.getDriverConfig().getConfigs(),
             client.getDriverConfigBundle());
     printlnResource(Constants.RES_SHOW_PROMPT_JOB_FROM_LID_INFO,
         job.getFromLinkId());
     displayConfig(job.getFromJobConfig().getConfigs(),
-                 client.getConnectorConfigBundle(fromConnector.getUniqueName()));
+                 client.getConnectorConfigBundle(job.getFromConnectorName()));
     printlnResource(Constants.RES_SHOW_PROMPT_JOB_TO_LID_INFO,
             job.getToLinkId());
     displayConfig(job.getToJobConfig().getConfigs(),
-                 client.getConnectorConfigBundle(toConnector.getUniqueName()));
+                 client.getConnectorConfigBundle(job.getToConnectorName()));
   }
 }

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/shell/src/main/java/org/apache/sqoop/shell/UpdateJobFunction.java
----------------------------------------------------------------------
diff --git a/shell/src/main/java/org/apache/sqoop/shell/UpdateJobFunction.java b/shell/src/main/java/org/apache/sqoop/shell/UpdateJobFunction.java
index 95f044f..ff23a68 100644
--- a/shell/src/main/java/org/apache/sqoop/shell/UpdateJobFunction.java
+++ b/shell/src/main/java/org/apache/sqoop/shell/UpdateJobFunction.java
@@ -68,14 +68,10 @@ public class UpdateJobFunction extends SqoopFunction {
     // TODO(SQOOP-1634): using from/to and driver config id, this call can be avoided
     MJob job = client.getJob(jobArg);
 
-    // TODO: should be removed when MJob link with Connector by name.
-    MConnector fromConnector = getClient().getConnector(job.getFromConnectorId());
-    MConnector toConnector = getClient().getConnector(job.getToConnectorId());
-
     ResourceBundle fromConnectorBundle = client.getConnectorConfigBundle(
-            fromConnector.getUniqueName());
+            job.getFromConnectorName());
     ResourceBundle toConnectorBundle = client.getConnectorConfigBundle(
-            toConnector.getUniqueName());
+            job.getToConnectorName());
     ResourceBundle driverConfigBundle = client.getDriverConfigBundle();
 
     Status status = Status.OK;

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/shell/src/test/java/org/apache/sqoop/shell/TestCloneCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/sqoop/shell/TestCloneCommand.java b/shell/src/test/java/org/apache/sqoop/shell/TestCloneCommand.java
index 14daa87..4cb855b 100644
--- a/shell/src/test/java/org/apache/sqoop/shell/TestCloneCommand.java
+++ b/shell/src/test/java/org/apache/sqoop/shell/TestCloneCommand.java
@@ -155,7 +155,7 @@ public class TestCloneCommand {
   @Test
   public void testCloneJob() {
     ShellEnvironment.setInteractive(false);
-    MJob job = new MJob(1L, 2L, 1L, 2L,
+    MJob job = new MJob("fromConnectorName", "toConnectorName", 1L, 2L,
         new MFromConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MToConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MDriverConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()));
@@ -192,7 +192,7 @@ public class TestCloneCommand {
   public void testCloneJobInteractive() {
     ShellEnvironment.setInteractive(true);
     initEnv();
-    MJob job = new MJob(1, 2, 1, 2, new MFromConfig(getConfig("fromJobConfig"), new ArrayList<MValidator>()),
+    MJob job = new MJob("fromConnectorName", "toConnectorName", 1, 2, new MFromConfig(getConfig("fromJobConfig"), new ArrayList<MValidator>()),
         new MToConfig(getConfig("toJobConfig"), new ArrayList<MValidator>()),
         new MDriverConfig(getConfig("driverConfig"), new ArrayList<MValidator>()));
     when(client.getJob("job_test")).thenReturn(job);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/shell/src/test/java/org/apache/sqoop/shell/TestCreateCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/sqoop/shell/TestCreateCommand.java b/shell/src/test/java/org/apache/sqoop/shell/TestCreateCommand.java
index 89f4fe8..f2e8fc0 100644
--- a/shell/src/test/java/org/apache/sqoop/shell/TestCreateCommand.java
+++ b/shell/src/test/java/org/apache/sqoop/shell/TestCreateCommand.java
@@ -182,11 +182,11 @@ public class TestCreateCommand {
     MConnector fromConnector = new MConnector("connector_from", "", "", null, new MFromConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()), null);
     MConnector toConnector = new MConnector("connector_to", "", "", null, null, new MToConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()));
     when(client.createJob("link_from", "link_to")).thenReturn(
-        new MJob(1, 2, 1, 2, new MFromConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
+        new MJob("fromConnectorName", "toConnectorName", 1, 2, new MFromConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
             new MToConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
             new MDriverConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>())));
-    when(client.getConnector(1)).thenReturn(fromConnector);
-    when(client.getConnector(2)).thenReturn(toConnector);
+    when(client.getConnector("fromConnectorName")).thenReturn(fromConnector);
+    when(client.getConnector("toConnectorName")).thenReturn(toConnector);
     when(client.saveJob(any(MJob.class))).thenReturn(Status.OK);
 
     // create job -f link_from -to link_to
@@ -222,12 +222,12 @@ public class TestCreateCommand {
     initEnv();
     MConnector fromConnector = new MConnector("connector_from", "", "", null, new MFromConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()), null);
     MConnector toConnector = new MConnector("connector_to", "", "", null, null, new MToConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()));
-    MJob job = new MJob(1, 2, 1, 2, new MFromConfig(getConfig("fromJobConfig"), new ArrayList<MValidator>()),
+    MJob job = new MJob("fromConnectorName", "toConnectorName", 1, 2, new MFromConfig(getConfig("fromJobConfig"), new ArrayList<MValidator>()),
         new MToConfig(getConfig("toJobConfig"), new ArrayList<MValidator>()),
         new MDriverConfig(getConfig("driverConfig"), new ArrayList<MValidator>()));
     when(client.createJob("link_from", "link_to")).thenReturn(job);
-    when(client.getConnector(1)).thenReturn(fromConnector);
-    when(client.getConnector(2)).thenReturn(toConnector);
+    when(client.getConnector("fromConnectorName")).thenReturn(fromConnector);
+    when(client.getConnector("toConnectorName")).thenReturn(toConnector);
     when(client.saveJob(any(MJob.class))).thenReturn(Status.OK);
     when(client.getConnectorConfigBundle(any(String.class))).thenReturn(resourceBundle);
     when(client.getDriverConfigBundle()).thenReturn(resourceBundle);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/shell/src/test/java/org/apache/sqoop/shell/TestShowCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/sqoop/shell/TestShowCommand.java b/shell/src/test/java/org/apache/sqoop/shell/TestShowCommand.java
index 870bee3..c7b57af 100644
--- a/shell/src/test/java/org/apache/sqoop/shell/TestShowCommand.java
+++ b/shell/src/test/java/org/apache/sqoop/shell/TestShowCommand.java
@@ -235,11 +235,11 @@ public class TestShowCommand {
   public void testShowJob() {
     when(client.getJobs()).thenReturn(new ArrayList<MJob>());
     when(client.getConnector(any(Long.class))).thenReturn(new MConnector("", "", "", null, null, null));
-    when(client.getJob("1")).thenReturn(new MJob(1L, 2L, 1L, 2L,
+    when(client.getJob("1")).thenReturn(new MJob("fromConnectorName", "toConnectorName", 1L, 2L,
         new MFromConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MToConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MDriverConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>())));
-    when(client.getJobsByConnector("2")).thenReturn(Arrays.asList(new MJob(1L, 2L, 1L, 2L,
+    when(client.getJobsByConnector("2")).thenReturn(Arrays.asList(new MJob("fromConnectorName", "toConnectorName", 1L, 2L,
         new MFromConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MToConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MDriverConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()))));

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/shell/src/test/java/org/apache/sqoop/shell/TestUpdateCommand.java
----------------------------------------------------------------------
diff --git a/shell/src/test/java/org/apache/sqoop/shell/TestUpdateCommand.java b/shell/src/test/java/org/apache/sqoop/shell/TestUpdateCommand.java
index 2a6670d..d9f8c46 100644
--- a/shell/src/test/java/org/apache/sqoop/shell/TestUpdateCommand.java
+++ b/shell/src/test/java/org/apache/sqoop/shell/TestUpdateCommand.java
@@ -173,7 +173,7 @@ public class TestUpdateCommand {
   @Test
   public void testUpdateJob() throws InterruptedException {
     ShellEnvironment.setInteractive(false);
-    MJob job = new MJob(1L, 2L, 1L, 2L,
+    MJob job = new MJob("fromConnectorName", "toConnectorName", 1L, 2L,
         new MFromConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MToConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()),
         new MDriverConfig(new ArrayList<MConfig>(), new ArrayList<MValidator>()));
@@ -210,7 +210,7 @@ public class TestUpdateCommand {
   public void testUpdateJobInteractive() {
     ShellEnvironment.setInteractive(true);
     initEnv();
-    MJob job = new MJob(1, 2, 1, 2, new MFromConfig(getConfig("fromJobConfig"), new ArrayList<MValidator>()),
+    MJob job = new MJob("fromConnectorName", "toConnectorName", 1, 2, new MFromConfig(getConfig("fromJobConfig"), new ArrayList<MValidator>()),
         new MToConfig(getConfig("toJobConfig"), new ArrayList<MValidator>()),
         new MDriverConfig(getConfig("driverConfig"), new ArrayList<MValidator>()));
     when(client.getJob("job_test")).thenReturn(job);

http://git-wip-us.apache.org/repos/asf/sqoop/blob/e70b9c25/tools/src/main/java/org/apache/sqoop/tools/tool/RepositoryLoadTool.java
----------------------------------------------------------------------
diff --git a/tools/src/main/java/org/apache/sqoop/tools/tool/RepositoryLoadTool.java b/tools/src/main/java/org/apache/sqoop/tools/tool/RepositoryLoadTool.java
index 2afb965..8ba8d84 100644
--- a/tools/src/main/java/org/apache/sqoop/tools/tool/RepositoryLoadTool.java
+++ b/tools/src/main/java/org/apache/sqoop/tools/tool/RepositoryLoadTool.java
@@ -324,8 +324,8 @@ public class RepositoryLoadTool extends ConfiguredTool {
   private long loadJob(MJob job) {
     // starting by pretending we have a brand new job
     resetPersistenceId(job);
-    MConnector mFromConnector = ConnectorManager.getInstance().getConnectorConfigurable(job.getFromConnectorId());
-    MConnector mToConnector = ConnectorManager.getInstance().getConnectorConfigurable(job.getToConnectorId());
+    MConnector mFromConnector = ConnectorManager.getInstance().getConnectorConfigurable(job.getFromConnectorName());
+    MConnector mToConnector = ConnectorManager.getInstance().getConnectorConfigurable(job.getToConnectorName());
 
     MFromConfig fromConfig = job.getFromJobConfig();
     MToConfig toConfig = job.getToJobConfig();
@@ -347,10 +347,10 @@ public class RepositoryLoadTool extends ConfiguredTool {
     // Transform config structures to objects for validations
     SqoopConnector fromConnector =
         ConnectorManager.getInstance().getSqoopConnector(
-            job.getFromConnectorId());
+            job.getFromConnectorName());
     SqoopConnector toConnector =
         ConnectorManager.getInstance().getSqoopConnector(
-            job.getToConnectorId());
+            job.getToConnectorName());
 
     Object fromConnectorConfig = ClassUtils.instantiate(
         fromConnector.getJobConfigurationClass(Direction.FROM));