Skip to content
Merged
Prev Previous commit
Next Next commit
Move retry properties to LoadBalancerRetryProperties.
  • Loading branch information
OlgaMaciaszek committed Sep 22, 2020
commit 2e07d26b56fabeaced3eb886af8c88c9fbbde4c0
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@

package org.springframework.cloud.client.loadbalancer;

import java.util.Set;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.http.HttpMethod;

/**
* Configuration properties for the {@link LoadBalancerClient}.
Expand All @@ -28,6 +31,27 @@ public class LoadBalancerRetryProperties {

private boolean enabled = true;

/**
* Indicates retries should be attempted on operations other than {@link HttpMethod#GET}.
*/
private boolean retryOnAllOperations = false;

/**
* Number of retries to be executed on the same <code>ServiceInstance</code>.
*/
private int maxRetriesOnSameServiceInstance = 0;

/**
* Number of retries to be executed on the next <code>ServiceInstance</code>.
* A <code>ServiceInstance</code> is chosen before each retry call.
*/
private int maxRetriesOnNextServiceInstance = 1;

/**
* A {@link Set} of status codes that should trigger a retry.
*/
private Set<Integer> retryableStatusCodes;

/**
* Returns true if the load balancer should retry failed requests.
* @return True if the load balancer should retry failed requests; false otherwise.
Expand All @@ -44,4 +68,36 @@ public void setEnabled(boolean enabled) {
this.enabled = enabled;
}

public boolean isRetryOnAllOperations() {
return retryOnAllOperations;
}

public void setRetryOnAllOperations(boolean retryOnAllOperations) {
this.retryOnAllOperations = retryOnAllOperations;
}

public int getMaxRetriesOnSameServiceInstance() {
return maxRetriesOnSameServiceInstance;
}

public void setMaxRetriesOnSameServiceInstance(int maxRetriesOnSameServiceInstance) {
this.maxRetriesOnSameServiceInstance = maxRetriesOnSameServiceInstance;
}

public int getMaxRetriesOnNextServiceInstance() {
return maxRetriesOnNextServiceInstance;
}

public void setMaxRetriesOnNextServiceInstance(int maxRetriesOnNextServiceInstance) {
this.maxRetriesOnNextServiceInstance = maxRetriesOnNextServiceInstance;
}

public Set<Integer> getRetryableStatusCodes() {
return retryableStatusCodes;
}

public void setRetryableStatusCodes(Set<Integer> retryableStatusCodes) {
this.retryableStatusCodes = retryableStatusCodes;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -47,19 +47,6 @@ public void setHealthCheck(HealthCheck healthCheck) {
this.healthCheck = healthCheck;
}

/**
* Properties for LoadBalancer retries.
*/
private Retry retry = new Retry();

public Retry getRetry() {
return retry;
}

public void setRetry(Retry retry) {
this.retry = retry;
}

public static class HealthCheck {

/**
Expand Down Expand Up @@ -99,57 +86,4 @@ public void setInterval(Duration interval) {
}

}

public static class Retry {

/**
* Indicates retries should be attempted on operations other than {@link HttpMethod#GET}.
*/
private boolean retryOnAllOperations = false;

/**
* Number of retries to be executed on the same {@link ServiceInstance}.
*/
private int maxRetriesOnSameServiceInstance = 0;

/**
* Number of retries to be executed on the next {@link ServiceInstance}.
* A {@link ServiceInstance is chosen before each retry call}.
*/
private int maxRetriesOnNextServiceInstance = 1;

private Set<Integer> retryableStatusCodes;

public boolean isRetryOnAllOperations() {
return retryOnAllOperations;
}

public void setRetryOnAllOperations(boolean retryOnAllOperations) {
this.retryOnAllOperations = retryOnAllOperations;
}

public int getMaxRetriesOnSameServiceInstance() {
return maxRetriesOnSameServiceInstance;
}

public void setMaxRetriesOnSameServiceInstance(int maxRetriesOnSameServiceInstance) {
this.maxRetriesOnSameServiceInstance = maxRetriesOnSameServiceInstance;
}

public int getMaxRetriesOnNextServiceInstance() {
return maxRetriesOnNextServiceInstance;
}

public void setMaxRetriesOnNextServiceInstance(int maxRetriesOnNextServiceInstance) {
this.maxRetriesOnNextServiceInstance = maxRetriesOnNextServiceInstance;
}

public Set<Integer> getRetryableStatusCodes() {
return retryableStatusCodes;
}

public void setRetryableStatusCodes(Set<Integer> retryableStatusCodes) {
this.retryableStatusCodes = retryableStatusCodes;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,22 @@

import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryFactory;
import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicy;
import org.springframework.cloud.client.loadbalancer.LoadBalancerRetryProperties;
import org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser;
import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerProperties;
import org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient;

/**
* An implementation of {@link LoadBalancedRetryFactory} for {@link BlockingLoadBalancerClient}.
*
* @author Olga Maciaszek-Sharma
*/
public class BlockingLoadBalancedRetryFactory implements LoadBalancedRetryFactory {

private final LoadBalancerProperties.Retry retryProperties;
private final LoadBalancerRetryProperties retryProperties;

public BlockingLoadBalancedRetryFactory(LoadBalancerProperties properties) {
retryProperties = properties.getRetry();
public BlockingLoadBalancedRetryFactory(LoadBalancerRetryProperties retryProperties) {
this.retryProperties = retryProperties;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@

import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryContext;
import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryPolicy;
import org.springframework.cloud.client.loadbalancer.LoadBalancerRetryProperties;
import org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser;
import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerProperties;
import org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient;
import org.springframework.http.HttpMethod;

Expand All @@ -32,15 +32,15 @@
*/
public class BlockingLoadBalancedRetryPolicy implements LoadBalancedRetryPolicy {

private final LoadBalancerProperties.Retry retryProperties;
private final LoadBalancerRetryProperties retryProperties;
private final ServiceInstanceChooser loadBalancerClient;
private final String serviceId;
private int sameServerCount = 0;
private int nextServerCount = 0;

public BlockingLoadBalancedRetryPolicy(String serviceId,
ServiceInstanceChooser loadBalancerClient,
LoadBalancerProperties.Retry retryProperties) {
LoadBalancerRetryProperties retryProperties) {
this.serviceId = serviceId;
this.loadBalancerClient = loadBalancerClient;
this.retryProperties = retryProperties;
Expand Down