hanicz commented on code in PR #1049: URL: https://github.com/apache/knox/pull/1049#discussion_r2284291670
########## gateway-provider-ha/src/main/java/org/apache/knox/gateway/ha/dispatch/CommonHaDispatch.java: ########## @@ -225,19 +223,88 @@ default void shiftActiveURL(boolean userAgentDisabled, Optional<URI> backendURI) * needs to be loadbalanced. If a request has BACKEND coookie and Loadbalance=on then * there should be no loadbalancing. */ - if (isLoadBalancingEnabled() && !userAgentDisabled) { + if (getHaConfigurations().isLoadBalancingEnabled() && !userAgentDisabled) { /* check sticky session enabled */ - if (isStickySessionEnabled()) { + if (getHaConfigurations().isStickySessionEnabled()) { /* loadbalance only when sticky session enabled and no backend url cookie */ if (!backendURI.isPresent()) { - getHaProvider().makeNextActiveURLAvailable(getServiceRole()); + getHaConfigurations().getHaProvider().makeNextActiveURLAvailable(getServiceRole()); } else { /* sticky session enabled and backend url cookie is valid no need to loadbalance */ /* do nothing */ } } else { - getHaProvider().makeNextActiveURLAvailable(getServiceRole()); + getHaConfigurations().getHaProvider().makeNextActiveURLAvailable(getServiceRole()); + } + } + } + + /** + * A helper method that marks an endpoint failed. + * Changes HA Provider state. + * Changes ActiveUrl state. + * Changes for inbound urls should be handled by calling functions. + * + * @param outboundRequest + * @param inboundRequest + * @return current failover counter + */ + default AtomicInteger markEndpointFailed(final HttpUriRequest outboundRequest, final HttpServletRequest inboundRequest) { + synchronized (this) { + getHaConfigurations().getHaProvider().markFailedURL(getServiceRole(), outboundRequest.getURI().toString()); + AtomicInteger counter = (AtomicInteger) inboundRequest.getAttribute(FAILOVER_COUNTER_ATTRIBUTE); + if (counter == null) { + counter = new AtomicInteger(0); + } + + if (counter.incrementAndGet() <= getHaConfigurations().getMaxFailoverAttempts()) { + setupUrlHashLookup(); // refresh the url hash after failing a url + /* in case of failover update the activeURL variable */ + getActiveURL().set(outboundRequest.getURI().toString()); + } + return counter; + } + } + + default HttpServletRequest prepareForFailover(HttpUriRequest outboundRequest, HttpServletRequest inboundRequest) { + //null out target url so that rewriters run again + inboundRequest.setAttribute(AbstractGatewayFilter.TARGET_REQUEST_URL_ATTRIBUTE_NAME, null); + // Make sure to remove the ha cookie from the request + inboundRequest = new StickySessionCookieRemovedRequest(getHaConfigurations().getStickySessionCookieName(), inboundRequest); Review Comment: No, it just makes sure it is removed in case there is one. This logic was just moved into the interface, I didn't touch it. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@knox.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org