Repository: ambari Updated Branches: refs/heads/trunk e92007d04 -> fb25e19f6
AMBARI-11688. Install services request executes 40 seconds. (mpapirkovskyy) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fb25e19f Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fb25e19f Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fb25e19f Branch: refs/heads/trunk Commit: fb25e19f69549fa129c6370408c5f1b09b0097ce Parents: e92007d Author: Myroslav Papirkovskyy <mpapyrkovs...@hortonworks.com> Authored: Tue Jun 2 21:30:39 2015 +0300 Committer: Myroslav Papirkovskyy <mpapyrkovs...@hortonworks.com> Committed: Tue Jun 2 21:30:39 2015 +0300 ---------------------------------------------------------------------- .../actionmanager/ActionDBAccessorImpl.java | 2 +- .../server/actionmanager/HostRoleCommand.java | 14 +++++++++ .../actionmanager/HostRoleCommandFactory.java | 13 ++++++++ .../HostRoleCommandFactoryImpl.java | 17 +++++++++++ .../ambari/server/actionmanager/Stage.java | 31 ++++++++++++++++++++ .../AmbariManagementControllerImpl.java | 4 +-- .../internal/ServiceResourceProvider.java | 3 +- .../orm/entities/HostRoleCommandEntity.java | 4 +++ .../org/apache/ambari/server/state/Host.java | 5 ++++ .../server/state/ServiceComponentHost.java | 6 ++++ .../ambari/server/state/host/HostImpl.java | 5 ++++ .../svccomphost/ServiceComponentHostImpl.java | 5 ++++ .../stacks/HDPWIN/2.1/services/stack_advisor.py | 10 +++---- 13 files changed, 109 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java index c3dfdb5..959ed2d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionDBAccessorImpl.java @@ -262,7 +262,7 @@ public class ActionDBAccessorImpl implements ActionDBAccessor { HostRoleCommandEntity hostRoleCommandEntity = hostRoleCommand.constructNewPersistenceEntity(); hostRoleCommandEntity.setStage(stageEntity); - HostEntity hostEntity = hostDAO.findByName(hostRoleCommandEntity.getHostName()); + HostEntity hostEntity = hostDAO.findById(hostRoleCommandEntity.getHostId()); if (hostEntity == null) { String msg = String.format("Host %s doesn't exist in database", hostRoleCommandEntity.getHostName()); LOG.error(msg); http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommand.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommand.java index 871ce30..20ec9ea 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommand.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommand.java @@ -25,6 +25,7 @@ import org.apache.ambari.server.orm.dao.HostDAO; import org.apache.ambari.server.orm.entities.ExecutionCommandEntity; import org.apache.ambari.server.orm.entities.HostEntity; import org.apache.ambari.server.orm.entities.HostRoleCommandEntity; +import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.ServiceComponentHostEvent; import com.google.inject.Injector; @@ -104,6 +105,19 @@ public class HostRoleCommand { } @AssistedInject + public HostRoleCommand(Host host, Role role, ServiceComponentHostEvent event, RoleCommand command, + boolean retryAllowed, HostDAO hostDAO, ExecutionCommandDAO executionCommandDAO) { + this.hostDAO = hostDAO; + this.executionCommandDAO = executionCommandDAO; + + this.role = role; + this.event = new ServiceComponentHostEventWrapper(event); + this.roleCommand = command; + this.retryAllowed = retryAllowed; + this.hostEntity = hostDAO.findById(host.getHostId()); + } + + @AssistedInject public HostRoleCommand(@Assisted HostRoleCommandEntity hostRoleCommandEntity, HostDAO hostDAO, ExecutionCommandDAO executionCommandDAO) { this.hostDAO = hostDAO; this.executionCommandDAO = executionCommandDAO; http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommandFactory.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommandFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommandFactory.java index 0c92526..84c2d2a 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommandFactory.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommandFactory.java @@ -21,6 +21,7 @@ package org.apache.ambari.server.actionmanager; import org.apache.ambari.server.Role; import org.apache.ambari.server.RoleCommand; import org.apache.ambari.server.orm.entities.HostRoleCommandEntity; +import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.ServiceComponentHostEvent; public interface HostRoleCommandFactory { @@ -47,6 +48,18 @@ public interface HostRoleCommandFactory { HostRoleCommand create(String hostName, Role role, ServiceComponentHostEvent event, RoleCommand command, boolean retryAllowed); /** + * Constructor via factory. + * @param host Host object + * @param role Action to run + * @param event Event on the host and component + * @param command Type of command + * @param retryAllowed Whether the command can be repeated + * @return An instance of a HostRoleCommand. + */ + HostRoleCommand create(Host host, Role role, ServiceComponentHostEvent event, RoleCommand command, boolean + retryAllowed); + + /** * Constructor via factory * @param hostRoleCommandEntity Object to copy fields from. * @return An instance constructed from the input object. http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommandFactoryImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommandFactoryImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommandFactoryImpl.java index 653da89..0440f87 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommandFactoryImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/HostRoleCommandFactoryImpl.java @@ -26,6 +26,7 @@ import org.apache.ambari.server.RoleCommand; import org.apache.ambari.server.orm.dao.ExecutionCommandDAO; import org.apache.ambari.server.orm.dao.HostDAO; import org.apache.ambari.server.orm.entities.HostRoleCommandEntity; +import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.ServiceComponentHostEvent; @Singleton @@ -72,6 +73,22 @@ public class HostRoleCommandFactoryImpl implements HostRoleCommandFactory { } /** + * Constructor via factory. + * @param host Host object + * @param role Action to run + * @param event Event on the host and component + * @param command Type of command + * @param retryAllowed Whether the command can be repeated + * @return An instance of a HostRoleCommand. + */ + @Override + public HostRoleCommand create(Host host, Role role, ServiceComponentHostEvent event, RoleCommand command, boolean retryAllowed) { + return new HostRoleCommand(host, role, event, command, retryAllowed, + this.injector.getInstance(HostDAO.class), + this.injector.getInstance(ExecutionCommandDAO.class)); + } + + /** * Constructor via factory * @param hostRoleCommandEntity Object to copy fields from. * @return An instance constructed from the input object. http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java index 135bdc1..17411ac 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/Stage.java @@ -37,7 +37,9 @@ import org.apache.ambari.server.orm.entities.HostRoleCommandEntity; import org.apache.ambari.server.orm.entities.RoleSuccessCriteriaEntity; import org.apache.ambari.server.orm.entities.StageEntity; import org.apache.ambari.server.serveraction.ServerAction; +import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.ServiceComponentHostEvent; import org.apache.ambari.server.state.svccomphost.ServiceComponentHostServerActionEvent; import org.apache.ambari.server.utils.StageUtils; @@ -270,6 +272,19 @@ public class Stage { //used on stage creation only, no need to check if wrappers loaded HostRoleCommand hrc = hostRoleCommandFactory.create(hostName, role, event, command, retryAllowed); + return addGenericExecutionCommand(clusterName, hostName, role, command, event, hrc); + } + + private ExecutionCommandWrapper addGenericExecutionCommand( + Cluster cluster, Host host, Role role, + RoleCommand command, ServiceComponentHostEvent event, boolean retryAllowed) { + HostRoleCommand hrc = hostRoleCommandFactory.create(host, role, event, command, retryAllowed); + return addGenericExecutionCommand(cluster.getClusterName(), host.getHostName(), role, command, event, hrc); + + } + + //TODO refactor method to use Host object (host_id support) + private ExecutionCommandWrapper addGenericExecutionCommand(String clusterName, String hostName, Role role, RoleCommand command, ServiceComponentHostEvent event, HostRoleCommand hrc) { ExecutionCommand cmd = new ExecutionCommand(); ExecutionCommandWrapper wrapper = new ExecutionCommandWrapper(cmd); hrc.setExecutionCommandWrapper(wrapper); @@ -325,6 +340,22 @@ public class Stage { } /** + * A new host role command is created for execution. + * Creates both ExecutionCommand and HostRoleCommand objects and + * adds them to the Stage. This should be called only once for a host-role + * for a given stage. + */ + public synchronized void addHostRoleExecutionCommand(Host host, Role role, RoleCommand command, + ServiceComponentHostEvent event, Cluster cluster, + String serviceName, boolean retryAllowed) { + + ExecutionCommandWrapper commandWrapper = + addGenericExecutionCommand(cluster, host, role, command, event, retryAllowed); + + commandWrapper.getExecutionCommand().setServiceName(serviceName); + } + + /** * Creates server-side execution command. * <p/> * The action name for this command is expected to be the classname of a http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/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 b9b2b1a..a675c26 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 @@ -1774,9 +1774,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle String serviceName = scHost.getServiceName(); - stage.addHostRoleExecutionCommand(scHost.getHostName(), Role.valueOf(scHost + stage.addHostRoleExecutionCommand(scHost.getHost(), Role.valueOf(scHost .getServiceComponentName()), roleCommand, - event, scHost.getClusterName(), + event, cluster, serviceName, false); String componentName = scHost.getServiceComponentName(); String hostname = scHost.getHostName(); http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java index 96cad45..a13bbd3 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java @@ -168,7 +168,6 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider } @Override - @Transactional public Set<Resource> getResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException { @@ -484,7 +483,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider } // Get services from the given request. - private synchronized Set<ServiceResponse> getServices(ServiceRequest request) + private Set<ServiceResponse> getServices(ServiceRequest request) throws AmbariException { if (request.getClusterName() == null || request.getClusterName().isEmpty()) { http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostRoleCommandEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostRoleCommandEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostRoleCommandEntity.java index 81a1b00..a2e5b31 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostRoleCommandEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostRoleCommandEntity.java @@ -196,6 +196,10 @@ public class HostRoleCommandEntity { return hostEntity != null ? hostEntity.getHostName() : null; } + public Long getHostId() { + return hostEntity != null ? hostEntity.getHostId() : null; + } + public Role getRole() { return Role.valueOf(role); } http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/state/Host.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Host.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Host.java index d8a6c6a..7a53c21 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/Host.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Host.java @@ -38,6 +38,11 @@ public interface Host { public String getHostName(); /** + * @return host id + */ + Long getHostId(); + + /** * @param hostName the hostName to set */ public void setHostName(String hostName); http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java index 0c614dd..2dc4789 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java @@ -59,6 +59,12 @@ public interface ServiceComponentHost { public String getHostName(); /** + * Get the Host this object maps to + * @return Host Object + */ + Host getHost(); + + /** * Send a ServiceComponentHostState event to the StateMachine * @param event Event to handle * @throws InvalidStateTransitionException http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java index cb19286..e59f4aa 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java @@ -599,6 +599,11 @@ public class HostImpl implements Host { } @Override + public Long getHostId() { + return hostEntity.getHostId(); + } + + @Override public void setHostName(String hostName) { try { writeLock.lock(); http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java index 5bf2506..484bf79 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java @@ -940,6 +940,11 @@ public class ServiceComponentHostImpl implements ServiceComponentHost { return host.getHostName(); } + @Override + public Host getHost() { + return host; + } + /** * @return the lastOpStartTime */ http://git-wip-us.apache.org/repos/asf/ambari/blob/fb25e19f/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/stack_advisor.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/stack_advisor.py index 0affe64..dc64770 100644 --- a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/stack_advisor.py +++ b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/stack_advisor.py @@ -209,8 +209,8 @@ class HDPWIN21StackAdvisor(DefaultStackAdvisor): putAmsHbaseSiteProperty("hbase.regionserver.global.memstore.lowerLimit", 0.25) putAmsHbaseSiteProperty("phoenix.query.maxGlobalMemoryPercentage", 20) putTimelineServiceProperty("phoenix.query.maxGlobalMemoryPercentage", 30) - putAmsHbaseSiteProperty("hbase_master_xmn_size", "512m") - putAmsHbaseSiteProperty("regionserver_xmn_size", "512m") + putHbaseEnvProperty("hbase_master_xmn_size", "512m") + putHbaseEnvProperty("regionserver_xmn_size", "512m") elif totalHostsCount >= 100: putHbaseEnvProperty("hbase_regionserver_heapsize", "6144m") putAmsEnvProperty("metrics_collector_heapsize", "4096m") @@ -218,18 +218,18 @@ class HDPWIN21StackAdvisor(DefaultStackAdvisor): putAmsHbaseSiteProperty("hbase.regionserver.hlog.blocksize", 134217728) putAmsHbaseSiteProperty("hbase.regionserver.maxlogs", 64) putAmsHbaseSiteProperty("hbase.hregion.memstore.flush.size", 268435456) - putAmsHbaseSiteProperty("hbase_master_xmn_size", "512m") + putHbaseEnvProperty("hbase_master_xmn_size", "512m") elif totalHostsCount >= 50: putHbaseEnvProperty("hbase_regionserver_heapsize", "2048m") putHbaseEnvProperty("hbase_master_heapsize", "512m") putAmsEnvProperty("metrics_collector_heapsize", "2048m") - putAmsHbaseSiteProperty("hbase_master_xmn_size", "256m") + putHbaseEnvProperty("hbase_master_xmn_size", "256m") else: # Embedded mode heap size : master + regionserver putHbaseEnvProperty("hbase_regionserver_heapsize", "512m") putHbaseEnvProperty("hbase_master_heapsize", "512m") putAmsEnvProperty("metrics_collector_heapsize", "512m") - putAmsHbaseSiteProperty("hbase_master_xmn_size", "128m") + putHbaseEnvProperty("hbase_master_xmn_size", "128m") pass pass