Updated Branches: refs/heads/trunk 2ef018b47 -> 764320235
AMBARI-4203. Get rid of redundant transactions in ClustersImpl. (mpapirkovskyy) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/76432023 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/76432023 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/76432023 Branch: refs/heads/trunk Commit: 7643202353f203f72e43ed06984e3893bfbdf97e Parents: 2ef018b Author: Myroslav Papirkovskyy <[email protected]> Authored: Tue Dec 31 18:38:38 2013 +0200 Committer: Myroslav Papirkovskyy <[email protected]> Committed: Tue Dec 31 18:59:08 2013 +0200 ---------------------------------------------------------------------- .../server/state/cluster/ClustersImpl.java | 84 ++++++++++---------- 1 file changed, 43 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/76432023/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java index 7debb63..24e5b1a 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java @@ -30,7 +30,6 @@ import org.apache.ambari.server.agent.DiskInfo; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.orm.dao.ClusterDAO; import org.apache.ambari.server.orm.dao.ConfigGroupHostMappingDAO; -import org.apache.ambari.server.orm.dao.HostConfigMappingDAO; import org.apache.ambari.server.orm.dao.HostDAO; import org.apache.ambari.server.orm.entities.ClusterEntity; import org.apache.ambari.server.orm.entities.HostEntity; @@ -104,30 +103,12 @@ public class ClustersImpl implements Clusters { LOG.info("Initializing the ClustersImpl"); } - @Transactional - void loadClustersAndHosts() { + void checkLoaded() { if (!clustersLoaded) { w.lock(); try { if (!clustersLoaded) { - for (ClusterEntity clusterEntity : clusterDAO.findAll()) { - Cluster currentCluster = clusterFactory.create(clusterEntity); - clusters.put(clusterEntity.getClusterName(), currentCluster); - clustersById.put(currentCluster.getClusterId(), currentCluster); - clusterHostMap.put(currentCluster.getClusterName(), Collections.newSetFromMap(new ConcurrentHashMap<Host, Boolean>())); - } - - for (HostEntity hostEntity : hostDAO.findAll()) { - Host host = hostFactory.create(hostEntity, true); - hosts.put(hostEntity.getHostName(), host); - Set<Cluster> cSet = Collections.newSetFromMap(new ConcurrentHashMap<Cluster, Boolean>()); - hostClusterMap.put(hostEntity.getHostName(), cSet); - - for (ClusterEntity clusterEntity : hostEntity.getClusterEntities()) { - clusterHostMap.get(clusterEntity.getClusterName()).add(host); - cSet.add(clusters.get(clusterEntity.getClusterName())); - } - } + loadClustersAndHosts(); } clustersLoaded = true; } finally { @@ -136,10 +117,33 @@ public class ClustersImpl implements Clusters { } } + @Transactional + void loadClustersAndHosts() { + for (ClusterEntity clusterEntity : clusterDAO.findAll()) { + Cluster currentCluster = clusterFactory.create(clusterEntity); + clusters.put(clusterEntity.getClusterName(), currentCluster); + clustersById.put(currentCluster.getClusterId(), currentCluster); + clusterHostMap.put(currentCluster.getClusterName(), Collections.newSetFromMap(new ConcurrentHashMap<Host, Boolean>())); + } + + for (HostEntity hostEntity : hostDAO.findAll()) { + Host host = hostFactory.create(hostEntity, true); + hosts.put(hostEntity.getHostName(), host); + Set<Cluster> cSet = Collections.newSetFromMap(new ConcurrentHashMap<Cluster, Boolean>()); + hostClusterMap.put(hostEntity.getHostName(), cSet); + + for (ClusterEntity clusterEntity : hostEntity.getClusterEntities()) { + clusterHostMap.get(clusterEntity.getClusterName()).add(host); + cSet.add(clusters.get(clusterEntity.getClusterName())); + } + } + + } + @Override public void addCluster(String clusterName) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); if (clusters.containsKey(clusterName)) { throw new DuplicateResourceException("Attempted to create a Cluster which already exists" @@ -178,7 +182,7 @@ public class ClustersImpl implements Clusters { @Override public Cluster getCluster(String clusterName) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); r.lock(); try { if (!clusters.containsKey(clusterName)) { @@ -192,7 +196,7 @@ public class ClustersImpl implements Clusters { @Override public Cluster getClusterById(long id) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); r.lock(); try { if (!clustersById.containsKey(id)) { @@ -214,7 +218,7 @@ public class ClustersImpl implements Clusters { + " for cluster " + clusterName); } - loadClustersAndHosts(); + checkLoaded(); r.lock(); try { if (!clusters.containsKey(clusterName)) { @@ -230,7 +234,7 @@ public class ClustersImpl implements Clusters { @Override @Transactional public List<Host> getHosts() { - loadClustersAndHosts(); + checkLoaded(); r.lock(); try { @@ -245,7 +249,7 @@ public class ClustersImpl implements Clusters { @Override public Set<Cluster> getClustersForHost(String hostname) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); r.lock(); try { if (LOG.isDebugEnabled()) { @@ -261,9 +265,7 @@ public class ClustersImpl implements Clusters { @Override public Host getHost(String hostname) throws AmbariException { - if (!clustersLoaded) { - loadClustersAndHosts(); - } + checkLoaded(); r.lock(); try { if (!hosts.containsKey(hostname)) { @@ -277,7 +279,7 @@ public class ClustersImpl implements Clusters { @Override public void addHost(String hostname) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); String duplicateMessage = "Duplicate entry for Host" + ", hostName= " + hostname; @@ -325,7 +327,7 @@ public class ClustersImpl implements Clusters { public void updateHostWithClusterAndAttributes(Map<String, Set<String>> hostClusters, Map<String, Map<String, String>> hostAttributes) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); w.lock(); try { if (hostClusters != null) { @@ -389,7 +391,7 @@ public class ClustersImpl implements Clusters { @Transactional private Map<String, Host> getHostsMap(Collection<String> hostSet) throws HostNotFoundException { - loadClustersAndHosts(); + checkLoaded(); Map<String, Host> hostMap = new HashMap<String, Host>(); r.lock(); try { @@ -408,7 +410,7 @@ public class ClustersImpl implements Clusters { @Transactional private Map<String, Cluster> getClustersMap(Collection<String> clusterSet) throws ClusterNotFoundException { - loadClustersAndHosts(); + checkLoaded(); Map<String, Cluster> clusterMap = new HashMap<String, Cluster>(); r.lock(); try { @@ -429,7 +431,7 @@ public class ClustersImpl implements Clusters { @Override public void mapHostToCluster(String hostname, String clusterName) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); w.lock(); try { @@ -485,7 +487,7 @@ public class ClustersImpl implements Clusters { @Override @Transactional public Map<String, Cluster> getClusters() { - loadClustersAndHosts(); + checkLoaded(); r.lock(); try { return Collections.unmodifiableMap(clusters); @@ -497,7 +499,7 @@ public class ClustersImpl implements Clusters { @Override public void mapHostsToCluster(Set<String> hostnames, String clusterName) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); w.lock(); try { for (String hostname : hostnames) { @@ -544,7 +546,7 @@ public class ClustersImpl implements Clusters { public Map<String, Host> getHostsForCluster(String clusterName) throws AmbariException { if (!clustersLoaded) { - loadClustersAndHosts(); + checkLoaded(); } r.lock(); @@ -564,7 +566,7 @@ public class ClustersImpl implements Clusters { @Override public void deleteCluster(String clusterName) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); w.lock(); try { Cluster cluster = getCluster(clusterName); @@ -590,7 +592,7 @@ public class ClustersImpl implements Clusters { public void unmapHostFromCluster(String hostname, String clusterName) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); w.lock(); @@ -642,7 +644,7 @@ public class ClustersImpl implements Clusters { @Override public void deleteHost(String hostname) throws AmbariException { - loadClustersAndHosts(); + checkLoaded(); if (!hosts.containsKey(hostname)) return;
