Repository: sqoop Updated Branches: refs/heads/sqoop2 b35d7573d -> 9df8a53dd
SQOOP-1896: Upgrade the Derby repo version to 5 for 1.99.5 release (Veena Basavaraj 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/9df8a53d Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/9df8a53d Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/9df8a53d Branch: refs/heads/sqoop2 Commit: 9df8a53dd2a908edbb4207aaa6f793ed4a0ad3a4 Parents: b35d757 Author: Jarek Jarcec Cecho <[email protected]> Authored: Sun Dec 14 08:04:42 2014 -0800 Committer: Jarek Jarcec Cecho <[email protected]> Committed: Sun Dec 14 08:04:42 2014 -0800 ---------------------------------------------------------------------- .../apache/sqoop/repository/JdbcRepository.java | 2 +- .../sqoop/repository/JdbcRepositoryHandler.java | 2 +- .../repository/derby/DerbyRepoConstants.java | 3 +- .../derby/DerbyRepositoryHandler.java | 4 +- .../sqoop/repository/derby/DerbyTestCase.java | 5 +- .../repository/derby/TestRepositoryUpgrade.java | 161 +++++++++++++++++++ .../derby/TestRespositorySchemaUpgrade.java | 161 ------------------- 7 files changed, 170 insertions(+), 168 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/9df8a53d/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java b/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java index e5415e8..e163622 100644 --- a/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java +++ b/core/src/main/java/org/apache/sqoop/repository/JdbcRepository.java @@ -142,7 +142,7 @@ public class JdbcRepository extends Repository { return (Boolean) doWithConnection(new DoWithConnection() { @Override public Object doIt(Connection conn) throws Exception { - return handler.isRespositorySuitableForUse(conn); + return handler.isRepositorySuitableForUse(conn); } }); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/9df8a53d/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java b/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java index 4fe1500..ca590d8 100644 --- a/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java +++ b/core/src/main/java/org/apache/sqoop/repository/JdbcRepositoryHandler.java @@ -156,7 +156,7 @@ public abstract class JdbcRepositoryHandler { * @param conn JDBC link for querying repository * @return Boolean values if internal structures are suitable for use */ - public abstract boolean isRespositorySuitableForUse(Connection conn); + public abstract boolean isRepositorySuitableForUse(Connection conn); /** * Termination callback for repository. http://git-wip-us.apache.org/repos/asf/sqoop/blob/9df8a53d/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoConstants.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoConstants.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoConstants.java index d869cb7..4e1efc2 100644 --- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoConstants.java +++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepoConstants.java @@ -42,8 +42,9 @@ public final class DerbyRepoConstants { * Increased size of SQ_CONNECTOR.SQC_VERSION to 64 * 4 - Version 1.99.4 * Changed to FROM/TO design. + * 5 - Version 1.99.5 */ - public static final int LATEST_DERBY_REPOSITORY_VERSION = 4; + public static final int LATEST_DERBY_REPOSITORY_VERSION = 5; private DerbyRepoConstants() { // Disable explicit object creation http://git-wip-us.apache.org/repos/asf/sqoop/blob/9df8a53d/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java index 7ba851c..5bb3a43 100644 --- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java +++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java @@ -290,7 +290,7 @@ public class DerbyRepositoryHandler extends CommonRepositoryHandler { } } - if (repositoryVersion <= 4) { + if (repositoryVersion < 5) { runQuery(QUERY_UPGRADE_TABLE_SQ_CONFIG_ADD_UNIQUE_CONSTRAINT_NAME_TYPE_AND_CONFIGURABLE_ID, conn); runQuery(QUERY_UPGRADE_TABLE_SQ_INPUT_ADD_UNIQUE_CONSTRAINT_NAME_TYPE_AND_CONFIG_ID, conn); @@ -809,7 +809,7 @@ public class DerbyRepositoryHandler extends CommonRepositoryHandler { * {@inheritDoc} */ @Override - public boolean isRespositorySuitableForUse(Connection conn) { + public boolean isRepositorySuitableForUse(Connection conn) { // TODO(jarcec): Verify that all structures are present (e.g. something like corruption validation) // NOTE: At this point is is just checking if the repo version matches the version // in the upgraded code http://git-wip-us.apache.org/repos/asf/sqoop/blob/9df8a53d/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java index a895320..6d4153c 100644 --- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java +++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java @@ -31,8 +31,6 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.LinkedList; import java.util.List; -import java.util.Map; -import java.util.TreeMap; import org.apache.sqoop.common.Direction; import org.apache.sqoop.json.DriverBean; @@ -546,6 +544,7 @@ abstract public class DerbyTestCase { break; case 4: + case 5: loadConnectorAndDriverConfigVersion4(); break; @@ -580,6 +579,7 @@ abstract public class DerbyTestCase { break; case 4: + case 5: // Insert two links - CA and CB runQuery("INSERT INTO SQOOP.SQ_LINK(SQ_LNK_NAME, SQ_LNK_CONFIGURABLE) " + "VALUES('CA', 1)"); runQuery("INSERT INTO SQOOP.SQ_LINK(SQ_LNK_NAME, SQ_LNK_CONFIGURABLE) " + "VALUES('CB', 1)"); @@ -636,6 +636,7 @@ abstract public class DerbyTestCase { break; case 4: + case 5: for (String name : new String[] { "JA", "JB", "JC", "JD" }) { runQuery("INSERT INTO SQOOP.SQ_JOB(SQB_NAME, SQB_FROM_LINK, SQB_TO_LINK)" + " VALUES('" + name + index + "', 1, 1)"); http://git-wip-us.apache.org/repos/asf/sqoop/blob/9df8a53d/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRepositoryUpgrade.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRepositoryUpgrade.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRepositoryUpgrade.java new file mode 100644 index 0000000..31154af --- /dev/null +++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRepositoryUpgrade.java @@ -0,0 +1,161 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.sqoop.repository.derby; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.sql.Connection; +import java.sql.SQLIntegrityConstraintViolationException; + +import org.junit.Before; +import org.junit.Test; + +public class TestRepositoryUpgrade extends DerbyTestCase { + + DerbyRepositoryHandler handler; + + @Before + public void setUp() throws Exception { + super.setUp(); + handler = new TestDerbyRepositoryHandler(); + } + + @Test + public void testHasLatestRepositoryVersion() throws Exception { + assertFalse(handler.isRepositorySuitableForUse(getDerbyDatabaseConnection())); + createOrUpgradeSchemaForLatestVersion(); // Test code is building the + // structures + assertTrue(handler.isRepositorySuitableForUse(getDerbyDatabaseConnection())); + } + + @Test + public void testCreatorUpdateRepositorySchema() throws Exception { + assertFalse(handler.isRepositorySuitableForUse(getDerbyDatabaseConnection())); + handler.createOrUpgradeRepository(getDerbyDatabaseConnection()); + assertTrue(handler.isRepositorySuitableForUse(getDerbyDatabaseConnection())); + } + + @Test + public void testDoubleUpdateRepositorySchema() throws Exception { + // Setup + assertFalse(handler.isRepositorySuitableForUse(getDerbyDatabaseConnection())); + handler.createOrUpgradeRepository(getDerbyDatabaseConnection()); + assertTrue(handler.isRepositorySuitableForUse(getDerbyDatabaseConnection())); + + // Exercise and verify + handler.createOrUpgradeRepository(getDerbyDatabaseConnection()); + assertTrue(handler.isRepositorySuitableForUse(getDerbyDatabaseConnection())); + } + + @Test(expected = SQLIntegrityConstraintViolationException.class) + public void testUpgradeVersion4WithNonUniqueJobNameFailure() throws Exception { + super.createOrUpgradeSchema(4); + // try loading duplicate job names in version 4 and it should throw an + // exception + super.loadNonUniqueJobsInVersion4(); + } + + @Test(expected = SQLIntegrityConstraintViolationException.class) + public void testUpgradeVersion4WithNonUniqueLinkNamesAdded() throws Exception { + super.createOrUpgradeSchema(4); + // try loading duplicate link names in version 4 and it should throw an + // exception + super.loadNonUniqueLinksInVersion4(); + } + + @Test(expected = SQLIntegrityConstraintViolationException.class) + public void testUpgradeVersion4WithNonUniqueConfigurableNamesAdded() throws Exception { + super.createOrUpgradeSchema(4); + // try loading duplicate configurable names in version 4 and it should throw + // an exception + super.loadNonUniqueConfigurablesInVersion4(); + } + + @Test(expected = SQLIntegrityConstraintViolationException.class) + public void testUpgradeVersion4WithNonUniqueConfigNameAndTypeAdded() throws Exception { + super.createOrUpgradeSchema(4); + super.addConnectorB(); + // try loading duplicate config names in version 4 and it should throw an + // exception + super.loadNonUniqueConfigNameTypeInVersion4(); + } + + @Test + public void testUpgradeVersion4WithNonUniqueConfigNameButUniqueTypeAdded() throws Exception { + super.createOrUpgradeSchema(4); + super.addConnectorB(); + // try loading duplicate config names but unique type, hence no exception + super.loadNonUniqueConfigNameButUniqueTypeInVersion4(); + } + + @Test + public void testUpgradeVersion4WithNonUniqueConfigNameAndTypeButUniqueConfigurable() + throws Exception { + super.createOrUpgradeSchema(4); + super.addConnectorA(); + super.addConnectorB(); + // try loading duplicate config names and type but unique connector, hence + // no exception + super.loadNonUniqueConfigNameAndTypeButUniqueConfigurableInVersion4(); + } + + @Test(expected = SQLIntegrityConstraintViolationException.class) + public void testUpgradeVersion4WithNonUniqueInputNameAndTypeAdded() throws Exception { + super.createOrUpgradeSchema(4); + super.addConnectorB(); + // try loading duplicate input name and type for a config in version 4 and it should throw an + // exception + super.loadNonUniqueInputNameTypeInVersion4(); + } + + @Test + public void testUpgradeVersion4WithNonUniqueInputNameAndTypeButUniqueConfig() + throws Exception { + super.createOrUpgradeSchema(4); + super.addConnectorA(); + super.addConnectorB(); + // try loading duplicate input names and type but unique config, hence + // no exception + super.loadNonUniqueInputNameAndTypeButUniqueConfigInVersion4(); + } + + @Test + public void testUpgradeRepoVersion2ToVersion4() throws Exception { + // in case of version 2 schema there is no unique job/ link constraint + super.createOrUpgradeSchema(2); + assertFalse(handler.isRepositorySuitableForUse(getDerbyDatabaseConnection())); + loadConnectorAndDriverConfig(2); + super.loadConnectionsOrLinks(2); + super.loadJobs(2); + handler.createOrUpgradeRepository(getDerbyDatabaseConnection()); + assertTrue(handler.isRepositorySuitableForUse(getDerbyDatabaseConnection())); + } + + private class TestDerbyRepositoryHandler extends DerbyRepositoryHandler { + protected long registerHdfsConnector(Connection conn) { + try { + TestRepositoryUpgrade.this.runQuery("INSERT INTO SQOOP.SQ_CONNECTOR(SQC_NAME, SQC_CLASS, SQC_VERSION)" + + "VALUES('hdfs-connector', 'org.apache.sqoop.test.B', '1.0-test')"); + return 2L; + } catch (Exception e) { + return -1L; + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/sqoop/blob/9df8a53d/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRespositorySchemaUpgrade.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRespositorySchemaUpgrade.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRespositorySchemaUpgrade.java deleted file mode 100644 index 934056f..0000000 --- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestRespositorySchemaUpgrade.java +++ /dev/null @@ -1,161 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.sqoop.repository.derby; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.sql.Connection; -import java.sql.SQLIntegrityConstraintViolationException; - -import org.junit.Before; -import org.junit.Test; - -public class TestRespositorySchemaUpgrade extends DerbyTestCase { - - DerbyRepositoryHandler handler; - - @Before - public void setUp() throws Exception { - super.setUp(); - handler = new TestDerbyRepositoryHandler(); - } - - @Test - public void testHasLatestRepositoryVersion() throws Exception { - assertFalse(handler.isRespositorySuitableForUse(getDerbyDatabaseConnection())); - createOrUpgradeSchemaForLatestVersion(); // Test code is building the - // structures - assertTrue(handler.isRespositorySuitableForUse(getDerbyDatabaseConnection())); - } - - @Test - public void testCreatorUpdateRepositorySchema() throws Exception { - assertFalse(handler.isRespositorySuitableForUse(getDerbyDatabaseConnection())); - handler.createOrUpgradeRepository(getDerbyDatabaseConnection()); - assertTrue(handler.isRespositorySuitableForUse(getDerbyDatabaseConnection())); - } - - @Test - public void testDoubleUpdateRepositorySchema() throws Exception { - // Setup - assertFalse(handler.isRespositorySuitableForUse(getDerbyDatabaseConnection())); - handler.createOrUpgradeRepository(getDerbyDatabaseConnection()); - assertTrue(handler.isRespositorySuitableForUse(getDerbyDatabaseConnection())); - - // Exercise and verify - handler.createOrUpgradeRepository(getDerbyDatabaseConnection()); - assertTrue(handler.isRespositorySuitableForUse(getDerbyDatabaseConnection())); - } - - @Test(expected = SQLIntegrityConstraintViolationException.class) - public void testUpgradeVersion4WithNonUniqueJobNameFailure() throws Exception { - super.createOrUpgradeSchema(4); - // try loading duplicate job names in version 4 and it should throw an - // exception - super.loadNonUniqueJobsInVersion4(); - } - - @Test(expected = SQLIntegrityConstraintViolationException.class) - public void testUpgradeVersion4WithNonUniqueLinkNamesAdded() throws Exception { - super.createOrUpgradeSchema(4); - // try loading duplicate link names in version 4 and it should throw an - // exception - super.loadNonUniqueLinksInVersion4(); - } - - @Test(expected = SQLIntegrityConstraintViolationException.class) - public void testUpgradeVersion4WithNonUniqueConfigurableNamesAdded() throws Exception { - super.createOrUpgradeSchema(4); - // try loading duplicate configurable names in version 4 and it should throw - // an exception - super.loadNonUniqueConfigurablesInVersion4(); - } - - @Test(expected = SQLIntegrityConstraintViolationException.class) - public void testUpgradeVersion4WithNonUniqueConfigNameAndTypeAdded() throws Exception { - super.createOrUpgradeSchema(4); - super.addConnectorB(); - // try loading duplicate config names in version 4 and it should throw an - // exception - super.loadNonUniqueConfigNameTypeInVersion4(); - } - - @Test - public void testUpgradeVersion4WithNonUniqueConfigNameButUniqueTypeAdded() throws Exception { - super.createOrUpgradeSchema(4); - super.addConnectorB(); - // try loading duplicate config names but unique type, hence no exception - super.loadNonUniqueConfigNameButUniqueTypeInVersion4(); - } - - @Test - public void testUpgradeVersion4WithNonUniqueConfigNameAndTypeButUniqueConfigurable() - throws Exception { - super.createOrUpgradeSchema(4); - super.addConnectorA(); - super.addConnectorB(); - // try loading duplicate config names and type but unique connector, hence - // no exception - super.loadNonUniqueConfigNameAndTypeButUniqueConfigurableInVersion4(); - } - - @Test(expected = SQLIntegrityConstraintViolationException.class) - public void testUpgradeVersion4WithNonUniqueInputNameAndTypeAdded() throws Exception { - super.createOrUpgradeSchema(4); - super.addConnectorB(); - // try loading duplicate input name and type for a config in version 4 and it should throw an - // exception - super.loadNonUniqueInputNameTypeInVersion4(); - } - - @Test - public void testUpgradeVersion4WithNonUniqueInputNameAndTypeButUniqueConfig() - throws Exception { - super.createOrUpgradeSchema(4); - super.addConnectorA(); - super.addConnectorB(); - // try loading duplicate input names and type but unique config, hence - // no exception - super.loadNonUniqueInputNameAndTypeButUniqueConfigInVersion4(); - } - - @Test - public void testUpgradeRepoVersion2ToVersion4() throws Exception { - // in case of version 2 schema there is no unique job/ link constraint - super.createOrUpgradeSchema(2); - assertFalse(handler.isRespositorySuitableForUse(getDerbyDatabaseConnection())); - loadConnectorAndDriverConfig(2); - super.loadConnectionsOrLinks(2); - super.loadJobs(2); - handler.createOrUpgradeRepository(getDerbyDatabaseConnection()); - assertTrue(handler.isRespositorySuitableForUse(getDerbyDatabaseConnection())); - } - - private class TestDerbyRepositoryHandler extends DerbyRepositoryHandler { - protected long registerHdfsConnector(Connection conn) { - try { - TestRespositorySchemaUpgrade.this.runQuery("INSERT INTO SQOOP.SQ_CONNECTOR(SQC_NAME, SQC_CLASS, SQC_VERSION)" - + "VALUES('hdfs-connector', 'org.apache.sqoop.test.B', '1.0-test')"); - return 2L; - } catch (Exception e) { - return -1L; - } - } - } -} \ No newline at end of file
