You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by vo...@apache.org on 2017/08/29 06:43:47 UTC

incubator-rocketmq git commit: ROCKETMQ-277 Fix UnknownHostException when nothing configuration in etc file closes apache/incubator-rocketmq#145

Repository: incubator-rocketmq
Updated Branches:
  refs/heads/develop 4c5e58b46 -> bbe825f5c


ROCKETMQ-277 Fix UnknownHostException when nothing configuration in etc file closes apache/incubator-rocketmq#145


Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/bbe825f5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/bbe825f5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/bbe825f5

Branch: refs/heads/develop
Commit: bbe825f5c9a0a443b28caa2e13af1e4c4cde2380
Parents: 4c5e58b
Author: fuyou001 <fu...@gmail.com>
Authored: Tue Aug 29 14:39:24 2017 +0800
Committer: vongosling <vo...@apache.org>
Committed: Tue Aug 29 14:39:24 2017 +0800

----------------------------------------------------------------------
 .../java/org/apache/rocketmq/common/MixAll.java | 129 ++++++++-----------
 .../org/apache/rocketmq/common/MixAllTest.java  |  13 +-
 .../remoting/common/RemotingHelper.java         |  31 +----
 .../rocketmq/remoting/common/RemotingUtil.java  |  11 +-
 .../rocketmq/remoting/common/ServiceThread.java |  55 --------
 5 files changed, 69 insertions(+), 170 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/bbe825f5/common/src/main/java/org/apache/rocketmq/common/MixAll.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/rocketmq/common/MixAll.java b/common/src/main/java/org/apache/rocketmq/common/MixAll.java
index d72681f..e73aa61 100644
--- a/common/src/main/java/org/apache/rocketmq/common/MixAll.java
+++ b/common/src/main/java/org/apache/rocketmq/common/MixAll.java
@@ -16,37 +16,21 @@
  */
 package org.apache.rocketmq.common;
 
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.NetworkInterface;
-import java.net.SocketException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicLong;
 import org.apache.rocketmq.common.annotation.ImportantField;
 import org.apache.rocketmq.common.constant.LoggerName;
 import org.apache.rocketmq.common.help.FAQUrl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.*;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.net.*;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicLong;
