This is an automated email from the ASF dual-hosted git repository.

sergeychugunov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 8d1c533df89 IGNITE-28299 Fix local runs with VPN on MacOS (#12915)
8d1c533df89 is described below

commit 8d1c533df899193367b8d4c51541a48246c3d302
Author: Alexey Abashev <[email protected]>
AuthorDate: Mon Mar 30 17:13:46 2026 +0300

    IGNITE-28299 Fix local runs with VPN on MacOS (#12915)
---
 .../spi/discovery/tcp/TcpDiscoverySelfTest.java    | 41 ++++++++++++++++++++--
 1 file changed, 39 insertions(+), 2 deletions(-)

diff --git 
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
index 8b59eea2450..ad98a2936b9 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
@@ -19,7 +19,9 @@ package org.apache.ignite.spi.discovery.tcp;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.net.InetAddress;
 import java.net.InetSocketAddress;
+import java.net.NetworkInterface;
 import java.net.SocketTimeoutException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -96,6 +98,8 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
 
+import static java.net.NetworkInterface.getNetworkInterfaces;
+import static java.util.Collections.list;
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.apache.ignite.events.EventType.EVT_JOB_MAPPED;
@@ -148,6 +152,31 @@ public class TcpDiscoverySelfTest extends 
GridCommonAbstractTest {
         super(false);
     }
 
+    /**
+     * Finds a non-loopback, non-point-to-point address suitable for multicast.
+     * Point-to-point interfaces (VPN tunnels) don't support multicast 
properly on macOS.
+     *
+     * @return Address string or {@code null} if none found.
+     */
+    @Nullable private static String findMulticastAddress() {
+        try {
+            for (NetworkInterface itf : list(getNetworkInterfaces())) {
+                if (!itf.isUp() || itf.isLoopback() || itf.isPointToPoint())
+                    continue;
+
+                for (InetAddress addr : list(itf.getInetAddresses())) {
+                    if (!addr.isLoopbackAddress() && addr.getAddress().length 
== 4) // IPv4 only.
+                        return addr.getHostAddress();
+                }
+            }
+        }
+        catch (Exception ignored) {
+            // No-op.
+        }
+
+        return null;
+    }
+
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String 
igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
@@ -230,8 +259,16 @@ public class TcpDiscoverySelfTest extends 
GridCommonAbstractTest {
 
             // Loopback multicast discovery is not working on Mac OS
             // (possibly due to 
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7122846).
-            if (U.isMacOs())
-                spi.setLocalAddress(F.first(U.allLocalIps()));
+            if (U.isMacOs()) {
+                String mcastAddr = findMulticastAddress();
+
+                if (mcastAddr != null) {
+                    spi.setLocalAddress(mcastAddr);
+                    finder.setLocalAddress(mcastAddr);
+                }
+                else
+                    spi.setLocalAddress(F.first(U.allLocalIps()));
+            }
         }
         else if 
(igniteInstanceName.contains("testPingInterruptedOnNodeFailedPingingNode"))
             cfg.setFailureDetectionTimeout(30_000);

Reply via email to