You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by od...@apache.org on 2013/12/31 17:06:59 UTC
git commit: AMBARI-4201. Enable caching in HostConfigMappingDAO
(odiachenko)
Updated Branches:
refs/heads/trunk 5eeb4241d -> 2ef018b47
AMBARI-4201. Enable caching in HostConfigMappingDAO (odiachenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2ef018b4
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2ef018b4
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2ef018b4
Branch: refs/heads/trunk
Commit: 2ef018b47885554873e03ab02953fa39cf43273d
Parents: 5eeb424
Author: Oleksandr Diachenko <od...@hortonworks.com>
Authored: Tue Dec 31 18:06:16 2013 +0200
Committer: Oleksandr Diachenko <od...@hortonworks.com>
Committed: Tue Dec 31 18:06:16 2013 +0200
----------------------------------------------------------------------
.../AmbariManagementControllerImpl.java | 6 +-
.../server/controller/ControllerModule.java | 4 +
.../controller/ResourceProviderFactory.java | 10 +
.../AbstractControllerResourceProvider.java | 4 +-
.../internal/ComponentResourceProvider.java | 14 +-
.../internal/HostResourceProvider.java | 1 -
.../internal/ServiceResourceProvider.java | 15 +-
.../orm/dao/ConfigGroupHostMappingDAO.java | 1 -
.../server/orm/dao/HostConfigMappingDAO.java | 323 +++++++++++++++----
.../ambari/server/state/HostConfigMapping.java | 47 +++
.../server/state/HostConfigMappingImpl.java | 186 +++++++++++
.../server/state/cluster/ClusterImpl.java | 11 +-
.../ambari/server/state/host/HostImpl.java | 33 +-
.../resources/BaseResourceDefinitionTest.java | 31 +-
.../AbstractControllerResourceProviderTest.java | 15 +-
.../internal/AbstractResourceProviderTest.java | 12 +-
.../internal/ComponentResourceProviderTest.java | 16 +-
.../internal/ServiceResourceProviderTest.java | 21 +-
.../orm/dao/HostConfigMappingDAOTest.java | 89 +++--
19 files changed, 656 insertions(+), 183 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/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 46c6a9f..c3fdae3 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
@@ -531,7 +531,7 @@ public class AmbariManagementControllerImpl implements
}
- private synchronized Set<ClusterResponse> getClusters(ClusterRequest request)
+ private Set<ClusterResponse> getClusters(ClusterRequest request)
throws AmbariException {
Set<ClusterResponse> response = new HashSet<ClusterResponse>();
@@ -576,7 +576,7 @@ public class AmbariManagementControllerImpl implements
return response;
}
- private synchronized Set<ServiceComponentHostResponse> getHostComponents(
+ private Set<ServiceComponentHostResponse> getHostComponents(
ServiceComponentHostRequest request) throws AmbariException {
if (request.getClusterName() == null
|| request.getClusterName().isEmpty()) {
@@ -704,7 +704,7 @@ public class AmbariManagementControllerImpl implements
}
- private synchronized Set<ConfigurationResponse> getConfigurations(
+ private Set<ConfigurationResponse> getConfigurations(
ConfigurationRequest request) throws AmbariException {
if (request.getClusterName() == null) {
throw new IllegalArgumentException("Invalid arguments, cluster name"
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/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 087944d..135650f 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
@@ -31,8 +31,10 @@ import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
import org.apache.ambari.server.actionmanager.HostRoleCommandFactoryImpl;
import org.apache.ambari.server.actionmanager.StageFactory;
import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.controller.internal.ComponentResourceProvider;
import org.apache.ambari.server.controller.internal.HostComponentResourceProvider;
import org.apache.ambari.server.controller.internal.HostResourceProvider;
+import org.apache.ambari.server.controller.internal.ServiceResourceProvider;
import org.apache.ambari.server.controller.spi.ResourceProvider;
import org.apache.ambari.server.orm.PersistenceType;
import org.apache.ambari.server.scheduler.ExecutionScheduler;
@@ -193,6 +195,8 @@ public class ControllerModule extends AbstractModule {
install(new FactoryModuleBuilder()
.implement(ResourceProvider.class, Names.named("host"), HostResourceProvider.class)
.implement(ResourceProvider.class, Names.named("hostComponent"), HostComponentResourceProvider.class)
+ .implement(ResourceProvider.class, Names.named("service"), ServiceResourceProvider.class)
+ .implement(ResourceProvider.class, Names.named("component"), ComponentResourceProvider.class)
.build(ResourceProviderFactory.class));
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
index cc7c03e..0113d75 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
@@ -37,5 +37,15 @@ public interface ResourceProviderFactory {
ResourceProvider getHostComponentResourceProvider(Set<String> propertyIds,
Map<Type, String> keyPropertyIds,
AmbariManagementController managementController);
+
+ @Named("service")
+ ResourceProvider getServiceResourceProvider(Set<String> propertyIds,
+ Map<Type, String> keyPropertyIds,
+ AmbariManagementController managementController);
+
+ @Named("component")
+ ResourceProvider getComponentResourceProvider(Set<String> propertyIds,
+ Map<Type, String> keyPropertyIds,
+ AmbariManagementController managementController);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
index d15c2ef..c8699cc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
@@ -94,9 +94,9 @@ public abstract class AbstractControllerResourceProvider extends AbstractResourc
case Cluster:
return new ClusterResourceProvider(propertyIds, keyPropertyIds, managementController);
case Service:
- return new ServiceResourceProvider(propertyIds, keyPropertyIds, managementController);
+ return resourceProviderFactory.getServiceResourceProvider(propertyIds, keyPropertyIds, managementController);
case Component:
- return new ComponentResourceProvider(propertyIds, keyPropertyIds, managementController);
+ return resourceProviderFactory.getComponentResourceProvider(propertyIds, keyPropertyIds, managementController);
case Host:
return resourceProviderFactory.getHostResourceProvider(propertyIds, keyPropertyIds, managementController);
case HostComponent:
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
index a56df0f..5e9b3b4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
@@ -56,10 +56,14 @@ import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
+import com.google.inject.assistedinject.Assisted;
+import com.google.inject.assistedinject.AssistedInject;
+import com.google.inject.persist.Transactional;
+
/**
* Resource provider for component resources.
*/
-class ComponentResourceProvider extends AbstractControllerResourceProvider {
+public class ComponentResourceProvider extends AbstractControllerResourceProvider {
// ----- Property ID constants ---------------------------------------------
@@ -91,9 +95,10 @@ class ComponentResourceProvider extends AbstractControllerResourceProvider {
* @param keyPropertyIds the key property ids
* @param managementController the management controller
*/
- ComponentResourceProvider(Set<String> propertyIds,
- Map<Resource.Type, String> keyPropertyIds,
- AmbariManagementController managementController) {
+ @AssistedInject
+ ComponentResourceProvider(@Assisted Set<String> propertyIds,
+ @Assisted Map<Resource.Type, String> keyPropertyIds,
+ @Assisted AmbariManagementController managementController) {
super(propertyIds, keyPropertyIds, managementController);
}
@@ -126,6 +131,7 @@ class ComponentResourceProvider extends AbstractControllerResourceProvider {
}
@Override
+ @Transactional
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
index 0b1bb8d..0c9c1f6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
@@ -63,7 +63,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.inject.Injector;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
import com.google.inject.persist.Transactional;
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/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 f527f43..6387255 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
@@ -54,7 +54,6 @@ import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ComponentInfo;
-import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
@@ -63,10 +62,14 @@ import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
import org.apache.commons.lang.StringUtils;
+import com.google.inject.assistedinject.Assisted;
+import com.google.inject.assistedinject.AssistedInject;
+import com.google.inject.persist.Transactional;
+
/**
* Resource provider for service resources.
*/
-class ServiceResourceProvider extends AbstractControllerResourceProvider {
+public class ServiceResourceProvider extends AbstractControllerResourceProvider {
// ----- Property ID constants ---------------------------------------------
@@ -107,9 +110,10 @@ class ServiceResourceProvider extends AbstractControllerResourceProvider {
* @param keyPropertyIds the key property ids
* @param managementController the management controller
*/
- ServiceResourceProvider(Set<String> propertyIds,
- Map<Resource.Type, String> keyPropertyIds,
- AmbariManagementController managementController) {
+ @AssistedInject
+ public ServiceResourceProvider(@Assisted Set<String> propertyIds,
+ @Assisted Map<Resource.Type, String> keyPropertyIds,
+ @Assisted AmbariManagementController managementController) {
super(propertyIds, keyPropertyIds, managementController);
}
@@ -139,6 +143,7 @@ class ServiceResourceProvider extends AbstractControllerResourceProvider {
}
@Override
+ @Transactional
public Set<Resource> getResources(Request request, Predicate predicate) throws
SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ConfigGroupHostMappingDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ConfigGroupHostMappingDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ConfigGroupHostMappingDAO.java
index 90aa5a5..5ca155f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ConfigGroupHostMappingDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ConfigGroupHostMappingDAO.java
@@ -25,7 +25,6 @@ import org.apache.ambari.server.orm.entities.ConfigGroupHostMappingEntity;
import org.apache.ambari.server.orm.entities.ConfigGroupHostMappingEntityPK;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
-import javax.persistence.Query;
import javax.persistence.TypedQuery;
import java.util.List;
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAO.java
index e4ad970..980cfda 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAO.java
@@ -18,12 +18,20 @@
package org.apache.ambari.server.orm.dao;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import com.google.inject.Singleton;
+
import org.apache.ambari.server.orm.entities.HostConfigMappingEntity;
+import org.apache.ambari.server.state.HostConfigMapping;
+import org.apache.ambari.server.state.HostConfigMappingImpl;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Predicate;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -39,99 +47,237 @@ public class HostConfigMappingDAO {
@Inject
DaoUtils daoUtils;
- @Transactional
- public void create(HostConfigMappingEntity entity) {
- entityManagerProvider.get().persist(entity);
+
+ private final ReadWriteLock gl = new ReentrantReadWriteLock();
+ private Map<String, Set<HostConfigMapping>> hostConfigMappingByHost;
+
+ private volatile boolean cacheLoaded;
+
+ private void populateCache() {
+
+ if (!cacheLoaded) {
+ gl.writeLock().lock();
+ try {
+ gl.writeLock().lock();
+ try {
+ if (hostConfigMappingByHost == null) {
+ hostConfigMappingByHost = new ConcurrentHashMap<String, Set<HostConfigMapping>>();
+
+ TypedQuery<HostConfigMappingEntity> query = entityManagerProvider.get().createQuery(
+ "SELECT entity FROM HostConfigMappingEntity entity",
+ HostConfigMappingEntity.class);
+
+ List<HostConfigMappingEntity> hostConfigMappingEntities = daoUtils.selectList(query);
+
+ for (HostConfigMappingEntity hostConfigMappingEntity : hostConfigMappingEntities) {
+
+ Set<HostConfigMapping> setByHost = hostConfigMappingByHost.get((hostConfigMappingEntity.getType()));
+
+ if (setByHost == null) {
+ setByHost = new HashSet<HostConfigMapping>();
+ hostConfigMappingByHost.put(hostConfigMappingEntity.getHostName(), setByHost);
+ }
+
+ HostConfigMapping hostConfigMapping = buildHostConfigMapping(hostConfigMappingEntity);
+ setByHost.add(hostConfigMapping);
+ }
+ }
+ } finally {
+ gl.writeLock().unlock();
+ }
+ } finally {
+ gl.writeLock().unlock();
+ }
+
+ cacheLoaded = true;
+
+ }
+
}
+
@Transactional
- public HostConfigMappingEntity merge(HostConfigMappingEntity entity) {
- return entityManagerProvider.get().merge(entity);
+ public void create(HostConfigMapping hostConfigMapping) {
+
+ populateCache();
+
+ //create in db
+ entityManagerProvider.get().persist(buildHostConfigMappingEntity(hostConfigMapping));
+
+ //create in cache
+ Set<HostConfigMapping> set = hostConfigMappingByHost.get(hostConfigMapping.getHostName());
+ if (set == null){
+ set = new HashSet<HostConfigMapping>();
+ hostConfigMappingByHost.put(hostConfigMapping.getHostName(), set);
+ }
+
+ set.add(hostConfigMapping);
}
@Transactional
- public List<HostConfigMappingEntity> findByType(long clusterId, String hostName, String type) {
- TypedQuery<HostConfigMappingEntity> query = entityManagerProvider.get().createQuery(
- "SELECT entity FROM HostConfigMappingEntity entity " +
- "WHERE entity.clusterId = ?1 AND entity.hostName = ?2 AND entity.type = ?3",
- HostConfigMappingEntity.class);
-
- return daoUtils.selectList(query, Long.valueOf(clusterId), hostName, type);
+ public HostConfigMapping merge(HostConfigMapping hostConfigMapping) {
+
+ populateCache();
+
+ Set<HostConfigMapping> set = hostConfigMappingByHost.get(hostConfigMapping.getHostName());
+ if (set == null){
+ set = new HashSet<HostConfigMapping>();
+ hostConfigMappingByHost.put(hostConfigMapping.getHostName(), set);
+ }
+
+ //Update object in set
+ set.remove(hostConfigMapping);
+ set.add(hostConfigMapping);
+
+ entityManagerProvider.get().merge(buildHostConfigMappingEntity(hostConfigMapping));
+
+ return hostConfigMapping;
}
@Transactional
- public HostConfigMappingEntity findSelectedByType(long clusterId,
- String hostName, String type) {
-
- TypedQuery<HostConfigMappingEntity> query = entityManagerProvider.get().createQuery(
- "SELECT entity FROM HostConfigMappingEntity entity " +
- "WHERE entity.clusterId = ?1 AND entity.hostName = ?2 " +
- "AND entity.type = ?3 " +
- "AND entity.selected > 0",
- HostConfigMappingEntity.class);
+ public Set<HostConfigMapping> findByType(final long clusterId, String hostName, final String type) {
+
+ populateCache();
+
+ if (!hostConfigMappingByHost.containsKey(hostName))
+ return Collections.emptySet();
+
+ Set<HostConfigMapping> set = new HashSet<HostConfigMapping>(hostConfigMappingByHost.get(hostName));
+
+ CollectionUtils.filter(set, new Predicate() {
+
+ @Override
+ public boolean evaluate(Object arg0) {
+
+ return ((HostConfigMapping) arg0).getClusterId().equals(clusterId)
+ && ((HostConfigMapping) arg0).getType().equals(type);
+ }
+ });
- return daoUtils.selectSingle(query, Long.valueOf(clusterId), hostName, type);
+ return set;
}
@Transactional
- public List<HostConfigMappingEntity> findSelected(long clusterId, String hostName) {
- TypedQuery<HostConfigMappingEntity> query = entityManagerProvider.get().createQuery(
- "SELECT entity FROM HostConfigMappingEntity entity " +
- "WHERE entity.clusterId = ?1 AND entity.hostName = ?2 " +
- "AND entity.selected > 0",
- HostConfigMappingEntity.class);
+ public HostConfigMapping findSelectedByType(final long clusterId,
+ String hostName, final String type) {
+
+ populateCache();
+
+ if (!hostConfigMappingByHost.containsKey(hostName))
+ return null;
+
+ Set<HostConfigMapping> set = new HashSet<HostConfigMapping>(hostConfigMappingByHost.get(hostName));
+
+ HostConfigMapping result = (HostConfigMapping) CollectionUtils.find(set, new Predicate() {
+
+ @Override
+ public boolean evaluate(Object arg0) {
+
+ return ((HostConfigMapping) arg0).getClusterId().equals(clusterId)
+ && ((HostConfigMapping) arg0).getType().equals(type)
+ && ((HostConfigMapping) arg0).getSelected() > 0;
+ }
+ });
+
+
+ return result;
+
+ }
- return daoUtils.selectList(query, Long.valueOf(clusterId), hostName);
+ @Transactional
+ public Set<HostConfigMapping> findSelected(final long clusterId, String hostName) {
+
+ populateCache();
+
+ if (!hostConfigMappingByHost.containsKey(hostName))
+ return Collections.emptySet();
+
+
+ Set<HostConfigMapping> set = new HashSet<HostConfigMapping>(hostConfigMappingByHost.get(hostName));
+
+ CollectionUtils.filter(set, new Predicate() {
+
+ @Override
+ public boolean evaluate(Object arg0) {
+ return ((HostConfigMapping) arg0).getClusterId().equals(clusterId)
+ && ((HostConfigMapping) arg0).getSelected() > 0;
+ }
+ });
+
+ return set;
}
@Transactional
- public List<HostConfigMappingEntity> findSelectedByHosts(long clusterId, Collection<String> hostNames) {
+ public Set<HostConfigMapping> findSelectedByHosts(long clusterId, Collection<String> hostNames) {
+
+ populateCache();
if (hostNames == null || hostNames.isEmpty()) {
- return Collections.emptyList();
+ return Collections.emptySet();
}
+
+
+ HashSet<HostConfigMapping> result = new HashSet<HostConfigMapping>();
+
- TypedQuery<HostConfigMappingEntity> query = entityManagerProvider.get().createQuery(
- "SELECT entity FROM HostConfigMappingEntity entity " +
- "WHERE entity.clusterId = ?1 AND entity.hostName IN ?2 " +
- "AND entity.selected > 0",
- HostConfigMappingEntity.class);
- return daoUtils.selectList(query, Long.valueOf(clusterId), hostNames);
+ for (final String hostName : hostNames) {
+
+ if (!hostConfigMappingByHost.containsKey(hostName))
+ continue;
+
+ Set<HostConfigMapping> set = new HashSet<HostConfigMapping>(hostConfigMappingByHost.get(hostName));
+
+ CollectionUtils.filter(set, new Predicate() {
+
+ @Override
+ public boolean evaluate(Object arg0) {
+ return ((HostConfigMapping) arg0).getHostName().equals(hostName) &&
+ ((HostConfigMapping) arg0).getSelected() > 0;
+ }
+ });
+
+ result.addAll(set);
+ }
+
+ return result;
}
- @Transactional
- public List<HostConfigMappingEntity> findSelectedHostsByType(long clusterId,
- String type) {
- TypedQuery<HostConfigMappingEntity> query = entityManagerProvider.get().createQuery(
- "SELECT entity FROM HostConfigMappingEntity entity " +
- "WHERE entity.clusterId = ?1 AND entity.type = ?2 AND entity.selected > 0",
- HostConfigMappingEntity.class);
- return daoUtils.selectList(query, Long.valueOf(clusterId), type);
- }
@Transactional
- public Map<String, List<HostConfigMappingEntity>> findSelectedHostsByTypes(long clusterId,
+ public Map<String, List<HostConfigMapping>> findSelectedHostsByTypes(final long clusterId,
Collection<String> types) {
- TypedQuery<HostConfigMappingEntity> query = entityManagerProvider.get().createQuery(
- "SELECT entity FROM HostConfigMappingEntity entity " +
- "WHERE entity.clusterId = ?1 AND entity.type IN ?2 AND entity.selected > 0",
- HostConfigMappingEntity.class);
-
- Map<String, List<HostConfigMappingEntity>> mappingsByType = new HashMap<String, List<HostConfigMappingEntity>>();
+
+ populateCache();
+
+ Map<String, List<HostConfigMapping>> mappingsByType = new HashMap<String, List<HostConfigMapping>>();
+
for (String type : types) {
if (!mappingsByType.containsKey(type)) {
- mappingsByType.put(type, new ArrayList<HostConfigMappingEntity>());
+ mappingsByType.put(type, new ArrayList<HostConfigMapping>());
}
}
if (!types.isEmpty()) {
- List<HostConfigMappingEntity> mappings = daoUtils.selectList(query, clusterId, types);
- for (HostConfigMappingEntity mapping : mappings) {
+ List<HostConfigMapping> mappings = new ArrayList<HostConfigMapping>();
+
+ for (Set<HostConfigMapping> entries : hostConfigMappingByHost.values()) {
+
+ for (HostConfigMapping entry : entries) {
+
+ if (types.contains(entry.getType()) && entry.getClusterId().equals(clusterId))
+ mappings.add(new HostConfigMappingImpl(entry));
+
+ }
+ }
+
+ for (HostConfigMapping mapping : mappings) {
mappingsByType.get(mapping.getType()).add(mapping);
}
}
+
+
return mappingsByType;
}
@@ -141,18 +287,67 @@ public class HostConfigMappingDAO {
* @param hostName
*/
@Transactional
- public void removeHost(long clusterId, String hostName) {
- TypedQuery<HostConfigMappingEntity> query = entityManagerProvider.get().createQuery(
- "SELECT entity FROM HostConfigMappingEntity entity " +
- "WHERE entity.clusterId = ?1 AND entity.hostName = ?2",
- HostConfigMappingEntity.class);
+ public void removeHost(final long clusterId, String hostName) {
+ populateCache();
+
+ Set<HostConfigMapping> set = hostConfigMappingByHost.get(hostName);
+
+ //Remove from cache items with clusterId
+ CollectionUtils.filter(set, new Predicate() {
+
+ @Override
+ public boolean evaluate(Object arg0) {
+ return !((HostConfigMapping) arg0).getClusterId().equals(clusterId);
+ }
+ });
+
+ //delete from db
+ TypedQuery<HostConfigMappingEntity> query = entityManagerProvider.get().createQuery(
+ "SELECT entity FROM HostConfigMappingEntity entity " +
+ "WHERE entity.clusterId = ?1 AND entity.hostName = ?2",
+ HostConfigMappingEntity.class);
+
List<HostConfigMappingEntity> list = daoUtils.selectList(query, Long.valueOf(clusterId), hostName);
+
+ for (HostConfigMappingEntity entity : list) {
+ entityManagerProvider.get().remove(entity);
+ }
+
+
+ }
- for (HostConfigMappingEntity entity : list) {
- entityManagerProvider.get().remove(entity);
- }
+ public HostConfigMappingEntity buildHostConfigMappingEntity(HostConfigMapping hostConfigMapping) {
+
+ HostConfigMappingEntity hostConfigMappingEntity = new HostConfigMappingEntity();
+
+ hostConfigMappingEntity.setClusterId(hostConfigMapping.getClusterId());
+ hostConfigMappingEntity.setCreateTimestamp(hostConfigMapping.getCreateTimestamp());
+ hostConfigMappingEntity.setHostName(hostConfigMapping.getHostName());
+ hostConfigMappingEntity.setSelected(hostConfigMapping.getSelected());
+ hostConfigMappingEntity.setServiceName(hostConfigMapping.getServiceName());
+ hostConfigMappingEntity.setType(hostConfigMapping.getType());
+ hostConfigMappingEntity.setUser(hostConfigMapping.getUser());
+ hostConfigMappingEntity.setVersion(hostConfigMapping.getVersion());
+
+ return hostConfigMappingEntity;
+ }
+
+ public HostConfigMapping buildHostConfigMapping(
+ HostConfigMappingEntity hostConfigMappingEntity) {
+
+ HostConfigMapping hostConfigMapping = new HostConfigMappingImpl();
+
+ hostConfigMapping.setClusterId(hostConfigMappingEntity.getClusterId());
+ hostConfigMapping.setCreateTimestamp(hostConfigMappingEntity.getCreateTimestamp());
+ hostConfigMapping.setHostName(hostConfigMappingEntity.getHostName());
+ hostConfigMapping.setServiceName(hostConfigMappingEntity.getServiceName());
+ hostConfigMapping.setType(hostConfigMappingEntity.getType());
+ hostConfigMapping.setUser(hostConfigMappingEntity.getUser());
+ hostConfigMapping.setSelected(hostConfigMappingEntity.isSelected());
+ hostConfigMapping.setVersion(hostConfigMappingEntity.getVersion());
+ return hostConfigMapping;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/main/java/org/apache/ambari/server/state/HostConfigMapping.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/HostConfigMapping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/HostConfigMapping.java
new file mode 100644
index 0000000..4ad25db
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/HostConfigMapping.java
@@ -0,0 +1,47 @@
+/**
+ * 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.state;
+
+public interface HostConfigMapping {
+
+ public Long getClusterId();
+ public void setClusterId(Long clusterId);
+
+ public String getHostName();
+ public void setHostName(String hostName);
+
+ public String getType();
+ public void setType(String type);
+
+ public Long getCreateTimestamp();
+ public void setCreateTimestamp(Long createTimestamp);
+
+ public String getVersion();
+ public void setVersion(String version);
+
+ public String getServiceName();
+ public void setServiceName(String serviceName);
+
+ public String getUser();
+ public void setUser(String user);
+
+ public Integer getSelected();
+ public void setSelected(Integer selected);
+
+
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/main/java/org/apache/ambari/server/state/HostConfigMappingImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/HostConfigMappingImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/HostConfigMappingImpl.java
new file mode 100644
index 0000000..6905e27
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/HostConfigMappingImpl.java
@@ -0,0 +1,186 @@
+/**
+ * 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.state;
+
+public class HostConfigMappingImpl implements HostConfigMapping {
+
+ private Long clusterId;
+ private String hostName;
+ private String type;
+ private Long createTimestamp;
+ private String version;
+ private String serviceName;
+ private String user;
+ private Integer selected;
+
+
+
+ public HostConfigMappingImpl(HostConfigMapping entry) {
+ setClusterId(entry.getClusterId());
+ setHostName(entry.getHostName());
+ setType(entry.getType());
+ setCreateTimestamp(entry.getCreateTimestamp());
+ setVersion(entry.getVersion());
+ setServiceName(entry.getServiceName());
+ setUser(entry.getUser());
+ setSelected(entry.getSelected());
+ }
+
+ public HostConfigMappingImpl() {
+ }
+
+ @Override
+ public Long getClusterId() {
+ return clusterId;
+ }
+
+ @Override
+ public void setClusterId(Long clusterId) {
+ if (clusterId == null)
+ throw new RuntimeException("ClusterId couldn't be null");
+ this.clusterId = clusterId;
+ }
+
+ @Override
+ public String getHostName() {
+ return hostName;
+ }
+
+ @Override
+ public void setHostName(String hostName) {
+ if (hostName == null)
+ throw new RuntimeException("HostName couldn't be null");
+ this.hostName = hostName;
+ }
+
+ @Override
+ public String getType() {
+ return type;
+ }
+
+ @Override
+ public void setType(String type) {
+ if (type == null)
+ throw new RuntimeException("Type couldn't be null");
+ this.type = type;
+ }
+
+ @Override
+ public Long getCreateTimestamp() {
+ return createTimestamp;
+ }
+
+ @Override
+ public void setCreateTimestamp(Long createTimestamp) {
+ if (createTimestamp == null)
+ throw new RuntimeException("CreateTimestamp couldn't be null");
+ this.createTimestamp = createTimestamp;
+ }
+
+ @Override
+ public String getVersion() {
+ return version;
+ }
+
+ @Override
+ public void setVersion(String version) {
+ if (version == null)
+ throw new RuntimeException("Version couldn't be null");
+ this.version = version;
+ }
+ public String getServiceName() {
+ return serviceName;
+ }
+
+ @Override
+ public void setServiceName(String serviceName) {
+ this.serviceName = serviceName;
+ }
+
+ @Override
+ public String getUser() {
+ return user;
+ }
+
+ @Override
+ public void setUser(String user) {
+ if (user == null)
+ throw new RuntimeException("User couldn't be null");
+ this.user = user;
+ }
+
+ @Override
+ public Integer getSelected() {
+ return selected;
+ }
+
+ @Override
+ public void setSelected(Integer selected) {
+ if (selected == null)
+ throw new RuntimeException("Selected couldn't be null");
+ this.selected = selected;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((clusterId == null) ? 0 : clusterId.hashCode());
+ result =
+ prime * result
+ + ((createTimestamp == null) ? 0 : createTimestamp.hashCode());
+ result = prime * result + ((hostName == null) ? 0 : hostName.hashCode());
+ result = prime * result + ((type == null) ? 0 : type.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ HostConfigMappingImpl other = (HostConfigMappingImpl) obj;
+ if (clusterId == null) {
+ if (other.clusterId != null)
+ return false;
+ } else if (!clusterId.equals(other.clusterId))
+ return false;
+ if (createTimestamp == null) {
+ if (other.createTimestamp != null)
+ return false;
+ } else if (!createTimestamp.equals(other.createTimestamp))
+ return false;
+ if (hostName == null) {
+ if (other.hostName != null)
+ return false;
+ } else if (!hostName.equals(other.hostName))
+ return false;
+ if (type == null) {
+ if (other.type != null)
+ return false;
+ } else if (!type.equals(other.type))
+ return false;
+ return true;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
index 0526a3d..507cbc0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
@@ -38,13 +38,14 @@ import org.apache.ambari.server.orm.entities.ClusterServiceEntity;
import org.apache.ambari.server.orm.entities.ClusterStateEntity;
import org.apache.ambari.server.orm.entities.ConfigGroupEntity;
import org.apache.ambari.server.orm.entities.ConfigGroupHostMappingEntity;
-import org.apache.ambari.server.orm.entities.HostConfigMappingEntity;
+import org.apache.ambari.server.state.HostConfigMapping;
import org.apache.ambari.server.orm.entities.RequestScheduleEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigFactory;
import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.HostConfigMapping;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
@@ -1292,12 +1293,12 @@ public class ClusterImpl implements Cluster {
}
if (!map.isEmpty()) {
- Map<String, List<HostConfigMappingEntity>> hostMappingsByType =
+ Map<String, List<HostConfigMapping>> hostMappingsByType =
hostConfigMappingDAO.findSelectedHostsByTypes(clusterEntity.getClusterId(), types);
for (Entry<String, DesiredConfig> entry : map.entrySet()) {
List<DesiredConfig.HostOverride> hostOverrides = new ArrayList<DesiredConfig.HostOverride>();
- for (HostConfigMappingEntity mappingEntity : hostMappingsByType.get(entry.getKey())) {
+ for (HostConfigMapping mappingEntity : hostMappingsByType.get(entry.getKey())) {
hostOverrides.add(new DesiredConfig.HostOverride(mappingEntity.getHostName(),
mappingEntity.getVersion()));
}
@@ -1345,7 +1346,7 @@ public class ClusterImpl implements Cluster {
return Collections.emptyMap();
}
- List<HostConfigMappingEntity> mappingEntities =
+ Set<HostConfigMapping> mappingEntities =
hostConfigMappingDAO.findSelectedByHosts(clusterEntity.getClusterId(), hostnames);
Map<String, Map<String, DesiredConfig>> desiredConfigsByHost = new HashMap<String, Map<String, DesiredConfig>>();
@@ -1354,7 +1355,7 @@ public class ClusterImpl implements Cluster {
desiredConfigsByHost.put(hostname, new HashMap<String, DesiredConfig>());
}
- for (HostConfigMappingEntity mappingEntity : mappingEntities) {
+ for (HostConfigMapping mappingEntity : mappingEntities) {
DesiredConfig desiredConfig = new DesiredConfig();
desiredConfig.setVersion(mappingEntity.getVersion());
desiredConfig.setServiceName(mappingEntity.getServiceName());
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/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 2336c68..d2ac9c0 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
@@ -37,7 +37,6 @@ import org.apache.ambari.server.orm.dao.HostConfigMappingDAO;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.HostStateDAO;
import org.apache.ambari.server.orm.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.HostConfigMappingEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostStateEntity;
import org.apache.ambari.server.state.AgentVersion;
@@ -47,6 +46,8 @@ import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostConfig;
+import org.apache.ambari.server.state.HostConfigMapping;
+import org.apache.ambari.server.state.HostConfigMappingImpl;
import org.apache.ambari.server.state.HostEvent;
import org.apache.ambari.server.state.HostEventType;
import org.apache.ambari.server.state.HostHealthStatus;
@@ -1135,7 +1136,7 @@ public class HostImpl implements Host {
if (null == user)
throw new NullPointerException("User must be specified.");
- HostConfigMappingEntity exist = getDesiredConfigEntity(clusterId, config.getType());
+ HostConfigMapping exist = getDesiredConfigEntity(clusterId, config.getType());
if (null != exist && exist.getVersion().equals(config.getVersionTag())) {
if (!selected) {
exist.setSelected(0);
@@ -1148,22 +1149,22 @@ public class HostImpl implements Host {
try {
// set all old mappings for this type to empty
- for (HostConfigMappingEntity e : hostConfigMappingDAO.findByType(clusterId,
+ for (HostConfigMapping e : hostConfigMappingDAO.findByType(clusterId,
hostEntity.getHostName(), config.getType())) {
e.setSelected(0);
hostConfigMappingDAO.merge(e);
}
- HostConfigMappingEntity entity = new HostConfigMappingEntity();
- entity.setClusterId(Long.valueOf(clusterId));
- entity.setCreateTimestamp(Long.valueOf(System.currentTimeMillis()));
- entity.setHostName(hostEntity.getHostName());
- entity.setSelected(1);
- entity.setUser(user);
- entity.setType(config.getType());
- entity.setVersion(config.getVersionTag());
+ HostConfigMapping hostConfigMapping = new HostConfigMappingImpl();
+ hostConfigMapping.setClusterId(Long.valueOf(clusterId));
+ hostConfigMapping.setCreateTimestamp(Long.valueOf(System.currentTimeMillis()));
+ hostConfigMapping.setHostName(hostEntity.getHostName());
+ hostConfigMapping.setSelected(1);
+ hostConfigMapping.setUser(user);
+ hostConfigMapping.setType(config.getType());
+ hostConfigMapping.setVersion(config.getVersionTag());
- hostConfigMappingDAO.create(entity);
+ hostConfigMappingDAO.create(hostConfigMapping);
}
finally {
writeLock.unlock();
@@ -1178,7 +1179,7 @@ public class HostImpl implements Host {
public Map<String, DesiredConfig> getDesiredConfigs(long clusterId) {
Map<String, DesiredConfig> map = new HashMap<String, DesiredConfig>();
- for (HostConfigMappingEntity e : hostConfigMappingDAO.findSelected(
+ for (HostConfigMapping e : hostConfigMappingDAO.findSelected(
clusterId, hostEntity.getHostName())) {
DesiredConfig dc = new DesiredConfig();
@@ -1233,8 +1234,10 @@ public class HostImpl implements Host {
return hostConfigMap;
}
- private HostConfigMappingEntity getDesiredConfigEntity(long clusterId, String type) {
- return hostConfigMappingDAO.findSelectedByType(clusterId,
+ private HostConfigMapping getDesiredConfigEntity(long clusterId, String type) {
+ HostConfigMapping findSelectedByType = hostConfigMappingDAO.findSelectedByType(clusterId,
hostEntity.getHostName(), type);
+
+ return findSelectedByType;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java
index 86b0603..7e0845e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseResourceDefinitionTest.java
@@ -1,14 +1,27 @@
package org.apache.ambari.server.api.resources;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.anyObject;
+
import org.apache.ambari.server.api.handlers.BaseManagementHandler;
import org.apache.ambari.server.api.util.TreeNode;
import org.apache.ambari.server.api.util.TreeNodeImpl;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.ResourceProviderFactory;
+import org.apache.ambari.server.controller.internal.AbstractControllerResourceProvider;
import org.apache.ambari.server.controller.internal.ResourceImpl;
+import org.apache.ambari.server.controller.internal.ServiceResourceProvider;
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.junit.Assert;
import org.junit.Test;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* BaseResourceDefinition tests.
@@ -33,7 +46,23 @@ public class BaseResourceDefinitionTest {
TreeNode<Resource> serviceNode = new TreeNodeImpl<Resource>(parentNode, service, "service1");
parentNode.setProperty("isCollection", "true");
-
+
+ ResourceProviderFactory factory = createMock(ResourceProviderFactory.class);
+ AmbariManagementController managementController = createMock(AmbariManagementController.class);
+
+ ResourceProvider serviceResourceProvider = new ServiceResourceProvider(PropertyHelper
+ .getPropertyIds(Resource.Type.Service),
+ PropertyHelper.getKeyPropertyIds(Resource.Type.Service),
+ managementController);
+
+ expect(factory.getServiceResourceProvider(anyObject(Set.class),
+ anyObject(Map.class),
+ anyObject(AmbariManagementController.class))).andReturn(serviceResourceProvider);
+
+ AbstractControllerResourceProvider.init(factory);
+
+ replay(factory, managementController);
+
processor.process(null, serviceNode, "http://c6401.ambari.apache.org:8080/api/v1/clusters/c1/services");
String href = serviceNode.getProperty("href");
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java
index cc7a308..588932a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProviderTest.java
@@ -20,10 +20,11 @@ package org.apache.ambari.server.controller.internal;
import junit.framework.Assert;
import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.ResourceProviderFactory;
import org.apache.ambari.server.controller.spi.Predicate;
import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.ResourceProvider;
import org.apache.ambari.server.controller.utilities.PredicateBuilder;
-import org.codehaus.jackson.map.ser.PropertyBuilder;
import org.junit.Test;
import java.util.HashMap;
@@ -31,8 +32,9 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import static org.easymock.EasyMock.and;
import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
/**
* Abstract controller resource provider test.
@@ -52,6 +54,15 @@ public class AbstractControllerResourceProviderTest {
Map<Resource.Type, String> keyPropertyIds = new HashMap<Resource.Type, String>();
AmbariManagementController managementController = createMock(AmbariManagementController.class);
+
+ ResourceProviderFactory factory = createMock(ResourceProviderFactory.class);
+
+ ResourceProvider serviceResourceProvider = new ServiceResourceProvider(propertyIds, keyPropertyIds, managementController);
+ expect(factory.getServiceResourceProvider(propertyIds, keyPropertyIds, managementController)).andReturn(serviceResourceProvider);
+
+ AbstractControllerResourceProvider.init(factory);
+
+ replay(managementController, factory);
AbstractResourceProvider provider =
(AbstractResourceProvider) AbstractControllerResourceProvider.getResourceProvider(
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java
index c86ad45..11adbee 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractResourceProviderTest.java
@@ -62,9 +62,7 @@ public class AbstractResourceProviderTest {
AmbariManagementController managementController = createMock(AmbariManagementController.class);
- AbstractResourceProvider provider =
- (AbstractResourceProvider) AbstractControllerResourceProvider.getResourceProvider(
- Resource.Type.Service,
+ AbstractResourceProvider provider = new ServiceResourceProvider(
propertyIds,
keyPropertyIds,
managementController);
@@ -102,9 +100,7 @@ public class AbstractResourceProviderTest {
AmbariManagementController managementController = createMock(AmbariManagementController.class);
- AbstractResourceProvider provider =
- (AbstractResourceProvider) AbstractControllerResourceProvider.getResourceProvider(
- Resource.Type.Service,
+ AbstractResourceProvider provider = new ServiceResourceProvider(
propertyIds,
keyPropertyIds,
managementController);
@@ -119,9 +115,7 @@ public class AbstractResourceProviderTest {
Map<Resource.Type, String> keyPropertyIds = new HashMap<Resource.Type, String>();
AmbariManagementController managementController = createMock(AmbariManagementController.class);
- AbstractResourceProvider provider =
- (AbstractResourceProvider) AbstractControllerResourceProvider.getResourceProvider(
- Resource.Type.Service,
+ AbstractResourceProvider provider = new ServiceResourceProvider(
propertyIds,
keyPropertyIds,
managementController);
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
index c0de09d..a8770ac 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
@@ -112,9 +112,7 @@ public class ComponentResourceProviderTest {
replay(managementController, response, clusters, cluster, service, stackId, ambariMetaInfo,
serviceComponentFactory, serviceComponent);
- ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
- type,
- PropertyHelper.getPropertyIds(type),
+ ResourceProvider provider = new ComponentResourceProvider(PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
managementController);
@@ -186,8 +184,7 @@ public class ComponentResourceProviderTest {
replay(managementController, clusters, cluster, ambariMetaInfo, service,
serviceComponent1, serviceComponent2, serviceComponent3, stackId, componentInfo);
- ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
- type,
+ ResourceProvider provider = new ComponentResourceProvider(
PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
managementController);
@@ -292,8 +289,7 @@ public class ComponentResourceProviderTest {
serviceComponent1, serviceComponent2, serviceComponent3, serviceComponentHost,
requestStatusResponse, stackId);
- ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
- type,
+ ResourceProvider provider = new ComponentResourceProvider(
PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
managementController);
@@ -326,8 +322,7 @@ public class ComponentResourceProviderTest {
// replay
replay(managementController);
- ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
- type,
+ ResourceProvider provider = new ComponentResourceProvider(
PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
managementController);
@@ -467,8 +462,7 @@ public class ComponentResourceProviderTest {
public static ComponentResourceProvider getComponentResourceProvider(AmbariManagementController managementController) {
Resource.Type type = Resource.Type.Component;
- return (ComponentResourceProvider) AbstractControllerResourceProvider.getResourceProvider(
- type,
+ return new ComponentResourceProvider(
PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
managementController);
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
index 83f0991..25cf6bf 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
@@ -451,13 +451,11 @@ public class ServiceResourceProviderTest {
Map<Resource.Type, String> keyPropertyIds = new HashMap<Resource.Type, String>();
AmbariManagementController managementController = createMock(AmbariManagementController.class);
-
- AbstractResourceProvider provider =
- (AbstractResourceProvider) AbstractControllerResourceProvider.getResourceProvider(
- Resource.Type.Service,
- propertyIds,
- keyPropertyIds,
- managementController);
+
+
+ AbstractResourceProvider provider = new ServiceResourceProvider(propertyIds,
+ keyPropertyIds,
+ managementController);
Set<String> unsupported = provider.checkPropertyIds(Collections.singleton("foo"));
Assert.assertTrue(unsupported.isEmpty());
@@ -863,12 +861,9 @@ public class ServiceResourceProviderTest {
public static ServiceResourceProvider getServiceProvider(AmbariManagementController managementController) {
Resource.Type type = Resource.Type.Service;
-
- return (ServiceResourceProvider) AbstractControllerResourceProvider.getResourceProvider(
- type,
- PropertyHelper.getPropertyIds(type),
- PropertyHelper.getKeyPropertyIds(type),
- managementController);
+ return new ServiceResourceProvider(PropertyHelper.getPropertyIds(type),
+ PropertyHelper.getKeyPropertyIds(type),
+ managementController);
}
public static void createServices(AmbariManagementController controller, Set<ServiceRequest> requests) throws AmbariException {
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ef018b4/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAOTest.java
index a594499..50b070e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostConfigMappingDAOTest.java
@@ -17,15 +17,15 @@
*/
package org.apache.ambari.server.orm.dao;
-import java.util.Date;
-import java.util.List;
+import java.util.Set;
import junit.framework.Assert;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.entities.HostConfigMappingEntity;
+import org.apache.ambari.server.state.HostConfigMapping;
+import org.apache.ambari.server.state.HostConfigMappingImpl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -55,8 +55,8 @@ public class HostConfigMappingDAOTest {
injector.getInstance(PersistService.class).stop();
}
- private HostConfigMappingEntity createEntity(long clusterId, String host, String type, String version) throws Exception {
- HostConfigMappingEntity entity = new HostConfigMappingEntity();
+ private HostConfigMapping createEntity(long clusterId, String host, String type, String version) throws Exception {
+ HostConfigMapping entity = new HostConfigMappingImpl();
entity.setClusterId(Long.valueOf(clusterId));
entity.setCreateTimestamp(Long.valueOf(System.currentTimeMillis()));
entity.setHostName(host);
@@ -78,43 +78,60 @@ public class HostConfigMappingDAOTest {
@Test
public void testFindByType() throws Exception {
- HostConfigMappingEntity source = createEntity(1L, "h1", "global", "v1");
+ HostConfigMapping source = createEntity(1L, "h1", "global", "v1");
- List<HostConfigMappingEntity> target = hostConfigMappingDAO.findByType(1L, "h1", "global");
+ Set<HostConfigMapping> target = hostConfigMappingDAO.findByType(1L, "h1", "global");
Assert.assertEquals("Expected one result", 1, target.size());
- Assert.assertEquals("Expected version 'v1'", source.getVersion(), target.get(0).getVersion());
+
+ for (HostConfigMapping item : target)
+ Assert.assertEquals("Expected version 'v1'", source.getVersion(), item.getVersion());
}
@Test
public void testMerge() throws Exception {
- HostConfigMappingEntity source = createEntity(1L, "h1", "global", "v1");
+ HostConfigMapping source = createEntity(1L, "h1", "global", "v1");
- List<HostConfigMappingEntity> target = hostConfigMappingDAO.findByType(1L, "h1", "global");
+ Set<HostConfigMapping> target = hostConfigMappingDAO.findByType(1L, "h1", "global");
Assert.assertEquals("Expected one result", 1, target.size());
- Assert.assertEquals("Expected version 'v1'", source.getVersion(), target.get(0).getVersion());
- Assert.assertEquals("Expected selected flag 1", 1, target.get(0).isSelected());
- HostConfigMappingEntity toChange = target.get(0);
+ HostConfigMapping toChange = null;
+
+ for (HostConfigMapping item: target) {
+
+ Assert.assertEquals("Expected version 'v1'", source.getVersion(), item.getVersion());
+ Assert.assertEquals("Expected selected flag 1", 1, (int)item.getSelected());
+
+ toChange = item;
+
+ toChange.setSelected(0);
+
+ }
- toChange.setSelected(0);
+
hostConfigMappingDAO.merge(toChange);
target = hostConfigMappingDAO.findByType(1L, "h1", "global");
Assert.assertEquals("Expected one result", 1, target.size());
- Assert.assertEquals("Expected version 'v1'", source.getVersion(), target.get(0).getVersion());
- Assert.assertEquals("Expected selected flag 0", 0, target.get(0).isSelected());
+
+
+ for (HostConfigMapping item: target) {
+
+ Assert.assertEquals("Expected version 'v1'", source.getVersion(), item.getVersion());
+ Assert.assertEquals("Expected selected flag 0", 0, (int)item.getSelected());
+
+ }
}
@Test
public void testFindSelected() throws Exception {
createEntity(1L, "h1", "global", "version1");
- HostConfigMappingEntity entity2 = createEntity(1L, "h1", "core-site", "version1");
+ HostConfigMapping entity2 = createEntity(1L, "h1", "core-site", "version1");
- List<HostConfigMappingEntity> targets = hostConfigMappingDAO.findSelected(1L, "h1");
+ Set<HostConfigMapping> targets = hostConfigMappingDAO.findSelected(1L, "h1");
Assert.assertEquals("Expected two entities", 2, targets.size());
entity2.setSelected(0);
@@ -128,9 +145,9 @@ public class HostConfigMappingDAOTest {
@Test
public void testFindSelectedByType() throws Exception {
- HostConfigMappingEntity entity1 = createEntity(1L, "h1", "global", "version1");
+ HostConfigMapping entity1 = createEntity(1L, "h1", "global", "version1");
- HostConfigMappingEntity target = hostConfigMappingDAO.findSelectedByType(1L, "h1", "core-site");
+ HostConfigMapping target = hostConfigMappingDAO.findSelectedByType(1L, "h1", "core-site");
Assert.assertNull("Expected null entity for type 'core-site'", target);
target = hostConfigMappingDAO.findSelectedByType(1L, "h1", "global");
@@ -140,7 +157,7 @@ public class HostConfigMappingDAOTest {
target.setSelected(0);
hostConfigMappingDAO.merge(target);
- HostConfigMappingEntity entity2 = createEntity(1L, "h1", "global", "version2");
+ HostConfigMapping entity2 = createEntity(1L, "h1", "global", "version2");
target = hostConfigMappingDAO.findSelectedByType(1L, "h1", "global");
Assert.assertNotNull("Expected non-null entity for type 'global'", target);
@@ -151,33 +168,11 @@ public class HostConfigMappingDAOTest {
}
@Test
- public void testFindSelectedHostsByType() throws Exception {
- HostConfigMappingEntity entity1 = createEntity(1L, "h1", "global", "v1");
- HostConfigMappingEntity entity2 = createEntity(1L, "h2", "global", "v1");
-
- List<HostConfigMappingEntity> list = hostConfigMappingDAO.findSelectedHostsByType(1L, "global");
- Assert.assertEquals("Expected two hosts", 2, list.size());
-
- entity2.setSelected(0);
- hostConfigMappingDAO.merge(entity2);
+ public void testEmptyTable() throws Exception {
- list = hostConfigMappingDAO.findSelectedHostsByType(1L, "global");
- Assert.assertEquals("Expected one host", 1, list.size());
+ hostConfigMappingDAO.removeHost(1L, "h1");
+ HostConfigMapping target = hostConfigMappingDAO.findSelectedByType(1L, "h1", "core-site");
-
- list = hostConfigMappingDAO.findSelectedHostsByType(1L, "core-site");
- Assert.assertEquals("Expected no matching hosts", 0, list.size());
-
- entity1.setSelected(0);
- hostConfigMappingDAO.merge(entity1);
-
- list = hostConfigMappingDAO.findSelectedHostsByType(1L, "global");
- Assert.assertEquals("Expected no selected hosts", 0, list.size());
+ Assert.assertEquals(null, target);
}
-
-
-
-
-
-
}