You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sm...@apache.org on 2016/02/27 01:45:24 UTC

ambari git commit: AMBARI-15194: Auto-start services - Create default settings for auto start

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 <ns...@hortonworks.com>
Authored: Thu Feb 25 16:20:34 2016 -0800
Committer: Nahappan Somasundaram <ns...@hortonworks.com>
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