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

Reply via email to