This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit bec24eb1ccaacd1ddb8952b539703b2656e7cd66 Author: Alex Heneveld <[email protected]> AuthorDate: Tue Aug 24 15:58:14 2021 +0100 better message displayed to user for hot-not-master requests disallowed in standby mode --- .../brooklyn/rest/filter/HaHotCheckHelperAbstract.java | 6 +++++- .../brooklyn/rest/filter/HaHotCheckResourceFilter.java | 17 +++++++++-------- .../brooklyn/rest/filter/HaMasterCheckFilter.java | 2 +- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/filter/HaHotCheckHelperAbstract.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/filter/HaHotCheckHelperAbstract.java index 7f183a6..6e60420 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/filter/HaHotCheckHelperAbstract.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/filter/HaHotCheckHelperAbstract.java @@ -55,9 +55,13 @@ public abstract class HaHotCheckHelperAbstract { } public Response disallowResponse(String problem, Object info) { + return disallowResponse(problem, info, true); + } + + public Response disallowResponse(String problem, Object info, boolean masterRequired) { log.warn("Disallowing web request as "+problem+": "+info+" (caller should set '"+HaHotCheckHelperAbstract.SKIP_CHECK_HEADER+"' to force)"); return ApiError.builder() - .message("This request is only permitted against an active master Brooklyn server") + .message("This request is only permitted against an active "+(masterRequired?"primary":"primary or hot standby/backup")+" Brooklyn server") .errorCode(Response.Status.FORBIDDEN).build().asJsonResponse(); } diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/filter/HaHotCheckResourceFilter.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/filter/HaHotCheckResourceFilter.java index cbf0a6e..3310ff5 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/filter/HaHotCheckResourceFilter.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/filter/HaHotCheckResourceFilter.java @@ -38,6 +38,7 @@ import org.apache.brooklyn.util.text.Strings; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableSet; +import org.apache.commons.lang3.tuple.Pair; /** * Checks that if the method or resource class corresponding to a request @@ -82,18 +83,18 @@ public class HaHotCheckResourceFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) throws IOException { - String problem = lookForProblem(requestContext); - if (Strings.isNonBlank(problem)) { - requestContext.abortWith(helper.disallowResponse(problem, requestContext.getUriInfo().getAbsolutePath()+" ("+resourceInfo.getResourceMethod()+")")); + Pair<String,Boolean> problemAndMaster = lookForProblem(requestContext); + if (problemAndMaster!=null && Strings.isNonBlank(problemAndMaster.getLeft())) { + requestContext.abortWith(helper.disallowResponse(problemAndMaster.getLeft(), requestContext.getUriInfo().getAbsolutePath()+" ("+resourceInfo.getResourceMethod()+")", problemAndMaster.getRight())); } } - private String lookForProblem(ContainerRequestContext requestContext) { + private Pair<String,Boolean> lookForProblem(ContainerRequestContext requestContext) { if (helper.isSkipCheckHeaderSet(requestContext.getHeaderString(SKIP_CHECK_HEADER))) return null; if (isMasterRequiredForRequest(requestContext) && !isMaster()) { - return "server not in required HA master state"; + return Pair.of("server not in required HA primary state",true); } if (!isHaHotStateRequired()) @@ -101,12 +102,12 @@ public class HaHotCheckResourceFilter implements ContainerRequestFilter { Maybe<String> problem = helper.getProblemMessageIfServerNotRunning(); if (problem.isPresent()) - return problem.get(); + return Pair.of(problem.get(),false); if (!helper.isHaHotStatus()) - return "server not in required HA hot state"; + return Pair.of("server not in required HA hot state",false); if (helper.isStateNotYetValid()) - return "server not yet completed loading data for required HA hot state"; + return Pair.of("server not yet completed loading data for required HA hot state",false); return null; } diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/filter/HaMasterCheckFilter.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/filter/HaMasterCheckFilter.java index 27a2927..278b2f1 100644 --- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/filter/HaMasterCheckFilter.java +++ b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/filter/HaMasterCheckFilter.java @@ -89,7 +89,7 @@ public class HaMasterCheckFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String problem = lookForProblem(request); if (problem!=null) { - WebResourceUtils.applyJsonResponse(mgmt, helper.disallowResponse(problem, request.getParameterMap()), (HttpServletResponse)response); + WebResourceUtils.applyJsonResponse(mgmt, helper.disallowResponse(problem, request.getParameterMap(), true), (HttpServletResponse)response); } else { chain.doFilter(request, response); }
