This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new c4a0fcd7ed20 CAMEL-23615: ErrorRegistry - disable TTL by default
(#23575)
c4a0fcd7ed20 is described below
commit c4a0fcd7ed200b4663e3e78d5660e474ee30a5ef
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed May 27 21:54:11 2026 +0200
CAMEL-23615: ErrorRegistry - disable TTL by default (#23575)
The error registry now keeps entries based only on the maximum entries
limit (100) without time-based eviction. The TTL default is changed
from 1 hour to 0 (disabled). Users can still enable TTL by setting
camel.errorRegistry.timeToLiveSeconds to a positive value.
Co-authored-by: Claude Opus 4.6 <[email protected]>
---
.../main/camel-main-configuration-metadata.json | 2 +-
.../main/java/org/apache/camel/spi/ErrorRegistry.java | 2 +-
.../apache/camel/impl/engine/DefaultErrorRegistry.java | 18 ++++++++++--------
.../META-INF/camel-main-configuration-metadata.json | 2 +-
core/camel-main/src/main/docs/main.adoc | 2 +-
.../main/ErrorRegistryConfigurationProperties.java | 7 ++++---
.../user-manual/modules/ROOT/pages/error-registry.adoc | 2 +-
7 files changed, 19 insertions(+), 16 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
index 8699514fd905..d6b0d568ec6e 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/main/camel-main-configuration-metadata.json
@@ -182,7 +182,7 @@
{ "name": "camel.errorRegistry.includeExchangeProperties", "required":
false, "description": "Whether to include the exchange properties in the
captured error data.", "sourceType":
"org.apache.camel.main.ErrorRegistryConfigurationProperties", "type":
"boolean", "javaType": "boolean", "defaultValue": true, "secret": false },
{ "name": "camel.errorRegistry.includeExchangeVariables", "required":
false, "description": "Whether to include the exchange variables in the
captured error data.", "sourceType":
"org.apache.camel.main.ErrorRegistryConfigurationProperties", "type":
"boolean", "javaType": "boolean", "defaultValue": true, "secret": false },
{ "name": "camel.errorRegistry.maximumEntries", "required": false,
"description": "The maximum number of error entries to keep in the registry.
When the limit is exceeded, the oldest entries are evicted.", "sourceType":
"org.apache.camel.main.ErrorRegistryConfigurationProperties", "type":
"integer", "javaType": "int", "defaultValue": 100, "secret": false },
- { "name": "camel.errorRegistry.timeToLiveSeconds", "required": false,
"description": "The time-to-live in seconds for error entries. Entries older
than this are evicted.", "sourceType":
"org.apache.camel.main.ErrorRegistryConfigurationProperties", "type":
"integer", "javaType": "int", "defaultValue": 3600, "secret": false },
+ { "name": "camel.errorRegistry.timeToLiveSeconds", "required": false,
"description": "The time-to-live in seconds for error entries. Entries older
than this are evicted. The default value is 0 (disabled).", "sourceType":
"org.apache.camel.main.ErrorRegistryConfigurationProperties", "type":
"integer", "javaType": "int", "defaultValue": 0, "secret": false },
{ "name": "camel.faulttolerance.bulkheadEnabled", "required": false,
"description": "Whether bulkhead is enabled or not on the circuit breaker.
Default is false.", "sourceType":
"org.apache.camel.main.FaultToleranceConfigurationProperties", "type":
"boolean", "javaType": "java.lang.Boolean", "defaultValue": false, "secret":
false },
{ "name": "camel.faulttolerance.bulkheadMaxConcurrentCalls", "required":
false, "description": "Configures the max amount of concurrent calls the
bulkhead will support. Default value is 10.", "sourceType":
"org.apache.camel.main.FaultToleranceConfigurationProperties", "type":
"integer", "javaType": "java.lang.Integer", "defaultValue": 10, "secret": false
},
{ "name": "camel.faulttolerance.bulkheadWaitingTaskQueue", "required":
false, "description": "Configures the task queue size for holding waiting tasks
to be processed by the bulkhead. Default value is 10.", "sourceType":
"org.apache.camel.main.FaultToleranceConfigurationProperties", "type":
"integer", "javaType": "java.lang.Integer", "defaultValue": 10, "secret": false
},
diff --git
a/core/camel-api/src/main/java/org/apache/camel/spi/ErrorRegistry.java
b/core/camel-api/src/main/java/org/apache/camel/spi/ErrorRegistry.java
index 4dc302572f90..b95810777e6c 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ErrorRegistry.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ErrorRegistry.java
@@ -82,7 +82,7 @@ public interface ErrorRegistry extends ErrorRegistryView,
StaticService {
/**
* Sets the time-to-live for error entries. Entries older than this
duration are evicted.
* <p/>
- * The default value is 1 hour.
+ * The default value is 0 (disabled). Set to a positive duration to enable
time-based eviction.
*/
void setTimeToLive(Duration timeToLive);
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultErrorRegistry.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultErrorRegistry.java
index 50397280a8a3..2f72fd4b661f 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultErrorRegistry.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultErrorRegistry.java
@@ -50,7 +50,7 @@ public class DefaultErrorRegistry extends
EventNotifierSupport implements ErrorR
private final AtomicLong uidCounter = new AtomicLong();
private volatile boolean enabled;
private volatile int maximumEntries = 100;
- private volatile Duration timeToLive = Duration.ofHours(1);
+ private volatile Duration timeToLive = Duration.ZERO;
private volatile int bodyMaxChars = 32 * 1024;
private volatile boolean bodyIncludeStreams;
private volatile boolean bodyIncludeFiles = true;
@@ -224,13 +224,15 @@ public class DefaultErrorRegistry extends
EventNotifierSupport implements ErrorR
while (entries.size() > maximumEntries) {
entries.pollLast();
}
- Instant cutoff = Instant.now().minus(timeToLive);
- while (!entries.isEmpty()) {
- BacklogErrorEventMessage last = entries.peekLast();
- if (last != null &&
Instant.ofEpochMilli(last.getTimestamp()).isBefore(cutoff)) {
- entries.pollLast();
- } else {
- break;
+ if (!timeToLive.isZero() && !timeToLive.isNegative()) {
+ Instant cutoff = Instant.now().minus(timeToLive);
+ while (!entries.isEmpty()) {
+ BacklogErrorEventMessage last = entries.peekLast();
+ if (last != null &&
Instant.ofEpochMilli(last.getTimestamp()).isBefore(cutoff)) {
+ entries.pollLast();
+ } else {
+ break;
+ }
}
}
}
diff --git
a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
index 8699514fd905..d6b0d568ec6e 100644
---
a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
+++
b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
@@ -182,7 +182,7 @@
{ "name": "camel.errorRegistry.includeExchangeProperties", "required":
false, "description": "Whether to include the exchange properties in the
captured error data.", "sourceType":
"org.apache.camel.main.ErrorRegistryConfigurationProperties", "type":
"boolean", "javaType": "boolean", "defaultValue": true, "secret": false },
{ "name": "camel.errorRegistry.includeExchangeVariables", "required":
false, "description": "Whether to include the exchange variables in the
captured error data.", "sourceType":
"org.apache.camel.main.ErrorRegistryConfigurationProperties", "type":
"boolean", "javaType": "boolean", "defaultValue": true, "secret": false },
{ "name": "camel.errorRegistry.maximumEntries", "required": false,
"description": "The maximum number of error entries to keep in the registry.
When the limit is exceeded, the oldest entries are evicted.", "sourceType":
"org.apache.camel.main.ErrorRegistryConfigurationProperties", "type":
"integer", "javaType": "int", "defaultValue": 100, "secret": false },
- { "name": "camel.errorRegistry.timeToLiveSeconds", "required": false,
"description": "The time-to-live in seconds for error entries. Entries older
than this are evicted.", "sourceType":
"org.apache.camel.main.ErrorRegistryConfigurationProperties", "type":
"integer", "javaType": "int", "defaultValue": 3600, "secret": false },
+ { "name": "camel.errorRegistry.timeToLiveSeconds", "required": false,
"description": "The time-to-live in seconds for error entries. Entries older
than this are evicted. The default value is 0 (disabled).", "sourceType":
"org.apache.camel.main.ErrorRegistryConfigurationProperties", "type":
"integer", "javaType": "int", "defaultValue": 0, "secret": false },
{ "name": "camel.faulttolerance.bulkheadEnabled", "required": false,
"description": "Whether bulkhead is enabled or not on the circuit breaker.
Default is false.", "sourceType":
"org.apache.camel.main.FaultToleranceConfigurationProperties", "type":
"boolean", "javaType": "java.lang.Boolean", "defaultValue": false, "secret":
false },
{ "name": "camel.faulttolerance.bulkheadMaxConcurrentCalls", "required":
false, "description": "Configures the max amount of concurrent calls the
bulkhead will support. Default value is 10.", "sourceType":
"org.apache.camel.main.FaultToleranceConfigurationProperties", "type":
"integer", "javaType": "java.lang.Integer", "defaultValue": 10, "secret": false
},
{ "name": "camel.faulttolerance.bulkheadWaitingTaskQueue", "required":
false, "description": "Configures the task queue size for holding waiting tasks
to be processed by the bulkhead. Default value is 10.", "sourceType":
"org.apache.camel.main.FaultToleranceConfigurationProperties", "type":
"integer", "javaType": "java.lang.Integer", "defaultValue": 10, "secret": false
},
diff --git a/core/camel-main/src/main/docs/main.adoc
b/core/camel-main/src/main/docs/main.adoc
index 30f68a3321a1..bb0f3a92f623 100644
--- a/core/camel-main/src/main/docs/main.adoc
+++ b/core/camel-main/src/main/docs/main.adoc
@@ -731,7 +731,7 @@ The camel.errorRegistry supports 8 options, which are
listed below.
| *camel.errorRegistry.includeExchangeProperties* | Whether to include the
exchange properties in the captured error data. | true | boolean
| *camel.errorRegistry.includeExchangeVariables* | Whether to include the
exchange variables in the captured error data. | true | boolean
| *camel.errorRegistry.maximumEntries* | The maximum number of error entries
to keep in the registry. When the limit is exceeded, the oldest entries are
evicted. | 100 | int
-| *camel.errorRegistry.timeToLiveSeconds* | The time-to-live in seconds for
error entries. Entries older than this are evicted. | 3600 | int
+| *camel.errorRegistry.timeToLiveSeconds* | The time-to-live in seconds for
error entries. Entries older than this are evicted. The default value is 0
(disabled). | 0 | int
|===
// main options: END
diff --git
a/core/camel-main/src/main/java/org/apache/camel/main/ErrorRegistryConfigurationProperties.java
b/core/camel-main/src/main/java/org/apache/camel/main/ErrorRegistryConfigurationProperties.java
index aa7dd909d7d3..86dde828527b 100644
---
a/core/camel-main/src/main/java/org/apache/camel/main/ErrorRegistryConfigurationProperties.java
+++
b/core/camel-main/src/main/java/org/apache/camel/main/ErrorRegistryConfigurationProperties.java
@@ -32,8 +32,8 @@ public class ErrorRegistryConfigurationProperties implements
BootstrapCloseable
private boolean enabled;
@Metadata(defaultValue = "100")
private int maximumEntries = 100;
- @Metadata(defaultValue = "3600")
- private int timeToLiveSeconds = 3600;
+ @Metadata(defaultValue = "0")
+ private int timeToLiveSeconds;
@Metadata(label = "advanced", defaultValue = "32768")
private int bodyMaxChars = 32 * 1024;
@Metadata
@@ -86,7 +86,8 @@ public class ErrorRegistryConfigurationProperties implements
BootstrapCloseable
}
/**
- * The time-to-live in seconds for error entries. Entries older than this
are evicted.
+ * The time-to-live in seconds for error entries. Entries older than this
are evicted. The default value is 0
+ * (disabled).
*/
public void setTimeToLiveSeconds(int timeToLiveSeconds) {
this.timeToLiveSeconds = timeToLiveSeconds;
diff --git a/docs/user-manual/modules/ROOT/pages/error-registry.adoc
b/docs/user-manual/modules/ROOT/pages/error-registry.adoc
index 06392008178b..354e7d00507b 100644
--- a/docs/user-manual/modules/ROOT/pages/error-registry.adoc
+++ b/docs/user-manual/modules/ROOT/pages/error-registry.adoc
@@ -30,7 +30,7 @@ camel.errorRegistry.enabled = true
| Option | Default | Type | Description
| `camel.errorRegistry.enabled` | `false` | boolean | Whether the error
registry is enabled.
| `camel.errorRegistry.maximumEntries` | `100` | int | Maximum number of error
entries to keep. When exceeded, the oldest entries are evicted.
-| `camel.errorRegistry.timeToLiveSeconds` | `3600` | int | Time-to-live for
error entries in seconds. Entries older than this are evicted.
+| `camel.errorRegistry.timeToLiveSeconds` | `0` | int | Time-to-live for error
entries in seconds. Entries older than this are evicted. The default value is 0
(disabled).
| `camel.errorRegistry.bodyMaxChars` | `32768` | int | Maximum number of
characters for the message body in the snapshot.
| `camel.errorRegistry.bodyIncludeStreams` | `false` | boolean | Whether to
include stream-based message bodies.
| `camel.errorRegistry.bodyIncludeFiles` | `true` | boolean | Whether to
include file-based message bodies.