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/11/06 15:34:36 UTC

git commit: AMBARI-3703. ConcurrentModificationException in Ambari Server log. (odiachenko)

Updated Branches:
  refs/heads/trunk a13cb6247 -> 08d5fcff9


AMBARI-3703. ConcurrentModificationException in Ambari Server log. (odiachenko)


Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/08d5fcff
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/08d5fcff
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/08d5fcff

Branch: refs/heads/trunk
Commit: 08d5fcff9bf02c75424d7c02aeb802bbbba4ad26
Parents: a13cb62
Author: Oleksandr Diachenko <od...@hortonworks.com>
Authored: Wed Nov 6 16:34:10 2013 +0200
Committer: Oleksandr Diachenko <od...@hortonworks.com>
Committed: Wed Nov 6 16:34:10 2013 +0200

----------------------------------------------------------------------
 .../server/state/cluster/ClusterImpl.java       |  4 +--
 .../server/state/cluster/ClusterTest.java       | 27 ++++++++++++++++++--
 2 files changed, 27 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/08d5fcff/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 5d97691..fb897c9 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
@@ -68,6 +68,7 @@ import java.util.TreeMap;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 public class ClusterImpl implements Cluster {
 
@@ -621,8 +622,7 @@ public class ClusterImpl implements Cluster {
       readLock.lock();
       try {
         if (serviceComponentHostsByHost.containsKey(hostname)) {
-          return Collections.unmodifiableList(
-              serviceComponentHostsByHost.get(hostname));
+          return new CopyOnWriteArrayList<ServiceComponentHost>(serviceComponentHostsByHost.get(hostname));
         }
         return new ArrayList<ServiceComponentHost>();
       } finally {

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/08d5fcff/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
index 548ee45..e55b280 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
@@ -27,7 +27,9 @@ import static org.mockito.Mockito.when;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.ConcurrentModificationException;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -44,10 +46,8 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.ClusterResponse;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
-import org.apache.ambari.server.orm.dao.HostConfigMappingDAO;
 import org.apache.ambari.server.orm.entities.*;
 import org.apache.ambari.server.state.*;
-import org.apache.ambari.server.state.DesiredConfig.HostOverride;
 import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
 import org.apache.ambari.server.state.host.HostHealthyHeartbeatEvent;
 import org.apache.ambari.server.state.host.HostRegistrationRequestEvent;
@@ -272,6 +272,29 @@ public class ClusterTest {
 
     List<ServiceComponentHost> scHosts = c1.getServiceComponentHosts("h1");
     Assert.assertEquals(1, scHosts.size());
+    
+    Iterator<ServiceComponentHost> iterator = scHosts.iterator();
+    
+    //Try to iterate on sch and modify it in loop
+    try {
+      while (iterator.hasNext()) {
+        iterator.next();
+        Service s1 = serviceFactory.createNew(c1, "PIG");
+        c1.addService(s1);
+        s1.persist();
+        ServiceComponent sc1 = serviceComponentFactory.createNew(s1, "PIG");
+        s1.addServiceComponent(sc1);
+        sc1.persist();
+        ServiceComponentHost sch1 = serviceComponentHostFactory.createNew(sc1, "h1", false);
+        sc1.addServiceComponentHost(sch1);
+        sch1.persist();
+      }
+    } catch (ConcurrentModificationException e ) {
+      Assert.assertTrue("Failed to work concurrently with sch", false);
+    }
+    
+    scHosts = c1.getServiceComponentHosts("h1");
+    Assert.assertEquals(2, scHosts.size());
   }