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 +}
