apupier opened a new pull request, #27484:
URL: https://github.com/apache/camel/pull/27484
IPv6 loopback resolution
On Linux with Podman, containers are started in host-network mode so that
port mappings work without a separate network namespace. In that mode,
Testcontainers' container.getHost() returns "localhost". The JVM on recent
Linux systems resolves "localhost" to the IPv6 loopback address (::1) before
the IPv4 one (127.0.0.1), but the Infinispan server only binds on IPv4. Every
fresh RemoteCacheManager therefore failed its initial TCP connection with:
TransportException: finishConnect(..) failed with error(-111):
Connection refused: localhost/[0:0:0:0:0:0:0:1]:11222
Three distinct problems were causing test failures:
1. Initial connection uses the wrong address family All test helpers that
built a ConfigurationBuilder passed service.host() (or
service.getServiceAddress()) directly to .host(...) / setHosts(...). This
caused the IPv6 resolution.
Fix: add a InfinispanRemoteTestSupport.resolvedHost(String) helper that
maps "localhost" -> "127.0.0.1" and apply it at every call site: -
InfinispanRemoteTestSupport.getConfiguration() -
InfinispanRemoteKeyValueRepositoryIT.getConfiguration() -
InfinispanRemoteClusteredTestSupport.createConfiguration() -
InfinispanRemoteConfigurationIT.getBaseConfiguration() -
SpringInfinispanRemoteIdempotentRepositoryTestSupport.setupResources() -
InfinispanRemoteEmbeddingStoreIT.createInfinispanRemoteConfiguration()
2. Topology-aware client intelligence re-resolves "localhost" to ::1 When
BASIC client intelligence was not set, the Hotrod client asked the server for a
topology update after the initial connection and re-connected to the advertised
address, which was again "localhost" -> ::1. The conditional guard if
(!Boolean.getBoolean(INFINISPAN_CONTAINER_NETWORK_MODE_HOST)) wrongly skipped
BASIC mode in host-network mode, meaning every new RemoteCacheManager created
inside a @BeforeEach would fail on the topology-driven reconnect.
Fix: always set BASIC client intelligence unconditionally in all test
ConfigurationBuilders; remove the now-unused InfinispanProperties import.
3. TransportException not retried during schema registration
InfinispanRemoteManager.registerSchemaWithRetry() caught HotRodClientException
but immediately re-threw any exception that was not an
IllegalLifecycleStateException (line: "if
(!isIllegalLifecycleStateException(e)) throw e"). TransportException is a
HotRodClientException subclass representing a transient connectivity failure;
on the very first retry attempt it escaped the loop, task.run() returned false,
and the method threw IllegalStateException("Failed to register schema after
PT1M") without actually waiting.
Fix: add isTransportException() and treat TransportException as a
retriable condition alongside IllegalLifecycleStateException. This is also
correct in production: if the server is briefly unreachable at startup (e.g.
Kubernetes rolling deploy), schema registration should retry within the
configured timeout rather than fail immediately.
Additionally, waitForCacheReady() in InfinispanRemoteTestSupport only
ignored RemoteIllegalLifecycleStateException; it now also ignores
TransportException so that transient startup races do not immediately fail the
Awaitility condition.
Co-authored-by: IBM Bob 2.2.1
# Description
<!--
- Write a pull request description that is detailed enough to understand
what the pull request does, how, and why.
-->
# Target
- [ ] I checked that the commit is targeting the correct branch (Camel 4
uses the `main` branch)
# Tracking
- [ ] If this is a large change, bug fix, or code improvement, I checked
there is a [JIRA issue](https://issues.apache.org/jira/browse/CAMEL) filed for
the change (usually before you start working on it).
<!--
# *Note*: trivial changes like, typos, minor documentation fixes and other
small items do not require a JIRA issue. In this case your pull request should
address just this issue, without pulling in other changes.
-->
# Apache Camel coding standards and style
- [ ] I checked that each commit in the pull request has a meaningful
subject line and body.
<!--
If you're unsure, you can format the pull request title like `[CAMEL-XXX]
Fixes bug in camel-file component`, where you replace `CAMEL-XXX` with the
appropriate JIRA issue.
-->
- [ ] I have run `mvn clean install -DskipTests` locally from root folder
and I have committed all auto-generated changes.
<!--
You can run the aforementioned command in your module so that the build
auto-formats your code. This will also be verified as part of the checks and
your PR may be rejected if if there are uncommited changes after running `mvn
clean install -DskipTests`.
You can learn more about the contribution guidelines at
https://github.com/apache/camel/blob/main/CONTRIBUTING.md
-->
# AI-assisted contributions
- [ ] If this PR includes AI-generated code, commits have proper
co-authorship attribution (e.g., `Co-authored-by` trailers) and the PR
description identifies the AI tool used.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]