You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2021/11/09 10:24:13 UTC
[camel] 01/02: CAMEL-17121: added support for configuring the
back-off strategy
This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 464acde20df180c8bbd8b536afb90c9cfdc4dfcd
Author: Otavio Rodolfo Piske <op...@redhat.com>
AuthorDate: Mon Nov 8 15:42:42 2021 +0100
CAMEL-17121: added support for configuring the back-off strategy
---
.../org/apache/camel/support/task/ForegroundTask.java | 4 ++--
.../support/task/budget/IterationBoundedBudget.java | 17 +++++++++++++----
.../task/budget/IterationBoundedBudgetBuilder.java | 15 ++++++++++++++-
.../camel/support/task/budget/IterationBudget.java | 2 +-
.../task/budget/IterationTimeBoundedBudget.java | 2 +-
.../support/task/budget/backoff}/BackOffStrategy.java | 15 +++++++++++++--
.../task/budget/backoff/FixedBackOffStrategy.java | 19 ++++++++++++++++---
.../apache/camel/support/task/TaskTestSupport.java | 1 -
8 files changed, 60 insertions(+), 15 deletions(-)
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/task/ForegroundTask.java b/core/camel-support/src/main/java/org/apache/camel/support/task/ForegroundTask.java
index f7edb36..5b1935b 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/task/ForegroundTask.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/task/ForegroundTask.java
@@ -74,7 +74,7 @@ public class ForegroundTask implements BlockingTask {
while (budget.next()) {
if (predicate.test(payload)) {
LOG.info("Task {} is complete after {} iterations and it is ready to continue",
- name, budget.iterations());
+ name, budget.iteration());
completed = true;
break;
}
@@ -103,7 +103,7 @@ public class ForegroundTask implements BlockingTask {
while (budget.next()) {
if (supplier.getAsBoolean()) {
LOG.info("Task {} is complete after {} iterations and it is ready to continue",
- name, budget.iterations());
+ name, budget.iteration());
completed = true;
break;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBoundedBudget.java b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBoundedBudget.java
index 1225846..6cf3574 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBoundedBudget.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBoundedBudget.java
@@ -17,18 +17,27 @@
package org.apache.camel.support.task.budget;
+import org.apache.camel.support.task.budget.backoff.BackOffStrategy;
+import org.apache.camel.support.task.budget.backoff.FixedBackOffStrategy;
+
public class IterationBoundedBudget implements IterationBudget {
public static final int UNLIMITED_ITERATIONS = -1;
private final long initialDelay;
- private final long interval;
private final int maxIterations;
+ private final BackOffStrategy backOffStrategy;
private int iterations;
IterationBoundedBudget(long initialDelay, long interval, int maxIterations) {
this.initialDelay = initialDelay;
- this.interval = interval;
this.maxIterations = maxIterations;
+ this.backOffStrategy = new FixedBackOffStrategy(interval);
+ }
+
+ IterationBoundedBudget(long initialDelay, int maxIterations, BackOffStrategy backOffStrategy) {
+ this.initialDelay = initialDelay;
+ this.maxIterations = maxIterations;
+ this.backOffStrategy = backOffStrategy;
}
@Override
@@ -38,7 +47,7 @@ public class IterationBoundedBudget implements IterationBudget {
@Override
public long interval() {
- return interval;
+ return backOffStrategy.calculateInterval(iterations);
}
@Override
@@ -46,7 +55,7 @@ public class IterationBoundedBudget implements IterationBudget {
return maxIterations;
}
- public int iterations() {
+ public int iteration() {
return iterations;
}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBoundedBudgetBuilder.java b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBoundedBudgetBuilder.java
index 4770b29..e410bbe 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBoundedBudgetBuilder.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBoundedBudgetBuilder.java
@@ -19,6 +19,8 @@ package org.apache.camel.support.task.budget;
import java.time.Duration;
+import org.apache.camel.support.task.budget.backoff.BackOffStrategy;
+
/**
* A helper builder of iteration bounded builders. Provide generic/safe default values, but should be adjusted on a
* per-case basis. By default, execute the iterations for up to Integer.MAX_VALUE.
@@ -31,6 +33,7 @@ public class IterationBoundedBudgetBuilder implements BudgetBuilder<IterationBud
protected long initialDelay = DEFAULT_INITIAL_DELAY;
protected long interval = DEFAULT_INTERVAL;
protected int maxIterations = DEFAULT_MAX_ITERATIONS;
+ protected BackOffStrategy backOffStrategy;
public IterationBoundedBudgetBuilder withInitialDelay(Duration duration) {
this.initialDelay = duration.toMillis();
@@ -50,8 +53,18 @@ public class IterationBoundedBudgetBuilder implements BudgetBuilder<IterationBud
return this;
}
+ public IterationBoundedBudgetBuilder withBackOffStrategy(BackOffStrategy backOffStrategy) {
+ this.backOffStrategy = backOffStrategy;
+
+ return this;
+ }
+
@Override
public IterationBoundedBudget build() {
- return new IterationBoundedBudget(initialDelay, interval, maxIterations);
+ if (backOffStrategy == null) {
+ return new IterationBoundedBudget(initialDelay, interval, maxIterations);
+ }
+
+ return new IterationBoundedBudget(initialDelay, maxIterations, backOffStrategy);
}
}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBudget.java b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBudget.java
index bab5111..497e8af 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBudget.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationBudget.java
@@ -34,5 +34,5 @@ public interface IterationBudget extends Budget {
*
* @return the current number of iterations
*/
- int iterations();
+ int iteration();
}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationTimeBoundedBudget.java b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationTimeBoundedBudget.java
index 5c95986..702bc28 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationTimeBoundedBudget.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/IterationTimeBoundedBudget.java
@@ -42,7 +42,7 @@ public class IterationTimeBoundedBudget implements IterationBudget, TimeBudget {
}
@Override
- public int iterations() {
+ public int iteration() {
return iterationBudget.maxIterations();
}
diff --git a/components/camel-soroush/src/main/java/org/apache/camel/component/soroushbot/utils/BackOffStrategy.java b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/backoff/BackOffStrategy.java
similarity index 68%
copy from components/camel-soroush/src/main/java/org/apache/camel/component/soroushbot/utils/BackOffStrategy.java
copy to core/camel-support/src/main/java/org/apache/camel/support/task/budget/backoff/BackOffStrategy.java
index f531719..e8df94c 100644
--- a/components/camel-soroush/src/main/java/org/apache/camel/component/soroushbot/utils/BackOffStrategy.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/backoff/BackOffStrategy.java
@@ -14,8 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.component.soroushbot.utils;
+package org.apache.camel.support.task.budget.backoff;
+
+/**
+ * A back-off strategy is used to configure different strategies for calculating the interval time between iterations
+ */
public interface BackOffStrategy {
- void waitBeforeRetry(int retryCount) throws InterruptedException;
+
+ /**
+ * Calculates the back-off interval
+ *
+ * @param iteration the current iteration count
+ * @return the interval in milliseconds
+ */
+ long calculateInterval(int iteration);
}
diff --git a/components/camel-soroush/src/main/java/org/apache/camel/component/soroushbot/utils/BackOffStrategy.java b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/backoff/FixedBackOffStrategy.java
similarity index 67%
rename from components/camel-soroush/src/main/java/org/apache/camel/component/soroushbot/utils/BackOffStrategy.java
rename to core/camel-support/src/main/java/org/apache/camel/support/task/budget/backoff/FixedBackOffStrategy.java
index f531719..a059277 100644
--- a/components/camel-soroush/src/main/java/org/apache/camel/component/soroushbot/utils/BackOffStrategy.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/task/budget/backoff/FixedBackOffStrategy.java
@@ -14,8 +14,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.component.soroushbot.utils;
-public interface BackOffStrategy {
- void waitBeforeRetry(int retryCount) throws InterruptedException;
+package org.apache.camel.support.task.budget.backoff;
+
+/**
+ * A back-off strategy with constant rate
+ */
+public class FixedBackOffStrategy implements BackOffStrategy {
+ private final long interval;
+
+ public FixedBackOffStrategy(long interval) {
+ this.interval = interval;
+ }
+
+ @Override
+ public long calculateInterval(int iteration) {
+ return interval;
+ }
}
diff --git a/core/camel-support/src/test/java/org/apache/camel/support/task/TaskTestSupport.java b/core/camel-support/src/test/java/org/apache/camel/support/task/TaskTestSupport.java
index 7396a95..b51e98a 100644
--- a/core/camel-support/src/test/java/org/apache/camel/support/task/TaskTestSupport.java
+++ b/core/camel-support/src/test/java/org/apache/camel/support/task/TaskTestSupport.java
@@ -55,7 +55,6 @@ public class TaskTestSupport {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
- System.out.println("Interrupted");
return false;
}