You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2016/01/18 11:28:40 UTC

svn commit: r1725216 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java

Author: reschke
Date: Mon Jan 18 10:28:40 2016
New Revision: 1725216

URL: http://svn.apache.org/viewvc?rev=1725216&view=rev
Log:
OAK-3885: enhance stability of clusterNodeInfo's machineId by de-prioritizing interfaces that appear to be virtual

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java?rev=1725216&r1=1725215&r2=1725216&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/ClusterNodeInfo.java Mon Jan 18 10:28:40 2016
@@ -25,6 +25,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.UUID;
@@ -902,6 +903,7 @@ public class ClusterNodeInfo {
         Exception exception = null;
         try {
             ArrayList<String> macAddresses = new ArrayList<String>();
+            ArrayList<String> likelyVirtualMacAddresses = new ArrayList<String>();
             ArrayList<String> otherAddresses = new ArrayList<String>();
             String hwaFromSysProp = getHWAFromSystemProperty();
             if ("".equals(hwaFromSysProp)) {
@@ -916,7 +918,14 @@ public class ClusterNodeInfo {
                             String str = StringUtils.convertBytesToHex(hwa);
                             if (hwa.length == 6) {
                                 // likely a MAC address
-                                macAddresses.add(str);
+                                String displayName = ni.getDisplayName().toLowerCase(Locale.ENGLISH);
+                                // de-prioritize addresses that are likely to be virtual (see OAK-3885)
+                                boolean looksVirtual = displayName.indexOf("virtual") >= 0 || displayName.indexOf("vpn") >= 0;
+                                if (!looksVirtual) {
+                                    macAddresses.add(str);
+                                } else {
+                                    likelyVirtualMacAddresses.add(str);
+                                }
                             } else {
                                 otherAddresses.add(str);
                             }
@@ -938,7 +947,8 @@ public class ClusterNodeInfo {
             }
 
             if (LOG.isDebugEnabled()) {
-                LOG.debug("getMachineId(): discovered addresses: {} {}", macAddresses, otherAddresses);
+                LOG.debug("getMachineId(): discovered addresses: {} {} {}", macAddresses, likelyVirtualMacAddresses,
+                        otherAddresses);
             }
 
             if (macAddresses.size() > 0) {
@@ -946,6 +956,9 @@ public class ClusterNodeInfo {
                 // the same one is used
                 Collections.sort(macAddresses);
                 return "mac:" + macAddresses.get(0);
+            } else if (likelyVirtualMacAddresses.size() > 0) {
+                Collections.sort(likelyVirtualMacAddresses);
+                return "mac:" + likelyVirtualMacAddresses.get(0);
             } else if (otherAddresses.size() > 0) {
                 // try the lowest "other" address
                 Collections.sort(otherAddresses);