[
https://issues.apache.org/jira/browse/CAMEL-25294?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-25294.
---------------------------------
Resolution: Fixed
Fixed via https://github.com/apache/camel/pull/27325
> camel-consul - the readTimeout and writeTimeout options set the connect
> timeout of the Consul client, so the read and write timeouts cannot be
> configured
> ---------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-25294
> URL: https://issues.apache.org/jira/browse/CAMEL-25294
> Project: Camel
> Issue Type: Bug
> Components: camel-consul
> Reporter: shashank
> Assignee: shashank
> Priority: Minor
> Fix For: 4.23.0
>
>
> {{ConsulClientConfiguration.createConsulClient}} (used by all consul
> endpoints and by {{ConsulClusterService}}) passes the three timeouts to the
> same builder method:
> {code:java}
> if (ObjectHelper.isNotEmpty(connectTimeout)) {
> builder.withConnectTimeoutMillis(connectTimeout.toMillis());
> }
> if (ObjectHelper.isNotEmpty(readTimeout)) {
> builder.withConnectTimeoutMillis(readTimeout.toMillis()); // should be
> withReadTimeoutMillis
> }
> if (ObjectHelper.isNotEmpty(writeTimeout)) {
> builder.withConnectTimeoutMillis(writeTimeout.toMillis()); // should be
> withWriteTimeoutMillis
> }
> {code}
> So {{readTimeout}} and {{writeTimeout}} are ignored: the client always uses
> the default read and write timeouts of OkHttp (10 seconds), a request to an
> agent that does not answer always waits 10 seconds, and a longer request (a
> large value, a slow agent) always fails after 10 seconds whatever is
> configured. In addition the connect timeout is {{writeTimeout}} when it is
> set, otherwise {{readTimeout}}, otherwise {{connectTimeout}}
> ({{connectTimeout=1s&readTimeout=60s}} gives a 60 second connect timeout).
> The copy and paste dates from CAMEL-14878 (2020); until CAMEL-15520 (2022)
> the deprecated {{readTimeoutMillis}} / {{writeTimeoutMillis}} still worked.
> h3. Reproduction (unit test, no Consul)
> {{ConsulClientConfigurationTimeoutTest}}: a local {{ServerSocket}} that
> accepts connections (backlog) but never reads or answers, {{readTimeout}}
> (resp. {{writeTimeout}}) set to 200 ms, a key/value GET (resp. a PUT of a 32
> MB value): with the fix the request fails with a {{SocketTimeoutException}}
> after 200 ms; on main both tests fail with {{execution timed out after 5000
> ms}} (the client waits its default 10 seconds).
> h3. Proposed fix
> Call {{withReadTimeoutMillis}} and {{withWriteTimeoutMillis}}. Blocking
> queries ({{blockSeconds}}, the cluster view's watch) are not affected: for a
> request with a {{wait}} parameter the Consul client replaces the read timeout
> by the wait time plus {{wait/16}} plus 2 seconds ({{TimeoutInterceptor}},
> enabled by default), so {{readTimeout}} does not apply to them, before or
> after the fix. The 4.23 upgrade guide gets a short note (a request that takes
> longer than a configured {{readTimeout}} now fails, and only
> {{connectTimeout}} sets the connect timeout).
> With the fix the camel-consul unit tests pass (6).
> Affected: 4.14.x, 4.18.x and main (same code).
> Duplicate check (2026-10-03): JIRA component camel-consul (last 3 years, 6
> issues) and text "consul readTimeout" / "consul" + "timeout": none about the
> timeouts. GitHub pull requests "consul readTimeout", "consul writeTimeout",
> "ConsulClientConfiguration": none (only #2283 from 2018).
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)