From d23d61b2a88a472978dcd15428a61dfa48d31215 Mon Sep 17 00:00:00 2001 From: ashutoshm <amestry@hortonworks.com> Date: Fri, 21 Jul 2017 12:17:42 -0700 Subject: [PATCH] ATLAS-1960: fixed handling of import/export APIs in HA configuration Signed-off-by: Madhan Neethiraj <madhan@apache.org> --- webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java | 15 ++++++++++++++- webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java | 35 ++++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java b/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java index 36f2688..29d829f 100644 --- a/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java +++ b/webapp/src/main/java/org/apache/atlas/web/filters/ActiveServerFilter.java @@ -100,10 +100,23 @@ public class ActiveServerFilter implements Filter { } } + final String adminUriNotFiltered[] = { "/admin/export", "/admin/import", "/admin/importfile" }; private boolean isFilteredURI(ServletRequest servletRequest) { HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; String requestURI = httpServletRequest.getRequestURI(); - return requestURI.contains("/admin/"); + + if(requestURI.contains("/admin/")) { + for (String s : adminUriNotFiltered) { + if (requestURI.contains(s)) { + LOG.error("URL not supported in HA mode: {}", requestURI); + return false; + } + } + + return true; + } else { + return false; + } } boolean isInstanceActive() { diff --git a/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java b/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java index a8d1110..3396072 100644 --- a/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java +++ b/webapp/src/test/java/org/apache/atlas/web/filters/ActiveServerFilterTest.java @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -99,7 +99,28 @@ public class ActiveServerFilterTest { activeServerFilter.doFilter(servletRequest, servletResponse, filterChain); - verify(servletResponse).sendRedirect(ACTIVE_SERVER_ADDRESS+"types"); + verify(servletResponse).sendRedirect(ACTIVE_SERVER_ADDRESS + "types"); + } + + + @Test + public void adminImportRequestsToPassiveServerShouldToActiveServerAddress() throws IOException, ServletException { + String importExportUrls[] = {"api/admin/export", "api/admin/import", "api/admin/importfile"}; + + for (String partialUrl : importExportUrls) { + when(serviceState.getState()).thenReturn(ServiceState.ServiceStateValue.PASSIVE); + when(servletRequest.getRequestURI()).thenReturn(partialUrl); + + ActiveServerFilter activeServerFilter = new ActiveServerFilter(activeInstanceState, serviceState); + + when(activeInstanceState.getActiveServerAddress()).thenReturn(ACTIVE_SERVER_ADDRESS); + when(servletRequest.getRequestURI()).thenReturn(partialUrl); + when(servletRequest.getMethod()).thenReturn(HttpMethod.GET); + + activeServerFilter.doFilter(servletRequest, servletResponse, filterChain); + + verify(servletResponse).sendRedirect(ACTIVE_SERVER_ADDRESS + partialUrl); + } } @Test @@ -116,7 +137,7 @@ public class ActiveServerFilterTest { activeServerFilter.doFilter(servletRequest, servletResponse, filterChain); - verify(servletResponse).sendRedirect(ACTIVE_SERVER_ADDRESS+"types?query=TRAIT"); + verify(servletResponse).sendRedirect(ACTIVE_SERVER_ADDRESS + "types?query=TRAIT"); } @@ -133,7 +154,7 @@ public class ActiveServerFilterTest { activeServerFilter.doFilter(servletRequest, servletResponse, filterChain); - verify(servletResponse).setHeader("Location", ACTIVE_SERVER_ADDRESS+"types"); + verify(servletResponse).setHeader("Location", ACTIVE_SERVER_ADDRESS + "types"); verify(servletResponse).setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT); } @@ -150,7 +171,7 @@ public class ActiveServerFilterTest { activeServerFilter.doFilter(servletRequest, servletResponse, filterChain); - verify(servletResponse).setHeader("Location", ACTIVE_SERVER_ADDRESS+"types"); + verify(servletResponse).setHeader("Location", ACTIVE_SERVER_ADDRESS + "types"); verify(servletResponse).setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT); } -- libgit2 0.27.1