Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id C6524200D49 for ; Fri, 24 Nov 2017 21:21:08 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id C4962160BF2; Fri, 24 Nov 2017 20:21:08 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 6B7E9160BDA for ; Fri, 24 Nov 2017 21:21:07 +0100 (CET) Received: (qmail 84229 invoked by uid 500); 24 Nov 2017 20:21:06 -0000 Mailing-List: contact commits-help@ambari.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ambari-dev@ambari.apache.org Delivered-To: mailing list commits@ambari.apache.org Received: (qmail 84220 invoked by uid 99); 24 Nov 2017 20:21:06 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 24 Nov 2017 20:21:06 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id D6EE3DFAE3; Fri, 24 Nov 2017 20:21:05 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: tthorpe@apache.org To: commits@ambari.apache.org Message-Id: <14cbc1ca4f7f4baa8c3079bc47059b52@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: ambari git commit: AMBARI-22220 - Should be able to switch the extension version to which a stack version is linked Date: Fri, 24 Nov 2017 20:21:05 +0000 (UTC) archived-at: Fri, 24 Nov 2017 20:21:09 -0000 Repository: ambari Updated Branches: refs/heads/branch-2.6 d7b25eec2 -> 5fab8ff3d AMBARI-22220 - Should be able to switch the extension version to which a stack version is linked Conflicts: ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5fab8ff3 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5fab8ff3 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5fab8ff3 Branch: refs/heads/branch-2.6 Commit: 5fab8ff3d768c2edf8408361feba87bc09b02bf2 Parents: d7b25ee Author: Tim Thorpe Authored: Mon Oct 16 06:16:35 2017 -0700 Committer: Tim Thorpe Committed: Fri Nov 24 12:20:38 2017 -0800 ---------------------------------------------------------------------- .../controller/AmbariManagementController.java | 6 +- .../AmbariManagementControllerImpl.java | 44 ++++--- .../controller/AmbariManagementHelper.java | 26 ++++ .../internal/ExtensionLinkResourceProvider.java | 15 +++ .../ambari/server/stack/ExtensionHelper.java | 31 ++++- .../server/stack/StackManagerExtensionTest.java | 22 +++- .../resources/extensions/EXT/0.2/metainfo.xml | 4 +- .../resources/extensions/EXT/0.4/metainfo.xml | 32 +++++ .../EXT/0.4/services/OOZIE2/metainfo.xml | 118 +++++++++++++++++++ .../services/OOZIE2/themes/broken_theme.json | 3 + 10 files changed, 271 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/5fab8ff3/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java index 54c0848..9ac48a4 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java @@ -369,18 +369,18 @@ public interface AmbariManagementController { public void createExtensionLink(ExtensionLinkRequest request) throws AmbariException; /** - * Update a link between an extension and a stack + * Update a link - switch the link's extension version while keeping the same stack version and extension name * * @throws AmbariException if we fail to link the extension to the stack */ public void updateExtensionLink(ExtensionLinkRequest request) throws AmbariException; /** - * Update a link between an extension and a stack + * Update a link - switch the link's extension version while keeping the same stack version and extension name * * @throws AmbariException if we fail to link the extension to the stack */ - public void updateExtensionLink(ExtensionLinkEntity linkEntity) throws AmbariException; + void updateExtensionLink(ExtensionLinkEntity oldLinkEntity, ExtensionLinkRequest newLinkRequest) throws AmbariException; /** * Delete a link between an extension and a stack http://git-wip-us.apache.org/repos/asf/ambari/blob/5fab8ff3/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 585ee46..e294aeb 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java @@ -5656,12 +5656,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle } /** - * This method will update a link between an extension version and a stack version (Extension Link). - * Updating will only force ambari server to reread the stack and extension directories. + * Update a link - switch the link's extension version while keeping the same stack version and extension name * - * An extension version is like a stack version but it contains custom services. Linking an extension - * version to the current stack version allows the cluster to install the custom services contained in - * the extension version. + * @throws AmbariException if we fail to link the extension to the stack */ @Override public void updateExtensionLink(ExtensionLinkRequest request) throws AmbariException { @@ -5675,32 +5672,43 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle throw new AmbariException("Unable to find extension link" + ", linkId=" + request.getLinkId(), e); } - updateExtensionLink(linkEntity); + updateExtensionLink(linkEntity, request); } /** - * This method will update a link between an extension version and a stack version (Extension Link). - * Updating will only force ambari server to reread the stack and extension directories. + * Update a link - switch the link's extension version while keeping the same stack version and extension name * - * An extension version is like a stack version but it contains custom services. Linking an extension - * version to the current stack version allows the cluster to install the custom services contained in - * the extension version. + * @throws AmbariException if we fail to link the extension to the stack */ @Override - public void updateExtensionLink(ExtensionLinkEntity linkEntity) throws AmbariException { - StackInfo stackInfo = ambariMetaInfo.getStack(linkEntity.getStack().getStackName(), linkEntity.getStack().getStackVersion()); + public void updateExtensionLink(ExtensionLinkEntity oldLinkEntity, ExtensionLinkRequest newLinkRequest) throws AmbariException { + StackInfo stackInfo = ambariMetaInfo.getStack(oldLinkEntity.getStack().getStackName(), oldLinkEntity.getStack().getStackVersion()); if (stackInfo == null) { - throw new StackAccessException("stackName=" + linkEntity.getStack().getStackName() + ", stackVersion=" + linkEntity.getStack().getStackVersion()); + throw new StackAccessException(String.format("stackName=%s, stackVersion=%s", oldLinkEntity.getStack().getStackName(), oldLinkEntity.getStack().getStackVersion())); } - ExtensionInfo extensionInfo = ambariMetaInfo.getExtension(linkEntity.getExtension().getExtensionName(), linkEntity.getExtension().getExtensionVersion()); + if (newLinkRequest.getExtensionName() == null || newLinkRequest.getExtensionVersion() == null) { + throw new AmbariException(String.format("Invalid extension name or version: %s/%s", + newLinkRequest.getExtensionName(), newLinkRequest.getExtensionVersion())); + } - if (extensionInfo == null) { - throw new StackAccessException("extensionName=" + linkEntity.getExtension().getExtensionName() + ", extensionVersion=" + linkEntity.getExtension().getExtensionVersion()); + if (!newLinkRequest.getExtensionName().equals(oldLinkEntity.getExtension().getExtensionName())) { + throw new AmbariException(String.format("Update is not allowed to switch the extension name, only the version. Old name/new name: %s/%s", + oldLinkEntity.getExtension().getExtensionName(), newLinkRequest.getExtensionName())); + } + + ExtensionInfo oldExtensionInfo = ambariMetaInfo.getExtension(oldLinkEntity.getExtension().getExtensionName(), oldLinkEntity.getExtension().getExtensionVersion()); + ExtensionInfo newExtensionInfo = ambariMetaInfo.getExtension(newLinkRequest.getExtensionName(), newLinkRequest.getExtensionVersion()); + + if (oldExtensionInfo == null) { + throw new StackAccessException(String.format("Old extensionName=%s, extensionVersion=%s", oldLinkEntity.getExtension().getExtensionName(), oldLinkEntity.getExtension().getExtensionVersion())); + } + if (newExtensionInfo == null) { + throw new StackAccessException(String.format("New extensionName=%s, extensionVersion=%s", newLinkRequest.getExtensionName(), newLinkRequest.getExtensionVersion())); } - ambariMetaInfo.getStackManager().linkStackToExtension(stackInfo, extensionInfo); + helper.updateExtensionLink(ambariMetaInfo.getStackManager(), oldLinkEntity, stackInfo, oldExtensionInfo, newExtensionInfo); } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/5fab8ff3/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementHelper.java index 0c8edfe..e98c2e9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementHelper.java @@ -162,6 +162,32 @@ public class AmbariManagementHelper { } } + /** + * Updates the extension version of the currently linked extension to the stack version + */ + public void updateExtensionLink(StackManager stackManager, ExtensionLinkEntity linkEntity, StackInfo stackInfo, + ExtensionInfo oldExtensionInfo, ExtensionInfo newExtensionInfo) throws AmbariException { + //validateUpdateExtensionLinkRequest(stackInfo, extensionInfo); + ExtensionHelper.validateUpdateLink(stackManager, stackInfo, oldExtensionInfo, newExtensionInfo); + + ExtensionEntity extension = extensionDAO.find(newExtensionInfo.getName(), newExtensionInfo.getVersion()); + linkEntity.setExtension(extension); + + try { + linkEntity = linkDAO.merge(linkEntity); + } catch (RollbackException e) { + String message = "Unable to update extension link"; + LOG.debug(message, e); + String errorMessage = message + + ", stackName=" + stackInfo.getName() + + ", stackVersion=" + stackInfo.getVersion() + + ", extensionName=" + newExtensionInfo.getName() + + ", extensionVersion=" + newExtensionInfo.getVersion(); + LOG.warn(errorMessage); + throw new AmbariException(errorMessage, e); + } + } + private ExtensionLinkEntity createExtensionLinkEntity(StackInfo stackInfo, ExtensionInfo extensionInfo) throws AmbariException { StackEntity stack = stackDAO.find(stackInfo.getName(), stackInfo.getVersion()); ExtensionEntity extension = extensionDAO.find(extensionInfo.getName(), extensionInfo.getVersion()); http://git-wip-us.apache.org/repos/asf/ambari/blob/5fab8ff3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionLinkResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionLinkResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionLinkResourceProvider.java index 67cc972..82e70f6 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionLinkResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionLinkResourceProvider.java @@ -188,6 +188,21 @@ public class ExtensionLinkResourceProvider extends AbstractControllerResourcePro throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { + final Set requests = new HashSet<>(); + for (Map propertyMap : request.getProperties()) { + requests.add(getRequest(propertyMap)); + } + + RequestStatusResponse response = modifyResources(new Command() { + @Override + public RequestStatusResponse invoke() throws AmbariException { + for (ExtensionLinkRequest extensionLinkRequest : requests) { + getManagementController().updateExtensionLink(extensionLinkRequest); + } + return null; + } + }); + //Need to reread the stacks/extensions directories so the latest information is available try { getManagementController().updateStacks(); http://git-wip-us.apache.org/repos/asf/ambari/blob/5fab8ff3/ambari-server/src/main/java/org/apache/ambari/server/stack/ExtensionHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/ExtensionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/ExtensionHelper.java index 8e1d989..89d0f61 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/stack/ExtensionHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/ExtensionHelper.java @@ -18,6 +18,9 @@ package org.apache.ambari.server.stack; +import java.util.ArrayList; +import java.util.Collection; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ServiceNotFoundException; import org.apache.ambari.server.state.Cluster; @@ -72,6 +75,12 @@ public class ExtensionHelper { validateRequiredExtensions(stack, extension); } + public static void validateUpdateLink(StackManager stackManager, StackInfo stack, ExtensionInfo oldExtension, ExtensionInfo newExtension) throws AmbariException { + validateSupportedStackVersion(stack, newExtension); + validateServiceDuplication(stackManager, stack, oldExtension, newExtension); + validateRequiredExtensions(stack, newExtension); + } + private static void validateSupportedStackVersion(StackInfo stack, ExtensionInfo extension) throws AmbariException { for (ExtensionMetainfoXml.Stack validStack : extension.getStacks()) { if (validStack.getName().equals(stack.getName())) { @@ -93,8 +102,28 @@ public class ExtensionHelper { } private static void validateServiceDuplication(StackManager stackManager, StackInfo stack, ExtensionInfo extension) throws AmbariException { + validateServiceDuplication(stackManager, stack, extension, extension.getServices()); + } + + private static void validateServiceDuplication(StackManager stackManager, StackInfo stack, ExtensionInfo oldExtension, ExtensionInfo newExtension) throws AmbariException { + ArrayList services = new ArrayList<>(newExtension.getServices().size()); + for (ServiceInfo service : newExtension.getServices()) { + boolean found = false; + for (ServiceInfo current : oldExtension.getServices()) { + if (service.getName().equals(current.getName())) { + found = true; + } + } + if (!found) { + services.add(service); + } + } + validateServiceDuplication(stackManager, stack, newExtension, services); + } + + private static void validateServiceDuplication(StackManager stackManager, StackInfo stack, ExtensionInfo extension, Collection services) throws AmbariException { LOG.debug("Looking for duplicate services"); - for (ServiceInfo service : extension.getServices()) { + for (ServiceInfo service : services) { LOG.debug("Looking for duplicate service " + service.getName()); if (service != null) { ServiceInfo stackService = null; http://git-wip-us.apache.org/repos/asf/ambari/blob/5fab8ff3/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerExtensionTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerExtensionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerExtensionTest.java index 34522da..1f081ec 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerExtensionTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerExtensionTest.java @@ -85,6 +85,9 @@ public class StackManagerExtensionTest { ExtensionEntity extension3 = new ExtensionEntity(); extension3.setExtensionName("EXT"); extension3.setExtensionVersion("0.3"); + ExtensionEntity extension4 = new ExtensionEntity(); + extension4.setExtensionName("EXT"); + extension4.setExtensionVersion("0.4"); ExtensionLinkEntity link1 = new ExtensionLinkEntity(); link1.setLinkId(new Long(-1)); link1.setStack(stack1); @@ -100,6 +103,7 @@ public class StackManagerExtensionTest { expect(extensionDao.find("EXT", "0.1")).andReturn(extension1).atLeastOnce(); expect(extensionDao.find("EXT", "0.2")).andReturn(extension2).atLeastOnce(); expect(extensionDao.find("EXT", "0.3")).andReturn(extension3).atLeastOnce(); + expect(extensionDao.find("EXT", "0.4")).andReturn(extension4).atLeastOnce(); expect(linkDao.findByStack("HDP", "0.1")).andReturn(linkList).atLeastOnce(); expect(linkDao.findByStack(EasyMock.anyObject(String.class), @@ -108,6 +112,8 @@ public class StackManagerExtensionTest { expect(linkDao.findByStackAndExtension("HDP", "0.2", "EXT", "0.2")).andReturn(null).atLeastOnce(); expect(linkDao.findByStackAndExtension("HDP", "0.1", "EXT", "0.1")).andReturn(link1).atLeastOnce(); + expect(linkDao.merge(link1)).andReturn(link1).atLeastOnce(); + replay(actionMetadata, stackDao, metaInfoDao, osFamily, extensionDao, linkDao); //linkEntity String stacks = ClassLoader.getSystemClassLoader().getResource("stacks_with_extensions").getPath(); @@ -151,7 +157,7 @@ public class StackManagerExtensionTest { assertNotNull("EXT 0.2's parent: " + extension.getParentExtensionVersion(), extension.getParentExtensionVersion()); assertEquals("EXT 0.2's parent: " + extension.getParentExtensionVersion(), "0.1", extension.getParentExtensionVersion()); assertNotNull(extension.getService("OOZIE2")); - assertTrue("Extension is not set to auto link", extension.isAutoLink()); + assertTrue("Extension is set to auto link", !extension.isAutoLink()); oozie = extension.getService("OOZIE2"); assertNotNull("Package dir is " + oozie.getServicePackageFolder(), oozie.getServicePackageFolder()); assertTrue("Package dir is " + oozie.getServicePackageFolder(), oozie.getServicePackageFolder().contains("extensions/EXT/0.1/services/OOZIE2/package")); @@ -166,18 +172,24 @@ public class StackManagerExtensionTest { assertNotNull(themes); assertTrue("Number of themes is " + themes.size(), themes.size() == 0); + extension = stackManager.getExtension("EXT", "0.3"); + assertTrue("Extension is not set to auto link", extension.isAutoLink()); + StackInfo stack = stackManager.getStack("HDP", "0.1"); assertNotNull(stack.getService("OOZIE2")); oozie = stack.getService("OOZIE2"); assertNotNull("Package dir is " + oozie.getServicePackageFolder(), oozie.getServicePackageFolder()); assertTrue("Package dir is " + oozie.getServicePackageFolder(), oozie.getServicePackageFolder().contains("extensions/EXT/0.1/services/OOZIE2/package")); assertEquals(oozie.getVersion(), "3.2.0"); - assertTrue("Extensions found: " + stack.getExtensions().size(), stack.getExtensions().size() == 1); extension = stack.getExtensions().iterator().next(); assertEquals("Extension name: " + extension.getName(), extension.getName(), "EXT"); assertEquals("Extension version: " + extension.getVersion(), extension.getVersion(), "0.1"); + ExtensionInfo extensionInfo2 = stackManager.getExtension("EXT", "0.2"); + helper.updateExtensionLink(stackManager, link1, stack, extension, extensionInfo2); + assertEquals(link1.getExtension().getExtensionVersion(), link1.getExtension().getExtensionVersion(), "0.2"); + stack = stackManager.getStack("HDP", "0.2"); assertTrue("Extensions found: " + stack.getExtensions().size(), stack.getExtensions().size() == 0); @@ -187,15 +199,13 @@ public class StackManagerExtensionTest { assertNotNull(extension.getService("OOZIE2")); oozie = extension.getService("OOZIE2"); assertEquals(oozie.getVersion(), "4.0.0"); - assertEquals("Extension name: " + extension.getName(), extension.getName(), "EXT"); - assertEquals("Extension version: " + extension.getVersion(), extension.getVersion(), "0.3"); + assertEquals("Extension version: " + extension.getVersion(), extension.getVersion(), "0.4"); stack = stackManager.getStack("HDP", "0.4"); assertTrue("Extensions found: " + stack.getExtensions().size(), stack.getExtensions().size() == 1); extension = stack.getExtensions().iterator().next(); assertEquals("Extension name: " + extension.getName(), extension.getName(), "EXT"); - assertEquals("Extension version: " + extension.getVersion(), extension.getVersion(), "0.3"); + assertEquals("Extension version: " + extension.getVersion(), extension.getVersion(), "0.4"); } - } http://git-wip-us.apache.org/repos/asf/ambari/blob/5fab8ff3/ambari-server/src/test/resources/extensions/EXT/0.2/metainfo.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/resources/extensions/EXT/0.2/metainfo.xml b/ambari-server/src/test/resources/extensions/EXT/0.2/metainfo.xml index c95a20f..fa84c53 100644 --- a/ambari-server/src/test/resources/extensions/EXT/0.2/metainfo.xml +++ b/ambari-server/src/test/resources/extensions/EXT/0.2/metainfo.xml @@ -20,12 +20,12 @@ true 0.1 - true + false HDP - 0.3 + 0.1 http://git-wip-us.apache.org/repos/asf/ambari/blob/5fab8ff3/ambari-server/src/test/resources/extensions/EXT/0.4/metainfo.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/resources/extensions/EXT/0.4/metainfo.xml b/ambari-server/src/test/resources/extensions/EXT/0.4/metainfo.xml new file mode 100644 index 0000000..0e74813 --- /dev/null +++ b/ambari-server/src/test/resources/extensions/EXT/0.4/metainfo.xml @@ -0,0 +1,32 @@ + + + + + true + + 0.3 + true + + + + HDP + 0.3 + + + + http://git-wip-us.apache.org/repos/asf/ambari/blob/5fab8ff3/ambari-server/src/test/resources/extensions/EXT/0.4/services/OOZIE2/metainfo.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/resources/extensions/EXT/0.4/services/OOZIE2/metainfo.xml b/ambari-server/src/test/resources/extensions/EXT/0.4/services/OOZIE2/metainfo.xml new file mode 100644 index 0000000..9176551 --- /dev/null +++ b/ambari-server/src/test/resources/extensions/EXT/0.4/services/OOZIE2/metainfo.xml @@ -0,0 +1,118 @@ + + + + 2.0 + + + OOZIE2 + System for workflow coordination and execution of Apache Hadoop jobs + 4.0.0 + + + + OOZIE2_SERVER + MASTER + 1 + + + HDFS/HDFS_CLIENT + host + + true + + + + MAPREDUCE/MAPREDUCE_CLIENT + host + + true + + + + + + PYTHON + 600 + + + + + OOZIE2_CLIENT + CLIENT + 0+ + + + HDFS/HDFS_CLIENT + host + + true + + + + MAPREDUCE/MAPREDUCE_CLIENT + host + + true + + + + + + PYTHON + + + + + + + any + + + oozie2.noarch + + + oozie2-client.noarch + + + extjs-2.2-1 + + + + + + + + PYTHON + 300 + + + + global + oozie2-site + + + + + broken_theme.json + true + + + + + + http://git-wip-us.apache.org/repos/asf/ambari/blob/5fab8ff3/ambari-server/src/test/resources/extensions/EXT/0.4/services/OOZIE2/themes/broken_theme.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/resources/extensions/EXT/0.4/services/OOZIE2/themes/broken_theme.json b/ambari-server/src/test/resources/extensions/EXT/0.4/services/OOZIE2/themes/broken_theme.json new file mode 100644 index 0000000..6e8b5bf --- /dev/null +++ b/ambari-server/src/test/resources/extensions/EXT/0.4/services/OOZIE2/themes/broken_theme.json @@ -0,0 +1,3 @@ +{ + "configuration": { +}