Deny resource requests during rebind
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/3b99a96f Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/3b99a96f Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/3b99a96f Branch: refs/heads/master Commit: 3b99a96fd3f7fce9ba8b4f396c7bc696ecac6e9d Parents: 35e6c3a Author: Svetoslav Neykov <[email protected]> Authored: Wed Mar 4 17:05:56 2015 +0200 Committer: Svetoslav Neykov <[email protected]> Committed: Thu Mar 19 16:01:29 2015 +0200 ---------------------------------------------------------------------- .../rest/filter/HaStateCheckResourceFilter.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3b99a96f/usage/rest-server/src/main/java/brooklyn/rest/filter/HaStateCheckResourceFilter.java ---------------------------------------------------------------------- diff --git a/usage/rest-server/src/main/java/brooklyn/rest/filter/HaStateCheckResourceFilter.java b/usage/rest-server/src/main/java/brooklyn/rest/filter/HaStateCheckResourceFilter.java index 44f1d1a..9da0766 100644 --- a/usage/rest-server/src/main/java/brooklyn/rest/filter/HaStateCheckResourceFilter.java +++ b/usage/rest-server/src/main/java/brooklyn/rest/filter/HaStateCheckResourceFilter.java @@ -29,6 +29,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import brooklyn.config.BrooklynServiceAttributes; +import brooklyn.entity.rebind.RebindManagerImpl.RebindTracker; import brooklyn.management.ManagementContext; import brooklyn.management.ha.ManagementNodeState; @@ -68,11 +69,7 @@ public class HaStateCheckResourceFilter implements ResourceFilterFactory { @Override public ContainerRequest filter(ContainerRequest request) { - boolean isHot = isHaHotStatus(); - boolean isOverriden = "true".equalsIgnoreCase(request.getHeaderValue(HaMasterCheckFilter.SKIP_CHECK_HEADER)); - if (!isHot && !isOverriden && - (am.getAnnotation(HaHotStateRequired.class) != null || - am.getResource().getAnnotation(HaHotStateRequired.class) != null)) { + if (!isStateLoaded() && isUnsafe(request)) { Response response = Response.status(Response.Status.FORBIDDEN) .type(MediaType.APPLICATION_JSON) .entity("{\"error\":403,\"message\":\"Requests should be made to the master Brooklyn server\"}") @@ -82,6 +79,17 @@ public class HaStateCheckResourceFilter implements ResourceFilterFactory { return request; } + private boolean isStateLoaded() { + return isHaHotStatus() && !RebindTracker.isRebinding(); + } + + private boolean isUnsafe(ContainerRequest request) { + boolean isOverriden = "true".equalsIgnoreCase(request.getHeaderValue(HaMasterCheckFilter.SKIP_CHECK_HEADER)); + return !isOverriden && + (am.getAnnotation(HaHotStateRequired.class) != null || + am.getResource().getAnnotation(HaHotStateRequired.class) != null); + } + private boolean isHaHotStatus() { ManagementNodeState state = mgmt.getHighAvailabilityManager().getNodeState(); return HOT_STATES.contains(state);
