Updated Branches: refs/heads/sqoop2 eab812d2f -> 528d1ee9d
SQOOP-1254. Sqoop2: Tool: Add Upgrade tool (Jarek Jarcec Cecho via Hari Shreedharan) Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/528d1ee9 Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/528d1ee9 Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/528d1ee9 Branch: refs/heads/sqoop2 Commit: 528d1ee9db45e7adf485fc849fd85e7d621826a4 Parents: eab812d Author: Hari Shreedharan <[email protected]> Authored: Fri Dec 13 21:46:19 2013 -0800 Committer: Hari Shreedharan <[email protected]> Committed: Fri Dec 13 21:46:19 2013 -0800 ---------------------------------------------------------------------- .../sqoop/connector/ConnectorManager.java | 6 +- .../sqoop/framework/FrameworkManager.java | 6 +- .../sqoop/repository/RepositoryManager.java | 7 ++- .../org/apache/sqoop/tools/ConfiguredTool.java | 41 +++++++++++++ .../apache/sqoop/tools/tool/BuiltinTools.java | 1 + .../apache/sqoop/tools/tool/UpgradeTool.java | 62 ++++++++++++++++++++ 6 files changed, 117 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/528d1ee9/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java b/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java index fa91d02..b92ff4d 100644 --- a/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java +++ b/core/src/main/java/org/apache/sqoop/connector/ConnectorManager.java @@ -142,6 +142,10 @@ public class ConnectorManager implements Reconfigurable { } public synchronized void initialize() { + initialize(SqoopConfiguration.getInstance().getContext().getBoolean(ConfigurationConstants.CONNECTOR_AUTO_UPGRADE, DEFAULT_AUTO_UPGRADE)); + } + + public synchronized void initialize(boolean autoUpgrade) { if (LOG.isTraceEnabled()) { LOG.trace("Begin connector manager initialization"); } @@ -190,8 +194,6 @@ public class ConnectorManager implements Reconfigurable { throw new SqoopException(ConnectorError.CONN_0001, ex); } - boolean autoUpgrade = SqoopConfiguration.getInstance().getContext().getBoolean( - ConfigurationConstants.CONNECTOR_AUTO_UPGRADE, DEFAULT_AUTO_UPGRADE); registerConnectors(autoUpgrade); SqoopConfiguration.getInstance().getProvider().registerListener(new CoreConfigurationListener(this)); http://git-wip-us.apache.org/repos/asf/sqoop/blob/528d1ee9/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java b/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java index 424285c..505121c 100644 --- a/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java +++ b/core/src/main/java/org/apache/sqoop/framework/FrameworkManager.java @@ -147,11 +147,13 @@ public class FrameworkManager implements Reconfigurable { } public synchronized void initialize() { + initialize(SqoopConfiguration.getInstance().getContext().getBoolean(ConfigurationConstants.FRAMEWORK_AUTO_UPGRADE, DEFAULT_AUTO_UPGRADE)); + } + + public synchronized void initialize(boolean autoUpgrade) { LOG.trace("Begin submission engine manager initialization"); // Register framework metadata in repository - boolean autoUpgrade = SqoopConfiguration.getInstance().getContext().getBoolean( - ConfigurationConstants.FRAMEWORK_AUTO_UPGRADE, DEFAULT_AUTO_UPGRADE); mFramework = RepositoryManager.getInstance().getRepository().registerFramework(mFramework, autoUpgrade); SqoopConfiguration.getInstance().getProvider().registerListener(new CoreConfigurationListener(this)); http://git-wip-us.apache.org/repos/asf/sqoop/blob/528d1ee9/core/src/main/java/org/apache/sqoop/repository/RepositoryManager.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/sqoop/repository/RepositoryManager.java b/core/src/main/java/org/apache/sqoop/repository/RepositoryManager.java index 25d5d9d..8f955ad 100644 --- a/core/src/main/java/org/apache/sqoop/repository/RepositoryManager.java +++ b/core/src/main/java/org/apache/sqoop/repository/RepositoryManager.java @@ -72,6 +72,10 @@ public class RepositoryManager implements Reconfigurable { private RepositoryProvider provider; public synchronized void initialize() { + initialize(SqoopConfiguration.getInstance().getContext().getBoolean(RepoConfigurationConstants.SYSCFG_REPO_SCHEMA_IMMUTABLE, false)); + } + + public synchronized void initialize(boolean immutableRepository) { MapContext context = SqoopConfiguration.getInstance().getContext(); Map<String, String> repoSysProps = context.getNestedProperties( @@ -113,8 +117,7 @@ public class RepositoryManager implements Reconfigurable { provider.initialize(context); - if(!context.getBoolean(RepoConfigurationConstants - .SYSCFG_REPO_SCHEMA_IMMUTABLE, false)) { + if(!immutableRepository) { LOG.info("Creating or upgrading on disk structures if necessary"); provider.getRepository().createOrUpdateInternals(); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/528d1ee9/tools/src/main/java/org/apache/sqoop/tools/ConfiguredTool.java ---------------------------------------------------------------------- diff --git a/tools/src/main/java/org/apache/sqoop/tools/ConfiguredTool.java b/tools/src/main/java/org/apache/sqoop/tools/ConfiguredTool.java new file mode 100644 index 0000000..90bd8d8 --- /dev/null +++ b/tools/src/main/java/org/apache/sqoop/tools/ConfiguredTool.java @@ -0,0 +1,41 @@ +/** + * 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.tools; + +import org.apache.sqoop.core.SqoopConfiguration; + +/** + * Most of the tools needs to load Sqoop configuration in order to perform + * their task. To simplify the code, ConfiguredTool will make sure that + * the configuration is properly loaded prior executing the actual tool. + */ +public abstract class ConfiguredTool extends Tool { + + public abstract boolean runToolWithConfiguration(String[] arguments); + + @Override + public final boolean runTool(String[] arguments) { + try { + SqoopConfiguration.getInstance().initialize(); + return runToolWithConfiguration(arguments); + } finally { + SqoopConfiguration.getInstance().destroy(); + } + } + +} http://git-wip-us.apache.org/repos/asf/sqoop/blob/528d1ee9/tools/src/main/java/org/apache/sqoop/tools/tool/BuiltinTools.java ---------------------------------------------------------------------- diff --git a/tools/src/main/java/org/apache/sqoop/tools/tool/BuiltinTools.java b/tools/src/main/java/org/apache/sqoop/tools/tool/BuiltinTools.java index 0045511..b24cb35 100644 --- a/tools/src/main/java/org/apache/sqoop/tools/tool/BuiltinTools.java +++ b/tools/src/main/java/org/apache/sqoop/tools/tool/BuiltinTools.java @@ -34,6 +34,7 @@ public class BuiltinTools { private static Map<String, Class<? extends Tool>> tools; static { tools = new HashMap<String, Class<? extends Tool>>(); + tools.put("upgrade", UpgradeTool.class); tools.put("verify", VerifyTool.class); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/528d1ee9/tools/src/main/java/org/apache/sqoop/tools/tool/UpgradeTool.java ---------------------------------------------------------------------- diff --git a/tools/src/main/java/org/apache/sqoop/tools/tool/UpgradeTool.java b/tools/src/main/java/org/apache/sqoop/tools/tool/UpgradeTool.java new file mode 100644 index 0000000..b8a15cb --- /dev/null +++ b/tools/src/main/java/org/apache/sqoop/tools/tool/UpgradeTool.java @@ -0,0 +1,62 @@ +/** + * 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.tools.tool; + +import org.apache.sqoop.connector.ConnectorManager; +import org.apache.sqoop.framework.FrameworkManager; +import org.apache.sqoop.repository.RepositoryManager; +import org.apache.sqoop.tools.ConfiguredTool; + +import org.apache.log4j.Logger; + +/** + * Upgrade all versionable components inside Sqoop2. This includes any + * structural changes inside repository and the Connector and Framework + * metadata. This tool is idempotent. + */ +public class UpgradeTool extends ConfiguredTool { + + public static final Logger LOG = Logger.getLogger(UpgradeTool.class); + + @Override + public boolean runToolWithConfiguration(String[] arguments) { + try { + LOG.info("Initializing the RepositoryManager with immutable option turned off."); + RepositoryManager.getInstance().initialize(false); + + LOG.info("Initializing the FrameworkManager with upgrade option turned on."); + FrameworkManager.getInstance().initialize(true); + + LOG.info("Initializing the FrameworkManager with upgrade option turned on."); + ConnectorManager.getInstance().initialize(true); + + LOG.info("Upgrade completed successfully."); + + LOG.info("Tearing all managers down."); + ConnectorManager.getInstance().destroy(); + FrameworkManager.getInstance().destroy(); + RepositoryManager.getInstance().destroy(); + return true; + } catch (Exception ex) { + LOG.error("Can't finish upgrading all components:", ex); + System.out.println("Upgrade has failed, please check Server logs for further details."); + return false; + } + } + +}