+
 public class MixAll {
     private static final Logger log = LoggerFactory.getLogger(LoggerName.COMMON_LOGGER_NAME);
 
@@ -141,16 +125,6 @@ public class MixAll {
         return 0;
     }
 
-    public static long createBrokerId(final String ip, final int port) {
-        InetSocketAddress isa = new InetSocketAddress(ip, port);
-        byte[] ipArray = isa.getAddress().getAddress();
-        ByteBuffer bb = ByteBuffer.allocate(8);
-        bb.put(ipArray);
-        bb.putInt(port);
-        long value = bb.getLong(0);
-        return Math.abs(value);
-    }
-
     public static void string2File(final String str, final String fileName) throws IOException {
 
         String tmpFile = fileName + ".tmp";
@@ -240,11 +214,6 @@ public class MixAll {
         return null;
     }
 
-    public static String findClassPath(Class<?> c) {
-        URL url = c.getProtectionDomain().getCodeSource().getLocation();
-        return url.getPath();
-    }
-
     public static void printObjectProperties(final Logger logger, final Object object) {
         printObjectProperties(logger, object, false);
     }
@@ -394,23 +363,52 @@ public class MixAll {
         return inetAddressList;
     }
 
-    public static boolean isLocalAddr(String address) {
-        for (String addr : LOCAL_INET_ADDRESS) {
-            if (address.contains(addr))
-                return true;
-        }
-        return false;
-    }
-
     private static String localhost() {
         try {
-            InetAddress addr = InetAddress.getLocalHost();
-            return addr.getHostAddress();
+            return InetAddress.getLocalHost().getHostAddress();
         } catch (Throwable e) {
-            throw new RuntimeException("InetAddress java.net.InetAddress.getLocalHost() throws UnknownHostException"
-                + FAQUrl.suggestTodo(FAQUrl.UNKNOWN_HOST_EXCEPTION),
-                e);
+            try {
+                String candidatesHost = getLocalhostByNetworkInterface();
+                if (candidatesHost != null)
+                    return candidatesHost;
+
+            } catch (Exception ignored) {
+            }
+
+            throw new RuntimeException("InetAddress java.net.InetAddress.getLocalHost() throws UnknownHostException" + FAQUrl.suggestTodo(FAQUrl.UNKNOWN_HOST_EXCEPTION), e);
+        }
+    }
+
+    //FIXME Reverse logic comparing to RemotingUtil method, consider refactor in RocketMQ 5.0
+    public static String getLocalhostByNetworkInterface() throws SocketException {
+        List<String> candidatesHost = new ArrayList<String>();
+        Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
+
+        while (enumeration.hasMoreElements()) {
+            NetworkInterface networkInterface = enumeration.nextElement();
+            // Workaround for docker0 bridge
+            if ("docker0".equals(networkInterface.getName()) || !networkInterface.isUp()) {
+                continue;
+            }
+            Enumeration<InetAddress> addrs = networkInterface.getInetAddresses();
+            while (addrs.hasMoreElements()) {
+                InetAddress address = addrs.nextElement();
+                if (address.isLoopbackAddress()) {
+                    continue;
+                }
+                //ip4 highter priority
+                if (address instanceof Inet6Address) {
+                    candidatesHost.add(address.getHostAddress());
+                    continue;
+                }
+                return address.getHostAddress();
+            }
+        }
+
+        if (!candidatesHost.isEmpty()) {
+            return candidatesHost.get(0);
         }
+        return null;
     }
 
     public static boolean compareAndIncreaseOnly(final AtomicLong target, final long value) {
@@ -426,16 +424,6 @@ public class MixAll {
         return false;
     }
 
-    public static String localhostName() {
-        try {
-            return InetAddress.getLocalHost().getHostName();
-        } catch (Throwable e) {
-            throw new RuntimeException("InetAddress java.net.InetAddress.getLocalHost() throws UnknownHostException"
-                + FAQUrl.suggestTodo(FAQUrl.UNKNOWN_HOST_EXCEPTION),
-                e);
-        }
-    }
-
     public static String humanReadableByteCount(long bytes, boolean si) {
         int unit = si ? 1000 : 1024;
         if (bytes < unit)
@@ -445,19 +433,4 @@ public class MixAll {
         return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
     }
 
-    public Set<String> list2Set(List<String> values) {
-        Set<String> result = new HashSet<String>();
-        for (String v : values) {
-            result.add(v);
-        }
-        return result;
-    }
-
-    public List<String> set2List(Set<String> values) {
-        List<String> result = new ArrayList<String>();
-        for (String v : values) {
-            result.add(v);
-        }
-        return result;
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/bbe825f5/common/src/test/java/org/apache/rocketmq/common/MixAllTest.java
----------------------------------------------------------------------
diff --git a/common/src/test/java/org/apache/rocketmq/common/MixAllTest.java b/common/src/test/java/org/apache/rocketmq/common/MixAllTest.java
index 218b36d..3f04872 100644
--- a/common/src/test/java/org/apache/rocketmq/common/MixAllTest.java
+++ b/common/src/test/java/org/apache/rocketmq/common/MixAllTest.java
@@ -17,17 +17,14 @@
 
 package org.apache.rocketmq.common;
 
+import org.junit.Test;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.InetAddress;
-import java.nio.ByteOrder;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
-import org.junit.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -93,4 +90,10 @@ public class MixAllTest {
         MixAll.string2File("MixAll_testString2File", fileName);
         assertThat(MixAll.file2String(fileName)).isEqualTo("MixAll_testString2File");
     }
+
+    @Test
+    public void testGetLocalhostByNetworkInterface() throws Exception {
+        assertThat(MixAll.LOCALHOST).isNotNull();
+        assertThat(MixAll.getLocalhostByNetworkInterface()).isNotNull();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/bbe825f5/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingHelper.java
----------------------------------------------------------------------
diff --git a/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingHelper.java b/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingHelper.java
index 40c5943..7995730 100644
--- a/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingHelper.java
+++ b/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingHelper.java
@@ -17,11 +17,6 @@
 package org.apache.rocketmq.remoting.common;
 
 import io.netty.channel.Channel;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.nio.ByteBuffer;
-import java.nio.channels.SocketChannel;
 import org.apache.rocketmq.remoting.exception.RemotingConnectException;
 import org.apache.rocketmq.remoting.exception.RemotingSendRequestException;
 import org.apache.rocketmq.remoting.exception.RemotingTimeoutException;
@@ -29,6 +24,12 @@ import org.apache.rocketmq.remoting.protocol.RemotingCommand;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+
 public class RemotingHelper {
     public static final String ROCKETMQ_REMOTING = "RocketmqRemoting";
     public static final String DEFAULT_CHARSET = "UTF-8";
@@ -168,17 +169,6 @@ public class RemotingHelper {
         return "";
     }
 
-    public static String parseChannelRemoteName(final Channel channel) {
-        if (null == channel) {
-            return "";
-        }
-        final InetSocketAddress remote = (InetSocketAddress) channel.remoteAddress();
-        if (remote != null) {
-            return remote.getAddress().getHostName();
-        }
-        return "";
-    }
-
     public static String parseSocketAddressAddr(SocketAddress socketAddress) {
         if (socketAddress != null) {
             final String addr = socketAddress.toString();
@@ -190,13 +180,4 @@ public class RemotingHelper {
         return "";
     }
 
-    public static String parseSocketAddressName(SocketAddress socketAddress) {
-
-        final InetSocketAddress addrs = (InetSocketAddress) socketAddress;
-        if (addrs != null) {
-            return addrs.getAddress().getHostName();
-        }
-        return "";
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/bbe825f5/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingUtil.java
----------------------------------------------------------------------
diff --git a/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingUtil.java b/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingUtil.java
index 8d24e76..2fe8752 100644
--- a/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingUtil.java
+++ b/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingUtil.java
@@ -19,20 +19,17 @@ package org.apache.rocketmq.remoting.common;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelFutureListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.IOException;
 import java.lang.reflect.Method;
-import java.net.Inet6Address;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.NetworkInterface;
-import java.net.SocketAddress;
+import java.net.*;
 import java.nio.channels.Selector;
 import java.nio.channels.SocketChannel;
 import java.nio.channels.spi.SelectorProvider;
 import java.util.ArrayList;
 import java.util.Enumeration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class RemotingUtil {
     public static final String OS_NAME = System.getProperty("os.name");

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/bbe825f5/remoting/src/main/java/org/apache/rocketmq/remoting/common/ServiceThread.java
----------------------------------------------------------------------
diff --git a/remoting/src/main/java/org/apache/rocketmq/remoting/common/ServiceThread.java b/remoting/src/main/java/org/apache/rocketmq/remoting/common/ServiceThread.java
index 323c089..346e72c 100644
--- a/remoting/src/main/java/org/apache/rocketmq/remoting/common/ServiceThread.java
+++ b/remoting/src/main/java/org/apache/rocketmq/remoting/common/ServiceThread.java
@@ -73,61 +73,6 @@ public abstract class ServiceThread implements Runnable {
         return JOIN_TIME;
     }
 
-    public void stop() {
-        this.stop(false);
-    }
-
-    public void stop(final boolean interrupt) {
-        this.stopped = true;
-        log.info("stop thread " + this.getServiceName() + " interrupt " + interrupt);
-        synchronized (this) {
-            if (!this.hasNotified) {
-                this.hasNotified = true;
-                this.notify();
-            }
-        }
-
-        if (interrupt) {
-            this.thread.interrupt();
-        }
-    }
-
-    public void makeStop() {
-        this.stopped = true;
-        log.info("makestop thread " + this.getServiceName());
-    }
-
-    public void wakeup() {
-        synchronized (this) {
-            if (!this.hasNotified) {
-                this.hasNotified = true;
-                this.notify();
-            }
-        }
-    }
-
-    protected void waitForRunning(long interval) {
-        synchronized (this) {
-            if (this.hasNotified) {
-                this.hasNotified = false;
-                this.onWaitEnd();
-                return;
-            }
-
-            try {
-                this.wait(interval);
-            } catch (InterruptedException e) {
-                log.error("Interrupted", e);
-            } finally {
-                this.hasNotified = false;
-                this.onWaitEnd();
-            }
-        }
-    }
-
-    protected void onWaitEnd() {
-    }
-
     public boolean isStopped() {
         return stopped;
     }