Repository: ambari
Updated Branches:
  refs/heads/trunk 338190375 -> 4a61ae33b


AMBARI-7040 SystemException occurred while deleting config group (dsen)


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

Branch: refs/heads/trunk
Commit: 4a61ae33b42aa1f530768fb4dc70f41de92f07d2
Parents: 3381903
Author: Dmytro Sen <[email protected]>
Authored: Fri Aug 29 12:26:39 2014 +0300
Committer: Dmytro Sen <[email protected]>
Committed: Fri Aug 29 12:27:03 2014 +0300

----------------------------------------------------------------------
 .../server/api/handlers/DeleteHandler.java      |  9 ++++-
 .../server/state/cluster/ClusterImpl.java       |  3 +-
 .../server/api/handlers/DeleteHandlerTest.java  | 36 ++++++++++++++++++--
 3 files changed, 44 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4a61ae33/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/DeleteHandler.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/DeleteHandler.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/DeleteHandler.java
index f7d3425..55385a5 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/DeleteHandler.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/DeleteHandler.java
@@ -18,8 +18,13 @@
 
 package org.apache.ambari.server.api.handlers;
 
+import org.apache.ambari.server.ConfigGroupNotFoundException;
 import org.apache.ambari.server.api.resources.ResourceInstance;
-import org.apache.ambari.server.api.services.*;
+
+import org.apache.ambari.server.api.services.RequestBody;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultImpl;
+import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
 import org.apache.ambari.server.controller.spi.NoSuchResourceException;
 import org.apache.ambari.server.controller.spi.RequestStatus;
@@ -54,6 +59,8 @@ public class DeleteHandler extends BaseManagementHandler 
implements RequestHandl
           //todo: 200 may be ok but we need to return a collection
           //todo: of resources that were updated.
           result = new ResultImpl(new ResultStatus(ResultStatus.STATUS.OK, e));
+        } else if (e.getCause() instanceof ConfigGroupNotFoundException){
+          result = new ResultImpl(new 
ResultStatus(ResultStatus.STATUS.ACCEPTED, e));
         } else {
           result = new ResultImpl(new 
ResultStatus(ResultStatus.STATUS.NOT_FOUND, e));
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a61ae33/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 c3b6a86..1ae61f9 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
@@ -85,6 +85,7 @@ import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.assistedinject.Assisted;
 import com.google.inject.persist.Transactional;
+import org.apache.ambari.server.ConfigGroupNotFoundException;
 
 public class ClusterImpl implements Cluster {
 
@@ -545,7 +546,7 @@ public class ClusterImpl implements Cluster {
       try {
         ConfigGroup configGroup = clusterConfigGroups.get(id);
         if (configGroup == null) {
-          throw new AmbariException("Config group does not exist, id = " + id);
+          throw new ConfigGroupNotFoundException(getClusterName(), 
id.toString());
         }
         LOG.debug("Deleting Config group"
           + ", clusterName = " + getClusterName()

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a61ae33/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/DeleteHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/DeleteHandlerTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/DeleteHandlerTest.java
index 33bae13..7e19129 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/DeleteHandlerTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/DeleteHandlerTest.java
@@ -22,7 +22,10 @@ import org.apache.ambari.server.api.query.Query;
 import org.apache.ambari.server.api.query.render.DefaultRenderer;
 import org.apache.ambari.server.api.query.render.Renderer;
 import org.apache.ambari.server.api.resources.ResourceInstance;
-import org.apache.ambari.server.api.services.*;
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.services.RequestBody;
+import org.apache.ambari.server.api.services.Result;
+import org.apache.ambari.server.api.services.ResultStatus;
 import org.apache.ambari.server.api.services.persistence.PersistenceManager;
 import org.apache.ambari.server.api.util.TreeNode;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -33,6 +36,8 @@ import org.junit.Before;
 import org.junit.Test;
 
 import java.util.*;
+import org.apache.ambari.server.ConfigGroupNotFoundException;
+import org.apache.ambari.server.controller.spi.NoSuchResourceException;
 
 import static org.easymock.EasyMock.*;
 import static org.junit.Assert.*;
@@ -233,6 +238,33 @@ public class DeleteHandlerTest {
     verify(request, body, resource, pm, status, resource1, resource2, 
requestResource, query);
   }
 
+  @Test
+  public void testIdempotentPersist() throws Exception {
+    Request request = createNiceMock(Request.class);
+    RequestBody body = createNiceMock(RequestBody.class);
+    ResourceInstance resource = createNiceMock(ResourceInstance.class);
+    PersistenceManager pm = createNiceMock(PersistenceManager.class);
+    RequestStatus status = createNiceMock(RequestStatus.class);
+    Resource resource1 = createNiceMock(Resource.class);
+    Resource requestResource = createNiceMock(Resource.class);
+    ConfigGroupNotFoundException configGroupNotFoundException = 
createNiceMock(ConfigGroupNotFoundException.class); 
+    Query query = createNiceMock(Query.class);
+
+    // expectations
+    expect(request.getResource()).andReturn(resource).anyTimes();
+    expect(request.getBody()).andReturn(body).atLeastOnce();
+
+    expect(pm.delete(resource, body)).andThrow(
+        new NoSuchResourceException("Configgroup not exist", 
configGroupNotFoundException));    
+    
+    replay(request, body, resource, pm, status, resource1, requestResource, 
query);
+
+    Result result = new TestDeleteHandler(pm).persist(resource, body);
+
+    assertNotNull(result);
+    assertEquals(ResultStatus.STATUS.ACCEPTED, result.getStatus().getStatus());
+  }  
+  
   private class TestDeleteHandler extends DeleteHandler {
     private PersistenceManager m_testPm;
 
@@ -245,4 +277,4 @@ public class DeleteHandlerTest {
       return m_testPm;
     }
   }
-}
\ No newline at end of file
+}

Reply via email to