com.liferay.jenkins.results.parser.Retryable Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.jenkins.results.parser
Show all versions of com.liferay.jenkins.results.parser
Liferay Jenkins Results Parser
The newest version!
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
package com.liferay.jenkins.results.parser;
/**
* @author Kenji Heigel
*/
public abstract class Retryable {
public Retryable() {
this(5, 30, true);
}
public Retryable(
boolean exceptionOnFail, int maxRetries, int retryPeriod,
boolean verbose) {
_exceptionOnFail = exceptionOnFail;
this.maxRetries = maxRetries;
_retryPeriod = retryPeriod;
_verbose = verbose;
}
public Retryable(int maxRetries, int retryPeriod, boolean verbose) {
this(true, maxRetries, retryPeriod, verbose);
}
public abstract T execute();
public final T executeWithRetries() {
int retryCount = 0;
while (true) {
try {
return execute();
}
catch (Exception exception) {
retryCount++;
if (_verbose) {
System.out.println("An error has occurred: " + exception);
}
if ((maxRetries >= 0) && (retryCount > maxRetries)) {
if (_exceptionOnFail) {
throw exception;
}
return null;
}
sleep(_retryPeriod * 1000);
String retryMessage = getRetryMessage(retryCount);
if (!JenkinsResultsParserUtil.isNullOrEmpty(retryMessage)) {
System.out.println(retryMessage);
}
}
}
}
public void sleep(long duration) {
try {
Thread.sleep(duration);
}
catch (InterruptedException interruptedException) {
throw new RuntimeException(interruptedException);
}
}
protected String getRetryMessage(int retryCount) {
return JenkinsResultsParserUtil.combine(
"Retry attempt ", String.valueOf(retryCount), " of ",
String.valueOf(maxRetries));
}
protected int maxRetries;
private boolean _exceptionOnFail;
private int _retryPeriod;
private boolean _verbose;
}