From c20d14584dbd69a12344a461b544d9fc8241c327 Mon Sep 17 00:00:00 2001 From: Fury Date: Thu, 12 Dec 2024 15:38:50 +0800 Subject: [PATCH] [ISSUE #9047] optimize code format and reduce some methods cognitive complexity --- .../acl/common/SessionCredentials.java | 1 + .../org/apache/rocketmq/common/MixAll.java | 222 +++++++++--------- .../apache/rocketmq/common/ServiceThread.java | 2 +- .../org/apache/rocketmq/common/UtilAll.java | 76 +++--- .../utils/AbstractStartAndShutdown.java | 1 + .../rocketmq/common/utils/BinaryUtil.java | 15 +- .../rocketmq/common/utils/ChannelUtil.java | 5 + .../common/utils/CleanupPolicyUtils.java | 5 + .../common/utils/ConcurrentHashMapUtils.java | 2 +- .../common/utils/CorrelationIdUtil.java | 4 + .../rocketmq/common/utils/ExceptionUtils.java | 12 +- .../rocketmq/common/utils/FutureUtils.java | 3 + .../rocketmq/common/utils/IOTinyUtils.java | 37 +-- .../rocketmq/common/utils/IPAddressUtils.java | 3 + .../rocketmq/common/utils/MessageUtils.java | 10 +- .../common/utils/NameServerAddressUtils.java | 4 + .../rocketmq/common/utils/NetworkUtil.java | 41 ++-- .../rocketmq/common/utils/ThreadUtils.java | 11 +- 18 files changed, 240 insertions(+), 214 deletions(-) diff --git a/acl/src/main/java/org/apache/rocketmq/acl/common/SessionCredentials.java b/acl/src/main/java/org/apache/rocketmq/acl/common/SessionCredentials.java index dfc06d4f3a4..28b45786413 100644 --- a/acl/src/main/java/org/apache/rocketmq/acl/common/SessionCredentials.java +++ b/acl/src/main/java/org/apache/rocketmq/acl/common/SessionCredentials.java @@ -43,6 +43,7 @@ public SessionCredentials() { try { keyContent = MixAll.file2String(KEY_FILE); } catch (IOException ignore) { + // NO Sonar } if (keyContent != null) { Properties prop = MixAll.string2Properties(keyContent); 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 39933038bac..6c6579ac74b 100644 --- a/common/src/main/java/org/apache/rocketmq/common/MixAll.java +++ b/common/src/main/java/org/apache/rocketmq/common/MixAll.java @@ -21,7 +21,6 @@ import java.io.FileInputStream; 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; @@ -34,13 +33,14 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; import java.util.Map; -import java.util.Properties; import java.util.Set; import java.util.TreeMap; +import java.util.List; +import java.util.Objects; +import java.util.ArrayList; +import java.util.Properties; +import java.util.Enumeration; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Predicate; @@ -54,6 +54,12 @@ import org.apache.rocketmq.logging.org.slf4j.LoggerFactory; public class MixAll { + private MixAll() { + // Prevent class from being instantiated from outside + } + + private static final Logger log = LoggerFactory.getLogger(LoggerName.COMMON_LOGGER_NAME); + public static final String ROCKETMQ_HOME_ENV = "ROCKETMQ_HOME"; public static final String ROCKETMQ_HOME_PROPERTY = "rocketmq.home.dir"; public static final String NAMESRV_ADDR_ENV = "NAMESRV_ADDR"; @@ -87,8 +93,8 @@ public class MixAll { public static final long FIRST_BROKER_CONTROLLER_ID = 1L; public static final long CURRENT_JVM_PID = getPID(); - public final static int UNIT_PRE_SIZE_FOR_MSG = 28; - public final static int ALL_ACK_IN_SYNC_STATE_SET = -1; + public static final int UNIT_PRE_SIZE_FOR_MSG = 28; + public static final int ALL_ACK_IN_SYNC_STATE_SET = -1; public static final String RETRY_GROUP_TOPIC_PREFIX = "%RETRY%"; public static final String DLQ_GROUP_TOPIC_PREFIX = "%DLQ%"; @@ -109,10 +115,9 @@ public class MixAll { public static final String ROCKETMQ_ZONE_MODE_PROPERTY = "rocketmq.zone.mode"; public static final String ZONE_NAME = "__ZONE_NAME"; public static final String ZONE_MODE = "__ZONE_MODE"; - public final static String RPC_REQUEST_HEADER_NAMESPACED_FIELD = "nsd"; - public final static String RPC_REQUEST_HEADER_NAMESPACE_FIELD = "ns"; + public static final String RPC_REQUEST_HEADER_NAMESPACED_FIELD = "nsd"; + public static final String RPC_REQUEST_HEADER_NAMESPACE_FIELD = "ns"; - private static final Logger log = LoggerFactory.getLogger(LoggerName.COMMON_LOGGER_NAME); public static final String LOGICAL_QUEUE_MOCK_BROKER_PREFIX = "__syslo__"; public static final String METADATA_SCOPE_GLOBAL = "__global__"; public static final String LOGICAL_QUEUE_MOCK_BROKER_NAME_NOT_EXIST = "__syslo__none__"; @@ -128,12 +133,14 @@ public static boolean isMac() { return OS.contains("mac"); } + @SuppressWarnings("unused") public static boolean isUnix() { return OS.contains("nix") || OS.contains("nux") || OS.contains("aix"); } + @SuppressWarnings("unused") public static boolean isSolaris() { return OS.contains("sunos"); } @@ -169,11 +176,10 @@ public static String brokerVIPChannel(final boolean isChange, final String broke int split = brokerAddr.lastIndexOf(":"); String ip = brokerAddr.substring(0, split); String port = brokerAddr.substring(split + 1); - String brokerAddrNew = ip + ":" + (Integer.parseInt(port) - 2); - return brokerAddrNew; - } else { - return brokerAddr; + return ip + ":" + (Integer.parseInt(port) - 2); } + + return brokerAddr; } public static long getPID() { @@ -225,7 +231,7 @@ public static String file2String(final File file) throws IOException { } if (result) { - return new String(data, DEFAULT_CHARSET); + return new String(data, StandardCharsets.UTF_8); } } return null; @@ -242,11 +248,13 @@ public static String file2String(final URL url) { in.read(data, 0, len); return new String(data, StandardCharsets.UTF_8); } catch (Exception ignored) { + // NO Sonar } finally { if (null != in) { try { in.close(); } catch (IOException ignored) { + // NO Sonar } } } @@ -262,31 +270,25 @@ public static void printObjectProperties(final Logger logger, final Object objec final boolean onlyImportantField) { Field[] fields = object.getClass().getDeclaredFields(); for (Field field : fields) { - if (!Modifier.isStatic(field.getModifiers())) { - String name = field.getName(); - if (!name.startsWith("this")) { - if (onlyImportantField) { - Annotation annotation = field.getAnnotation(ImportantField.class); - if (null == annotation) { - continue; - } - } - - Object value = null; - try { - field.setAccessible(true); - value = field.get(object); - if (null == value) { - value = ""; - } - } catch (IllegalAccessException e) { - log.error("Failed to obtain object properties", e); - } + String name = field.getName(); + if (Modifier.isStatic(field.getModifiers()) || name.startsWith("this") || + onlyImportantField && Objects.isNull(field.getAnnotation(ImportantField.class))) { + continue; + } - if (logger != null) { - logger.info(name + "=" + value); - } + Object value = null; + try { + field.setAccessible(true); + value = field.get(object); + if (null == value) { + value = ""; } + } catch (IllegalAccessException e) { + log.error("Failed to obtain object properties", e); + } + + if (logger != null) { + logger.info(name + "=" + value); } } } @@ -300,7 +302,10 @@ public static String properties2String(final Properties properties, final boolea Set> entrySet = isSort ? new TreeMap<>(properties).entrySet() : properties.entrySet(); for (Map.Entry entry : entrySet) { if (entry.getValue() != null) { - sb.append(entry.getKey().toString() + "=" + entry.getValue().toString() + "\n"); + sb.append(entry.getKey().toString()) + .append("=") + .append(entry.getValue().toString()) + .append("\n"); } } return sb.toString(); @@ -309,7 +314,7 @@ public static String properties2String(final Properties properties, final boolea public static Properties string2Properties(final String str) { Properties properties = new Properties(); try { - InputStream in = new ByteArrayInputStream(str.getBytes(DEFAULT_CHARSET)); + InputStream in = new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8)); properties.load(in); } catch (Exception e) { log.error("Failed to handle properties", e); @@ -323,29 +328,24 @@ public static Properties object2Properties(final Object object) { Properties properties = new Properties(); Class objectClass = object.getClass(); - while (true) { - Field[] fields = objectClass.getDeclaredFields(); - for (Field field : fields) { - if (!Modifier.isStatic(field.getModifiers())) { - String name = field.getName(); - if (!name.startsWith("this")) { - Object value = null; - try { - field.setAccessible(true); - value = field.get(object); - } catch (IllegalAccessException e) { - log.error("Failed to handle properties", e); - } + while (objectClass != Object.class && objectClass.getSuperclass() != Object.class) { + for (Field field : objectClass.getDeclaredFields()) { + String name = field.getName(); + if (Modifier.isStatic(field.getModifiers()) || name.startsWith("this")) { + continue; + } + Object value = null; + try { + field.setAccessible(true); + value = field.get(object); + } catch (IllegalAccessException e) { + log.error("Failed to handle properties", e); + } - if (value != null) { - properties.setProperty(name, value.toString()); - } - } + if (value != null) { + properties.setProperty(name, value.toString()); } } - if (objectClass == Object.class || objectClass.getSuperclass() == Object.class) { - break; - } objectClass = objectClass.getSuperclass(); } @@ -355,39 +355,47 @@ public static Properties object2Properties(final Object object) { public static void properties2Object(final Properties p, final Object object) { Method[] methods = object.getClass().getMethods(); for (Method method : methods) { - String mn = method.getName(); - if (mn.startsWith("set")) { + String methodName = method.getName(); + Class[] pt = method.getParameterTypes(); + if (methodName.startsWith("set") && pt.length > 0) { try { - String tmp = mn.substring(4); - String first = mn.substring(3, 4); - - String key = first.toLowerCase() + tmp; + String suffix = methodName.substring(4); + String first = methodName.substring(3, 4); + String key = first.toLowerCase() + suffix; String property = p.getProperty(key); - if (property != null) { - Class[] pt = method.getParameterTypes(); - if (pt.length > 0) { - String cn = pt[0].getSimpleName(); - Object arg; - if (cn.equals("int") || cn.equals("Integer")) { + if (Objects.nonNull(property)) { + Object arg; + switch (pt[0].getSimpleName()) { + case "int": + case "Integer": arg = Integer.parseInt(property); - } else if (cn.equals("long") || cn.equals("Long")) { + break; + case "long": + case "Long": arg = Long.parseLong(property); - } else if (cn.equals("double") || cn.equals("Double")) { + break; + case "double": + case "Double": arg = Double.parseDouble(property); - } else if (cn.equals("boolean") || cn.equals("Boolean")) { + break; + case "boolean": + case "Boolean": arg = Boolean.parseBoolean(property); - } else if (cn.equals("float") || cn.equals("Float")) { + break; + case "float": + case "Float": arg = Float.parseFloat(property); - } else if (cn.equals("String")) { - property = property.trim(); - arg = property; - } else { + break; + case "String": + arg = property.trim(); + break; + default: continue; - } - method.invoke(object, arg); } + method.invoke(object, arg); } - } catch (Throwable ignored) { + } catch (Exception ignore) { + // NO Sonar } } } @@ -397,6 +405,7 @@ public static boolean isPropertiesEqual(final Properties p1, final Properties p2 return p1.equals(p2); } + @SuppressWarnings("unused") public static boolean isPropertyValid(Properties props, String key, Predicate validator) { return validator.test(props.getProperty(key)); } @@ -422,13 +431,14 @@ public static List getLocalInetAddress() { private static String localhost() { try { return InetAddress.getLocalHost().getHostAddress(); - } catch (Throwable e) { + } catch (Exception e) { try { String candidatesHost = getLocalhostByNetworkInterface(); if (candidatesHost != null) return candidatesHost; } catch (Exception ignored) { + // NO Sonar } throw new RuntimeException("InetAddress java.net.InetAddress.getLocalHost() throws UnknownHostException" + FAQUrl.suggestTodo(FAQUrl.UNKNOWN_HOST_EXCEPTION), e); @@ -446,17 +456,21 @@ public static String getLocalhostByNetworkInterface() throws SocketException { if ("docker0".equals(networkInterface.getName()) || !networkInterface.isUp()) { continue; } - Enumeration addrs = networkInterface.getInetAddresses(); - while (addrs.hasMoreElements()) { - InetAddress address = addrs.nextElement(); - if (address.isLoopbackAddress()) { - continue; - } + Enumeration addresses = networkInterface.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress address = addresses.nextElement(); + boolean skip = address.isLoopbackAddress(); + //ip4 higher priority if (address instanceof Inet6Address) { + skip = true; candidatesHost.add(address.getHostAddress()); + } + + if (skip) { continue; } + return address.getHostAddress(); } } @@ -495,6 +509,7 @@ public static int compareInteger(int x, int y) { return Integer.compare(x, y); } + @SuppressWarnings("unused") public static int compareLong(long x, long y) { return Long.compare(x, y); } @@ -509,21 +524,18 @@ public static String dealFilePath(String aclFilePath) { } public static boolean isSysConsumerGroupForNoColdReadLimit(String consumerGroup) { - if (DEFAULT_CONSUMER_GROUP.equals(consumerGroup) - || TOOLS_CONSUMER_GROUP.equals(consumerGroup) - || SCHEDULE_CONSUMER_GROUP.equals(consumerGroup) - || FILTERSRV_CONSUMER_GROUP.equals(consumerGroup) - || MONITOR_CONSUMER_GROUP.equals(consumerGroup) - || SELF_TEST_CONSUMER_GROUP.equals(consumerGroup) - || ONS_HTTP_PROXY_GROUP.equals(consumerGroup) - || CID_ONSAPI_PERMISSION_GROUP.equals(consumerGroup) - || CID_ONSAPI_OWNER_GROUP.equals(consumerGroup) - || CID_ONSAPI_PULL_GROUP.equals(consumerGroup) - || CID_SYS_RMQ_TRANS.equals(consumerGroup) - || consumerGroup.startsWith(CID_RMQ_SYS_PREFIX)) { - return true; - } - return false; + return DEFAULT_CONSUMER_GROUP.equals(consumerGroup) + || TOOLS_CONSUMER_GROUP.equals(consumerGroup) + || SCHEDULE_CONSUMER_GROUP.equals(consumerGroup) + || FILTERSRV_CONSUMER_GROUP.equals(consumerGroup) + || MONITOR_CONSUMER_GROUP.equals(consumerGroup) + || SELF_TEST_CONSUMER_GROUP.equals(consumerGroup) + || ONS_HTTP_PROXY_GROUP.equals(consumerGroup) + || CID_ONSAPI_PERMISSION_GROUP.equals(consumerGroup) + || CID_ONSAPI_OWNER_GROUP.equals(consumerGroup) + || CID_ONSAPI_PULL_GROUP.equals(consumerGroup) + || CID_SYS_RMQ_TRANS.equals(consumerGroup) + || consumerGroup.startsWith(CID_RMQ_SYS_PREFIX); } public static boolean topicAllowsLMQ(String topic) { diff --git a/common/src/main/java/org/apache/rocketmq/common/ServiceThread.java b/common/src/main/java/org/apache/rocketmq/common/ServiceThread.java index 96195d53090..723e3be0cd6 100644 --- a/common/src/main/java/org/apache/rocketmq/common/ServiceThread.java +++ b/common/src/main/java/org/apache/rocketmq/common/ServiceThread.java @@ -30,7 +30,7 @@ public abstract class ServiceThread implements Runnable { protected Thread thread; protected final CountDownLatch2 waitPoint = new CountDownLatch2(1); - protected volatile AtomicBoolean hasNotified = new AtomicBoolean(false); + protected AtomicBoolean hasNotified = new AtomicBoolean(false); protected volatile boolean stopped = false; protected boolean isDaemon = false; diff --git a/common/src/main/java/org/apache/rocketmq/common/UtilAll.java b/common/src/main/java/org/apache/rocketmq/common/UtilAll.java index a42ac3f364d..3c7b52c0365 100644 --- a/common/src/main/java/org/apache/rocketmq/common/UtilAll.java +++ b/common/src/main/java/org/apache/rocketmq/common/UtilAll.java @@ -31,19 +31,20 @@ import java.text.NumberFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.List; +import java.util.Objects; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.Collections; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; import java.util.zip.CRC32; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; -import java.util.Collections; + import org.apache.commons.lang3.StringUtils; import org.apache.commons.validator.routines.InetAddressValidator; import org.apache.rocketmq.common.constant.LoggerName; @@ -51,14 +52,17 @@ import org.apache.rocketmq.logging.org.slf4j.LoggerFactory; public class UtilAll { + private UtilAll() { + // Prevent class from being instantiated from outside + } private static final Logger log = LoggerFactory.getLogger(LoggerName.COMMON_LOGGER_NAME); private static final Logger STORE_LOG = LoggerFactory.getLogger(LoggerName.STORE_LOGGER_NAME); public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; public static final String YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd#HH:mm:ss:SSS"; public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; - private final static char[] HEX_ARRAY; - private final static int PID; + private static final char[] HEX_ARRAY; + private static final int PID; static { HEX_ARRAY = "0123456789ABCDEF".toCharArray(); @@ -88,8 +92,8 @@ public static void sleep(long timeOut, TimeUnit timeUnit) { } try { timeUnit.sleep(timeOut); - } catch (Throwable ignored) { - + } catch (Exception ignored) { + // NO Sonar } } @@ -131,6 +135,7 @@ public static boolean isItTimeToDo(final String when) { return false; } + @SuppressWarnings("unused") public static String timeMillisToHumanString() { return timeMillisToHumanString(System.currentTimeMillis()); } @@ -179,6 +184,7 @@ public static long computeNextHourTimeMillis() { return cal.getTimeInMillis(); } + @SuppressWarnings("unused") public static long computeNextHalfHourTimeMillis() { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(System.currentTimeMillis()); @@ -216,6 +222,7 @@ public static String timeMillisToHumanString3(final long t) { cal.get(Calendar.SECOND)); } + @SuppressWarnings("unused") public static long getTotalSpace(final String path) { if (null == path || path.isEmpty()) return -1; @@ -377,8 +384,6 @@ public static byte[] uncompress(final byte[] src) throws IOException { } byteArrayOutputStream.flush(); result = byteArrayOutputStream.toByteArray(); - } catch (IOException e) { - throw e; } finally { try { byteArrayInputStream.close(); @@ -421,6 +426,7 @@ public static byte[] compress(final byte[] src, final int level) throws IOExcept try { byteArrayOutputStream.close(); } catch (IOException ignored) { + // NO Sonar } defeater.end(); @@ -429,6 +435,7 @@ public static byte[] compress(final byte[] src, final int level) throws IOExcept return result; } + @SuppressWarnings("unused") public static int asInt(String str, int defaultValue) { try { return Integer.parseInt(str); @@ -437,6 +444,7 @@ public static int asInt(String str, int defaultValue) { } } + @SuppressWarnings("unused") public static long asLong(String str, long defaultValue) { try { return Long.parseLong(str); @@ -464,10 +472,8 @@ public static String responseCode2String(final int code) { } public static String frontStringAtLeast(final String str, final int size) { - if (str != null) { - if (str.length() > size) { - return str.substring(0, size); - } + if (str != null && str.length() > size) { + return str.substring(0, size); } return str; @@ -484,9 +490,7 @@ public static String jstack() { public static String jstack(Map map) { StringBuilder result = new StringBuilder(); try { - Iterator> ite = map.entrySet().iterator(); - while (ite.hasNext()) { - Map.Entry entry = ite.next(); + for (Map.Entry entry : map.entrySet()) { StackTraceElement[] elements = entry.getValue(); Thread thread = entry.getKey(); if (elements != null && elements.length > 0) { @@ -498,7 +502,7 @@ public static String jstack(Map map) { result.append("\n"); } } - } catch (Throwable e) { + } catch (Exception e) { result.append(exceptionSimpleDesc(e)); } @@ -570,9 +574,9 @@ public static String ipToIPv4Str(byte[] ip) { if (ip.length != 4) { return null; } - return new StringBuilder().append(ip[0] & 0xFF).append(".").append( - ip[1] & 0xFF).append(".").append(ip[2] & 0xFF) - .append(".").append(ip[3] & 0xFF).toString(); + return (ip[0] & 0xFF) + "." + + (ip[1] & 0xFF) + "." + (ip[2] & 0xFF) + + "." + (ip[3] & 0xFF); } public static String ipToIPv6Str(byte[] ip) { @@ -606,23 +610,17 @@ public static byte[] getIP() { ip = addresses.nextElement(); if (ip instanceof Inet4Address) { byte[] ipByte = ip.getAddress(); - if (ipByte.length == 4) { - if (ipCheck(ipByte)) { - if (!isInternalIP(ipByte)) { - return ipByte; - } else if (internalIP == null || internalIP[0] == (byte) 127) { - internalIP = ipByte; - } + if (ipByte.length == 4 && ipCheck(ipByte)) { + if (!isInternalIP(ipByte)) { + return ipByte; + } else if (internalIP == null || internalIP[0] == (byte) 127) { + internalIP = ipByte; } } } else if (ip instanceof Inet6Address) { byte[] ipByte = ip.getAddress(); - if (ipByte.length == 16) { - if (ipV6Check(ipByte)) { - if (!isInternalV6IP(ip)) { - return ipByte; - } - } + if (ipByte.length == 16 && ipV6Check(ipByte) && !isInternalV6IP(ip)) { + return ipByte; } } } @@ -645,8 +643,10 @@ public static void deleteFile(File file) { file.delete(); } else if (file.isDirectory()) { File[] files = file.listFiles(); - for (File file1 : files) { - deleteFile(file1); + if (Objects.nonNull(files)) { + for (File file1 : files) { + deleteFile(file1); + } } file.delete(); } @@ -674,7 +674,7 @@ public static List split(String str, String splitter) { } if (StringUtils.isBlank(str)) { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } String[] addrArray = str.split(splitter); @@ -689,7 +689,7 @@ public static void deleteEmptyDirectory(File file) { return; } File[] files = file.listFiles(); - if (files == null || files.length <= 0) { + if (files == null || files.length == 0) { file.delete(); STORE_LOG.info("delete empty direct, {}", file.getPath()); } diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/AbstractStartAndShutdown.java b/common/src/main/java/org/apache/rocketmq/common/utils/AbstractStartAndShutdown.java index 78147b69032..6ff9f31be05 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/AbstractStartAndShutdown.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/AbstractStartAndShutdown.java @@ -50,6 +50,7 @@ public void preShutdown() throws Exception { } } + @SuppressWarnings("unused") public void appendStart(Start start) { this.appendStartAndShutdown(new StartAndShutdown() { @Override diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/BinaryUtil.java b/common/src/main/java/org/apache/rocketmq/common/utils/BinaryUtil.java index 68d15e0708a..a82bbdcd439 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/BinaryUtil.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/BinaryUtil.java @@ -17,14 +17,18 @@ package org.apache.rocketmq.common.utils; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.commons.codec.binary.Hex; public class BinaryUtil { + private BinaryUtil() { + // Prevent class from being instantiated from outside + } + public static byte[] calculateMd5(byte[] binaryData) { - MessageDigest messageDigest = null; + MessageDigest messageDigest; try { messageDigest = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { @@ -34,8 +38,9 @@ public static byte[] calculateMd5(byte[] binaryData) { return messageDigest.digest(); } + @SuppressWarnings("unused") public static String generateMd5(String bodyStr) { - byte[] bytes = calculateMd5(bodyStr.getBytes(Charset.forName("UTF-8"))); + byte[] bytes = calculateMd5(bodyStr.getBytes(StandardCharsets.UTF_8)); return Hex.encodeHexString(bytes, false); } @@ -46,8 +51,8 @@ public static String generateMd5(byte[] content) { /** * Returns true if subject contains only bytes that are spec-compliant ASCII characters. - * @param subject - * @return + * @param subject - + * @return is ascii or not */ public static boolean isAscii(byte[] subject) { if (subject == null) { diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/ChannelUtil.java b/common/src/main/java/org/apache/rocketmq/common/utils/ChannelUtil.java index adf49b23a8e..088cdc4102f 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/ChannelUtil.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/ChannelUtil.java @@ -22,6 +22,11 @@ import java.net.InetSocketAddress; public class ChannelUtil { + private ChannelUtil() { + // Prevent class from being instantiated from outside + } + + @SuppressWarnings("unused") public static String getRemoteIp(Channel channel) { InetSocketAddress inetSocketAddress = (InetSocketAddress) channel.remoteAddress(); if (inetSocketAddress == null) { diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/CleanupPolicyUtils.java b/common/src/main/java/org/apache/rocketmq/common/utils/CleanupPolicyUtils.java index b73ece4f2c1..11dc6f31187 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/CleanupPolicyUtils.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/CleanupPolicyUtils.java @@ -25,6 +25,11 @@ import java.util.Optional; public class CleanupPolicyUtils { + private CleanupPolicyUtils() { + // Prevent class from being instantiated from outside + } + + @SuppressWarnings("unused") public static boolean isCompaction(Optional topicConfig) { return Objects.equals(CleanupPolicy.COMPACTION, getDeletePolicy(topicConfig)); } diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/ConcurrentHashMapUtils.java b/common/src/main/java/org/apache/rocketmq/common/utils/ConcurrentHashMapUtils.java index 3ab1cecebc4..c8ca0314484 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/ConcurrentHashMapUtils.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/ConcurrentHashMapUtils.java @@ -37,7 +37,7 @@ public abstract class ConcurrentHashMapUtils { /** * A temporary workaround for Java 8 specific performance issue JDK-8161372 .
Use implementation of * ConcurrentMap.computeIfAbsent instead. - * + *

* Requirement: The mapping function should not modify this map during computation. * * @see https://bugs.openjdk.java.net/browse/JDK-8161372 diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/CorrelationIdUtil.java b/common/src/main/java/org/apache/rocketmq/common/utils/CorrelationIdUtil.java index 86d1fd4d42d..916d0f60e59 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/CorrelationIdUtil.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/CorrelationIdUtil.java @@ -20,6 +20,10 @@ import java.util.UUID; public class CorrelationIdUtil { + private CorrelationIdUtil() { + // Prevent class from being instantiated from outside + } + public static String createCorrelationId() { return UUID.randomUUID().toString(); } diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/ExceptionUtils.java b/common/src/main/java/org/apache/rocketmq/common/utils/ExceptionUtils.java index 74acc8f660f..1b510ba8a8f 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/ExceptionUtils.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/ExceptionUtils.java @@ -16,17 +16,21 @@ */ package org.apache.rocketmq.common.utils; +import java.util.Objects; import java.util.concurrent.CompletionException; import java.util.concurrent.ExecutionException; public class ExceptionUtils { + private ExceptionUtils() { + // Prevent class from being instantiated from outside + } public static Throwable getRealException(Throwable throwable) { - if (throwable instanceof CompletionException || throwable instanceof ExecutionException) { - if (throwable.getCause() != null) { - throwable = throwable.getCause(); - } + if ((throwable instanceof CompletionException || throwable instanceof ExecutionException) + && Objects.nonNull(throwable.getCause())) { + throwable = throwable.getCause(); } + return throwable; } diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/FutureUtils.java b/common/src/main/java/org/apache/rocketmq/common/utils/FutureUtils.java index fb88b0a391f..74d0ce916ae 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/FutureUtils.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/FutureUtils.java @@ -21,6 +21,9 @@ import java.util.concurrent.ExecutorService; public class FutureUtils { + private FutureUtils() { + // Prevent class from being instantiated from outside + } public static CompletableFuture appendNextFuture(CompletableFuture future, CompletableFuture nextFuture, ExecutorService executor) { diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/IOTinyUtils.java b/common/src/main/java/org/apache/rocketmq/common/utils/IOTinyUtils.java index acba540d3a5..33592ee98f7 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/IOTinyUtils.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/IOTinyUtils.java @@ -34,19 +34,22 @@ import java.util.List; public class IOTinyUtils { + private IOTinyUtils() { + // Prevent class from being instantiated from outside + } - static public String toString(InputStream input, String encoding) throws IOException { + public static String toString(InputStream input, String encoding) throws IOException { return (null == encoding) ? toString(new InputStreamReader(input, StandardCharsets.UTF_8)) : toString(new InputStreamReader( input, encoding)); } - static public String toString(Reader reader) throws IOException { + public static String toString(Reader reader) throws IOException { CharArrayWriter sw = new CharArrayWriter(); copy(reader, sw); return sw.toString(); } - static public long copy(Reader input, Writer output) throws IOException { + public static long copy(Reader input, Writer output) throws IOException { char[] buffer = new char[1 << 12]; long count = 0; for (int n = 0; (n = input.read(buffer)) >= 0; ) { @@ -56,7 +59,7 @@ static public long copy(Reader input, Writer output) throws IOException { return count; } - static public List readLines(Reader input) throws IOException { + public static List readLines(Reader input) throws IOException { BufferedReader reader = toBufferedReader(input); List list = new ArrayList<>(); String line; @@ -71,11 +74,11 @@ static public List readLines(Reader input) throws IOException { return list; } - static private BufferedReader toBufferedReader(Reader reader) { + private static BufferedReader toBufferedReader(Reader reader) { return reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader); } - static public void copyFile(String source, String target) throws IOException { + public static void copyFile(String source, String target) throws IOException { File sf = new File(source); if (!sf.exists()) { throw new IllegalArgumentException("source file does not exist."); @@ -86,19 +89,9 @@ static public void copyFile(String source, String target) throws IOException { throw new RuntimeException("failed to create target file."); } - FileChannel sc = null; - FileChannel tc = null; - try { - tc = new FileOutputStream(tf).getChannel(); - sc = new FileInputStream(sf).getChannel(); + try (FileChannel tc = new FileOutputStream(tf).getChannel(); + FileChannel sc = new FileInputStream(sf).getChannel()) { sc.transferTo(0, sc.size(), tc); - } finally { - if (null != sc) { - sc.close(); - } - if (null != tc) { - tc.close(); - } } } @@ -145,14 +138,8 @@ public static void cleanDirectory(File directory) throws IOException { } public static void writeStringToFile(File file, String data, String encoding) throws IOException { - OutputStream os = null; - try { - os = new FileOutputStream(file); + try (OutputStream os = new FileOutputStream(file)) { os.write(data.getBytes(encoding)); - } finally { - if (null != os) { - os.close(); - } } } } diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/IPAddressUtils.java b/common/src/main/java/org/apache/rocketmq/common/utils/IPAddressUtils.java index 5133219d9cd..6d8ad806c2d 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/IPAddressUtils.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/IPAddressUtils.java @@ -22,6 +22,9 @@ import org.apache.commons.validator.routines.InetAddressValidator; public class IPAddressUtils { + private IPAddressUtils() { + // Prevent class from being instantiated from outside + } private static final String SLASH = "/"; diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/MessageUtils.java b/common/src/main/java/org/apache/rocketmq/common/utils/MessageUtils.java index a6563bc922b..024c56ad9e5 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/MessageUtils.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/MessageUtils.java @@ -29,6 +29,9 @@ import static org.apache.rocketmq.common.message.MessageDecoder.PROPERTY_SEPARATOR; public class MessageUtils { + private MessageUtils() { + // Prevent class from being instantiated from outside + } public static int getShardingKeyIndex(String shardingKey, int indexSize) { return Math.abs(Hashing.murmur3_32().hashBytes(shardingKey.getBytes(StandardCharsets.UTF_8)).asInt() % indexSize); @@ -68,11 +71,10 @@ public static String deleteProperty(String propertiesString, String name) { break; } startIdx = idx1 + name.length(); - if (idx1 == 0 || propertiesString.charAt(idx1 - 1) == PROPERTY_SEPARATOR) { - if (propertiesString.length() > idx1 + name.length() + if ((idx1 == 0 || propertiesString.charAt(idx1 - 1) == PROPERTY_SEPARATOR) + && propertiesString.length() > idx1 + name.length() && propertiesString.charAt(idx1 + name.length()) == NAME_VALUE_SEPARATOR) { - break; - } + break; } } if (idx1 == -1) { diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/NameServerAddressUtils.java b/common/src/main/java/org/apache/rocketmq/common/utils/NameServerAddressUtils.java index 68f883935ae..88e4e9056c0 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/NameServerAddressUtils.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/NameServerAddressUtils.java @@ -17,6 +17,10 @@ import org.apache.rocketmq.common.MixAll; public class NameServerAddressUtils { + private NameServerAddressUtils() { + // Prevent class from being instantiated from outside + } + public static final String INSTANCE_PREFIX = "MQ_INST_"; public static final String INSTANCE_REGEX = INSTANCE_PREFIX + "\\w+_\\w+"; public static final String ENDPOINT_PREFIX = "(\\w+://|)"; diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/NetworkUtil.java b/common/src/main/java/org/apache/rocketmq/common/utils/NetworkUtil.java index 2dc2a890e77..03c8800ccc0 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/NetworkUtil.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/NetworkUtil.java @@ -39,6 +39,10 @@ import org.apache.rocketmq.logging.org.slf4j.LoggerFactory; public class NetworkUtil { + private NetworkUtil() { + // Prevent class from being instantiated from outside + } + public static final String OS_NAME = System.getProperty("os.name"); private static final Logger log = LoggerFactory.getLogger(LoggerName.COMMON_LOGGER_NAME); @@ -64,18 +68,14 @@ public static Selector openSelector() throws IOException { if (isLinuxPlatform()) { try { - final Class providerClazz = Class.forName("sun.nio.ch.EPollSelectorProvider"); - try { - final Method method = providerClazz.getMethod("provider"); - final SelectorProvider selectorProvider = (SelectorProvider) method.invoke(null); - if (selectorProvider != null) { - result = selectorProvider.openSelector(); - } - } catch (final Exception e) { - log.warn("Open ePoll Selector for linux platform exception", e); + Class providerClazz = Class.forName("sun.nio.ch.EPollSelectorProvider"); + Method method = providerClazz.getMethod("provider"); + SelectorProvider selectorProvider = (SelectorProvider) method.invoke(null); + if (selectorProvider != null) { + result = selectorProvider.openSelector(); } - } catch (final Exception e) { - // ignore + } catch (Exception e) { + log.warn("Open ePoll Selector for linux platform exception", e); } } @@ -105,17 +105,13 @@ public static List getLocalInetAddressList() throws SocketException final InetAddress address = en.nextElement(); if (address instanceof Inet4Address) { byte[] ipByte = address.getAddress(); - if (ipByte.length == 4) { - if (validator.isValidInet4Address(UtilAll.ipToIPv4Str(ipByte))) { - inetAddressList.add(address); - } + if (ipByte.length == 4 && validator.isValidInet4Address(UtilAll.ipToIPv4Str(ipByte))) { + inetAddressList.add(address); } } else if (address instanceof Inet6Address) { byte[] ipByte = address.getAddress(); - if (ipByte.length == 16) { - if (validator.isValidInet6Address(UtilAll.ipToIPv6Str(ipByte))) { - inetAddressList.add(address); - } + if (ipByte.length == 16 && validator.isValidInet6Address(UtilAll.ipToIPv6Str(ipByte))) { + inetAddressList.add(address); } } } @@ -187,12 +183,9 @@ public static SocketAddress string2SocketAddress(final String addr) { } public static String socketAddress2String(final SocketAddress addr) { - StringBuilder sb = new StringBuilder(); InetSocketAddress inetSocketAddress = (InetSocketAddress) addr; - sb.append(inetSocketAddress.getAddress().getHostAddress()); - sb.append(":"); - sb.append(inetSocketAddress.getPort()); - return sb.toString(); + return inetSocketAddress.getAddress().getHostAddress() + + ":" + inetSocketAddress.getPort(); } public static String convert2IpString(final String addr) { diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/ThreadUtils.java b/common/src/main/java/org/apache/rocketmq/common/utils/ThreadUtils.java index 1644c6360ec..801d6731935 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/ThreadUtils.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/ThreadUtils.java @@ -34,6 +34,10 @@ import org.apache.rocketmq.logging.org.slf4j.LoggerFactory; public final class ThreadUtils { + private ThreadUtils() { + // Prevent class from being instantiated from outside + } + private static final Logger LOGGER = LoggerFactory.getLogger(LoggerName.TOOLS_LOGGER_NAME); public static ExecutorService newSingleThreadExecutor(String processName, boolean isDaemon) { @@ -213,11 +217,4 @@ public static void shutdown(ExecutorService executorService) { } } - /** - * A constructor to stop this class being constructed. - */ - private ThreadUtils() { - // Unused - - } }