KEYCLOAK-11424 DBAllocatorUnavailableException
This commit is contained in:
parent
8aa5019efe
commit
e4baef41d1
4 changed files with 18 additions and 5 deletions
|
@ -129,6 +129,7 @@ public class AllocateDBMojo extends AbstractMojo {
|
|||
return;
|
||||
}
|
||||
|
||||
logger.info("Total retries: " + totalRetries + "; backOffTime: " + backoffTimeSeconds);
|
||||
try {
|
||||
IncrementalBackoffRetryPolicy retryPolicy = new IncrementalBackoffRetryPolicy(totalRetries, backoffTimeSeconds, TimeUnit.SECONDS);
|
||||
DBAllocatorServiceClient client = new DBAllocatorServiceClient(dbAllocatorURI, retryPolicy);
|
||||
|
|
|
@ -70,6 +70,7 @@ public class ReleaseDBMojo extends AbstractMojo {
|
|||
return;
|
||||
}
|
||||
|
||||
logger.info("Total retries: " + totalRetries + "; backOffTime: " + backoffTimeSeconds);
|
||||
try {
|
||||
IncrementalBackoffRetryPolicy retryPolicy = new IncrementalBackoffRetryPolicy(totalRetries, backoffTimeSeconds, TimeUnit.SECONDS);
|
||||
DBAllocatorServiceClient client = new DBAllocatorServiceClient(dbAllocatorURI, retryPolicy);
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.net.URI;
|
|||
import java.util.Objects;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
public class DBAllocatorServiceClient {
|
||||
|
||||
|
@ -29,6 +30,7 @@ public class DBAllocatorServiceClient {
|
|||
private final Client restClient;
|
||||
private final URI allocatorServletURI;
|
||||
private final BackoffRetryPolicy retryPolicy;
|
||||
private final Logger logger = Logger.getLogger(DBAllocatorServiceClient.class);
|
||||
|
||||
public DBAllocatorServiceClient(String allocatorServletURI, BackoffRetryPolicy retryPolicy) {
|
||||
Objects.requireNonNull(allocatorServletURI, "DB Allocator URI must not be null");
|
||||
|
@ -68,6 +70,7 @@ public class DBAllocatorServiceClient {
|
|||
.queryParam("expiry", expirationTimeUnit.toMinutes(expiration))
|
||||
.request();
|
||||
|
||||
logger.info("Calling " + allocatorServletURI);
|
||||
Response response = retryPolicy.retryTillHttpOk(() -> target.get());
|
||||
Properties properties = new Properties();
|
||||
String content = response.readEntity(String.class);
|
||||
|
|
|
@ -7,6 +7,7 @@ import javax.ws.rs.core.Response;
|
|||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.locks.LockSupport;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
public class IncrementalBackoffRetryPolicy implements BackoffRetryPolicy {
|
||||
|
||||
|
@ -17,6 +18,7 @@ public class IncrementalBackoffRetryPolicy implements BackoffRetryPolicy {
|
|||
private final int totalRetries;
|
||||
private final int backoffTime;
|
||||
private final TimeUnit backoffTimeUnit;
|
||||
private final Logger logger = Logger.getLogger(IncrementalBackoffRetryPolicy.class);
|
||||
|
||||
public IncrementalBackoffRetryPolicy() {
|
||||
this(DEFAULT_TOTAL_RETRIES, DEFAULT_BACKOFF_TIME, DEFAULT_BACKOFF_TIME_UNIT);
|
||||
|
@ -33,9 +35,9 @@ public class IncrementalBackoffRetryPolicy implements BackoffRetryPolicy {
|
|||
return retryTillHttpOk(callableSupplier, totalRetries, backoffTime, backoffTimeUnit);
|
||||
}
|
||||
|
||||
public Response retryTillHttpOk(Callable<Response> callableSupplier, int totalRetries, int backoffTime, TimeUnit backoffTimeUnit) throws DBAllocatorUnavailableException {
|
||||
private Response retryTillHttpOk(Callable<Response> callableSupplier, int totalRetries, int backoffTime, TimeUnit backoffTimeUnit) throws DBAllocatorUnavailableException {
|
||||
int retryCount = 0;
|
||||
Response response = null;
|
||||
Response response;
|
||||
while(true) {
|
||||
try {
|
||||
response = callableSupplier.call();
|
||||
|
@ -43,14 +45,20 @@ public class IncrementalBackoffRetryPolicy implements BackoffRetryPolicy {
|
|||
response = null;
|
||||
}
|
||||
|
||||
if (response != null && response.getStatus() == 200) {
|
||||
return response;
|
||||
if (response != null) {
|
||||
logger.info("Response status: " + response.getStatus());
|
||||
if (response.getStatus() == 200) {
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
logger.info("retryCount: " + (retryCount + 1) + ", totalRetries: " + totalRetries);
|
||||
if (++retryCount > totalRetries) {
|
||||
logger.info("retryCount exceeded: " + retryCount);
|
||||
throw new DBAllocatorUnavailableException(response);
|
||||
}
|
||||
|
||||
logger.info("backoffTime * retryCount: " + backoffTime * retryCount);
|
||||
LockSupport.parkNanos(backoffTimeUnit.toNanos(backoffTime * retryCount));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue