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);

Reply via email to