Repository: incubator-falcon Updated Branches: refs/heads/master 3875992e2 -> 972607f9a
FALCON-916 Falcon idempotency is being voilated during delete. Contributed by Balu Vellanki Project: http://git-wip-us.apache.org/repos/asf/incubator-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-falcon/commit/972607f9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-falcon/tree/972607f9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-falcon/diff/972607f9 Branch: refs/heads/master Commit: 972607f9ad67a661e5e864362dc098c59d4ea89f Parents: 3875992 Author: srikanth.sundarrajan <srik...@apache.org> Authored: Mon Dec 1 10:59:17 2014 +0530 Committer: srikanth.sundarrajan <srik...@apache.org> Committed: Mon Dec 1 10:59:17 2014 +0530 ---------------------------------------------------------------------- CHANGES.txt | 3 ++ .../security/FalconAuthorizationFilter.java | 9 ++++-- .../security/FalconAuthorizationFilterTest.java | 29 ++++++++++++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-falcon/blob/972607f9/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index e8381b5..bb1ea44 100755 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -33,6 +33,9 @@ Trunk (Unreleased) (Suhas vasu) BUG FIXES + FALCON-916 Falcon idempotency is being voilated during delete. (Balu + Vellanki via Srikanth Sundarrajan) + FALCON-917 Fix corner cases while getting job id during instance status (Suhas Vasu) http://git-wip-us.apache.org/repos/asf/incubator-falcon/blob/972607f9/prism/src/main/java/org/apache/falcon/security/FalconAuthorizationFilter.java ---------------------------------------------------------------------- diff --git a/prism/src/main/java/org/apache/falcon/security/FalconAuthorizationFilter.java b/prism/src/main/java/org/apache/falcon/security/FalconAuthorizationFilter.java index fb30507..071187a 100644 --- a/prism/src/main/java/org/apache/falcon/security/FalconAuthorizationFilter.java +++ b/prism/src/main/java/org/apache/falcon/security/FalconAuthorizationFilter.java @@ -39,6 +39,7 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.HttpMethod; import javax.ws.rs.core.MediaType; import java.io.IOException; @@ -89,9 +90,11 @@ public class FalconAuthorizationFilter implements Filter { HttpServletResponse.SC_FORBIDDEN, e.getMessage()); return; // do not continue processing } catch (EntityNotRegisteredException e) { - sendError((HttpServletResponse) response, - HttpServletResponse.SC_BAD_REQUEST, e.getMessage()); - return; // do not continue processing + if (!httpRequest.getMethod().equals(HttpMethod.DELETE)) { + sendError((HttpServletResponse) response, + HttpServletResponse.SC_BAD_REQUEST, e.getMessage()); + return; // do not continue processing + } // else Falcon deletes a non-existing entity and returns success (idempotent operation). } catch (IllegalArgumentException e) { sendError((HttpServletResponse) response, HttpServletResponse.SC_BAD_REQUEST, e.getMessage()); http://git-wip-us.apache.org/repos/asf/incubator-falcon/blob/972607f9/prism/src/test/java/org/apache/falcon/security/FalconAuthorizationFilterTest.java ---------------------------------------------------------------------- diff --git a/prism/src/test/java/org/apache/falcon/security/FalconAuthorizationFilterTest.java b/prism/src/test/java/org/apache/falcon/security/FalconAuthorizationFilterTest.java index 54b5859..27b64e9 100644 --- a/prism/src/test/java/org/apache/falcon/security/FalconAuthorizationFilterTest.java +++ b/prism/src/test/java/org/apache/falcon/security/FalconAuthorizationFilterTest.java @@ -38,6 +38,7 @@ import javax.servlet.FilterConfig; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.HttpMethod; import java.io.IOException; /** @@ -217,6 +218,7 @@ public class FalconAuthorizationFilterTest { Mockito.when(mockRequest.getRequestURL()).thenReturn(requestUrl); Mockito.when(mockRequest.getRequestURI()).thenReturn("/api" + uri); Mockito.when(mockRequest.getPathInfo()).thenReturn(uri); + Mockito.when(mockRequest.getMethod()).thenReturn(HttpMethod.GET); try { filter.doFilter(mockRequest, mockResponse, mockChain); @@ -227,6 +229,33 @@ public class FalconAuthorizationFilterTest { } } + @Test + public void testDoFilterForDeleteEntityInvalidEntity() throws Exception { + CurrentUser.authenticate("falcon"); + + StartupProperties.get().setProperty("falcon.security.authorization.enabled", "true"); + + Filter filter = new FalconAuthorizationFilter(); + synchronized (StartupProperties.get()) { + filter.init(mockConfig); + } + + String uri = "/entities/suspend/process/bad-entity"; + StringBuffer requestUrl = new StringBuffer("http://localhost" + uri); + Mockito.when(mockRequest.getRequestURL()).thenReturn(requestUrl); + Mockito.when(mockRequest.getRequestURI()).thenReturn("/api" + uri); + Mockito.when(mockRequest.getPathInfo()).thenReturn(uri); + Mockito.when(mockRequest.getMethod()).thenReturn(HttpMethod.DELETE); + + try { + filter.doFilter(mockRequest, mockResponse, mockChain); + } finally { + filter.destroy(); + } + } + + + public void addClusterEntity() throws Exception { clusterEntity = EntityBuilderTestUtil.buildCluster(CLUSTER_ENTITY_NAME); configStore.publish(EntityType.CLUSTER, clusterEntity);