Repository: ambari Updated Branches: refs/heads/trunk 989492ba8 -> 88b170d49
AMBARI-6816. POST calls to /recommendations and /validations should return 200-OK Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/88b170d4 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/88b170d4 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/88b170d4 Branch: refs/heads/trunk Commit: 88b170d49d17dc03d5a2fc48f41afaccea836307 Parents: 989492b Author: Srimanth Gunturi <[email protected]> Authored: Mon Aug 11 09:50:34 2014 -0700 Committer: Srimanth Gunturi <[email protected]> Committed: Mon Aug 11 10:13:43 2014 -0700 ---------------------------------------------------------------------- .../server/api/handlers/CreateHandler.java | 6 ++++- .../server/api/handlers/QueryCreateHandler.java | 6 ++++- .../api/resources/BaseResourceDefinition.java | 6 +++++ .../RecommendationResourceDefinition.java | 4 ++++ .../api/resources/ResourceDefinition.java | 11 +++++++++ .../resources/ValidationResourceDefinition.java | 5 ++++ .../server/api/handlers/CreateHandlerTest.java | 24 +++++++++++++++----- .../api/handlers/QueryCreateHandlerTest.java | 2 ++ 8 files changed, 56 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/CreateHandler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/CreateHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/CreateHandler.java index 91903d1..c1bd91b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/CreateHandler.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/CreateHandler.java @@ -38,7 +38,11 @@ public class CreateHandler extends BaseManagementHandler { result = createResult(status); if (result.isSynchronous()) { - result.setResultStatus(new ResultStatus(ResultStatus.STATUS.CREATED)); + if (resource.getResourceDefinition().isCreatable()) { + result.setResultStatus(new ResultStatus(ResultStatus.STATUS.CREATED)); + } else { + result.setResultStatus(new ResultStatus(ResultStatus.STATUS.OK)); + } } else { result.setResultStatus(new ResultStatus(ResultStatus.STATUS.ACCEPTED)); } http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/QueryCreateHandler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/QueryCreateHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/QueryCreateHandler.java index 040a1f1..1bc4a0f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/QueryCreateHandler.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/QueryCreateHandler.java @@ -170,7 +170,11 @@ public class QueryCreateHandler extends BaseManagementHandler { result = createResult(status); if (result.isSynchronous()) { - result.setResultStatus(new ResultStatus(ResultStatus.STATUS.CREATED)); + if (resource.getResourceDefinition().isCreatable()) { + result.setResultStatus(new ResultStatus(ResultStatus.STATUS.CREATED)); + } else { + result.setResultStatus(new ResultStatus(ResultStatus.STATUS.OK)); + } } else { result.setResultStatus(new ResultStatus(ResultStatus.STATUS.ACCEPTED)); } http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseResourceDefinition.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseResourceDefinition.java index ef92302..a5a7234 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseResourceDefinition.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseResourceDefinition.java @@ -112,6 +112,12 @@ public abstract class BaseResourceDefinition implements ResourceDefinition { return m_type.hashCode(); } + @Override + public boolean isCreatable() { + // by default all resources are creatable + return true; + } + class BaseHrefPostProcessor implements PostProcessor { @Override public void process(Request request, TreeNode<Resource> resultNode, String href) { http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RecommendationResourceDefinition.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RecommendationResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RecommendationResourceDefinition.java index 5333b2b..203fc44 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RecommendationResourceDefinition.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/RecommendationResourceDefinition.java @@ -41,4 +41,8 @@ public class RecommendationResourceDefinition extends BaseResourceDefinition { return "recommendation"; } + @Override + public boolean isCreatable() { + return false; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceDefinition.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceDefinition.java index 1e0a4db..7632e64 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceDefinition.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ResourceDefinition.java @@ -90,6 +90,17 @@ public interface ResourceDefinition { public Collection<String> getCreateDirectives(); /** + * Defines if resource is actually created on the server side during POST + * operation. + * + * @see <a + * href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5"> + * http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5</a> + * @return {@code true} if resource is creatable, {@code false} otherwise + */ + public boolean isCreatable(); + + /** * Resource specific result processor. * Used to provide resource specific processing of a result. */ http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ValidationResourceDefinition.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ValidationResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ValidationResourceDefinition.java index 027ee4b..cc2cc0e 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ValidationResourceDefinition.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ValidationResourceDefinition.java @@ -40,4 +40,9 @@ public class ValidationResourceDefinition extends BaseResourceDefinition { public String getSingularName() { return "validation"; } + + @Override + public boolean isCreatable() { + return false; + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/CreateHandlerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/CreateHandlerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/CreateHandlerTest.java index f7747f3..c2562bd 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/CreateHandlerTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/CreateHandlerTest.java @@ -21,6 +21,7 @@ package org.apache.ambari.server.api.handlers; 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.ResourceDefinition; import org.apache.ambari.server.api.resources.ResourceInstance; import org.apache.ambari.server.api.services.*; import org.apache.ambari.server.api.services.persistence.PersistenceManager; @@ -44,6 +45,7 @@ public class CreateHandlerTest { Request request = createNiceMock(Request.class); RequestBody body = createNiceMock(RequestBody.class); ResourceInstance resource = createNiceMock(ResourceInstance.class); + ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class); Query query = createStrictMock(Query.class); PersistenceManager pm = createStrictMock(PersistenceManager.class); RequestStatus status = createNiceMock(RequestStatus.class); @@ -63,6 +65,8 @@ public class CreateHandlerTest { expect(resource.getQuery()).andReturn(query); query.setRenderer(renderer); + expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes(); + expect(resourceDefinition.isCreatable()).andReturn(true).anyTimes(); expect(pm.create(resource, body)).andReturn(status); expect(status.getStatus()).andReturn(RequestStatus.Status.Complete); @@ -70,7 +74,7 @@ public class CreateHandlerTest { expect(resource1.getType()).andReturn(Resource.Type.Cluster).anyTimes(); expect(resource2.getType()).andReturn(Resource.Type.Cluster).anyTimes(); - replay(request, body, resource, query, pm, status, resource1, resource2); + replay(request, body, resource, resourceDefinition, query, pm, status, resource1, resource2); Result result = new TestCreateHandler(pm).handleRequest(request); @@ -93,7 +97,7 @@ public class CreateHandlerTest { } assertEquals(ResultStatus.STATUS.CREATED, result.getStatus().getStatus()); - verify(request, body, resource, query, pm, status, resource1, resource2); + verify(request, body, resource, resourceDefinition, query, pm, status, resource1, resource2); } @Test @@ -101,6 +105,7 @@ public class CreateHandlerTest { Request request = createNiceMock(Request.class); RequestBody body = createNiceMock(RequestBody.class); ResourceInstance resource = createNiceMock(ResourceInstance.class); + ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class); Query query = createStrictMock(Query.class); PersistenceManager pm = createStrictMock(PersistenceManager.class); RequestStatus status = createNiceMock(RequestStatus.class); @@ -120,6 +125,8 @@ public class CreateHandlerTest { expect(resource.getQuery()).andReturn(query); query.setRenderer(renderer); + expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes(); + expect(resourceDefinition.isCreatable()).andReturn(true).anyTimes(); expect(pm.create(resource, body)).andReturn(status); expect(status.getStatus()).andReturn(RequestStatus.Status.Complete); @@ -127,7 +134,7 @@ public class CreateHandlerTest { expect(resource1.getType()).andReturn(Resource.Type.Cluster).anyTimes(); expect(resource2.getType()).andReturn(Resource.Type.Cluster).anyTimes(); - replay(request, body, resource, query, pm, status, resource1, resource2); + replay(request, body, resource, resourceDefinition, query, pm, status, resource1, resource2); Result result = new TestCreateHandler(pm).handleRequest(request); @@ -149,7 +156,7 @@ public class CreateHandlerTest { } } assertEquals(ResultStatus.STATUS.CREATED, result.getStatus().getStatus()); - verify(request, body, resource, query, pm, status, resource1, resource2); + verify(request, body, resource, resourceDefinition, query, pm, status, resource1, resource2); } @Test @@ -157,6 +164,7 @@ public class CreateHandlerTest { Request request = createNiceMock(Request.class); RequestBody body = createNiceMock(RequestBody.class); ResourceInstance resource = createNiceMock(ResourceInstance.class); + ResourceDefinition resourceDefinition = createNiceMock(ResourceDefinition.class); Query query = createStrictMock(Query.class); PersistenceManager pm = createStrictMock(PersistenceManager.class); RequestStatus status = createNiceMock(RequestStatus.class); @@ -177,6 +185,8 @@ public class CreateHandlerTest { expect(resource.getQuery()).andReturn(query); query.setRenderer(renderer); + expect(resource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes(); + expect(resourceDefinition.isCreatable()).andReturn(true).anyTimes(); expect(pm.create(resource, body)).andReturn(status); expect(status.getStatus()).andReturn(RequestStatus.Status.Accepted); @@ -185,7 +195,8 @@ public class CreateHandlerTest { expect(resource2.getType()).andReturn(Resource.Type.Cluster).anyTimes(); expect(status.getRequestResource()).andReturn(requestResource).anyTimes(); - replay(request, body, resource, query, pm, status, resource1, resource2, requestResource); + replay(request, body, resource, resourceDefinition, query, pm, status, resource1, resource2, + requestResource); Result result = new TestCreateHandler(pm).handleRequest(request); @@ -213,7 +224,8 @@ public class CreateHandlerTest { assertSame(requestResource, statusNode.getObject()); assertEquals(ResultStatus.STATUS.ACCEPTED, result.getStatus().getStatus()); - verify(request, body, resource, query, pm, status, resource1, resource2, requestResource); + verify(request, body, resource, resourceDefinition, query, pm, status, resource1, resource2, + requestResource); } private class TestCreateHandler extends CreateHandler { http://git-wip-us.apache.org/repos/asf/ambari/blob/88b170d4/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/QueryCreateHandlerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/QueryCreateHandlerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/QueryCreateHandlerTest.java index f6e3ebd..fa35940 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/QueryCreateHandlerTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/api/handlers/QueryCreateHandlerTest.java @@ -153,6 +153,7 @@ public class QueryCreateHandlerTest { expect(resourceInstance.getSubResources()).andReturn(mapSubResources).anyTimes(); expect(resourceDefinition.getType()).andReturn(Resource.Type.Service).anyTimes(); + expect(resourceDefinition.isCreatable()).andReturn(true).anyTimes(); expect(subResource.getResourceDefinition()).andReturn(subResourceDefinition).anyTimes(); expect(subResourceDefinition.getType()).andReturn(Resource.Type.Component).anyTimes(); @@ -169,6 +170,7 @@ public class QueryCreateHandlerTest { expect(resourceInstanceFactory.createResource(Resource.Type.Component, mapIds)). andReturn(createResource).anyTimes(); + expect(createResource.getResourceDefinition()).andReturn(resourceDefinition).anyTimes(); expect(pm.create(same(createResource), capture(bodyCapture))).andReturn(status); expect(status.getStatus()).andReturn(RequestStatus.Status.Complete).anyTimes();
