Repository: ambari Updated Branches: refs/heads/trunk 3a5fc0261 -> 27710808b
AMBARI-15194: Auto-start services - Create default settings for auto start Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/27710808 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/27710808 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/27710808 Branch: refs/heads/trunk Commit: 27710808bf4a83cf1c5d981270df57f187ecbd5b Parents: 3a5fc02 Author: Nahappan Somasundaram <[email protected]> Authored: Thu Feb 25 16:20:34 2016 -0800 Committer: Nahappan Somasundaram <[email protected]> Committed: Fri Feb 26 16:45:18 2016 -0800 ---------------------------------------------------------------------- .../StackServiceComponentRequest.java | 26 ++++++++++++++++++ .../StackServiceComponentResponse.java | 24 ++++++++++++++++ .../internal/ComponentResourceProvider.java | 18 ++++++++++++ .../StackServiceComponentResourceProvider.java | 9 +++++- .../ambari/server/stack/ComponentModule.java | 2 ++ .../ambari/server/state/ComponentInfo.java | 29 ++++++++++++++++++++ .../src/main/resources/properties.json | 1 + .../internal/ComponentResourceProviderTest.java | 4 +++ 8 files changed, 112 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/27710808/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceComponentRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceComponentRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceComponentRequest.java index c994a86..9e4a9a2 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceComponentRequest.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceComponentRequest.java @@ -23,10 +23,18 @@ public class StackServiceComponentRequest extends StackServiceRequest { private String componentName; + private String recoveryEnabled; + public StackServiceComponentRequest(String stackName, String stackVersion, String serviceName, String componentName) { + this(stackName, stackVersion, serviceName, componentName, null); + } + + public StackServiceComponentRequest(String stackName, String stackVersion, + String serviceName, String componentName, String recoveryEnabled) { super(stackName, stackVersion, serviceName); setComponentName(componentName); + setRecoveryEnabled(recoveryEnabled); } public String getComponentName() { @@ -37,4 +45,22 @@ public class StackServiceComponentRequest extends StackServiceRequest { this.componentName = componentName; } + /** + * Get whether auto start is enabled. If value is null, + * auto start value was not specified. + * + * @return null, "true", "false" + */ + public String getRecoveryEnabled() { + return recoveryEnabled; + } + + /** + * Set whether auto start is enabled. Null indicates unspecified. + * + * @param recoveryEnabled null, "true", "false" + */ + public void setRecoveryEnabled(String recoveryEnabled) { + this.recoveryEnabled = recoveryEnabled; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/27710808/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceComponentResponse.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceComponentResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceComponentResponse.java index d15d618..cfd4e7b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceComponentResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/StackServiceComponentResponse.java @@ -90,6 +90,11 @@ public class StackServiceComponentResponse { */ private List<String> customCommands; + /** + * Enabled for auto start or not. + */ + private boolean recoveryEnabled; + /** * Constructor. @@ -106,6 +111,7 @@ public class StackServiceComponentResponse { cardinality = component.getCardinality(); versionAdvertised = component.isVersionAdvertised(); autoDeploy = component.getAutoDeploy(); + recoveryEnabled = component.isRecoveryEnabled(); // the custom command names defined for this component List<CustomCommandDefinition> definitions = component.getCustomCommands(); @@ -301,6 +307,24 @@ public class StackServiceComponentResponse { this.versionAdvertised = versionAdvertised; } + /** + * Get whether auto start is enabled. + * + * @return True or false. + */ + public boolean isRecoveryEnabled() { + return recoveryEnabled; + } + + /** + * Set whether auto start is enabled. + * + * @param recoveryEnabled True or false. + */ + public void setRecoveryEnabled(boolean recoveryEnabled) { + this.recoveryEnabled = recoveryEnabled; + } + /** * Get auto deploy information. http://git-wip-us.apache.org/repos/asf/ambari/blob/27710808/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java index 0e97e1e..03d74a7 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java @@ -352,6 +352,24 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide sc.setDesiredState(s.getDesiredState()); } + /** + * If request does not have recovery_enabled field, + * then get the default from the stack definition. + */ + if (StringUtils.isNotEmpty(request.getRecoveryEnabled())) { + boolean recoveryEnabled = Boolean.parseBoolean(request.getRecoveryEnabled()); + sc.setRecoveryEnabled(recoveryEnabled); + } else { + StackId stackId = s.getDesiredStackVersion(); + ComponentInfo componentInfo = ambariMetaInfo.getComponent(stackId.getStackName(), + stackId.getStackVersion(), s.getName(), request.getComponentName()); + if (componentInfo == null) { + throw new AmbariException("Could not get component information from stack definition: Stack=" + + stackId.toString() + ", Service=" + s.getName() + ", Component=" + request.getComponentName()); + } + sc.setRecoveryEnabled(componentInfo.isRecoveryEnabled()); + } + s.addServiceComponent(sc); sc.persist(); } http://git-wip-us.apache.org/repos/asf/ambari/blob/27710808/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackServiceComponentResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackServiceComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackServiceComponentResourceProvider.java index bf5ad67..70945ba 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackServiceComponentResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackServiceComponentResourceProvider.java @@ -65,6 +65,9 @@ public class StackServiceComponentResourceProvider extends private static final String CUSTOM_COMMANDS_PROPERTY_ID = PropertyHelper.getPropertyId( "StackServiceComponents", "custom_commands"); + private static final String RECOVERY_ENABLED = PropertyHelper.getPropertyId( + "StackServiceComponents", "recovery_enabled"); + private static final String AUTO_DEPLOY_ENABLED_ID = PropertyHelper.getPropertyId( "auto_deploy", "enabled"); @@ -141,6 +144,9 @@ public class StackServiceComponentResourceProvider extends setResourceProperty(resource, ADVERTISE_VERSION_ID, response.isVersionAdvertised(), requestedIds); + setResourceProperty(resource, RECOVERY_ENABLED, + response.isRecoveryEnabled(), requestedIds); + setResourceProperty(resource, CUSTOM_COMMANDS_PROPERTY_ID, response.getCustomCommands(), requestedIds); @@ -165,7 +171,8 @@ public class StackServiceComponentResourceProvider extends (String) properties.get(STACK_NAME_PROPERTY_ID), (String) properties.get(STACK_VERSION_PROPERTY_ID), (String) properties.get(SERVICE_NAME_PROPERTY_ID), - (String) properties.get(COMPONENT_NAME_PROPERTY_ID)); + (String) properties.get(COMPONENT_NAME_PROPERTY_ID), + (String) properties.get(RECOVERY_ENABLED)); } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/27710808/ambari-server/src/main/java/org/apache/ambari/server/stack/ComponentModule.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/ComponentModule.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/ComponentModule.java index 18c6ef3..a122dc6 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/stack/ComponentModule.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/ComponentModule.java @@ -88,6 +88,8 @@ public class ComponentModule extends BaseModule<ComponentModule, ComponentInfo> componentInfo.setAutoDeploy(parentInfo.getAutoDeploy()); } + componentInfo.setRecoveryEnabled(parentInfo.isRecoveryEnabled()); + mergeComponentDependencies(parentInfo.getDependencies(), componentInfo.getDependencies()); http://git-wip-us.apache.org/repos/asf/ambari/blob/27710808/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java index fd68060..94c8053 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java @@ -90,6 +90,10 @@ public class ComponentInfo { @XmlElement(name="auto-deploy") private AutoDeployInfo autoDeploy; + @XmlElements(@XmlElement(name = "recovery_enabled")) + private Boolean recoveryEnabled = null; + + private String timelineAppid; public ComponentInfo() { @@ -146,6 +150,10 @@ public class ComponentInfo { return "MASTER".equals(category); } + public boolean isSlave() { + return "SLAVE".equals(category); + } + public boolean isDeleted() { return deleted; } @@ -247,6 +255,27 @@ public class ComponentInfo { return versionAdvertised; } + public void setRecoveryEnabled(boolean recoveryEnabled) { + this.recoveryEnabled = recoveryEnabled; + } + + public boolean isRecoveryEnabled() { + /** + * If recovery_enabled was not provided, then use defaults: + * Slave components: recovery_enabled = true + * Master components: recovery_enabled = false + * All others: recovery_enabled = false + */ + if (recoveryEnabled == null) { + if (isSlave()) { + recoveryEnabled = true; + } else { + recoveryEnabled = false; + } + } + return recoveryEnabled; + } + public List<String> getClientsToUpdateConfigs() { return clientsToUpdateConfigs; } http://git-wip-us.apache.org/repos/asf/ambari/blob/27710808/ambari-server/src/main/resources/properties.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/properties.json b/ambari-server/src/main/resources/properties.json index 0fc9766..01c15f2 100644 --- a/ambari-server/src/main/resources/properties.json +++ b/ambari-server/src/main/resources/properties.json @@ -243,6 +243,7 @@ "StackServiceComponents/is_master", "StackServiceComponents/cardinality", "StackServiceComponents/custom_commands", + "StackServiceComponents/recovery_enabled", "auto_deploy/enabled", "auto_deploy/location", "_" http://git-wip-us.apache.org/repos/asf/ambari/blob/27710808/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java index c624cfd..042c5d4 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java @@ -126,6 +126,7 @@ public class ComponentResourceProviderTest { ServiceComponentFactory serviceComponentFactory = createNiceMock(ServiceComponentFactory.class); ServiceComponent serviceComponent = createNiceMock(ServiceComponent.class); StackId stackId = createNiceMock(StackId.class); + ComponentInfo componentInfo = createNiceMock(ComponentInfo.class); expect(managementController.getClusters()).andReturn(clusters); expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo); @@ -143,6 +144,9 @@ public class ComponentResourceProviderTest { expect(ambariMetaInfo.isValidServiceComponent("HDP", "99", "Service100", "Component100")).andReturn(true).anyTimes(); + expect(componentInfo.isRecoveryEnabled()).andReturn(true).anyTimes(); + expect(ambariMetaInfo.getComponent("HDP", "99", "Service100", "Component100")).andReturn(componentInfo).anyTimes(); + expect(serviceComponentFactory.createNew(service, "Component100")).andReturn(serviceComponent); // replay
