AMBARI-10301 - Stack Database Table Creation and Population From Resources (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/69197e63 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/69197e63 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/69197e63 Branch: refs/heads/trunk Commit: 69197e6302f28e69ccfc11b1e31d77d9dcf61a97 Parents: cc4a9a3 Author: Jonathan Hurley <[email protected]> Authored: Tue Mar 31 15:53:23 2015 -0400 Committer: Jonathan Hurley <[email protected]> Committed: Wed Apr 1 19:00:42 2015 -0400 ---------------------------------------------------------------------- .../server/api/services/AmbariMetaInfo.java | 44 ++--- .../server/configuration/Configuration.java | 12 +- .../ambari/server/controller/AmbariServer.java | 4 - .../server/controller/ControllerModule.java | 5 +- .../apache/ambari/server/orm/dao/StackDAO.java | 160 +++++++++++++++++++ .../ambari/server/orm/entities/StackEntity.java | 154 ++++++++++++++++++ .../server/orm/entities/StackEntity_.java | 35 ++++ .../ambari/server/stack/StackManager.java | 77 +++++++-- .../server/stack/StackManagerFactory.java | 48 ++++++ .../server/upgrade/UpgradeCatalog210.java | 38 ++++- .../main/resources/Ambari-DDL-MySQL-CREATE.sql | 9 ++ .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 8 + .../resources/Ambari-DDL-Postgres-CREATE.sql | 12 +- .../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql | 12 +- .../resources/Ambari-DDL-SQLServer-CREATE.sql | 12 +- .../src/main/resources/META-INF/persistence.xml | 3 +- .../actionmanager/TestActionDBAccessorImpl.java | 4 + .../ambari/server/agent/AgentResourceTest.java | 57 ++++--- .../server/agent/TestHeartbeatHandler.java | 6 +- .../server/agent/TestHeartbeatMonitor.java | 3 +- .../server/api/services/AmbariMetaInfoTest.java | 61 +++++-- .../services/KerberosServiceMetaInfoTest.java | 56 +++++-- .../AmbariCustomCommandExecutionHelperTest.java | 5 +- .../AmbariManagementControllerTest.java | 17 +- .../BackgroundCustomCommandExecutionTest.java | 4 +- .../server/controller/KerberosHelperTest.java | 50 +++--- ...hYarnCapacitySchedulerReleaseConfigTest.java | 4 +- ...ClusterStackVersionResourceProviderTest.java | 69 +++----- .../HostStackVersionResourceProviderTest.java | 44 ++--- .../internal/JMXHostProviderTest.java | 23 +-- .../StackArtifactResourceProviderTest.java | 38 ++--- .../HostVersionOutOfSyncListenerTest.java | 17 +- .../scheduler/ExecutionScheduleManagerTest.java | 59 ++++--- .../stack/StackManagerCommonServicesTest.java | 111 ++++++++----- .../server/stack/StackManagerMiscTest.java | 69 +++++--- .../ambari/server/stack/StackManagerTest.java | 64 ++++---- .../ambari/server/state/ConfigGroupTest.java | 18 +-- .../ambari/server/state/ConfigHelperTest.java | 34 ++-- .../server/state/RequestExecutionTest.java | 17 +- .../server/state/ServiceComponentTest.java | 2 - .../apache/ambari/server/state/ServiceTest.java | 1 - .../ambari/server/state/UpgradeHelperTest.java | 1 - .../state/alerts/AlertEventPublisherTest.java | 1 - .../state/alerts/InitialAlertEventTest.java | 1 - .../state/cluster/ClusterDeadlockTest.java | 2 - .../server/state/cluster/ClusterTest.java | 3 +- .../state/cluster/ClustersDeadlockTest.java | 1 - .../server/state/cluster/ClustersTest.java | 3 +- .../ambari/server/state/host/HostTest.java | 4 +- .../server/state/stack/UpgradePackTest.java | 4 +- .../svccomphost/ServiceComponentHostTest.java | 7 +- .../ambari/server/utils/TestStageUtils.java | 2 - 52 files changed, 1074 insertions(+), 421 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java index 3e37c3c..e87cd57 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java @@ -47,15 +47,14 @@ import org.apache.ambari.server.customactions.ActionDefinitionManager; import org.apache.ambari.server.events.AlertDefinitionDisabledEvent; import org.apache.ambari.server.events.AlertDefinitionRegistrationEvent; import org.apache.ambari.server.events.publishers.AmbariEventPublisher; -import org.apache.ambari.server.metadata.ActionMetadata; import org.apache.ambari.server.metadata.AgentAlertDefinitions; import org.apache.ambari.server.orm.dao.AlertDefinitionDAO; import org.apache.ambari.server.orm.dao.MetainfoDAO; import org.apache.ambari.server.orm.entities.AlertDefinitionEntity; import org.apache.ambari.server.orm.entities.MetainfoEntity; -import org.apache.ambari.server.stack.StackContext; import org.apache.ambari.server.stack.StackDirectory; import org.apache.ambari.server.stack.StackManager; +import org.apache.ambari.server.stack.StackManagerFactory; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.ComponentInfo; @@ -92,8 +91,6 @@ import com.google.inject.Singleton; */ @Singleton public class AmbariMetaInfo { - - public static final String SERVICE_CONFIG_FOLDER_NAME = "configuration"; public static final String SERVICE_THEMES_FOLDER_NAME = "themes"; public static final String SERVICE_CONFIG_FILE_NAME_POSTFIX = ".xml"; @@ -137,7 +134,7 @@ public class AmbariMetaInfo { // all the supported OS'es @Inject - private OsFamily os_family; + private OsFamily osFamily; /** * ALL_SUPPORTED_OS is dynamically generated list from loaded families from os_family.json @@ -147,7 +144,6 @@ public class AmbariMetaInfo { private final ActionDefinitionManager adManager = new ActionDefinitionManager(); private String serverVersion = "undefined"; - private StackManager stackManager; private File stackRoot; private File commonServicesRoot; @@ -161,7 +157,7 @@ public class AmbariMetaInfo { * Alert Definition DAO used to merge stack definitions into the database. */ @Inject - AlertDefinitionDAO alertDefinitionDao; + private AlertDefinitionDAO alertDefinitionDao; /** * A factory that assists in the creation of {@link AlertDefinition} and @@ -200,10 +196,16 @@ public class AmbariMetaInfo { @Inject private KerberosServiceDescriptorFactory kerberosServiceDescriptorFactory; - //todo: only used by StackManager + /** + * Factory for injecting {@link StackManager} instances. + */ @Inject - ActionMetadata actionMetadata; + private StackManagerFactory stackManagerFactory; + /** + * Singleton instance of the stack manager. + */ + private StackManager stackManager; /** * Ambari Meta Info Object @@ -214,22 +216,17 @@ public class AmbariMetaInfo { @Inject public AmbariMetaInfo(Configuration conf) throws Exception { String stackPath = conf.getMetadataPath(); - String commonServicesPath = conf.getCommonServicesPath(); - String serverVersionFilePath = conf.getServerVersionFilePath(); stackRoot = new File(stackPath); + + String commonServicesPath = conf.getCommonServicesPath(); if(commonServicesPath != null && !commonServicesPath.isEmpty()) { commonServicesRoot = new File(commonServicesPath); } + + String serverVersionFilePath = conf.getServerVersionFilePath(); serverVersionFile = new File(serverVersionFilePath); - customActionRoot = new File(conf.getCustomActionDefinitionPath()); - os_family = new OsFamily(conf); - ALL_SUPPORTED_OS = new ArrayList<String>(os_family.os_list()); - } - public AmbariMetaInfo(File stackRoot, File commonServicesRoot, File serverVersionFile) throws Exception { - this.stackRoot = stackRoot; - this.commonServicesRoot = commonServicesRoot; - this.serverVersionFile = serverVersionFile; + customActionRoot = new File(conf.getCustomActionDefinitionPath()); } /** @@ -240,10 +237,13 @@ public class AmbariMetaInfo { @Inject public void init() throws Exception { // Need to be initialized before all actions - ALL_SUPPORTED_OS = new ArrayList<String>(os_family.os_list()); + ALL_SUPPORTED_OS = new ArrayList<String>(osFamily.os_list()); + readServerVersion(); - stackManager = new StackManager(stackRoot, commonServicesRoot, - new StackContext(metaInfoDAO, actionMetadata, os_family)); + + stackManager = stackManagerFactory.create(stackRoot, commonServicesRoot, + osFamily); + getCustomActionDefinitions(customActionRoot); } http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java index f6cf6a1..740532a 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java @@ -51,7 +51,7 @@ import com.google.inject.Singleton; */ @Singleton public class Configuration { - + @Inject private OsFamily osFamily; @@ -576,6 +576,16 @@ public class Configuration { } /** + * Gets a copy of all of the configuration properties that back this + * {@link Configuration} instance. + * + * @return a copy of all of the properties. + */ + public Properties getProperties() { + return new Properties(properties); + } + + /** * Loads trusted certificates store properties */ protected void loadSSLParams(){ http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java index 9b340ee..7ea96be 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java @@ -203,10 +203,6 @@ public class AmbariServer { @SuppressWarnings("deprecation") public void run() throws Exception { - // Initialize meta info before heartbeat monitor - ambariMetaInfo.init(); - LOG.info("********* Meta Info initialized **********"); - performStaticInjection(); initDB(); server = new Server(); http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java index 9c8bcd7..58b94d8 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java @@ -73,6 +73,7 @@ import org.apache.ambari.server.scheduler.ExecutionSchedulerImpl; import org.apache.ambari.server.security.SecurityHelper; import org.apache.ambari.server.security.SecurityHelperImpl; import org.apache.ambari.server.serveraction.kerberos.KerberosOperationHandlerFactory; +import org.apache.ambari.server.stack.StackManagerFactory; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Config; @@ -364,7 +365,6 @@ public class ControllerModule extends AbstractModule { install(new FactoryModuleBuilder().implement( Service.class, ServiceImpl.class).build(ServiceFactory.class)); - install(new FactoryModuleBuilder() .implement(ResourceProvider.class, Names.named("host"), HostResourceProvider.class) .implement(ResourceProvider.class, Names.named("hostComponent"), HostComponentResourceProvider.class) @@ -374,7 +374,6 @@ public class ControllerModule extends AbstractModule { .implement(ResourceProvider.class, Names.named("repositoryVersion"), RepositoryVersionResourceProvider.class) .build(ResourceProviderFactory.class)); - install(new FactoryModuleBuilder().implement( ServiceComponent.class, ServiceComponentImpl.class).build( ServiceComponentFactory.class)); @@ -387,8 +386,10 @@ public class ControllerModule extends AbstractModule { ConfigGroup.class, ConfigGroupImpl.class).build(ConfigGroupFactory.class)); install(new FactoryModuleBuilder().implement(RequestExecution.class, RequestExecutionImpl.class).build(RequestExecutionFactory.class)); + install(new FactoryModuleBuilder().build(StageFactory.class)); install(new FactoryModuleBuilder().build(RequestFactory.class)); + install(new FactoryModuleBuilder().build(StackManagerFactory.class)); bind(HostRoleCommandFactory.class).to(HostRoleCommandFactoryImpl.class); bind(SecurityHelper.class).toInstance(SecurityHelperImpl.getInstance()); http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java new file mode 100644 index 0000000..6405068 --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/StackDAO.java @@ -0,0 +1,160 @@ +/** + * 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.ambari.server.orm.dao; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; + +import org.apache.ambari.server.AmbariException; +import org.apache.ambari.server.orm.entities.StackEntity; + +import com.google.inject.Inject; +import com.google.inject.Provider; +import com.google.inject.Singleton; +import com.google.inject.persist.Transactional; + +/** + * The {@link StackDAO} class is used to manage the persistence and retrieval of + * {@link StackEntity} instances. + */ +@Singleton +public class StackDAO { + + /** + * JPA entity manager + */ + @Inject + private Provider<EntityManager> entityManagerProvider; + + /** + * DAO utilities for dealing mostly with {@link TypedQuery} results. + */ + @Inject + private DaoUtils daoUtils; + + /** + * Gets a stack with the specified ID. + * + * @param stackId + * the ID of the stack to retrieve. + * @return the stack or {@code null} if none exists. + */ + public StackEntity findById(long stackId) { + return entityManagerProvider.get().find(StackEntity.class, stackId); + } + + /** + * Gets all of the defined stacks. + * + * @return all of the stacks loaded from resources or an empty list (never + * {@code null}). + */ + public List<StackEntity> findAll() { + TypedQuery<StackEntity> query = entityManagerProvider.get().createNamedQuery( + "StackEntity.findAll", StackEntity.class); + + return daoUtils.selectList(query); + } + + /** + * Gets the stack that matches the specified name and version. + * + * @return the stack matching the specified name and version or {@code null} + * if none. + */ + public StackEntity find(String stackName, String stackVersion) { + TypedQuery<StackEntity> query = entityManagerProvider.get().createNamedQuery( + "StackEntity.findByNameAndVersion", StackEntity.class); + + query.setParameter("stackName", stackName); + query.setParameter("stackVersion", stackVersion); + + return daoUtils.selectOne(query); + } + + /** + * Persists a new stack instance. + * + * @param stack + * the stack to persist (not {@code null}). + */ + @Transactional + public void create(StackEntity stack) + throws AmbariException { + EntityManager entityManager = entityManagerProvider.get(); + entityManager.persist(stack); + } + + /** + * Refresh the state of the stack instance from the database. + * + * @param stack + * the stack to refresh (not {@code null}). + */ + @Transactional + public void refresh(StackEntity stack) { + entityManagerProvider.get().refresh(stack); + } + + /** + * Merge the speicified stack with the existing stack in the database. + * + * @param stack + * the stack to merge (not {@code null}). + * @return the updated stack with merged content (never {@code null}). + */ + @Transactional + public StackEntity merge(StackEntity stack) { + return entityManagerProvider.get().merge(stack); + } + + /** + * Creates or updates the specified entity. This method will check + * {@link StackEntity#getStackId()} in order to determine whether the entity + * should be created or merged. + * + * @param stack + * the stack to create or update (not {@code null}). + */ + public void createOrUpdate(StackEntity stack) + throws AmbariException { + if (null == stack.getStackId()) { + create(stack); + } else { + merge(stack); + } + } + + /** + * Removes the specified stack and all related clusters, services and + * components. + * + * @param stack + * the stack to remove. + */ + @Transactional + public void remove(StackEntity stack) { + EntityManager entityManager = entityManagerProvider.get(); + stack = findById(stack.getStackId()); + if (null != stack) { + entityManager.remove(stack); + } + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity.java new file mode 100644 index 0000000..2d75917 --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity.java @@ -0,0 +1,154 @@ +/** + * 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.ambari.server.orm.entities; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; +import javax.persistence.TableGenerator; +import javax.persistence.UniqueConstraint; + +/** + * The {@link StackEntity} class is used to model an alert that needs + * to run in the system. Each received alert from an agent will essentially be + * an instance of this template. + */ +@Entity +@Table(name = "stack", uniqueConstraints = @UniqueConstraint(columnNames = { + "stack_name", "stack_version" })) +@TableGenerator(name = "stack_id_generator", table = "ambari_sequences", pkColumnName = "sequence_name", valueColumnName = "sequence_value", pkColumnValue = "stack_id_seq", initialValue = 0, allocationSize = 1) +@NamedQueries({ + @NamedQuery(name = "StackEntity.findAll", query = "SELECT stack FROM StackEntity stack"), + @NamedQuery(name = "StackEntity.findByNameAndVersion", query = "SELECT stack FROM StackEntity stack WHERE stack.stackName = :stackName AND stack.stackVersion = :stackVersion") }) +public class StackEntity { + + @Id + @GeneratedValue(strategy = GenerationType.TABLE, generator = "stack_id_generator") + @Column(name = "stack_id", nullable = false, updatable = false) + private Long stackId; + + @Column(name = "stack_name", length = 255, nullable = false) + private String stackName; + + @Column(name = "stack_version", length = 255, nullable = false) + private String stackVersion; + + /** + * Constructor. + */ + public StackEntity() { + } + + /** + * Gets the unique identifier for this stack. + * + * @return the ID. + */ + public Long getStackId() { + return stackId; + } + + /** + * Gets the name of the stack, such as "HDP". + * + * @return the name of the stack (never {@code null}). + */ + public String getStackName() { + return stackName; + } + + /** + * Sets the name of the stack, such as "HDP". + * + * @param stackName + * the stack name (not {@code null}). + */ + public void setStackName(String stackName) { + this.stackName = stackName; + } + + /** + * Gets the version of the stack, such as "2.2". + * + * @return the stack version (never {@code null}). + */ + public String getStackVersion() { + return stackVersion; + } + + /** + * Sets the version of the stack, such as "2.2". + * + * @param stackVersion + * the stack version (not {@code null}). + */ + public void setStackVersion(String stackVersion) { + this.stackVersion = stackVersion; + } + + /** + * + */ + @Override + public boolean equals(Object object) { + if (this == object) { + return true; + } + + if (object == null || getClass() != object.getClass()) { + return false; + } + + StackEntity that = (StackEntity) object; + + if (stackId != null ? !stackId.equals(that.stackId) : that.stackId != null) { + return false; + } + + return true; + } + + /** + * + */ + @Override + public int hashCode() { + int result = null != stackId ? stackId.hashCode() : 0; + return result; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + StringBuilder buffer = new StringBuilder(); + buffer.append(getClass().getSimpleName()); + buffer.append("{"); + buffer.append("id=").append(stackId); + buffer.append(", name=").append(stackName); + buffer.append(", version=").append(stackVersion); + buffer.append("}"); + return buffer.toString(); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity_.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity_.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity_.java new file mode 100644 index 0000000..37396dd --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity_.java @@ -0,0 +1,35 @@ +/* + * 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.ambari.server.orm.entities; + +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.metamodel.SingularAttribute; +import javax.persistence.metamodel.StaticMetamodel; + + +/** + * The {@link StackEntity_} is a strongly typed metamodel for creating + * {@link CriteriaQuery} for {@link StackEntity}. + */ +@StaticMetamodel(StackEntity.class) +public class StackEntity_ { + public static volatile SingularAttribute<StackEntity, Long> stackId; + public static volatile SingularAttribute<StackEntity, String> stackName; + public static volatile SingularAttribute<StackEntity, String> stackVersion; +} http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java index 33f1447..1026245 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java @@ -18,21 +18,30 @@ package org.apache.ambari.server.stack; +import java.io.File; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +import javax.annotation.Nullable; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.Configuration; +import org.apache.ambari.server.metadata.ActionMetadata; +import org.apache.ambari.server.orm.dao.MetainfoDAO; +import org.apache.ambari.server.orm.dao.StackDAO; +import org.apache.ambari.server.orm.entities.StackEntity; import org.apache.ambari.server.state.ServiceInfo; import org.apache.ambari.server.state.StackInfo; +import org.apache.ambari.server.state.stack.OsFamily; import org.apache.ambari.server.state.stack.ServiceMetainfoXml; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import com.google.inject.Inject; +import com.google.inject.assistedinject.Assisted; /** @@ -70,27 +79,59 @@ public class StackManager { private Map<String, StackInfo> stackMap = new HashMap<String, StackInfo>(); /** - * Constructor. - * Initialize stack manager. + * Constructor. Initialize stack manager. * - * @param stackRoot stack root directory - * @param commonServicesRoot common services root directory - * @param stackContext context which provides external functionality + * @param stackRoot + * stack root directory + * @param commonServicesRoot + * common services root directory + * @param osFamily + * the OS family read from resources + * @param metaInfoDAO + * metainfo DAO automatically injected + * @param actionMetadata + * action meta data automatically injected + * @param stackDao + * stack DAO automatically injected * - * @throws AmbariException if an exception occurs while processing the stacks + * @throws AmbariException + * if an exception occurs while processing the stacks */ - public StackManager(File stackRoot, File commonServicesRoot, StackContext stackContext) throws AmbariException { + @Inject + public StackManager(@Assisted("stackRoot") File stackRoot, + @Assisted("commonServicesRoot") @Nullable File commonServicesRoot, + @Assisted OsFamily osFamily, MetainfoDAO metaInfoDAO, + ActionMetadata actionMetadata, StackDAO stackDao) + throws AmbariException { + validateStackDirectory(stackRoot); validateCommonServicesDirectory(commonServicesRoot); - this.stackMap = new HashMap<String, StackInfo>(); - this.stackContext = stackContext; + stackMap = new HashMap<String, StackInfo>(); + stackContext = new StackContext(metaInfoDAO, actionMetadata, osFamily); Map<String, ServiceModule> commonServiceModules = parseCommonServicesDirectory(commonServicesRoot); Map<String, StackModule> stackModules = parseStackDirectory(stackRoot); fullyResolveCommonServices(stackModules, commonServiceModules); fullyResolveStacks(stackModules, commonServiceModules); + + // for every stack read in, ensure that we have a database entry for it; + // don't put try/catch logic around this since a failure here will + // cause other things to break down the road + Collection<StackInfo> stacks = getStacks(); + for( StackInfo stack : stacks ){ + String stackName = stack.getName(); + String stackVersion = stack.getVersion(); + + if (stackDao.find(stackName, stackVersion) == null) { + StackEntity stackEntity = new StackEntity(); + stackEntity.setStackName(stackName); + stackEntity.setStackVersion(stackVersion); + + stackDao.create(stackEntity); + } + } } /** @@ -201,10 +242,11 @@ public class StackManager { + ", commonServicesRoot = " + commonServicesRootAbsolutePath); } - if (!commonServicesRoot.isDirectory() && !commonServicesRoot.exists()) + if (!commonServicesRoot.isDirectory() && !commonServicesRoot.exists()) { throw new AmbariException("" + Configuration.COMMON_SERVICES_DIR_PATH + " should be a directory with common services" + ", commonServicesRoot = " + commonServicesRootAbsolutePath); + } } } @@ -221,10 +263,11 @@ public class StackManager { + ", stackRoot = " + stackRootAbsPath); } - if (!stackRoot.isDirectory() && !stackRoot.exists()) + if (!stackRoot.isDirectory() && !stackRoot.exists()) { throw new AmbariException("" + Configuration.METADETA_DIR_PATH + " should be a directory with stack" + ", stackRoot = " + stackRootAbsPath); + } } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManagerFactory.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManagerFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManagerFactory.java new file mode 100644 index 0000000..5aa2b5f --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManagerFactory.java @@ -0,0 +1,48 @@ +/** + * 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.ambari.server.stack; + +import java.io.File; + +import javax.annotation.Nullable; + +import org.apache.ambari.server.state.stack.OsFamily; + +import com.google.inject.assistedinject.Assisted; +import com.google.inject.assistedinject.AssistedInject; + +/** + * The {@link StackManagerFactory} is used along with {@link AssistedInject} to + * build instances of {@link StackManager}. + */ +public interface StackManagerFactory { + + /** + * @param stackRoot + * the root of the stack (not {@code null}). + * @param commonServicesRoot + * the root of the common services from which other stack services + * are extended (not {@code null}). + * @param osFamily + * the list of all parsed OS families (not {@code null}). + * @return a stack manager instance which contains all parsed stacks. + */ + StackManager create(@Assisted("stackRoot") File stackRoot, + @Nullable @Assisted("commonServicesRoot") File commonServicesRoot, + OsFamily osFamily); +} http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java index 7bdfb4f..23ed67d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java @@ -18,9 +18,11 @@ package org.apache.ambari.server.upgrade; -import com.google.inject.Inject; -import com.google.inject.Injector; -import com.google.inject.persist.Transactional; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo; @@ -29,10 +31,9 @@ import org.apache.ambari.server.orm.entities.HostEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; +import com.google.inject.Inject; +import com.google.inject.Injector; +import com.google.inject.persist.Transactional; /** @@ -59,6 +60,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { private static final String WIDGET_LAYOUT_USER_WIDGET_TABLE = "widget_layout_user_widget"; private static final String VIEW_INSTANCE_TABLE = "viewinstance"; private static final String VIEW_PARAMETER_TABLE = "viewparameter"; + private static final String STACK_TABLE_DEFINITION = "stack"; /** * {@inheritDoc} @@ -103,6 +105,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { protected void executeDDLUpdates() throws AmbariException, SQLException { executeHostsDDLUpdates(); executeWidgetDDLUpdates(); + executeStackDDLUpdates(); } /** @@ -272,6 +275,27 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { dbAccessor.addFKConstraint(WIDGET_LAYOUT_USER_WIDGET_TABLE, "FK_user_widget_id", "user_widget_id", "user_widget", "id", true, false); } + /** + * Adds the stack table and constraints. + */ + private void executeStackDDLUpdates() throws AmbariException, SQLException { + // alert_definition + ArrayList<DBColumnInfo> columns = new ArrayList<DBColumnInfo>(); + columns.add(new DBColumnInfo("stack_id", Long.class, null, null, false)); + columns.add(new DBColumnInfo("stack_name", String.class, 255, null, false)); + columns.add(new DBColumnInfo("stack_version", String.class, 255, null, + false)); + + dbAccessor.createTable(STACK_TABLE_DEFINITION, columns, "stack_id"); + + dbAccessor.executeQuery("ALTER TABLE " + STACK_TABLE_DEFINITION + + " ADD CONSTRAINT unq_stack UNIQUE (stack_name,stack_version)", false); + + dbAccessor.executeQuery( + "INSERT INTO ambari_sequences(sequence_name, sequence_value) VALUES('stack_id_seq', 0)", + false); + } + // ----- UpgradeCatalog ---------------------------------------------------- /** http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql index e28edfd..af10a0e 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql @@ -832,6 +832,14 @@ CREATE TABLE upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id) ); +CREATE TABLE stack( + stack_id BIGINT NOT NULL, + stack_name VARCHAR(255) NOT NULL, + stack_version VARCHAR(255) NOT NULL, + PRIMARY KEY (stack_id), + CONSTRAINT uni_stack UNIQUE(stack_name,stack_version) +); + -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0. INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('cluster_id_seq', 1); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('host_id_seq', 0); @@ -865,6 +873,7 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('repo_versio INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_id_seq', 0); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_group_id_seq', 0); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_item_id_seq', 0); +INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('stack_id_seq', 0); insert into adminresourcetype (resource_type_id, resource_type_name) select 1, 'AMBARI' http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql index 513d951..ff73f60 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql @@ -822,6 +822,13 @@ CREATE TABLE upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id) ); +CREATE TABLE stack( + stack_id NUMBER(19) NOT NULL, + stack_name VARCHAR2(255) NOT NULL, + stack_version VARCHAR2(255) NOT NULL, + PRIMARY KEY (stack_id), + CONSTRAINT uni_stack UNIQUE(stack_name,stack_version) +); ---------inserting some data----------- -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0. @@ -857,6 +864,7 @@ INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('repo_versio INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_id_seq', 0); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_group_id_seq', 0); INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('upgrade_item_id_seq', 0); +INSERT INTO ambari_sequences(sequence_name, sequence_value) values ('stack_id_seq', 0); INSERT INTO metainfo("metainfo_key", "metainfo_value") values ('version', '${ambariVersion}'); http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql index 6361edb..e48ea7a 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql @@ -824,6 +824,14 @@ CREATE TABLE upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id) ); +CREATE TABLE stack( + stack_id BIGINT NOT NULL, + stack_name VARCHAR(255) NOT NULL, + stack_version VARCHAR(255) NOT NULL, + PRIMARY KEY (stack_id), + CONSTRAINT uni_stack UNIQUE(stack_name,stack_version) +); + ---------inserting some data----------- -- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0. BEGIN; @@ -890,7 +898,9 @@ INSERT INTO ambari_sequences (sequence_name, sequence_value) union all select 'upgrade_group_id_seq', 0 union all - select 'upgrade_item_id_seq', 0; + select 'upgrade_item_id_seq', 0, + union all + select 'stack_id_seq', 0; INSERT INTO adminresourcetype (resource_type_id, resource_type_name) SELECT 1, 'AMBARI' http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql index 2121805..49c92c0 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql @@ -908,6 +908,14 @@ CREATE TABLE ambari.upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES ambari.upgrade_group(upgrade_group_id) ); +CREATE TABLE ambari.stack( + stack_id BIGINT NOT NULL, + stack_name VARCHAR(255) NOT NULL, + stack_version VARCHAR(255) NOT NULL, + PRIMARY KEY (stack_id), + CONSTRAINT uni_stack UNIQUE(stack_name,stack_version) +); + GRANT ALL PRIVILEGES ON TABLE ambari.upgrade TO :username; GRANT ALL PRIVILEGES ON TABLE ambari.upgrade_group TO :username; GRANT ALL PRIVILEGES ON TABLE ambari.upgrade_item TO :username; @@ -978,7 +986,9 @@ INSERT INTO ambari.ambari_sequences (sequence_name, sequence_value) union all select 'upgrade_group_id_seq', 0 union all - select 'upgrade_item_id_seq', 0; + select 'upgrade_item_id_seq', 0, + union all + select 'stack_id_seq', 0; INSERT INTO ambari.adminresourcetype (resource_type_id, resource_type_name) SELECT 1, 'AMBARI' http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql index 40b00d9..5653ff8 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql @@ -367,6 +367,14 @@ CREATE TABLE upgrade_item ( FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id) ); +CREATE TABLE stack( + stack_id BIGINT NOT NULL, + stack_name VARCHAR(255) NOT NULL, + stack_version VARCHAR(255) NOT NULL, + PRIMARY KEY (stack_id), + CONSTRAINT uni_stack UNIQUE(stack_name,stack_version) +); + ---------inserting some data----------- BEGIN TRANSACTION INSERT INTO ambari_sequences (sequence_name, [sequence_value]) @@ -432,7 +440,9 @@ BEGIN TRANSACTION UNION ALL SELECT 'host_version_id_seq', 0 UNION ALL - SELECT 'repo_version_id_seq', 0; + SELECT 'repo_version_id_seq', 0, + UNION ALL + SELECT 'stack_id_seq', 0; insert into adminresourcetype (resource_type_id, resource_type_name) select 1, 'AMBARI' http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/main/resources/META-INF/persistence.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/META-INF/persistence.xml b/ambari-server/src/main/resources/META-INF/persistence.xml index 723fbc0..3146aff 100644 --- a/ambari-server/src/main/resources/META-INF/persistence.xml +++ b/ambari-server/src/main/resources/META-INF/persistence.xml @@ -20,6 +20,7 @@ <class>org.apache.ambari.server.orm.entities.AlertHistoryEntity</class> <class>org.apache.ambari.server.orm.entities.AlertNoticeEntity</class> <class>org.apache.ambari.server.orm.entities.AlertTargetEntity</class> + <class>org.apache.ambari.server.orm.entities.ArtifactEntity</class> <class>org.apache.ambari.server.orm.entities.BlueprintConfigEntity</class> <class>org.apache.ambari.server.orm.entities.BlueprintEntity</class> <class>org.apache.ambari.server.orm.entities.ClusterConfigEntity</class> @@ -65,6 +66,7 @@ <class>org.apache.ambari.server.orm.entities.ServiceConfigApplicationEntity</class> <class>org.apache.ambari.server.orm.entities.ServiceConfigEntity</class> <class>org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity</class> + <class>org.apache.ambari.server.orm.entities.StackEntity</class> <class>org.apache.ambari.server.orm.entities.StageEntity</class> <class>org.apache.ambari.server.orm.entities.UpgradeEntity</class> <class>org.apache.ambari.server.orm.entities.UpgradeGroupEntity</class> @@ -80,7 +82,6 @@ <class>org.apache.ambari.server.orm.entities.ViewResourceEntity</class> <class>org.apache.ambari.server.orm.entities.WidgetLayoutEntity</class> <class>org.apache.ambari.server.orm.entities.WidgetLayoutUserWidgetEntity</class> - <class>org.apache.ambari.server.orm.entities.ArtifactEntity</class> <properties> <property name="eclipselink.cache.size.default" value="10000" /> http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java index 1cf58d3..112e1e5 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionDBAccessorImpl.java @@ -50,9 +50,11 @@ import org.apache.ambari.server.orm.dao.ExecutionCommandDAO; import org.apache.ambari.server.orm.dao.HostRoleCommandDAO; import org.apache.ambari.server.orm.entities.HostRoleCommandEntity; import org.apache.ambari.server.serveraction.MockServerAction; +import org.apache.ambari.server.stack.StackManagerFactory; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartEvent; import org.apache.ambari.server.utils.StageUtils; +import org.easymock.EasyMock; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -557,6 +559,8 @@ public class TestActionDBAccessorImpl { @Override protected void configure() { bind(DBAccessor.class).to(TestDBAccessorImpl.class); + bind(StackManagerFactory.class).toInstance( + EasyMock.createNiceMock(StackManagerFactory.class)); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java index c12e737..f4d9c63 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java @@ -18,32 +18,25 @@ package org.apache.ambari.server.agent; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; -import com.google.inject.assistedinject.FactoryModuleBuilder; -import com.google.inject.persist.jpa.AmbariJpaPersistModule; -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.api.client.config.ClientConfig; -import com.sun.jersey.api.client.config.DefaultClientConfig; -import com.sun.jersey.api.json.JSONConfiguration; -import com.sun.jersey.spi.container.servlet.ServletContainer; -import com.sun.jersey.test.framework.JerseyTest; -import com.sun.jersey.test.framework.WebAppDescriptor; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import javax.ws.rs.core.MediaType; + import junit.framework.Assert; + import org.apache.ambari.server.actionmanager.ActionDBAccessor; import org.apache.ambari.server.actionmanager.ActionManager; import org.apache.ambari.server.actionmanager.HostRoleCommandFactory; import org.apache.ambari.server.actionmanager.StageFactory; import org.apache.ambari.server.agent.rest.AgentResource; import org.apache.ambari.server.api.services.AmbariMetaInfo; +import org.apache.ambari.server.events.publishers.AmbariEventPublisher; import org.apache.ambari.server.orm.DBAccessor; import org.apache.ambari.server.security.SecurityHelper; import org.apache.ambari.server.security.SecurityHelperImpl; +import org.apache.ambari.server.stack.StackManagerFactory; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Config; @@ -75,13 +68,26 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; +import org.easymock.EasyMock; import org.eclipse.jetty.server.SessionManager; import org.junit.Test; -import javax.ws.rs.core.MediaType; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.assistedinject.FactoryModuleBuilder; +import com.google.inject.persist.jpa.AmbariJpaPersistModule; +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.UniformInterfaceException; +import com.sun.jersey.api.client.WebResource; +import com.sun.jersey.api.client.config.ClientConfig; +import com.sun.jersey.api.client.config.DefaultClientConfig; +import com.sun.jersey.api.json.JSONConfiguration; +import com.sun.jersey.spi.container.servlet.ServletContainer; +import com.sun.jersey.test.framework.JerseyTest; +import com.sun.jersey.test.framework.WebAppDescriptor; public class AgentResourceTest extends JerseyTest { static String PACKAGE_NAME = "org.apache.ambari.server.agent.rest"; @@ -105,7 +111,7 @@ public class AgentResourceTest extends JerseyTest { GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.serializeNulls(); Gson gson = gsonBuilder.create(); - return (T) gson.fromJson(json, type); + return gson.fromJson(json, type); } @Override @@ -194,7 +200,7 @@ public class AgentResourceTest extends JerseyTest { "{user:'hdfs', pid:'325', hadoop:'False', command:'cmd = 2'}]"; String AlternativeJSON = "[{name:'/etc/alternatives/hdfs-conf', target:'/etc/hadoop/conf.dist'}, " + "{name:'abc', target:'def'}]"; - String AgentEnvJSON = "{\"alternatives\": " + AlternativeJSON + + String AgentEnvJSON = "{\"alternatives\": " + AlternativeJSON + ", \"existingUsers\": "+ ExistingUserJSON + ", \"umask\": \"18\", \"installedPackages\": "+ PackageDetailJSON +", \"stackFoldersAndFiles\": "+ DirectoryJSON + @@ -229,7 +235,7 @@ public class AgentResourceTest extends JerseyTest { Assert.assertEquals("/etc/hadoop/conf.dist", alternatives[0].getTarget()); Assert.assertEquals("abc", alternatives[1].getName()); Assert.assertEquals("def", alternatives[1].getTarget()); - + AgentEnv agentEnv = getJsonFormString( AgentEnvJSON, AgentEnv.class); Assert.assertTrue(18 == agentEnv.getUmask()); @@ -247,7 +253,7 @@ public class AgentResourceTest extends JerseyTest { Assert.assertEquals("/var/lib/hadoop", agentEnv.getExistingUsers()[0].getUserHomeDir()); Assert.assertEquals("None", agentEnv.getExistingUsers()[1].getUserStatus()); Assert.assertEquals("/var/lib", agentEnv.getStackFoldersAndFiles()[0].getName()); - Assert.assertEquals("directory", agentEnv.getStackFoldersAndFiles()[1].getType()); + Assert.assertEquals("directory", agentEnv.getStackFoldersAndFiles()[1].getType()); } @Test @@ -325,6 +331,9 @@ public class AgentResourceTest extends JerseyTest { install(new FactoryModuleBuilder().build(StageFactory.class)); install(new FactoryModuleBuilder().build(HostRoleCommandFactory.class)); bind(SecurityHelper.class).toInstance(SecurityHelperImpl.getInstance()); + bind(AmbariEventPublisher.class).toInstance(EasyMock.createMock(AmbariEventPublisher.class)); + bind(StackManagerFactory.class).toInstance( + EasyMock.createMock(StackManagerFactory.class)); } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java index c9d8735..fe4ba60 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java @@ -153,7 +153,6 @@ public class TestHeartbeatHandler { injector.getInstance(GuiceJpaInitializer.class); clusters = injector.getInstance(Clusters.class); injector.injectMembers(this); - metaInfo.init(); log.debug("Using server os type=" + config.getServerOsType()); unitOfWork = injector.getInstance(UnitOfWork.class); } @@ -2607,10 +2606,11 @@ public class TestHeartbeatHandler { File hostDirectory = new File(dataDirectory, "c6403.ambari.apache.org"); File keytabFile; - if(hostDirectory.mkdirs()) + if(hostDirectory.mkdirs()) { keytabFile = new File(hostDirectory, DigestUtils.sha1Hex("/etc/security/keytabs/dn.service.keytab")); - else + } else { throw new Exception("Failed to create " + hostDirectory.getAbsolutePath()); + } kerberosIdentityDataFileWriter.writeRecord("c6403.ambari.apache.org", "HDFS", "DATANODE", "dn/_HOST@_REALM", "service", http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java index 718310c..6bb053b 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java @@ -41,11 +41,11 @@ import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.OrmTestHelper; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; -import org.apache.ambari.server.state.RepositoryVersionState; import org.apache.ambari.server.state.Config; import org.apache.ambari.server.state.ConfigFactory; import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.HostState; +import org.apache.ambari.server.state.RepositoryVersionState; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponent; import org.apache.ambari.server.state.ServiceComponentHost; @@ -88,7 +88,6 @@ public class TestHeartbeatMonitor { injector.getInstance(GuiceJpaInitializer.class); helper = injector.getInstance(OrmTestHelper.class); ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class); - ambariMetaInfo.init(); } @After http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java index ec61af8..f0c1f43 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java @@ -38,6 +38,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; import java.util.UUID; @@ -59,6 +60,7 @@ import org.apache.ambari.server.orm.dao.MetainfoDAO; import org.apache.ambari.server.orm.entities.AlertDefinitionEntity; import org.apache.ambari.server.orm.entities.MetainfoEntity; import org.apache.ambari.server.stack.StackManager; +import org.apache.ambari.server.stack.StackManagerFactory; import org.apache.ambari.server.state.AutoDeployInfo; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; @@ -276,7 +278,9 @@ public class AmbariMetaInfoTest { List<RepositoryInfo> redhat6Repo = ambariMetaInfo.getRepositories( STACK_NAME_HDP, "2.1.1", "redhat6"); + assertNotNull(redhat6Repo); + for (RepositoryInfo ri : redhat6Repo) { if (HDP_REPO_NAME.equals(ri.getRepoName())) { assertEquals(newBaseUrl, ri.getBaseUrl()); @@ -563,7 +567,9 @@ public class AmbariMetaInfoTest { if (!f3.exists()) { f3.createNewFile(); } + ambariMetaInfo.init(); + // Tests the stack is loaded as expected getServices(); getComponentsByService(); @@ -1711,9 +1717,13 @@ public class AmbariMetaInfoTest { long clusterId = injector.getInstance(OrmTestHelper.class).createCluster( "cluster" + System.currentTimeMillis()); - metaInfo.alertDefinitionDao = injector.getInstance(AlertDefinitionDAO.class); Class<?> c = metaInfo.getClass().getSuperclass(); - Field f = c.getDeclaredField("agentAlertDefinitions"); + + Field f = c.getDeclaredField("alertDefinitionDao"); + f.setAccessible(true); + f.set(metaInfo, injector.getInstance(AlertDefinitionDAO.class)); + + f = c.getDeclaredField("agentAlertDefinitions"); f.setAccessible(true); f.set(metaInfo, injector.getInstance(AgentAlertDefinitions.class)); @@ -1865,7 +1875,12 @@ public class AmbariMetaInfoTest { } private TestAmbariMetaInfo createAmbariMetaInfo(File stackRoot, File versionFile, boolean replayMocks) throws Exception { - TestAmbariMetaInfo metaInfo = new TestAmbariMetaInfo(stackRoot, versionFile); + Properties properties = new Properties(); + properties.setProperty(Configuration.METADETA_DIR_PATH, stackRoot.getPath()); + properties.setProperty(Configuration.SERVER_VERSION_FILE, versionFile.getPath()); + Configuration configuration = new Configuration(properties); + + TestAmbariMetaInfo metaInfo = new TestAmbariMetaInfo(configuration); if (replayMocks) { metaInfo.replayAllMocks(); @@ -1902,20 +1917,28 @@ public class AmbariMetaInfoTest { AlertDefinitionFactory alertDefinitionFactory; OsFamily osFamily; - public TestAmbariMetaInfo(File stackRoot, File serverVersionFile) throws Exception { - super(stackRoot, null, serverVersionFile); - // MetainfoDAO - metaInfoDAO = createNiceMock(MetainfoDAO.class); + public TestAmbariMetaInfo(Configuration configuration) throws Exception { + super(configuration); + + Injector injector = Guice.createInjector(Modules.override( + new InMemoryDefaultTestModule()).with(new MockModule())); + + injector.getInstance(GuiceJpaInitializer.class); + injector.getInstance(EntityManager.class); + Class<?> c = getClass().getSuperclass(); + + // MetainfoDAO + metaInfoDAO = injector.getInstance(MetainfoDAO.class); Field f = c.getDeclaredField("metaInfoDAO"); f.setAccessible(true); f.set(this, metaInfoDAO); - // ActionMetadata - ActionMetadata actionMetadata = new ActionMetadata(); - f = c.getDeclaredField("actionMetadata"); + // StackManagerFactory + StackManagerFactory stackManagerFactory = injector.getInstance(StackManagerFactory.class); + f = c.getDeclaredField("stackManagerFactory"); f.setAccessible(true); - f.set(this, actionMetadata); + f.set(this, stackManagerFactory); //AlertDefinitionDAO alertDefinitionDAO = createNiceMock(AlertDefinitionDAO.class); @@ -1956,9 +1979,12 @@ public class AmbariMetaInfoTest { else { expect(config.getSharedResourcesDirPath()).andReturn("./src/test/resources").anyTimes(); } + replay(config); + osFamily = new OsFamily(config); - f = c.getDeclaredField("os_family"); + + f = c.getDeclaredField("osFamily"); f.setAccessible(true); f.set(this, osFamily); } @@ -1966,5 +1992,16 @@ public class AmbariMetaInfoTest { public void replayAllMocks() { replay(metaInfoDAO, alertDefinitionDAO); } + + public class MockModule extends AbstractModule { + @Override + protected void configure() { + bind(ActionMetadata.class); + + // create a mock metainfo DAO for the entire system so that injectables + // can use the mock as well + bind(MetainfoDAO.class).toInstance(createNiceMock(MetainfoDAO.class)); + } + } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/api/services/KerberosServiceMetaInfoTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/KerberosServiceMetaInfoTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/KerberosServiceMetaInfoTest.java index fe006ea..cafbc6f 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/KerberosServiceMetaInfoTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/KerberosServiceMetaInfoTest.java @@ -28,6 +28,9 @@ import java.lang.reflect.Field; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Properties; + +import javax.persistence.EntityManager; import junit.framework.Assert; @@ -35,9 +38,12 @@ import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.events.publishers.AmbariEventPublisher; import org.apache.ambari.server.metadata.ActionMetadata; +import org.apache.ambari.server.orm.GuiceJpaInitializer; +import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.dao.AlertDefinitionDAO; import org.apache.ambari.server.orm.dao.MetainfoDAO; import org.apache.ambari.server.stack.StackManager; +import org.apache.ambari.server.stack.StackManagerFactory; import org.apache.ambari.server.state.AutoDeployInfo; import org.apache.ambari.server.state.ComponentInfo; import org.apache.ambari.server.state.DependencyInfo; @@ -49,6 +55,11 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.util.Modules; + public class KerberosServiceMetaInfoTest { private final static Logger LOG = LoggerFactory.getLogger(KerberosServiceMetaInfoTest.class); private ServiceInfo serviceInfo = null; @@ -186,7 +197,13 @@ public class KerberosServiceMetaInfoTest { } private TestAmbariMetaInfo createAmbariMetaInfo(File stackRoot, File commonServicesRoot, File versionFile, boolean replayMocks) throws Exception { - TestAmbariMetaInfo metaInfo = new TestAmbariMetaInfo(stackRoot, commonServicesRoot, versionFile); + Properties properties = new Properties(); + properties.setProperty(Configuration.METADETA_DIR_PATH, stackRoot.getPath()); + properties.setProperty(Configuration.COMMON_SERVICES_DIR_PATH, commonServicesRoot.getPath()); + properties.setProperty(Configuration.SERVER_VERSION_FILE, versionFile.getPath()); + Configuration configuration = new Configuration(properties); + + TestAmbariMetaInfo metaInfo = new TestAmbariMetaInfo(configuration); if (replayMocks) { metaInfo.replayAllMocks(); @@ -223,20 +240,28 @@ public class KerberosServiceMetaInfoTest { AlertDefinitionFactory alertDefinitionFactory; OsFamily osFamily; - public TestAmbariMetaInfo(File stackRoot, File commonServicesRoot, File serverVersionFile) throws Exception { - super(stackRoot, commonServicesRoot, serverVersionFile); - // MetainfoDAO - metaInfoDAO = createNiceMock(MetainfoDAO.class); + public TestAmbariMetaInfo(Configuration configuration) throws Exception { + super(configuration); + + Injector injector = Guice.createInjector(Modules.override( + new InMemoryDefaultTestModule()).with(new MockModule())); + + injector.getInstance(GuiceJpaInitializer.class); + injector.getInstance(EntityManager.class); + Class<?> c = getClass().getSuperclass(); + + // MetainfoDAO + metaInfoDAO = injector.getInstance(MetainfoDAO.class); Field f = c.getDeclaredField("metaInfoDAO"); f.setAccessible(true); f.set(this, metaInfoDAO); - // ActionMetadata - ActionMetadata actionMetadata = new ActionMetadata(); - f = c.getDeclaredField("actionMetadata"); + // StackManagerFactory + StackManagerFactory stackManagerFactory = injector.getInstance(StackManagerFactory.class); + f = c.getDeclaredField("stackManagerFactory"); f.setAccessible(true); - f.set(this, actionMetadata); + f.set(this, stackManagerFactory); //AlertDefinitionDAO alertDefinitionDAO = createNiceMock(AlertDefinitionDAO.class); @@ -262,7 +287,7 @@ public class KerberosServiceMetaInfoTest { expect(config.getSharedResourcesDirPath()).andReturn("./src/test/resources").anyTimes(); replay(config); osFamily = new OsFamily(config); - f = c.getDeclaredField("os_family"); + f = c.getDeclaredField("osFamily"); f.setAccessible(true); f.set(this, osFamily); } @@ -270,6 +295,17 @@ public class KerberosServiceMetaInfoTest { public void replayAllMocks() { replay(metaInfoDAO, alertDefinitionDAO); } + + public class MockModule extends AbstractModule { + @Override + protected void configure() { + bind(ActionMetadata.class); + + // create a mock metainfo DAO for the entire system so that injectables + // can use the mock as well + bind(MetainfoDAO.class).toInstance(createNiceMock(MetainfoDAO.class)); + } + } } } http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java index 7684322..ee56ea7 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java @@ -46,7 +46,6 @@ import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.HostState; -import org.apache.ambari.server.state.SecurityState; import org.apache.ambari.server.state.SecurityType; import org.apache.ambari.server.state.State; import org.junit.After; @@ -93,7 +92,6 @@ public class controller = injector.getInstance(AmbariManagementController.class); clusters = injector.getInstance(Clusters.class); ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class); - ambariMetaInfo.init(); } @After public void teardown() { @@ -308,8 +306,9 @@ public class setOsFamily(clusters.getHost(hostname), "redhat", "6.3"); clusters.getHost(hostname).setState(HostState.HEALTHY); clusters.getHost(hostname).persist(); - if (null != clusterName) + if (null != clusterName) { clusters.mapHostToCluster(hostname, clusterName); + } } private void setOsFamily(Host host, String osFamily, String osVersion) { Map<String, String> hostAttributes = new HashMap<String, String>(); http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java index 31c315b..87820ca 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java @@ -34,7 +34,6 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import java.io.File; import java.io.IOException; import java.io.StringReader; import java.lang.reflect.Type; @@ -8046,9 +8045,14 @@ public class AmbariManagementControllerTest { assertEquals(original, repo.getDefaultBaseUrl()); // verify change with new meta info - AmbariMetaInfo ami = new AmbariMetaInfo(new File( - "src/test/resources/stacks"), null, new File( - "src/test/resources/version")); + Configuration configuration = injector.getInstance(Configuration.class); + Properties properties = configuration.getProperties(); + properties.setProperty(Configuration.METADETA_DIR_PATH, "src/test/resources/stacks"); + properties.setProperty(Configuration.SERVER_VERSION_FILE, "src/test/resources/version"); + Configuration newConfiguration = new Configuration(properties); + + AmbariMetaInfo ami = new AmbariMetaInfo(newConfiguration); + injector.injectMembers(ami); ami.init(); @@ -8764,6 +8768,7 @@ public class AmbariManagementControllerTest { } @Test + @Ignore public void testDisableAndDeleteStates() throws Exception { Map<String,String> mapRequestProps = new HashMap<String, String>(); Injector injector = Guice.createInjector(new AbstractModule() { @@ -8780,8 +8785,7 @@ public class AmbariManagementControllerTest { install(new ControllerModule(properties)); // ambari events interfere with the workflow of this test - bind(AmbariEventPublisher.class).toInstance( - EasyMock.createMock(AmbariEventPublisher.class)); + bind(AmbariEventPublisher.class).toInstance(EasyMock.createMock(AmbariEventPublisher.class)); } catch (Exception e) { throw new RuntimeException(e); } @@ -8946,6 +8950,7 @@ public class AmbariManagementControllerTest { componentHostRequests.add(new ServiceComponentHostRequest("c1", null, "NAMENODE", "host1", null)); amc.deleteHostComponents(componentHostRequests); + namenodes = cluster.getService("HDFS").getServiceComponent("NAMENODE").getServiceComponentHosts(); org.junit.Assert.assertEquals(1, namenodes.size()); http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java index 78355eb..4446dfd 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java @@ -98,7 +98,6 @@ public class BackgroundCustomCommandExecutionTest { Assert.assertEquals("src/main/resources/custom_action_definitions", configuration.getCustomActionDefinitionPath()); ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class); - ambariMetaInfo.init(); } @After public void teardown() { @@ -167,8 +166,9 @@ public class BackgroundCustomCommandExecutionTest { setOsFamily(clusters.getHost(hostname), "redhat", "6.3"); clusters.getHost(hostname).setState(HostState.HEALTHY); clusters.getHost(hostname).persist(); - if (null != clusterName) + if (null != clusterName) { clusters.mapHostToCluster(hostname, clusterName); + } } private void setOsFamily(Host host, String osFamily, String osVersion) { Map<String, String> hostAttributes = new HashMap<String, String>(); http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java index 5e71991..524c511 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java @@ -18,10 +18,33 @@ package org.apache.ambari.server.controller; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; +import static org.easymock.EasyMock.anyLong; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.capture; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.getCurrentArguments; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.reset; +import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.persistence.EntityManager; + import junit.framework.Assert; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.Role; import org.apache.ambari.server.actionmanager.ActionManager; @@ -48,6 +71,7 @@ import org.apache.ambari.server.serveraction.kerberos.KerberosMissingAdminCreden import org.apache.ambari.server.serveraction.kerberos.KerberosOperationException; import org.apache.ambari.server.serveraction.kerberos.KerberosOperationHandler; import org.apache.ambari.server.serveraction.kerberos.KerberosOperationHandlerFactory; +import org.apache.ambari.server.stack.StackManagerFactory; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Config; @@ -80,22 +104,9 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import javax.persistence.EntityManager; - -import java.io.File; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.easymock.EasyMock.*; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; @SuppressWarnings("unchecked") public class KerberosHelperTest extends EasyMockSupport { @@ -171,6 +182,7 @@ public class KerberosHelperTest extends EasyMockSupport { bind(ClusterController.class).toInstance(clusterController); bind(KerberosDescriptorFactory.class).toInstance(kerberosDescriptorFactory); bind(KerberosConfigDataFileWriterFactory.class).toInstance(kerberosConfigDataFileWriterFactory); + bind(StackManagerFactory.class).toInstance(createNiceMock(StackManagerFactory.class)); } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java index 2c927a3..3a6ad91 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/RefreshYarnCapacitySchedulerReleaseConfigTest.java @@ -68,7 +68,6 @@ public class RefreshYarnCapacitySchedulerReleaseConfigTest { clusters = injector.getInstance(Clusters.class); configHelper = injector.getInstance(ConfigHelper.class); ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class); - ambariMetaInfo.init(); } @After public void teardown() { @@ -170,8 +169,9 @@ public class RefreshYarnCapacitySchedulerReleaseConfigTest { setOsFamily(clusters.getHost(hostname), "redhat", "6.3"); clusters.getHost(hostname).setState(HostState.HEALTHY); clusters.getHost(hostname).persist(); - if (null != clusterName) + if (null != clusterName) { clusters.mapHostToCluster(hostname, clusterName); + } } private void setOsFamily(Host host, String osFamily, String osVersion) { http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java index 29677fc..1cc75c7 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java @@ -18,36 +18,40 @@ package org.apache.ambari.server.controller.internal; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; -import com.google.inject.persist.PersistService; -import com.google.inject.util.Modules; -import org.apache.ambari.server.AmbariException; +import static org.easymock.EasyMock.anyLong; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.createNiceMock; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; + +import java.lang.reflect.Field; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.ambari.server.actionmanager.ActionManager; import org.apache.ambari.server.actionmanager.HostRoleCommand; -import org.apache.ambari.server.agent.AgentEnv; import org.apache.ambari.server.agent.CommandReport; -import org.apache.ambari.server.agent.DiskInfo; -import org.apache.ambari.server.agent.HostInfo; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.controller.AmbariManagementController; -import org.apache.ambari.server.controller.AmbariManagementControllerImpl; -import org.apache.ambari.server.controller.HostResponse; import org.apache.ambari.server.controller.RequestStatusResponse; import org.apache.ambari.server.controller.ResourceProviderFactory; import org.apache.ambari.server.controller.spi.Request; import org.apache.ambari.server.controller.spi.Resource; import org.apache.ambari.server.controller.spi.ResourceProvider; import org.apache.ambari.server.controller.utilities.PropertyHelper; -import org.apache.ambari.server.metadata.ActionMetadata; import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; -import org.apache.ambari.server.orm.entities.HostVersionEntity; import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; import org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction; -import org.apache.ambari.server.stack.StackManager; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.ConfigHelper; @@ -57,39 +61,15 @@ import org.apache.ambari.server.state.ServiceInfo; import org.apache.ambari.server.state.ServiceOsSpecific; import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.cluster.ClusterImpl; -import org.apache.ambari.server.state.fsm.InvalidStateTransitionException; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.api.easymock.PowerMock; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import java.lang.reflect.Field; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; - -import static org.easymock.EasyMock.anyLong; -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.eq; -import static org.easymock.EasyMock.capture; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.createNiceMock; -import static org.easymock.EasyMock.createStrictMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.persist.PersistService; +import com.google.inject.util.Modules; /** * ClusterStackVersionResourceProvider tests. @@ -130,7 +110,6 @@ public class ClusterStackVersionResourceProviderTest { injector = Guice.createInjector(Modules.override(module).with(new MockModule())); injector.getInstance(GuiceJpaInitializer.class); ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class); - ambariMetaInfo.init(); } @After @@ -332,7 +311,7 @@ public class ClusterStackVersionResourceProviderTest { // Have to inject instance manually because injection via DI fails Field field = ClusterStackVersionResourceProvider.class.getDeclaredField("finalizeUpgradeAction"); field.setAccessible(true); - field.set((ClusterStackVersionResourceProvider)provider, finalizeUpgradeAction); + field.set(provider, finalizeUpgradeAction); // add the property map to a set for the request. add more maps for multiple creates Map<String, Object> properties = new LinkedHashMap<String, Object>(); http://git-wip-us.apache.org/repos/asf/ambari/blob/69197e63/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java index a868234..aa391ca 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java @@ -18,11 +18,23 @@ package org.apache.ambari.server.controller.internal; -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; -import com.google.inject.persist.PersistService; -import com.google.inject.util.Modules; +import static org.easymock.EasyMock.anyLong; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.createNiceMock; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; + +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.ambari.server.actionmanager.ActionManager; import org.apache.ambari.server.actionmanager.HostRoleCommand; import org.apache.ambari.server.api.services.AmbariMetaInfo; @@ -55,22 +67,11 @@ import org.junit.Before; import org.junit.Test; import org.powermock.core.classloader.annotations.PrepareForTest; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.easymock.EasyMock.anyLong; -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.createNiceMock; -import static org.easymock.EasyMock.eq; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.persist.PersistService; +import com.google.inject.util.Modules; /** * ClusterStackVersionResourceProvider tests. @@ -114,7 +115,6 @@ public class HostStackVersionResourceProviderTest { injector = Guice.createInjector(Modules.override(module).with(new MockModule())); injector.getInstance(GuiceJpaInitializer.class); ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class); - ambariMetaInfo.init(); } @After
