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;
}