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]

Reply via email to