This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch CAMEL-23615-error-registry-disable-ttl-default in repository https://gitbox.apache.org/repos/asf/camel.git
commit 81899344b779d5f86b11e5222ee695369e7cee0d Author: Claus Ibsen <[email protected]> AuthorDate: Wed May 27 21:13:34 2026 +0200 CAMEL-23615: ErrorRegistry - disable TTL by default 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.
