diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 952ad7398a9269ff84e9571faba8e3411ae72c05..b7b133472c46a8b00b57230e9f21735667086b99 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,7 +10,7 @@ Nor is code the only way to contribute to the project. We strongly value documen To submit a change for inclusion, please do the following: #### If the change is non-trivial please include some unit tests that cover the new functionality. -#### If you are introducing a completely new feature or API it is a good idea to start a [RIP](https://github.com/apache/rocketmq/wiki/RocketMQ-Improvement-Proposal) and get consensus on the basic design first. +#### If you are introducing a completely new feature or API it is a good idea to start a wiki and get consensus on the basic design first. #### It is our job to follow up on patches in a timely fashion. Nag us if we aren't doing our job (sometimes we drop things). ## Becoming a Committer @@ -19,8 +19,9 @@ We are always interested in adding new contributors. What we look for are series Nowadays,we have several important contribution points: #### Wiki & JavaDoc +#### RocketMQ Console #### RocketMQ SDK(C++\.Net\Php\Python\Go\Node.js) -#### RocketMQ Connectors +#### RocketMQ MySQL(Oracle\PostgreSQL\Redis\MongoDB\HBase\MSSQL) Replicator ##### Prerequisite If you want to contribute the above listing points, you must abide our some prerequisites: diff --git a/README.md b/README.md index 1c17c7e242f044a513e7f399e175a13cf5a73721..98d97a00ffd2badb69c1f7130144c2e942fc08e2 100644 --- a/README.md +++ b/README.md @@ -51,23 +51,3 @@ We always welcome new contributions, whether for trivial cleanups, [big new feat [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html) Copyright (C) Apache Software Foundation ----------- -## Export Control Notice -This distribution includes cryptographic software. The country in which you currently reside may have -restrictions on the import, possession, use, and/or re-export to another country, of encryption software. -BEFORE using any encryption software, please check your country's laws, regulations and policies concerning -the import, possession, or use, and re-export of encryption software, to see if this is permitted. See - for more information. - -The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this -software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software -using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache -Software Foundation distribution makes it eligible for export under the License Exception ENC Technology -Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for -both object code and source code. - -The following provides more details on the included cryptographic software: - -This software uses Apache Commons Crypto (https://commons.apache.org/proper/commons-crypto/) to -support authentication, and encryption and decryption of data sent across the network between -services. diff --git a/acl/pom.xml b/acl/pom.xml index ec5ab0493fb588101213d8105a632f5db49bd0e6..923acfe6227a7c566917a801b1c74b99198e04fd 100644 --- a/acl/pom.xml +++ b/acl/pom.xml @@ -13,7 +13,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT rocketmq-acl rocketmq-acl ${project.version} @@ -67,10 +67,6 @@ logback-core test - - commons-validator - commons-validator - diff --git a/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java b/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java index 8973320237c684c68864c29ff0c4a90d75bfdd3e..20e1cfa26b90916aecfec39e2669179c85854e20 100644 --- a/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java +++ b/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java @@ -23,7 +23,6 @@ import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; -import java.util.ArrayList; import java.util.Map; import java.util.SortedMap; import org.apache.commons.lang3.StringUtils; @@ -70,75 +69,24 @@ public class AclUtils { return signature; } - public static void IPv6AddressCheck(String netaddress) { - if (isAsterisk(netaddress) || isMinus(netaddress)) { - int asterisk = netaddress.indexOf("*"); - int minus = netaddress.indexOf("-"); -// '*' must be the end of netaddress if it exists - if (asterisk > -1 && asterisk != netaddress.length() - 1) { - throw new AclException(String.format("Netaddress examine scope Exception netaddress is %s", netaddress)); - } - -// format like "2::ac5:78:1-200:*" or "2::ac5:78:1-200" is legal - if (minus > -1) { - if (asterisk == -1) { - if (minus <= netaddress.lastIndexOf(":")) { - throw new AclException(String.format("Netaddress examine scope Exception netaddress is %s", netaddress)); - } - } else { - if (minus <= netaddress.lastIndexOf(":", netaddress.lastIndexOf(":") - 1)) { - throw new AclException(String.format("Netaddress examine scope Exception netaddress is %s", netaddress)); - } - } - } - } - } - - public static String v6ipProcess(String netaddress, String[] strArray, int index) { - int part; - String subAddress; - boolean isAsterisk = isAsterisk(netaddress); - boolean isMinus = isMinus(netaddress); - if (isAsterisk && isMinus) { - part = 6; - int lastColon = netaddress.lastIndexOf(':'); - int secondLastColon = netaddress.substring(0, lastColon).lastIndexOf(':'); - subAddress = netaddress.substring(0, secondLastColon); - } else if (!isAsterisk && !isMinus) { - part = 8; - subAddress = netaddress; - } else { - part = 7; - subAddress = netaddress.substring(0, netaddress.lastIndexOf(':')); - } - return expandIP(subAddress, part); - } - public static void verify(String netaddress, int index) { if (!AclUtils.isScope(netaddress, index)) { throw new AclException(String.format("Netaddress examine scope Exception netaddress is %s", netaddress)); } } - public static String[] getAddreeStrArray(String netaddress, String partialAddress) { - String[] parAddStrArray = StringUtils.split(partialAddress.substring(1, partialAddress.length() - 1), ","); + public static String[] getAddreeStrArray(String netaddress, String four) { + String[] fourStrArray = StringUtils.split(four.substring(1, four.length() - 1), ","); String address = netaddress.substring(0, netaddress.indexOf("{")); - String[] addreeStrArray = new String[parAddStrArray.length]; - for (int i = 0; i < parAddStrArray.length; i++) { - addreeStrArray[i] = address + parAddStrArray[i]; + String[] addreeStrArray = new String[fourStrArray.length]; + for (int i = 0; i < fourStrArray.length; i++) { + addreeStrArray[i] = address + fourStrArray[i]; } return addreeStrArray; } - public static boolean isScope(String netaddress, int index) { -// IPv6 Address - if (isColon(netaddress)) { - netaddress = expandIP(netaddress, 8); - String[] strArray = StringUtils.split(netaddress, ":"); - return isIPv6Scope(strArray, index); - } - - String[] strArray = StringUtils.split(netaddress, "."); + public static boolean isScope(String num, int index) { + String[] strArray = StringUtils.split(num, "."); if (strArray.length != 4) { return false; } @@ -159,10 +107,6 @@ public class AclUtils { } - public static boolean isColon(String netaddress) { - return netaddress.indexOf(':') > -1; - } - public static boolean isScope(String num) { return isScope(Integer.valueOf(num.trim())); } @@ -175,7 +119,7 @@ public class AclUtils { return asterisk.indexOf('*') > -1; } - public static boolean isComma(String colon) { + public static boolean isColon(String colon) { return colon.indexOf(',') > -1; } @@ -184,88 +128,6 @@ public class AclUtils { } - public static boolean isIPv6Scope(String[] num, int index) { - for (int i = 0; i < index; i++) { - int value; - try { - value = Integer.parseInt(num[i], 16); - } catch (NumberFormatException e) { - return false; - } - if (!isIPv6Scope(value)) { - return false; - } - } - return true; - } - - public static boolean isIPv6Scope(int num) { - int min = Integer.parseInt("0", 16); - int max = Integer.parseInt("ffff", 16); - return num >= min && num <= max; - } - - public static String expandIP(String netaddress, int part) { - boolean compress = false; - int compressIndex = -1; - String[] strArray = StringUtils.split(netaddress, ":"); - ArrayList indexes = new ArrayList<>(); - for (int i = 0; i < netaddress.length(); i++) { - if (netaddress.charAt(i) == ':') { - if (indexes.size() > 0 && i - indexes.get(indexes.size() - 1) == 1) { - compressIndex = i; - compress = true; - } - indexes.add(i); - } - } - - for (int i = 0; i < strArray.length; i++) { - if (strArray[i].length() < 4) { - strArray[i] = "0000".substring(0, 4 - strArray[i].length()) + strArray[i]; - } - } - - StringBuilder sb = new StringBuilder(); - if (compress) { - int pos = indexes.indexOf(compressIndex); - int index = 0; - if (!netaddress.startsWith(":")) { - for (int i = 0; i < pos; i++) { - sb.append(strArray[index]).append(":"); - index += 1; - } - } - int zeroNum = part - strArray.length; - if (netaddress.endsWith(":")) { - for (int i = 0; i < zeroNum; i++) { - sb.append("0000"); - if (i != zeroNum - 1) { - sb.append(":"); - } - } - } else { - for (int i = 0; i < zeroNum; i++) { - sb.append("0000").append(":"); - } - for (int i = index; i < strArray.length; i++) { - sb.append(strArray[i]); - if (i != strArray.length - 1) { - sb.append(":"); - } - } - } - } else { - for (int i = 0; i < strArray.length; i++) { - sb.append(strArray[i]); - if (i != strArray.length - 1) { - sb.append(":"); - } - } - } - return sb.toString().toUpperCase(); - } - public static T getYamlDataObject(String path, Class clazz) { Yaml yaml = new Yaml(); FileInputStream fis = null; @@ -286,7 +148,7 @@ public class AclUtils { } } - public static boolean writeDataObject(String path, Map dataMap) { + public static boolean writeDataObject(String path, Map dataMap) { Yaml yaml = new Yaml(); PrintWriter pw = null; try { @@ -310,15 +172,15 @@ public class AclUtils { yamlDataObject = AclUtils.getYamlDataObject(fileName, JSONObject.class); } catch (Exception e) { - log.error("Convert yaml file to data object error, ", e); + log.error("Convert yaml file to data object error, ",e); return null; } if (yamlDataObject == null || yamlDataObject.isEmpty()) { - log.warn("Cannot find conf file :{}, acl isn't be enabled.", fileName); + log.warn("Cannot find conf file :{}, acl isn't be enabled." ,fileName); return null; } - + String accessKey = yamlDataObject.getString(AclConstants.CONFIG_ACCESS_KEY); String secretKey = yamlDataObject.getString(AclConstants.CONFIG_SECRET_KEY); @@ -327,7 +189,7 @@ public class AclUtils { return null; } - return new AclClientRPCHook(new SessionCredentials(accessKey, secretKey)); + return new AclClientRPCHook(new SessionCredentials(accessKey,secretKey)); } } diff --git a/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java b/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java index 0d7ddb3053b5b3a408eec2d5893cbd112b4214ae..c8ce23908484c1f56c9576c6ee97c7b907227539 100644 --- a/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java +++ b/acl/src/main/java/org/apache/rocketmq/acl/plain/PlainAccessValidator.java @@ -50,7 +50,7 @@ public class PlainAccessValidator implements AccessValidator { public AccessResource parse(RemotingCommand request, String remoteAddr) { PlainAccessResource accessResource = new PlainAccessResource(); if (remoteAddr != null && remoteAddr.contains(":")) { - accessResource.setWhiteRemoteAddress(remoteAddr.substring(0, remoteAddr.lastIndexOf(':'))); + accessResource.setWhiteRemoteAddress(remoteAddr.split(":")[0]); } else { accessResource.setWhiteRemoteAddress(remoteAddr); } diff --git a/acl/src/main/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyFactory.java b/acl/src/main/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyFactory.java index 6931eb7c426aa3511769f5e9fa8a4abc6c260bb3..cc2dcee77f9b71d5a516b2eb68a10b2744d6364e 100644 --- a/acl/src/main/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyFactory.java +++ b/acl/src/main/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyFactory.java @@ -19,7 +19,6 @@ package org.apache.rocketmq.acl.plain; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.validator.routines.InetAddressValidator; import org.apache.rocketmq.acl.common.AclException; import org.apache.rocketmq.acl.common.AclUtils; import org.apache.rocketmq.common.constant.LoggerName; @@ -42,26 +41,17 @@ public class RemoteAddressStrategyFactory { if (StringUtils.isBlank(remoteAddr)) { return BLANK_NET_ADDRESS_STRATEGY; } - if ("*".equals(remoteAddr) || "*.*.*.*".equals(remoteAddr) || "*:*:*:*:*:*:*:*".equals(remoteAddr)) { + if ("*".equals(remoteAddr) || "*.*.*.*".equals(remoteAddr)) { return NULL_NET_ADDRESS_STRATEGY; } if (remoteAddr.endsWith("}")) { - if (AclUtils.isColon(remoteAddr)) { - String[] strArray = StringUtils.split(remoteAddr, ":"); - String last = strArray[strArray.length - 1]; - if (!last.startsWith("{")) { - throw new AclException(String.format("MultipleRemoteAddressStrategy netaddress examine scope Exception netaddress", remoteAddr)); - } - return new MultipleRemoteAddressStrategy(AclUtils.getAddreeStrArray(remoteAddr, last)); - } else { - String[] strArray = StringUtils.split(remoteAddr, "."); - String four = strArray[3]; - if (!four.startsWith("{")) { - throw new AclException(String.format("MultipleRemoteAddressStrategy netaddress examine scope Exception netaddress", remoteAddr)); - } - return new MultipleRemoteAddressStrategy(AclUtils.getAddreeStrArray(remoteAddr, four)); + String[] strArray = StringUtils.split(remoteAddr, "."); + String four = strArray[3]; + if (!four.startsWith("{")) { + throw new AclException(String.format("MultipleRemoteAddressStrategy netaddress examine scope Exception netaddress", remoteAddr)); } - } else if (AclUtils.isComma(remoteAddr)) { + return new MultipleRemoteAddressStrategy(AclUtils.getAddreeStrArray(remoteAddr, four)); + } else if (AclUtils.isColon(remoteAddr)) { return new MultipleRemoteAddressStrategy(StringUtils.split(remoteAddr, ",")); } else if (AclUtils.isAsterisk(remoteAddr) || AclUtils.isMinus(remoteAddr)) { return new RangeRemoteAddressStrategy(remoteAddr); @@ -91,26 +81,15 @@ public class RemoteAddressStrategyFactory { private final Set multipleSet = new HashSet<>(); public MultipleRemoteAddressStrategy(String[] strArray) { - InetAddressValidator validator = InetAddressValidator.getInstance(); for (String netaddress : strArray) { - if (validator.isValidInet4Address(netaddress)) { - multipleSet.add(netaddress); - } else if (validator.isValidInet6Address(netaddress)) { - multipleSet.add(AclUtils.expandIP(netaddress, 8)); - } else { - throw new AclException(String.format("Netaddress examine Exception netaddress is %s", netaddress)); - } + AclUtils.verify(netaddress, 4); + multipleSet.add(netaddress); } } @Override public boolean match(PlainAccessResource plainAccessResource) { - InetAddressValidator validator = InetAddressValidator.getInstance(); - String whiteRemoteAddress = plainAccessResource.getWhiteRemoteAddress(); - if (validator.isValidInet6Address(whiteRemoteAddress)) { - whiteRemoteAddress = AclUtils.expandIP(whiteRemoteAddress, 8); - } - return multipleSet.contains(whiteRemoteAddress); + return multipleSet.contains(plainAccessResource.getWhiteRemoteAddress()); } } @@ -121,16 +100,12 @@ public class RemoteAddressStrategyFactory { public OneRemoteAddressStrategy(String netaddress) { this.netaddress = netaddress; - InetAddressValidator validator = InetAddressValidator.getInstance(); - if (!(validator.isValidInet4Address(netaddress) || validator.isValidInet6Address(netaddress))) { - throw new AclException(String.format("Netaddress examine Exception netaddress is %s", netaddress)); - } + AclUtils.verify(netaddress, 4); } @Override public boolean match(PlainAccessResource plainAccessResource) { - String writeRemoteAddress = AclUtils.expandIP(plainAccessResource.getWhiteRemoteAddress(), 8).toUpperCase(); - return AclUtils.expandIP(netaddress, 8).toUpperCase().equals(writeRemoteAddress); + return netaddress.equals(plainAccessResource.getWhiteRemoteAddress()); } } @@ -146,29 +121,14 @@ public class RemoteAddressStrategyFactory { private int index; public RangeRemoteAddressStrategy(String remoteAddr) { -// IPv6 Address - if (AclUtils.isColon(remoteAddr)) { - AclUtils.IPv6AddressCheck(remoteAddr); - String[] strArray = StringUtils.split(remoteAddr, ":"); - for (int i = 1; i < strArray.length; i++) { - if (ipv6Analysis(strArray, i)) { - AclUtils.verify(remoteAddr, index - 1); - String preAddress = AclUtils.v6ipProcess(remoteAddr, strArray, index); - this.index = StringUtils.split(preAddress, ":").length; - this.head = preAddress; - break; - } - } - } else { - String[] strArray = StringUtils.split(remoteAddr, "."); - if (analysis(strArray, 1) || analysis(strArray, 2) || analysis(strArray, 3)) { - AclUtils.verify(remoteAddr, index - 1); - StringBuffer sb = new StringBuffer(); - for (int j = 0; j < index; j++) { - sb.append(strArray[j].trim()).append("."); - } - this.head = sb.toString(); + String[] strArray = StringUtils.split(remoteAddr, "."); + if (analysis(strArray, 1) || analysis(strArray, 2) || analysis(strArray, 3)) { + AclUtils.verify(remoteAddr, index - 1); + StringBuffer sb = new StringBuffer().append(strArray[0].trim()).append(".").append(strArray[1].trim()).append("."); + if (index == 3) { + sb.append(strArray[2].trim()).append("."); } + this.head = sb.toString(); } } @@ -192,27 +152,6 @@ public class RemoteAddressStrategyFactory { return this.end > 0 ? true : false; } - private boolean ipv6Analysis(String[] strArray, int index) { - String value = strArray[index].trim(); - this.index = index; - if ("*".equals(value)) { - int min = Integer.parseInt("0", 16); - int max = Integer.parseInt("ffff", 16); - setValue(min, max); - } else if (AclUtils.isMinus(value)) { - if (value.indexOf("-") == 0) { - throw new AclException(String.format("RangeRemoteAddressStrategy netaddress examine scope Exception value %s ", value)); - } - String[] valueArray = StringUtils.split(value, "-"); - this.start = Integer.parseInt(valueArray[0], 16); - this.end = Integer.parseInt(valueArray[1], 16); - if (!(AclUtils.isIPv6Scope(end) && AclUtils.isIPv6Scope(start) && start <= end)) { - throw new AclException(String.format("RangeRemoteAddressStrategy netaddress examine scope Exception start is %s , end is %s", start, end)); - } - } - return this.end > 0 ? true : false; - } - private void setValue(int start, int end) { this.start = start; this.end = end; @@ -221,33 +160,21 @@ public class RemoteAddressStrategyFactory { @Override public boolean match(PlainAccessResource plainAccessResource) { String netAddress = plainAccessResource.getWhiteRemoteAddress(); - InetAddressValidator validator = InetAddressValidator.getInstance(); - if (validator.isValidInet4Address(netAddress)) { - if (netAddress.startsWith(this.head)) { - String value; - if (index == 3) { - value = netAddress.substring(this.head.length()); - } else if (index == 2) { - value = netAddress.substring(this.head.length(), netAddress.lastIndexOf('.')); - } else { - value = netAddress.substring(this.head.length(), netAddress.lastIndexOf('.', netAddress.lastIndexOf('.') - 1)); - } - Integer address = Integer.valueOf(value); - if (address >= this.start && address <= this.end) { - return true; - } + if (netAddress.startsWith(this.head)) { + String value; + if (index == 3) { + value = netAddress.substring(this.head.length()); + } else { + value = netAddress.substring(this.head.length(), netAddress.lastIndexOf('.')); } - } else if (validator.isValidInet6Address(netAddress)) { - netAddress = AclUtils.expandIP(netAddress, 8).toUpperCase(); - if (netAddress.startsWith(this.head)) { - String value = netAddress.substring(5 * index, 5 * index + 4); - Integer address = Integer.parseInt(value, 16); - if (address >= this.start && address <= this.end) { - return true; - } + Integer address = Integer.valueOf(value); + if (address >= this.start && address <= this.end) { + return true; } } return false; } + } + } diff --git a/acl/src/test/java/org/apache/rocketmq/acl/common/AclUtilsTest.java b/acl/src/test/java/org/apache/rocketmq/acl/common/AclUtilsTest.java index 5705b745a0e7472ca7a215468ae20775a53babfb..5b2627de85dc66f13f1868b7b0c5e014aba3117f 100644 --- a/acl/src/test/java/org/apache/rocketmq/acl/common/AclUtilsTest.java +++ b/acl/src/test/java/org/apache/rocketmq/acl/common/AclUtilsTest.java @@ -46,35 +46,20 @@ public class AclUtilsTest { addressList.add("1.1.1.3"); addressList.add("1.1.1.4"); Assert.assertEquals(newAddressList, addressList); - -// IPv6 test - String ipv6Address = "1:ac41:9987::bb22:666:{1,2,3,4}"; - String[] ipv6AddressArray = AclUtils.getAddreeStrArray(ipv6Address, "{1,2,3,4}"); - List newIPv6AddressList = new ArrayList<>(); - for (String a : ipv6AddressArray) { - newIPv6AddressList.add(a); - } - - List ipv6AddressList = new ArrayList<>(); - ipv6AddressList.add("1:ac41:9987::bb22:666:1"); - ipv6AddressList.add("1:ac41:9987::bb22:666:2"); - ipv6AddressList.add("1:ac41:9987::bb22:666:3"); - ipv6AddressList.add("1:ac41:9987::bb22:666:4"); - Assert.assertEquals(newIPv6AddressList, ipv6AddressList); } @Test public void isScopeStringArray() { - String address = "12"; + String adderss = "12"; for (int i = 0; i < 6; i++) { - boolean isScope = AclUtils.isScope(address, 4); + boolean isScope = AclUtils.isScope(adderss, 4); if (i == 3) { Assert.assertTrue(isScope); } else { Assert.assertFalse(isScope); } - address = address + ".12"; + adderss = adderss + ".12"; } } @@ -92,25 +77,6 @@ public class AclUtilsTest { isScope = AclUtils.isScope(adderss, 3); Assert.assertFalse(isScope); -// IPv6 test - adderss = StringUtils.split("1050:0000:0000:0000:0005:0600:300c:326b", ":"); - isScope = AclUtils.isIPv6Scope(adderss, 8); - Assert.assertTrue(isScope); - isScope = AclUtils.isIPv6Scope(adderss, 4); - Assert.assertTrue(isScope); - - adderss = StringUtils.split("1050:9876:0000:0000:0005:akkg:300c:326b", ":"); - isScope = AclUtils.isIPv6Scope(adderss, 8); - Assert.assertFalse(isScope); - isScope = AclUtils.isIPv6Scope(adderss, 4); - Assert.assertTrue(isScope); - - adderss = StringUtils.split(AclUtils.expandIP("1050::0005:akkg:300c:326b", 8), ":"); - isScope = AclUtils.isIPv6Scope(adderss, 8); - Assert.assertFalse(isScope); - isScope = AclUtils.isIPv6Scope(adderss, 4); - Assert.assertTrue(isScope); - } @Test @@ -136,18 +102,6 @@ public class AclUtilsTest { isScope = AclUtils.isScope(256); Assert.assertFalse(isScope); - // IPv6 test - int min = Integer.parseInt("0", 16); - int max = Integer.parseInt("ffff", 16); - for (int i = min; i < max + 1; i++) { - isScope = AclUtils.isIPv6Scope(i); - Assert.assertTrue(isScope); - } - isScope = AclUtils.isIPv6Scope(-1); - Assert.assertFalse(isScope); - isScope = AclUtils.isIPv6Scope(max + 1); - Assert.assertFalse(isScope); - } @Test @@ -161,10 +115,10 @@ public class AclUtilsTest { @Test public void isColonTest() { - boolean isColon = AclUtils.isComma(","); + boolean isColon = AclUtils.isColon(","); Assert.assertTrue(isColon); - isColon = AclUtils.isComma("-"); + isColon = AclUtils.isColon("-"); Assert.assertFalse(isColon); } @@ -177,36 +131,6 @@ public class AclUtilsTest { Assert.assertFalse(isMinus); } - @Test - public void v6ipProcessTest() { - String remoteAddr = "5::7:6:1-200:*"; - String[] strArray = StringUtils.split(remoteAddr, ":"); - Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0000:0000:0000:0007:0006"); - - remoteAddr = "5::7:6:1-200"; - strArray = StringUtils.split(remoteAddr, ":"); - Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0000:0000:0000:0000:0007:0006"); - - remoteAddr = "5::7:6:*"; - strArray = StringUtils.split(remoteAddr, ":"); - Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0000:0000:0000:0000:0007:0006"); - - remoteAddr = "5:7:6:*"; - strArray = StringUtils.split(remoteAddr, ":"); - Assert.assertEquals(AclUtils.v6ipProcess(remoteAddr, strArray, 3), "0005:0007:0006"); - } - - @Test - public void expandIPTest() { - Assert.assertEquals(AclUtils.expandIP("::1", 8), "0000:0000:0000:0000:0000:0000:0000:0001"); - Assert.assertEquals(AclUtils.expandIP("3::", 8), "0003:0000:0000:0000:0000:0000:0000:0000"); - Assert.assertEquals(AclUtils.expandIP("2::2", 8), "0002:0000:0000:0000:0000:0000:0000:0002"); - Assert.assertEquals(AclUtils.expandIP("4::aac4:92", 8), "0004:0000:0000:0000:0000:0000:AAC4:0092"); - Assert.assertEquals(AclUtils.expandIP("ab23:56:901a::cc6:765:bb:9011", 8), "AB23:0056:901A:0000:0CC6:0765:00BB:9011"); - Assert.assertEquals(AclUtils.expandIP("ab23:56:901a:1:cc6:765:bb:9011", 8), "AB23:0056:901A:0001:0CC6:0765:00BB:9011"); - Assert.assertEquals(AclUtils.expandIP("5::7:6", 6), "0005:0000:0000:0000:0007:0006"); - } - @SuppressWarnings("unchecked") @Test public void getYamlDataObjectTest() { @@ -216,7 +140,7 @@ public class AclUtilsTest { } @Test - public void writeDataObject2YamlFileTest() throws IOException { + public void writeDataObject2YamlFileTest() throws IOException{ String targetFileName = "src/test/resources/conf/plain_write_acl.yml"; File transport = new File(targetFileName); @@ -229,7 +153,7 @@ public class AclUtilsTest { List globalWhiteRemoteAddrs = new ArrayList(); globalWhiteRemoteAddrs.add("10.10.103.*"); globalWhiteRemoteAddrs.add("192.168.0.*"); - aclYamlMap.put("globalWhiteRemoteAddrs", globalWhiteRemoteAddrs); + aclYamlMap.put("globalWhiteRemoteAddrs",globalWhiteRemoteAddrs); // For accounts element in acl yaml config file List> accounts = new ArrayList>(); @@ -242,14 +166,14 @@ public class AclUtilsTest { } }; accounts.add(accountsMap); - aclYamlMap.put("accounts", accounts); + aclYamlMap.put("accounts",accounts); Assert.assertTrue(AclUtils.writeDataObject(targetFileName, aclYamlMap)); transport.delete(); } @Test - public void updateExistedYamlFileTest() throws IOException { + public void updateExistedYamlFileTest() throws IOException{ String targetFileName = "src/test/resources/conf/plain_update_acl.yml"; File transport = new File(targetFileName); @@ -262,7 +186,7 @@ public class AclUtilsTest { List globalWhiteRemoteAddrs = new ArrayList(); globalWhiteRemoteAddrs.add("10.10.103.*"); globalWhiteRemoteAddrs.add("192.168.0.*"); - aclYamlMap.put("globalWhiteRemoteAddrs", globalWhiteRemoteAddrs); + aclYamlMap.put("globalWhiteRemoteAddrs",globalWhiteRemoteAddrs); // Write file to yaml file AclUtils.writeDataObject(targetFileName, aclYamlMap); @@ -277,7 +201,7 @@ public class AclUtilsTest { Map readableMap = AclUtils.getYamlDataObject(targetFileName, Map.class); List updatedGlobalWhiteRemoteAddrs = (List) readableMap.get("globalWhiteRemoteAddrs"); - Assert.assertEquals("192.168.1.2", updatedGlobalWhiteRemoteAddrs.get(0)); + Assert.assertEquals("192.168.1.2",updatedGlobalWhiteRemoteAddrs.get(0)); transport.delete(); } @@ -311,4 +235,5 @@ public class AclUtilsTest { Assert.assertNull(incompleteContRPCHook); } + } diff --git a/acl/src/test/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyTest.java b/acl/src/test/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyTest.java index 8998dd993ccbcf75c9788fd8cf314c4c93f58771..2c2e76bb6fdb328be9c15c9f13efa40ff76c04e2 100644 --- a/acl/src/test/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyTest.java +++ b/acl/src/test/java/org/apache/rocketmq/acl/plain/RemoteAddressStrategyTest.java @@ -39,7 +39,7 @@ public class RemoteAddressStrategyTest { plainAccessResource.setWhiteRemoteAddress("*"); RemoteAddressStrategy remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); Assert.assertEquals(remoteAddressStrategy, RemoteAddressStrategyFactory.NULL_NET_ADDRESS_STRATEGY); - + plainAccessResource.setWhiteRemoteAddress("*.*.*.*"); remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); Assert.assertEquals(remoteAddressStrategy, RemoteAddressStrategyFactory.NULL_NET_ADDRESS_STRATEGY); @@ -71,35 +71,6 @@ public class RemoteAddressStrategyTest { plainAccessResource.setWhiteRemoteAddress(""); remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); Assert.assertEquals(remoteAddressStrategy.getClass(), RemoteAddressStrategyFactory.BlankRemoteAddressStrategy.class); - -// IPv6 test - plainAccessResource.setWhiteRemoteAddress("*:*:*:*:*:*:*:*"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - Assert.assertEquals(remoteAddressStrategy, RemoteAddressStrategyFactory.NULL_NET_ADDRESS_STRATEGY); - - plainAccessResource.setWhiteRemoteAddress("1050:0000:0000:0000:0005:0600:300c:326b"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - Assert.assertEquals(remoteAddressStrategy.getClass(), RemoteAddressStrategyFactory.OneRemoteAddressStrategy.class); - - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:300c:3261,1050::0005:0600:300c:3262,1050::0005:0600:300c:3263"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - Assert.assertEquals(remoteAddressStrategy.getClass(), RemoteAddressStrategyFactory.MultipleRemoteAddressStrategy.class); - - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:300c:3261:{1,2,3}"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - Assert.assertEquals(remoteAddressStrategy.getClass(), RemoteAddressStrategyFactory.MultipleRemoteAddressStrategy.class); - - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:300c:3261:1-200"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - Assert.assertEquals(remoteAddressStrategy.getClass(), RemoteAddressStrategyFactory.RangeRemoteAddressStrategy.class); - - plainAccessResource.setWhiteRemoteAddress("1050:0005:0600:300c:3261:*"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - Assert.assertEquals(remoteAddressStrategy.getClass(), RemoteAddressStrategyFactory.RangeRemoteAddressStrategy.class); - - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:300c:3261:1-20:*"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - Assert.assertEquals(remoteAddressStrategy.getClass(), RemoteAddressStrategyFactory.RangeRemoteAddressStrategy.class); } @Test(expected = AclException.class) @@ -109,8 +80,6 @@ public class RemoteAddressStrategyTest { remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); plainAccessResource.setWhiteRemoteAddress("256.0.0.1"); remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - plainAccessResource.setWhiteRemoteAddress("::1ggg"); - remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); } @Test @@ -125,7 +94,6 @@ public class RemoteAddressStrategyTest { Assert.assertFalse(isMatch); } - @Test public void oneNetaddressStrategyTest() { PlainAccessResource plainAccessResource = new PlainAccessResource(); plainAccessResource.setWhiteRemoteAddress("127.0.0.1"); @@ -141,26 +109,6 @@ public class RemoteAddressStrategyTest { plainAccessResource.setWhiteRemoteAddress("127.0.0.1"); match = remoteAddressStrategy.match(plainAccessResource); Assert.assertTrue(match); - -// Ipv6 test - plainAccessResource = new PlainAccessResource(); - plainAccessResource.setWhiteRemoteAddress("::1"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - plainAccessResource.setWhiteRemoteAddress(""); - match = remoteAddressStrategy.match(plainAccessResource); - Assert.assertFalse(match); - - plainAccessResource.setWhiteRemoteAddress("::2"); - match = remoteAddressStrategy.match(plainAccessResource); - Assert.assertFalse(match); - - plainAccessResource.setWhiteRemoteAddress("::1"); - match = remoteAddressStrategy.match(plainAccessResource); - Assert.assertTrue(match); - - plainAccessResource.setWhiteRemoteAddress("0000:0000:0000:0000:0000:0000:0000:0001"); - match = remoteAddressStrategy.match(plainAccessResource); - Assert.assertTrue(match); } @Test @@ -174,21 +122,6 @@ public class RemoteAddressStrategyTest { remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); multipleNetaddressStrategyTest(remoteAddressStrategy); - plainAccessResource.setWhiteRemoteAddress("192.100-150.*.*"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - plainAccessResource.setWhiteRemoteAddress("192.130.0.2"); - boolean match = remoteAddressStrategy.match(plainAccessResource); - Assert.assertTrue(match); - - plainAccessResource = new PlainAccessResource(); - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:300c:1,1050::0005:0600:300c:2,1050::0005:0600:300c:3"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - multipleIPv6NetaddressStrategyTest(remoteAddressStrategy); - - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:300c:{1,2,3}"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - multipleIPv6NetaddressStrategyTest(remoteAddressStrategy); - } @Test(expected = AclException.class) @@ -196,8 +129,6 @@ public class RemoteAddressStrategyTest { PlainAccessResource plainAccessResource = new PlainAccessResource(); plainAccessResource.setWhiteRemoteAddress("127.0.0.1,2,3}"); remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - plainAccessResource.setWhiteRemoteAddress("::1,2,3}"); - remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); } private void multipleNetaddressStrategyTest(RemoteAddressStrategy remoteAddressStrategy) { @@ -224,30 +155,6 @@ public class RemoteAddressStrategyTest { } - private void multipleIPv6NetaddressStrategyTest(RemoteAddressStrategy remoteAddressStrategy) { - PlainAccessResource plainAccessResource = new PlainAccessResource(); - plainAccessResource.setWhiteRemoteAddress("1050:0000:0000:0000:0005:0600:300c:1"); - boolean match = remoteAddressStrategy.match(plainAccessResource); - Assert.assertTrue(match); - - plainAccessResource.setWhiteRemoteAddress("1050:0000:0000:0000:0005:0600:300c:2"); - match = remoteAddressStrategy.match(plainAccessResource); - Assert.assertTrue(match); - - plainAccessResource.setWhiteRemoteAddress("1050:0000:0000:0000:0005:0600:300c:3"); - match = remoteAddressStrategy.match(plainAccessResource); - Assert.assertTrue(match); - - plainAccessResource.setWhiteRemoteAddress("1050:0000:0000:0000:0005:0600:300c:4"); - match = remoteAddressStrategy.match(plainAccessResource); - Assert.assertFalse(match); - - plainAccessResource.setWhiteRemoteAddress("1050:0000:0000:0000:0005:0600:300c:0"); - match = remoteAddressStrategy.match(plainAccessResource); - Assert.assertFalse(match); - - } - @Test public void rangeNetaddressStrategyTest() { String head = "127.0.0."; @@ -255,7 +162,6 @@ public class RemoteAddressStrategyTest { plainAccessResource.setWhiteRemoteAddress("127.0.0.1-200"); RemoteAddressStrategy remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); rangeNetaddressStrategyTest(remoteAddressStrategy, head, 1, 200, true); - plainAccessResource.setWhiteRemoteAddress("127.0.0.*"); remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); rangeNetaddressStrategyTest(remoteAddressStrategy, head, 0, 255, true); @@ -263,40 +169,14 @@ public class RemoteAddressStrategyTest { plainAccessResource.setWhiteRemoteAddress("127.0.1-200.*"); remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); rangeNetaddressStrategyThirdlyTest(remoteAddressStrategy, head, 1, 200); - + plainAccessResource.setWhiteRemoteAddress("127.*.*.*"); remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - rangeNetaddressStrategyTest(remoteAddressStrategy, head, 0, 255, true); - + rangeNetaddressStrategyThirdlyTest(remoteAddressStrategy, head, 1, 200); + plainAccessResource.setWhiteRemoteAddress("127.1-150.*.*"); remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); rangeNetaddressStrategyThirdlyTest(remoteAddressStrategy, head, 1, 200); - -// IPv6 test - head = "1050::0005:0600:300c:"; - plainAccessResource = new PlainAccessResource(); - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:300c:1-200"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - rangeIPv6NetaddressStrategyTest(remoteAddressStrategy, head, "1", "200", true); - - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:300c:*"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - rangeIPv6NetaddressStrategyTest(remoteAddressStrategy, head, "0", "ffff", true); - - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:3001:*"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - rangeIPv6NetaddressStrategyTest(remoteAddressStrategy, head, "0", "ffff", false); - - head = "1050::0005:0600:300c:1:"; - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:300c:1-200:*"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - rangeIPv6NetaddressStrategyTest(remoteAddressStrategy, head, "0", "ffff", true); - - head = "1050::0005:0600:300c:201:"; - plainAccessResource.setWhiteRemoteAddress("1050::0005:0600:300c:1-200:*"); - remoteAddressStrategy = remoteAddressStrategyFactory.getRemoteAddressStrategy(plainAccessResource); - rangeIPv6NetaddressStrategyTest(remoteAddressStrategy, head, "0", "ffff", false); - } private void rangeNetaddressStrategyTest(RemoteAddressStrategy remoteAddressStrategy, String head, int start, @@ -326,25 +206,6 @@ public class RemoteAddressStrategyTest { } } - private void rangeIPv6NetaddressStrategyTest(RemoteAddressStrategy remoteAddressStrategy, String head, String start, - String end, - boolean isFalse) { - PlainAccessResource plainAccessResource = new PlainAccessResource(); - for (int i = -10; i < 65536 + 100; i++) { - String hex = Integer.toHexString(i); - plainAccessResource.setWhiteRemoteAddress(head + hex); - boolean match = remoteAddressStrategy.match(plainAccessResource); - int startNum = Integer.parseInt(start, 16); - int endNum = Integer.parseInt(end, 16); - if (isFalse && i >= startNum && i <= endNum) { - Assert.assertTrue(match); - continue; - } - Assert.assertFalse(match); - - } - } - @Test(expected = AclException.class) public void rangeNetaddressStrategyExceptionStartGreaterEndTest() { rangeNetaddressStrategyExceptionTest("127.0.0.2-1"); diff --git a/broker/pom.xml b/broker/pom.xml index 3852baa00e1b777af151e36bca8b766279ee44e9..fae5517b20476746f33b504d9bc234c9037b567b 100644 --- a/broker/pom.xml +++ b/broker/pom.xml @@ -13,7 +13,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 diff --git a/broker/src/main/java/org/apache/rocketmq/broker/processor/PullMessageProcessor.java b/broker/src/main/java/org/apache/rocketmq/broker/processor/PullMessageProcessor.java index b4f6daa05eb8fa6a5474a57515e5145c08f91e5f..10c0112feb4a48dfbc483a75069f5022625489fc 100644 --- a/broker/src/main/java/org/apache/rocketmq/broker/processor/PullMessageProcessor.java +++ b/broker/src/main/java/org/apache/rocketmq/broker/processor/PullMessageProcessor.java @@ -41,6 +41,8 @@ import org.apache.rocketmq.common.constant.PermName; import org.apache.rocketmq.common.filter.ExpressionType; import org.apache.rocketmq.common.filter.FilterAPI; import org.apache.rocketmq.common.help.FAQUrl; +import org.apache.rocketmq.logging.InternalLogger; +import org.apache.rocketmq.logging.InternalLoggerFactory; import org.apache.rocketmq.common.message.MessageDecoder; import org.apache.rocketmq.common.message.MessageQueue; import org.apache.rocketmq.common.protocol.ResponseCode; @@ -50,10 +52,7 @@ import org.apache.rocketmq.common.protocol.heartbeat.MessageModel; import org.apache.rocketmq.common.protocol.heartbeat.SubscriptionData; import org.apache.rocketmq.common.protocol.topic.OffsetMovedEvent; import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig; -import org.apache.rocketmq.common.sysflag.MessageSysFlag; import org.apache.rocketmq.common.sysflag.PullSysFlag; -import org.apache.rocketmq.logging.InternalLogger; -import org.apache.rocketmq.logging.InternalLoggerFactory; import org.apache.rocketmq.remoting.common.RemotingHelper; import org.apache.rocketmq.remoting.common.RemotingUtil; import org.apache.rocketmq.remoting.exception.RemotingCommandException; @@ -495,21 +494,7 @@ public class PullMessageProcessor implements NettyRequestProcessor { for (ByteBuffer bb : messageBufferList) { byteBuffer.put(bb); - int sysFlag = bb.getInt(MessageDecoder.SYSFLAG_POSITION); -// bornhost has the IPv4 ip if the MessageSysFlag.BORNHOST_V6_FLAG bit of sysFlag is 0 -// IPv4 host = ip(4 byte) + port(4 byte); IPv6 host = ip(16 byte) + port(4 byte) - int bornhostLength = (sysFlag & MessageSysFlag.BORNHOST_V6_FLAG) == 0 ? 8 : 20; - int msgStoreTimePos = 4 // 1 TOTALSIZE - + 4 // 2 MAGICCODE - + 4 // 3 BODYCRC - + 4 // 4 QUEUEID - + 4 // 5 FLAG - + 8 // 6 QUEUEOFFSET - + 8 // 7 PHYSICALOFFSET - + 4 // 8 SYSFLAG - + 8 // 9 BORNTIMESTAMP - + bornhostLength; // 10 BORNHOST - storeTimestamp = bb.getLong(msgStoreTimePos); + storeTimestamp = bb.getLong(MessageDecoder.MESSAGE_STORE_TIMESTAMP_POSTION); } } finally { getMessageResult.release(); diff --git a/client/pom.xml b/client/pom.xml index c2ec6fab75b5949b6c3ab61767d000131cc2f297..5604fad49ea1b35ed95c02575147fb77b1157127 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -19,7 +19,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 diff --git a/client/src/main/java/org/apache/rocketmq/client/MQAdmin.java b/client/src/main/java/org/apache/rocketmq/client/MQAdmin.java index 63b2d14531d9dc11b811b113f361f24cb54a9331..019414b9e5c151d29fe6f093a8caf13a6e89efe8 100644 --- a/client/src/main/java/org/apache/rocketmq/client/MQAdmin.java +++ b/client/src/main/java/org/apache/rocketmq/client/MQAdmin.java @@ -82,7 +82,7 @@ public interface MQAdmin { long earliestMsgStoreTime(final MessageQueue mq) throws MQClientException; /** - * Query message according to message id + * Query message according tto message id * * @param offsetMsgId message id * @return message diff --git a/client/src/main/java/org/apache/rocketmq/client/impl/consumer/DefaultMQPullConsumerImpl.java b/client/src/main/java/org/apache/rocketmq/client/impl/consumer/DefaultMQPullConsumerImpl.java index 598dc94cc26a5984345e4cf62b6dbd53028263c4..8aff14b748456f49b0fb653804950807a45ccde3 100644 --- a/client/src/main/java/org/apache/rocketmq/client/impl/consumer/DefaultMQPullConsumerImpl.java +++ b/client/src/main/java/org/apache/rocketmq/client/impl/consumer/DefaultMQPullConsumerImpl.java @@ -94,13 +94,13 @@ public class DefaultMQPullConsumerImpl implements MQConsumerInner { } public void createTopic(String key, String newTopic, int queueNum, int topicSysFlag) throws MQClientException { - this.isRunning(); + this.makeSureStateOK(); this.mQClientFactory.getMQAdminImpl().createTopic(key, newTopic, queueNum, topicSysFlag); } - private void isRunning() throws MQClientException { + private void makeSureStateOK() throws MQClientException { if (this.serviceState != ServiceState.RUNNING) { - throw new MQClientException("The consumer is not in running status, " + throw new MQClientException("The consumer service state not OK, " + this.serviceState + FAQUrl.suggestTodo(FAQUrl.CLIENT_SERVICE_NOT_OK), null); @@ -108,12 +108,12 @@ public class DefaultMQPullConsumerImpl implements MQConsumerInner { } public long fetchConsumeOffset(MessageQueue mq, boolean fromStore) throws MQClientException { - this.isRunning(); + this.makeSureStateOK(); return this.offsetStore.readOffset(mq, fromStore ? ReadOffsetType.READ_FROM_STORE : ReadOffsetType.MEMORY_FIRST_THEN_STORE); } public Set fetchMessageQueuesInBalance(String topic) throws MQClientException { - this.isRunning(); + this.makeSureStateOK(); if (null == topic) { throw new IllegalArgumentException("topic is null"); } @@ -130,12 +130,12 @@ public class DefaultMQPullConsumerImpl implements MQConsumerInner { } public List fetchPublishMessageQueues(String topic) throws MQClientException { - this.isRunning(); + this.makeSureStateOK(); return this.mQClientFactory.getMQAdminImpl().fetchPublishMessageQueues(topic); } public Set fetchSubscribeMessageQueues(String topic) throws MQClientException { - this.isRunning(); + this.makeSureStateOK(); // check if has info in memory, otherwise invoke api. Set result = this.rebalanceImpl.getTopicSubscribeInfoTable().get(topic); if (null == result) { @@ -156,17 +156,17 @@ public class DefaultMQPullConsumerImpl implements MQConsumerInner { } public long earliestMsgStoreTime(MessageQueue mq) throws MQClientException { - this.isRunning(); + this.makeSureStateOK(); return this.mQClientFactory.getMQAdminImpl().earliestMsgStoreTime(mq); } public long maxOffset(MessageQueue mq) throws MQClientException { - this.isRunning(); + this.makeSureStateOK(); return this.mQClientFactory.getMQAdminImpl().maxOffset(mq); } public long minOffset(MessageQueue mq) throws MQClientException { - this.isRunning(); + this.makeSureStateOK(); return this.mQClientFactory.getMQAdminImpl().minOffset(mq); } @@ -225,7 +225,7 @@ public class DefaultMQPullConsumerImpl implements MQConsumerInner { private PullResult pullSyncImpl(MessageQueue mq, SubscriptionData subscriptionData, long offset, int maxNums, boolean block, long timeout) throws MQClientException, RemotingException, MQBrokerException, InterruptedException { - this.isRunning(); + this.makeSureStateOK(); if (null == mq) { throw new MQClientException("mq is null", null); @@ -261,7 +261,7 @@ public class DefaultMQPullConsumerImpl implements MQConsumerInner { null ); this.pullAPIWrapper.processPullResult(mq, pullResult, subscriptionData); - //If namespace is not null , reset Topic without namespace. + //If namespace not null , reset Topic without namespace. this.resetTopic(pullResult.getMsgFoundList()); if (!this.consumeMessageHookList.isEmpty()) { ConsumeMessageContext consumeMessageContext = null; @@ -383,7 +383,7 @@ public class DefaultMQPullConsumerImpl implements MQConsumerInner { @Override public void persistConsumerOffset() { try { - this.isRunning(); + this.makeSureStateOK(); Set mqs = new HashSet(); Set allocateMq = this.rebalanceImpl.getProcessQueueTable().keySet(); mqs.addAll(allocateMq); @@ -466,7 +466,7 @@ public class DefaultMQPullConsumerImpl implements MQConsumerInner { final PullCallback pullCallback, final boolean block, final long timeout) throws MQClientException, RemotingException, InterruptedException { - this.isRunning(); + this.makeSureStateOK(); if (null == mq) { throw new MQClientException("mq is null", null); @@ -543,18 +543,18 @@ public class DefaultMQPullConsumerImpl implements MQConsumerInner { public QueryResult queryMessage(String topic, String key, int maxNum, long begin, long end) throws MQClientException, InterruptedException { - this.isRunning(); + this.makeSureStateOK(); return this.mQClientFactory.getMQAdminImpl().queryMessage(topic, key, maxNum, begin, end); } public MessageExt queryMessageByUniqKey(String topic, String uniqKey) throws MQClientException, InterruptedException { - this.isRunning(); + this.makeSureStateOK(); return this.mQClientFactory.getMQAdminImpl().queryMessageByUniqKey(topic, uniqKey); } public long searchOffset(MessageQueue mq, long timestamp) throws MQClientException { - this.isRunning(); + this.makeSureStateOK(); return this.mQClientFactory.getMQAdminImpl().searchOffset(mq, timestamp); } @@ -748,13 +748,13 @@ public class DefaultMQPullConsumerImpl implements MQConsumerInner { } public void updateConsumeOffset(MessageQueue mq, long offset) throws MQClientException { - this.isRunning(); + this.makeSureStateOK(); this.offsetStore.updateOffset(mq, offset, false); } public MessageExt viewMessage(String msgId) throws RemotingException, MQBrokerException, InterruptedException, MQClientException { - this.isRunning(); + this.makeSureStateOK(); return this.mQClientFactory.getMQAdminImpl().viewMessage(msgId); } diff --git a/client/src/main/java/org/apache/rocketmq/client/impl/consumer/PullAPIWrapper.java b/client/src/main/java/org/apache/rocketmq/client/impl/consumer/PullAPIWrapper.java index 1917d27cf155caad84d302f7efca504d65d130b8..1d2d24fa3b9d05aea77137fc33439a4bff3e777b 100644 --- a/client/src/main/java/org/apache/rocketmq/client/impl/consumer/PullAPIWrapper.java +++ b/client/src/main/java/org/apache/rocketmq/client/impl/consumer/PullAPIWrapper.java @@ -97,7 +97,7 @@ public class PullAPIWrapper { for (MessageExt msg : msgListFilterAgain) { String traFlag = msg.getProperty(MessageConst.PROPERTY_TRANSACTION_PREPARED); - if (Boolean.parseBoolean(traFlag)) { + if (traFlag != null && Boolean.parseBoolean(traFlag)) { msg.setTransactionId(msg.getProperty(MessageConst.PROPERTY_UNIQ_CLIENT_MESSAGE_ID_KEYIDX)); } MessageAccessor.putProperty(msg, MessageConst.PROPERTY_MIN_OFFSET, diff --git a/common/pom.xml b/common/pom.xml index 11df833bff0a596a7e030ac2bba6f0afc3c532e9..b778831ec3181ef26c1931e6d5719a35411b4a71 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -19,7 +19,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 @@ -41,9 +41,5 @@ org.apache.commons commons-lang3 - - commons-validator - commons-validator - diff --git a/common/src/main/java/org/apache/rocketmq/common/MQVersion.java b/common/src/main/java/org/apache/rocketmq/common/MQVersion.java index 47cfb6ebd02681b214a0e77fc3e7c30cb1cedb47..71ca0d6a1a95fe9a9282b0bdf0ab318b40b33cae 100644 --- a/common/src/main/java/org/apache/rocketmq/common/MQVersion.java +++ b/common/src/main/java/org/apache/rocketmq/common/MQVersion.java @@ -18,7 +18,7 @@ package org.apache.rocketmq.common; public class MQVersion { - public static final int CURRENT_VERSION = Version.V4_5_2.ordinal(); + public static final int CURRENT_VERSION = Version.V4_5_1.ordinal(); public static String getVersionDesc(int value) { int length = Version.values().length; 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 bba8b36ff5e172098573024e2acdb019c4e03f12..0af65dff0f11b43e31ae73a8747adf1f72156a0d 100644 --- a/common/src/main/java/org/apache/rocketmq/common/MixAll.java +++ b/common/src/main/java/org/apache/rocketmq/common/MixAll.java @@ -124,10 +124,8 @@ public class MixAll { public static String brokerVIPChannel(final boolean isChange, final String brokerAddr) { if (isChange) { - int split = brokerAddr.lastIndexOf(":"); - String ip = brokerAddr.substring(0, split); - String port = brokerAddr.substring(split + 1); - String brokerAddrNew = ip + ":" + (Integer.parseInt(port) - 2); + String[] ipAndPort = brokerAddr.split(":"); + String brokerAddrNew = ipAndPort[0] + ":" + (Integer.parseInt(ipAndPort[1]) - 2); return brokerAddrNew; } else { return brokerAddr; 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 85a4cde121d8a3be2349e34b96b86e4c047d6f50..68d93f3af3821008591a6385ff16f7ca579df93f 100644 --- a/common/src/main/java/org/apache/rocketmq/common/UtilAll.java +++ b/common/src/main/java/org/apache/rocketmq/common/UtilAll.java @@ -23,7 +23,6 @@ import java.io.IOException; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.net.Inet4Address; -import java.net.Inet6Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.text.NumberFormat; @@ -40,7 +39,6 @@ import java.util.zip.CRC32; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.validator.routines.InetAddressValidator; import org.apache.rocketmq.common.constant.LoggerName; import org.apache.rocketmq.logging.InternalLogger; import org.apache.rocketmq.logging.InternalLoggerFactory; @@ -440,18 +438,6 @@ public class UtilAll { return false; } - public static boolean isInternalV6IP(byte[] ip) { - if (ip.length != 16) { - throw new RuntimeException("illegal ipv6 bytes"); - } - - //FEC0:0000:0000:0000:0000:0000:0000:0000/10 - if (ip[0] == (byte) 254 && ip[1] >= (byte) 192) { - return true; - } - return false; - } - private static boolean ipCheck(byte[] ip) { if (ip.length != 4) { throw new RuntimeException("illegal ipv4 bytes"); @@ -488,15 +474,6 @@ public class UtilAll { return false; } - private static boolean ipV6Check(byte[] ip) { - if (ip.length != 16) { - throw new RuntimeException("illegal ipv6 bytes"); - } - - InetAddressValidator validator = InetAddressValidator.getInstance(); - return validator.isValidInet6Address(ipToIPv6Str(ip)); - } - public static String ipToIPv4Str(byte[] ip) { if (ip.length != 4) { return null; @@ -506,25 +483,6 @@ public class UtilAll { .append(".").append(ip[3] & 0xFF).toString(); } - public static String ipToIPv6Str(byte[] ip) { - if (ip.length != 16) { - return null; - } - - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < ip.length; i++) { - String hex = Integer.toHexString(ip[i] & 0xFF); - if (hex.length() < 2) { - sb.append(0); - } - sb.append(hex); - if (i % 2 == 1 && i < ip.length - 1) { - sb.append(":"); - } - } - return sb.toString(); - } - public static byte[] getIP() { try { Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces(); @@ -546,17 +504,6 @@ public class UtilAll { } } } - } else if (ip != null && ip instanceof Inet6Address) { - byte[] ipByte = ip.getAddress(); - if (ipByte.length == 16) { - if (ipV6Check(ipByte)) { - if (!isInternalV6IP(ipByte)) { - return ipByte; - } else if (internalIP == null) { - internalIP = ipByte; - } - } - } } } } @@ -585,12 +532,12 @@ public class UtilAll { } } - public static String List2String(List list, String splitor) { + public static String List2String(List list,String splitor) { if (list == null || list.size() == 0) { return null; } StringBuffer str = new StringBuffer(); - for (int i = 0; i < list.size(); i++) { + for (int i = 0;i < list.size();i++) { str.append(list.get(i)); if (i == list.size() - 1) { continue; @@ -600,7 +547,7 @@ public class UtilAll { return str.toString(); } - public static List String2List(String str, String splitor) { + public static List String2List(String str,String splitor) { if (StringUtils.isEmpty(str)) { return null; } diff --git a/common/src/main/java/org/apache/rocketmq/common/message/MessageClientIDSetter.java b/common/src/main/java/org/apache/rocketmq/common/message/MessageClientIDSetter.java index df11556383de6c18d18751f43aa5cc7496197697..d0b202ec64b120a07ecb555a594d8cd9b2d0efc8 100644 --- a/common/src/main/java/org/apache/rocketmq/common/message/MessageClientIDSetter.java +++ b/common/src/main/java/org/apache/rocketmq/common/message/MessageClientIDSetter.java @@ -31,19 +31,17 @@ public class MessageClientIDSetter { private static long nextStartTime; static { - byte[] ip; + LEN = 4 + 2 + 4 + 4 + 2; + ByteBuffer tempBuffer = ByteBuffer.allocate(10); + tempBuffer.position(2); + tempBuffer.putInt(UtilAll.getPid()); + tempBuffer.position(0); try { - ip = UtilAll.getIP(); + tempBuffer.put(UtilAll.getIP()); } catch (Exception e) { - ip = createFakeIP(); + tempBuffer.put(createFakeIP()); } - LEN = ip.length + 2 + 4 + 4 + 2; - ByteBuffer tempBuffer = ByteBuffer.allocate(ip.length + 2 + 4); - tempBuffer.position(0); - tempBuffer.put(ip); - tempBuffer.position(ip.length); - tempBuffer.putInt(UtilAll.getPid()); - tempBuffer.position(ip.length + 2); + tempBuffer.position(6); tempBuffer.putInt(MessageClientIDSetter.class.getClassLoader().hashCode()); FIX_STRING = UtilAll.bytes2string(tempBuffer.array()); setStartTime(System.currentTimeMillis()); @@ -66,12 +64,11 @@ public class MessageClientIDSetter { public static Date getNearlyTimeFromID(String msgID) { ByteBuffer buf = ByteBuffer.allocate(8); byte[] bytes = UtilAll.string2bytes(msgID); - int ipLength = bytes.length == 28 ? 16 : 4; buf.put((byte) 0); buf.put((byte) 0); buf.put((byte) 0); buf.put((byte) 0); - buf.put(bytes, ipLength + 2 + 4, 4); + buf.put(bytes, 10, 4); buf.position(0); long spanMS = buf.getLong(); Calendar cal = Calendar.getInstance(); @@ -92,18 +89,13 @@ public class MessageClientIDSetter { public static String getIPStrFromID(String msgID) { byte[] ipBytes = getIPFromID(msgID); - if (ipBytes.length == 16) { - return UtilAll.ipToIPv6Str(ipBytes); - } else { - return UtilAll.ipToIPv4Str(ipBytes); - } + return UtilAll.ipToIPv4Str(ipBytes); } public static byte[] getIPFromID(String msgID) { + byte[] result = new byte[4]; byte[] bytes = UtilAll.string2bytes(msgID); - int ipLength = bytes.length == 28 ? 16 : 4; - byte[] result = new byte[ipLength]; - System.arraycopy(bytes, 0, result, 0, ipLength); + System.arraycopy(bytes, 0, result, 0, 4); return result; } diff --git a/common/src/main/java/org/apache/rocketmq/common/message/MessageDecoder.java b/common/src/main/java/org/apache/rocketmq/common/message/MessageDecoder.java index 54d5e6b60f37cf683bc613176ae62edf0402e9c9..af0b638d3d0ff62bed2718708255e52b26d8c85f 100644 --- a/common/src/main/java/org/apache/rocketmq/common/message/MessageDecoder.java +++ b/common/src/main/java/org/apache/rocketmq/common/message/MessageDecoder.java @@ -16,7 +16,9 @@ */ package org.apache.rocketmq.common.message; -import java.net.Inet4Address; +import org.apache.rocketmq.common.UtilAll; +import org.apache.rocketmq.common.sysflag.MessageSysFlag; + import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; @@ -27,41 +29,37 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.rocketmq.common.UtilAll; -import org.apache.rocketmq.common.sysflag.MessageSysFlag; public class MessageDecoder { -// public final static int MSG_ID_LENGTH = 8 + 8; + public final static int MSG_ID_LENGTH = 8 + 8; public final static Charset CHARSET_UTF8 = Charset.forName("UTF-8"); public final static int MESSAGE_MAGIC_CODE_POSTION = 4; public final static int MESSAGE_FLAG_POSTION = 16; public final static int MESSAGE_PHYSIC_OFFSET_POSTION = 28; - // public final static int MESSAGE_STORE_TIMESTAMP_POSTION = 56; + public final static int MESSAGE_STORE_TIMESTAMP_POSTION = 56; public final static int MESSAGE_MAGIC_CODE = -626843481; public static final char NAME_VALUE_SEPARATOR = 1; public static final char PROPERTY_SEPARATOR = 2; - public static final int PHY_POS_POSITION = 4 + 4 + 4 + 4 + 4 + 8; - public static final int SYSFLAG_POSITION = 4 + 4 + 4 + 4 + 4 + 8 + 8; -// public static final int BODY_SIZE_POSITION = 4 // 1 TOTALSIZE -// + 4 // 2 MAGICCODE -// + 4 // 3 BODYCRC -// + 4 // 4 QUEUEID -// + 4 // 5 FLAG -// + 8 // 6 QUEUEOFFSET -// + 8 // 7 PHYSICALOFFSET -// + 4 // 8 SYSFLAG -// + 8 // 9 BORNTIMESTAMP -// + 8 // 10 BORNHOST -// + 8 // 11 STORETIMESTAMP -// + 8 // 12 STOREHOSTADDRESS -// + 4 // 13 RECONSUMETIMES -// + 8; // 14 Prepared Transaction Offset + public static final int PHY_POS_POSITION = 4 + 4 + 4 + 4 + 4 + 8; + public static final int BODY_SIZE_POSITION = 4 // 1 TOTALSIZE + + 4 // 2 MAGICCODE + + 4 // 3 BODYCRC + + 4 // 4 QUEUEID + + 4 // 5 FLAG + + 8 // 6 QUEUEOFFSET + + 8 // 7 PHYSICALOFFSET + + 4 // 8 SYSFLAG + + 8 // 9 BORNTIMESTAMP + + 8 // 10 BORNHOST + + 8 // 11 STORETIMESTAMP + + 8 // 12 STOREHOSTADDRESS + + 4 // 13 RECONSUMETIMES + + 8; // 14 Prepared Transaction Offset public static String createMessageId(final ByteBuffer input, final ByteBuffer addr, final long offset) { input.flip(); - int msgIDLength = addr.limit() == 8 ? 16 : 28; - input.limit(msgIDLength); + input.limit(MessageDecoder.MSG_ID_LENGTH); input.put(addr); input.putLong(offset); @@ -70,9 +68,8 @@ public class MessageDecoder { } public static String createMessageId(SocketAddress socketAddress, long transactionIdhashCode) { + ByteBuffer byteBuffer = ByteBuffer.allocate(MessageDecoder.MSG_ID_LENGTH); InetSocketAddress inetSocketAddress = (InetSocketAddress) socketAddress; - int msgIDLength = inetSocketAddress.getAddress() instanceof Inet4Address ? 16 : 28; - ByteBuffer byteBuffer = ByteBuffer.allocate(msgIDLength); byteBuffer.put(inetSocketAddress.getAddress().getAddress()); byteBuffer.putInt(inetSocketAddress.getPort()); byteBuffer.putLong(transactionIdhashCode); @@ -83,16 +80,15 @@ public class MessageDecoder { public static MessageId decodeMessageId(final String msgId) throws UnknownHostException { SocketAddress address; long offset; - int ipLength = msgId.length() == 32 ? 4 * 2 : 16 * 2; - byte[] ip = UtilAll.string2bytes(msgId.substring(0, ipLength)); - byte[] port = UtilAll.string2bytes(msgId.substring(ipLength, ipLength + 8)); + byte[] ip = UtilAll.string2bytes(msgId.substring(0, 8)); + byte[] port = UtilAll.string2bytes(msgId.substring(8, 16)); ByteBuffer bb = ByteBuffer.wrap(port); int portInt = bb.getInt(0); address = new InetSocketAddress(InetAddress.getByAddress(ip), portInt); // offset - byte[] data = UtilAll.string2bytes(msgId.substring(ipLength + 8, ipLength + 8 + 16)); + byte[] data = UtilAll.string2bytes(msgId.substring(16, 32)); bb = ByteBuffer.wrap(data); offset = bb.getLong(0); @@ -105,24 +101,7 @@ public class MessageDecoder { * @param byteBuffer msg commit log buffer. */ public static Map decodeProperties(java.nio.ByteBuffer byteBuffer) { - int sysFlag = byteBuffer.getInt(SYSFLAG_POSITION); - int bornhostLength = (sysFlag & MessageSysFlag.BORNHOST_V6_FLAG) == 0 ? 8 : 20; - int storehostAddressLength = (sysFlag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0 ? 8 : 20; - int bodySizePosition = 4 // 1 TOTALSIZE - + 4 // 2 MAGICCODE - + 4 // 3 BODYCRC - + 4 // 4 QUEUEID - + 4 // 5 FLAG - + 8 // 6 QUEUEOFFSET - + 8 // 7 PHYSICALOFFSET - + 4 // 8 SYSFLAG - + 8 // 9 BORNTIMESTAMP - + bornhostLength // 10 BORNHOST - + 8 // 11 STORETIMESTAMP - + storehostAddressLength // 12 STOREHOSTADDRESS - + 4 // 13 RECONSUMETIMES - + 8; // 14 Prepared Transaction Offset - int topicLengthPosition = bodySizePosition + 4 + byteBuffer.getInt(bodySizePosition); + int topicLengthPosition = BODY_SIZE_POSITION + 4 + byteBuffer.getInt(BODY_SIZE_POSITION); byte topicLength = byteBuffer.get(topicLengthPosition); @@ -160,8 +139,6 @@ public class MessageDecoder { byte[] propertiesBytes = properties.getBytes(CHARSET_UTF8); short propertiesLength = (short) propertiesBytes.length; int sysFlag = messageExt.getSysFlag(); - int bornhostLength = (sysFlag & MessageSysFlag.BORNHOST_V6_FLAG) == 0 ? 8 : 20; - int storehostAddressLength = (sysFlag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0 ? 8 : 20; byte[] newBody = messageExt.getBody(); if (needCompress && (sysFlag & MessageSysFlag.COMPRESSED_FLAG) == MessageSysFlag.COMPRESSED_FLAG) { newBody = UtilAll.compress(body, 5); @@ -181,9 +158,9 @@ public class MessageDecoder { + 8 // 7 PHYSICALOFFSET + 4 // 8 SYSFLAG + 8 // 9 BORNTIMESTAMP - + bornhostLength // 10 BORNHOST + + 8 // 10 BORNHOST + 8 // 11 STORETIMESTAMP - + storehostAddressLength // 12 STOREHOSTADDRESS + + 8 // 12 STOREHOSTADDRESS + 4 // 13 RECONSUMETIMES + 8 // 14 Prepared Transaction Offset + 4 + bodyLength // 14 BODY @@ -314,9 +291,8 @@ public class MessageDecoder { msgExt.setBornTimestamp(bornTimeStamp); // 10 BORNHOST - int bornhostIPLength = (sysFlag & MessageSysFlag.BORNHOST_V6_FLAG) == 0 ? 4 : 16; - byte[] bornHost = new byte[bornhostIPLength]; - byteBuffer.get(bornHost, 0, bornhostIPLength); + byte[] bornHost = new byte[4]; + byteBuffer.get(bornHost, 0, 4); int port = byteBuffer.getInt(); msgExt.setBornHost(new InetSocketAddress(InetAddress.getByAddress(bornHost), port)); @@ -325,9 +301,8 @@ public class MessageDecoder { msgExt.setStoreTimestamp(storeTimestamp); // 12 STOREHOST - int storehostIPLength = (sysFlag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0 ? 4 : 16; - byte[] storeHost = new byte[storehostIPLength]; - byteBuffer.get(storeHost, 0, storehostIPLength); + byte[] storeHost = new byte[4]; + byteBuffer.get(storeHost, 0, 4); port = byteBuffer.getInt(); msgExt.setStoreHost(new InetSocketAddress(InetAddress.getByAddress(storeHost), port)); @@ -373,8 +348,7 @@ public class MessageDecoder { msgExt.setProperties(map); } - int msgIDLength = storehostIPLength + 4 + 8; - ByteBuffer byteBufferMsgId = ByteBuffer.allocate(msgIDLength); + ByteBuffer byteBufferMsgId = ByteBuffer.allocate(MSG_ID_LENGTH); String msgId = createMessageId(byteBufferMsgId, msgExt.getStoreHostBytes(), msgExt.getCommitLogOffset()); msgExt.setMsgId(msgId); diff --git a/common/src/main/java/org/apache/rocketmq/common/message/MessageExt.java b/common/src/main/java/org/apache/rocketmq/common/message/MessageExt.java index 20cb0572717ca138a26ca5d157bbe295dae98fc4..3f77767eb8d00ff8322df2525b9225034f51f79d 100644 --- a/common/src/main/java/org/apache/rocketmq/common/message/MessageExt.java +++ b/common/src/main/java/org/apache/rocketmq/common/message/MessageExt.java @@ -16,8 +16,6 @@ */ package org.apache.rocketmq.common.message; -import java.net.Inet4Address; -import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; @@ -68,26 +66,14 @@ public class MessageExt extends Message { public static ByteBuffer socketAddress2ByteBuffer(final SocketAddress socketAddress, final ByteBuffer byteBuffer) { InetSocketAddress inetSocketAddress = (InetSocketAddress) socketAddress; - InetAddress address = inetSocketAddress.getAddress(); - if (address instanceof Inet4Address) { - byteBuffer.put(inetSocketAddress.getAddress().getAddress(), 0, 4); - } else { - byteBuffer.put(inetSocketAddress.getAddress().getAddress(), 0, 16); - } + byteBuffer.put(inetSocketAddress.getAddress().getAddress(), 0, 4); byteBuffer.putInt(inetSocketAddress.getPort()); byteBuffer.flip(); return byteBuffer; } public static ByteBuffer socketAddress2ByteBuffer(SocketAddress socketAddress) { - InetSocketAddress inetSocketAddress = (InetSocketAddress) socketAddress; - InetAddress address = inetSocketAddress.getAddress(); - ByteBuffer byteBuffer; - if (address instanceof Inet4Address) { - byteBuffer = ByteBuffer.allocate(4 + 4); - } else { - byteBuffer = ByteBuffer.allocate(16 + 4); - } + ByteBuffer byteBuffer = ByteBuffer.allocate(8); return socketAddress2ByteBuffer(socketAddress, byteBuffer); } @@ -181,10 +167,6 @@ public class MessageExt extends Message { this.sysFlag = sysFlag; } - public void setStoreHostAddressV6Flag() { this.sysFlag = this.sysFlag | MessageSysFlag.STOREHOSTADDRESS_V6_FLAG; } - - public void setBornHostV6Flag() { this.sysFlag = this.sysFlag | MessageSysFlag.BORNHOST_V6_FLAG; } - public int getBodyCRC() { return bodyCRC; } diff --git a/common/src/main/java/org/apache/rocketmq/common/sysflag/MessageSysFlag.java b/common/src/main/java/org/apache/rocketmq/common/sysflag/MessageSysFlag.java index d534571eb55276f2452780a13bb6148ea8f5dd43..f1397706cc5e924ae4a8019045fd83a98643c20c 100644 --- a/common/src/main/java/org/apache/rocketmq/common/sysflag/MessageSysFlag.java +++ b/common/src/main/java/org/apache/rocketmq/common/sysflag/MessageSysFlag.java @@ -23,8 +23,6 @@ public class MessageSysFlag { public final static int TRANSACTION_PREPARED_TYPE = 0x1 << 2; public final static int TRANSACTION_COMMIT_TYPE = 0x2 << 2; public final static int TRANSACTION_ROLLBACK_TYPE = 0x3 << 2; - public final static int BORNHOST_V6_FLAG = 0x1 << 4; - public final static int STOREHOSTADDRESS_V6_FLAG = 0x1 << 5; public static int getTransactionValue(final int flag) { return flag & TRANSACTION_ROLLBACK_TYPE; @@ -37,5 +35,4 @@ public class MessageSysFlag { public static int clearCompressedFlag(final int flag) { return flag & (~COMPRESSED_FLAG); } - } diff --git a/common/src/main/java/org/apache/rocketmq/common/sysflag/PullSysFlag.java b/common/src/main/java/org/apache/rocketmq/common/sysflag/PullSysFlag.java index d476a35b749348b4b279003e252b1e83358c09ad..e2edca46bf996d40e79f655a57f2d774d351733a 100644 --- a/common/src/main/java/org/apache/rocketmq/common/sysflag/PullSysFlag.java +++ b/common/src/main/java/org/apache/rocketmq/common/sysflag/PullSysFlag.java @@ -17,7 +17,7 @@ package org.apache.rocketmq.common.sysflag; public class PullSysFlag { - private final static int FLAG_COMMIT_OFFSET = 0x1; + private final static int FLAG_COMMIT_OFFSET = 0x1 << 0; private final static int FLAG_SUSPEND = 0x1 << 1; private final static int FLAG_SUBSCRIPTION = 0x1 << 2; private final static int FLAG_CLASS_FILTER = 0x1 << 3; diff --git a/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java b/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java index 3991367330bedb522c46015b13b792e76a4fa278..265645213e4fe6f3ba4a6aefc73720013129d0e3 100644 --- a/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java @@ -98,15 +98,6 @@ public class UtilAllTest { assertThat(UtilAll.isBlank("Hello")).isFalse(); } - @Test - public void testIPv6Check() { - byte[] nonInternalIp = UtilAll.string2bytes("24084004018081003FAA1DDE2B3F898A"); - byte[] internalIp = UtilAll.string2bytes("FEC0000000000000000000000000FFFF"); - assertThat(UtilAll.isInternalV6IP(nonInternalIp)).isFalse(); - assertThat(UtilAll.isInternalV6IP(internalIp)).isTrue(); - assertThat(UtilAll.ipToIPv6Str(nonInternalIp).toUpperCase()).isEqualTo("2408:4004:0180:8100:3FAA:1DDE:2B3F:898A"); - } - static class DemoConfig { private int demoWidth = 0; private int demoLength = 0; diff --git a/common/src/test/java/org/apache/rocketmq/common/message/MessageClientIDSetterTest.java b/common/src/test/java/org/apache/rocketmq/common/message/MessageClientIDSetterTest.java deleted file mode 100644 index 987f1032fe7e6a1c3fa67bdf0119766a3097336f..0000000000000000000000000000000000000000 --- a/common/src/test/java/org/apache/rocketmq/common/message/MessageClientIDSetterTest.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.rocketmq.common.message; - -import java.util.Calendar; -import java.util.Date; -import org.junit.Test; -import static org.assertj.core.api.Assertions.assertThat; - -public class MessageClientIDSetterTest { - - @Test - public void testGetIPStrFromID() { - String ipv4HostMsgId = "C0A803CA00002A9F0000000000031367"; - String ipv6HostMsgId = "24084004018081003FAA1DDE2B3F898A00002A9F0000000000000CA0"; - String v4Ip = "192.168.3.202"; - String v6Ip = "2408:4004:0180:8100:3faa:1dde:2b3f:898a"; - assertThat(MessageClientIDSetter.getIPStrFromID(ipv4HostMsgId)).isEqualTo(v4Ip); - assertThat(MessageClientIDSetter.getIPStrFromID(ipv6HostMsgId)).isEqualTo(v6Ip); - } - - @Test - public void testGetNearlyTimeFromID() { - String ipv4HostMsgId = "C0A803CA00002A9F0000000000031367"; - String ipv6HostMsgId = "24084004018081003FAA1DDE2B3F898A00002A9F0000000000000CA0"; - Calendar cal = Calendar.getInstance(); - cal.set(2019, Calendar.AUGUST, 1); - Date date = cal.getTime(); - assertThat(MessageClientIDSetter.getNearlyTimeFromID(ipv4HostMsgId)).isCloseTo(date, 24*60*60*1000); - assertThat(MessageClientIDSetter.getNearlyTimeFromID(ipv6HostMsgId)).isCloseTo(date, 24*60*60*1000); - } -} diff --git a/common/src/test/java/org/apache/rocketmq/common/message/MessageDecoderTest.java b/common/src/test/java/org/apache/rocketmq/common/message/MessageDecoderTest.java index 82ad2714dd2c255eae0067a587aa3467554b0b7f..d14d6b060c89168cde510531da86740ec8b33ad5 100644 --- a/common/src/test/java/org/apache/rocketmq/common/message/MessageDecoderTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/message/MessageDecoderTest.java @@ -25,7 +25,6 @@ import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.Map; -import static org.apache.rocketmq.common.message.MessageDecoder.createMessageId; import static org.assertj.core.api.Assertions.assertThat; public class MessageDecoderTest { @@ -78,172 +77,4 @@ public class MessageDecoderTest { assertThat("hello").isEqualTo(properties.get("b")); assertThat("3.14").isEqualTo(properties.get("c")); } - - @Test - public void testDecodePropertiesOnIPv6Host() { - MessageExt messageExt = new MessageExt(); - - messageExt.setMsgId("24084004018081003FAA1DDE2B3F898A00002A9F0000000000000CA0"); - messageExt.setBornHostV6Flag(); - messageExt.setStoreHostAddressV6Flag(); - messageExt.setTopic("abc"); - messageExt.setBody("hello!q!".getBytes()); - try { - messageExt.setBornHost(new InetSocketAddress(InetAddress.getByName("1050:0000:0000:0000:0005:0600:300c:326b"), 0)); - } catch (UnknownHostException e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - messageExt.setBornTimestamp(System.currentTimeMillis()); - messageExt.setCommitLogOffset(123456); - messageExt.setPreparedTransactionOffset(0); - messageExt.setQueueId(0); - messageExt.setQueueOffset(123); - messageExt.setReconsumeTimes(0); - try { - messageExt.setStoreHost(new InetSocketAddress(InetAddress.getByName("::1"), 0)); - } catch (UnknownHostException e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - - messageExt.putUserProperty("a", "123"); - messageExt.putUserProperty("b", "hello"); - messageExt.putUserProperty("c", "3.14"); - - byte[] msgBytes = new byte[0]; - try { - msgBytes = MessageDecoder.encode(messageExt, false); - } catch (Exception e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - - ByteBuffer byteBuffer = ByteBuffer.allocate(msgBytes.length); - byteBuffer.put(msgBytes); - - Map properties = MessageDecoder.decodeProperties(byteBuffer); - - assertThat(properties).isNotNull(); - assertThat("123").isEqualTo(properties.get("a")); - assertThat("hello").isEqualTo(properties.get("b")); - assertThat("3.14").isEqualTo(properties.get("c")); - } - - @Test - public void testEncodeAndDecode() { - MessageExt messageExt = new MessageExt(); - - messageExt.setMsgId("645100FA00002A9F000000489A3AA09E"); - messageExt.setTopic("abc"); - messageExt.setBody("hello!q!".getBytes()); - try { - messageExt.setBornHost(new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 0)); - } catch (UnknownHostException e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - messageExt.setBornTimestamp(System.currentTimeMillis()); - messageExt.setCommitLogOffset(123456); - messageExt.setPreparedTransactionOffset(0); - messageExt.setQueueId(1); - messageExt.setQueueOffset(123); - messageExt.setReconsumeTimes(0); - try { - messageExt.setStoreHost(new InetSocketAddress(InetAddress.getLocalHost(), 0)); - } catch (UnknownHostException e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - - messageExt.putUserProperty("a", "123"); - messageExt.putUserProperty("b", "hello"); - messageExt.putUserProperty("c", "3.14"); - - byte[] msgBytes = new byte[0]; - try { - msgBytes = MessageDecoder.encode(messageExt, false); - } catch (Exception e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - - ByteBuffer byteBuffer = ByteBuffer.allocate(msgBytes.length); - byteBuffer.put(msgBytes); - - byteBuffer.clear(); - MessageExt decodedMsg = MessageDecoder.decode(byteBuffer); - - assertThat(decodedMsg).isNotNull(); - assertThat(1).isEqualTo(decodedMsg.getQueueId()); - assertThat(123456L).isEqualTo(decodedMsg.getCommitLogOffset()); - assertThat("hello!q!".getBytes()).isEqualTo(decodedMsg.getBody()); - - int msgIDLength = 4 + 4 + 8; - ByteBuffer byteBufferMsgId = ByteBuffer.allocate(msgIDLength); - String msgId = createMessageId(byteBufferMsgId, messageExt.getStoreHostBytes(), messageExt.getCommitLogOffset()); - assertThat(msgId).isEqualTo(decodedMsg.getMsgId()); - - assertThat("abc").isEqualTo(decodedMsg.getTopic()); - } - - @Test - public void testEncodeAndDecodeOnIPv6Host() { - MessageExt messageExt = new MessageExt(); - - messageExt.setMsgId("24084004018081003FAA1DDE2B3F898A00002A9F0000000000000CA0"); - messageExt.setBornHostV6Flag(); - messageExt.setStoreHostAddressV6Flag(); - messageExt.setTopic("abc"); - messageExt.setBody("hello!q!".getBytes()); - try { - messageExt.setBornHost(new InetSocketAddress(InetAddress.getByName("1050:0000:0000:0000:0005:0600:300c:326b"), 0)); - } catch (UnknownHostException e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - messageExt.setBornTimestamp(System.currentTimeMillis()); - messageExt.setCommitLogOffset(123456); - messageExt.setPreparedTransactionOffset(0); - messageExt.setQueueId(1); - messageExt.setQueueOffset(123); - messageExt.setReconsumeTimes(0); - try { - messageExt.setStoreHost(new InetSocketAddress(InetAddress.getByName("::1"), 0)); - } catch (UnknownHostException e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - - messageExt.putUserProperty("a", "123"); - messageExt.putUserProperty("b", "hello"); - messageExt.putUserProperty("c", "3.14"); - - byte[] msgBytes = new byte[0]; - try { - msgBytes = MessageDecoder.encode(messageExt, false); - } catch (Exception e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - - ByteBuffer byteBuffer = ByteBuffer.allocate(msgBytes.length); - byteBuffer.put(msgBytes); - - byteBuffer.clear(); - MessageExt decodedMsg = MessageDecoder.decode(byteBuffer); - - assertThat(decodedMsg).isNotNull(); - assertThat(1).isEqualTo(decodedMsg.getQueueId()); - assertThat(123456L).isEqualTo(decodedMsg.getCommitLogOffset()); - assertThat("hello!q!".getBytes()).isEqualTo(decodedMsg.getBody()); - assertThat(48).isEqualTo(decodedMsg.getSysFlag()); - - int msgIDLength = 16 + 4 + 8; - ByteBuffer byteBufferMsgId = ByteBuffer.allocate(msgIDLength); - String msgId = createMessageId(byteBufferMsgId, messageExt.getStoreHostBytes(), messageExt.getCommitLogOffset()); - assertThat(msgId).isEqualTo(decodedMsg.getMsgId()); - - assertThat("abc").isEqualTo(decodedMsg.getTopic()); - } } diff --git a/common/src/test/java/org/apache/rocketmq/common/protocol/route/TopicRouteDataTest.java b/common/src/test/java/org/apache/rocketmq/common/protocol/route/TopicRouteDataTest.java index 764225d6a888a89f1cea2d6e49bf0cc8c8fa31a0..2057b74466bc4045f42d69fde5f4983c68fb21f0 100644 --- a/common/src/test/java/org/apache/rocketmq/common/protocol/route/TopicRouteDataTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/protocol/route/TopicRouteDataTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.rocketmq.common.protocol.route; +package org.apache.rocketmq.common.protocol; import org.apache.rocketmq.common.protocol.route.BrokerData; diff --git a/distribution/benchmark/runclass.sh b/distribution/benchmark/runclass.sh index 339e11a2e4351945cb6b10c92bf2aa26dca39e67..13c58d198c179812374ea354a59ab1acdc348fd1 100644 --- a/distribution/benchmark/runclass.sh +++ b/distribution/benchmark/runclass.sh @@ -24,41 +24,13 @@ fi BASE_DIR=$(dirname $0)/.. CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH} -# The RAMDisk initializing size in MB on Darwin OS for gc-log -DIR_SIZE_IN_MB=600 - -choose_gc_log_directory() -{ - case "`uname`" in - Darwin) - if [ ! -d "/Volumes/RAMDisk" ]; then - # create ram disk on Darwin systems as gc-log directory - DEV=`hdiutil attach -nomount ram://$((2 * 1024 * DIR_SIZE_IN_MB))` > /dev/null - diskutil eraseVolume HFS+ RAMDisk ${DEV} > /dev/null - echo "Create RAMDisk /Volumes/RAMDisk for gc logging on Darwin OS." - fi - GC_LOG_DIR="/Volumes/RAMDisk" - ;; - *) - # check if /dev/shm exists on other systems - if [ -d "/dev/shm" ]; then - GC_LOG_DIR="/dev/shm" - else - GC_LOG_DIR=${BASE_DIR} - fi - ;; - esac -} - -choose_gc_log_directory - JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=320m" JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:+DisableExplicitGC" -JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_run_class_gc_%p_%t.log -XX:+PrintGCDetails" +JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow" JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib" -JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages" -JAVA_OPT="${JAVA_OPT} -XX:+PerfDisableSharedMem" +JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages" +JAVA_OPT="${JAVA_OPT} -XX:+PerfDisableSharedMem" #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n" JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" diff --git a/distribution/bin/mqadmin.xml b/distribution/bin/mqadmin.xml new file mode 100644 index 0000000000000000000000000000000000000000..0f07da414e20742984a2f0d56af8cc72b50c2053 --- /dev/null +++ b/distribution/bin/mqadmin.xml @@ -0,0 +1,43 @@ + + + + false + + ${JAVA_HOME} + + server + + org.apache.rocketmq.tools.command.MQAdminStartup + + + ${cpd}/../lib + ${cpd}/.. + + + + + + + <-Xms512m> + <-Xmx1g> + <-XX:NewSize>256M + <-XX:MaxNewSize>512M + <-XX:PermSize>128M + <-XX:MaxPermSize>128M + + diff --git a/distribution/bin/mqbroker.xml b/distribution/bin/mqbroker.xml new file mode 100644 index 0000000000000000000000000000000000000000..3043cc0f8d07c065b204da0cbcbe0ba8f6a281ca --- /dev/null +++ b/distribution/bin/mqbroker.xml @@ -0,0 +1,45 @@ + + + + false + + ${JAVA_HOME} + + server + + org.apache.rocketmq.broker.BrokerStartup + + + ${cpd}/../lib + ${cpd}/.. + + + + + + + <-Xms512m> + + <-Xmx1g> + +<-XX:NewSize>256M +<-XX:MaxNewSize>512M +<-XX:PermSize>128M +<-XX:MaxPermSize>128M + + diff --git a/distribution/bin/mqnamesrv.xml b/distribution/bin/mqnamesrv.xml new file mode 100644 index 0000000000000000000000000000000000000000..1f050d145d71982d902865ae5492c0ba933b7496 --- /dev/null +++ b/distribution/bin/mqnamesrv.xml @@ -0,0 +1,45 @@ + + + + false + + ${JAVA_HOME} + + server + + org.apache.rocketmq.namesrv.NamesrvStartup + + + ${cpd}/../lib + ${cpd}/.. + + + + + + + <-Xms512m> + + <-Xmx1g> + +<-XX:NewSize>256M +<-XX:MaxNewSize>512M +<-XX:PermSize>128M +<-XX:MaxPermSize>128M + + diff --git a/distribution/bin/runbroker.sh b/distribution/bin/runbroker.sh index 0ccbf7725c229fd1f9300c98b19ce00884081655..df962b4a275fdef8c62b729f6c53b7df6c037668 100644 --- a/distribution/bin/runbroker.sh +++ b/distribution/bin/runbroker.sh @@ -36,37 +36,9 @@ export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH} #=========================================================================================== # JVM Configuration #=========================================================================================== -# The RAMDisk initializing size in MB on Darwin OS for gc-log -DIR_SIZE_IN_MB=600 - -choose_gc_log_directory() -{ - case "`uname`" in - Darwin) - if [ ! -d "/Volumes/RAMDisk" ]; then - # create ram disk on Darwin systems as gc-log directory - DEV=`hdiutil attach -nomount ram://$((2 * 1024 * DIR_SIZE_IN_MB))` > /dev/null - diskutil eraseVolume HFS+ RAMDisk ${DEV} > /dev/null - echo "Create RAMDisk /Volumes/RAMDisk for gc logging on Darwin OS." - fi - GC_LOG_DIR="/Volumes/RAMDisk" - ;; - *) - # check if /dev/shm exists on other systems - if [ -d "/dev/shm" ]; then - GC_LOG_DIR="/dev/shm" - else - GC_LOG_DIR=${BASE_DIR} - fi - ;; - esac -} - -choose_gc_log_directory - JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g" JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0" -JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy" +JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy" JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow" JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch" diff --git a/distribution/bin/runserver.sh b/distribution/bin/runserver.sh index d2bbdedbceafc8164a99509e007d829dad41a506..908c79df9467ee4cf4f80387260fbbb324ac1c43 100644 --- a/distribution/bin/runserver.sh +++ b/distribution/bin/runserver.sh @@ -36,40 +36,11 @@ export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH} #=========================================================================================== # JVM Configuration #=========================================================================================== -# The RAMDisk initializing size in MB on Darwin OS for gc-log -DIR_SIZE_IN_MB=600 - -choose_gc_log_directory() -{ - case "`uname`" in - Darwin) - if [ ! -d "/Volumes/RAMDisk" ]; then - # create ram disk on Darwin systems as gc-log directory - DEV=`hdiutil attach -nomount ram://$((2 * 1024 * DIR_SIZE_IN_MB))` > /dev/null - diskutil eraseVolume HFS+ RAMDisk ${DEV} > /dev/null - echo "Create RAMDisk /Volumes/RAMDisk for gc logging on Darwin OS." - fi - GC_LOG_DIR="/Volumes/RAMDisk" - ;; - *) - # check if /dev/shm exists on other systems - if [ -d "/dev/shm" ]; then - GC_LOG_DIR="/dev/shm" - else - GC_LOG_DIR=${BASE_DIR} - fi - ;; - esac -} - -choose_gc_log_directory - JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC" -JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails" -JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m" +JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow" -JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages" +JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages" JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib" #JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n" JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}" diff --git a/distribution/bin/tools.cmd b/distribution/bin/tools.cmd index c61fbcf8a472b49a815c0d1121ef17614652cf0d..0e25c39b1520334b1799159ee1330ed632ca805d 100644 --- a/distribution/bin/tools.cmd +++ b/distribution/bin/tools.cmd @@ -28,7 +28,7 @@ set CLASSPATH=.;%BASE_DIR%conf;%CLASSPATH% rem =========================================================================================== rem JVM Configuration rem =========================================================================================== -set "JAVA_OPT=%JAVA_OPT% -server -Xms1g -Xmx1g -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m" +set "JAVA_OPT=%JAVA_OPT% -server -Xms1g -Xmx1g -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m" set "JAVA_OPT=%JAVA_OPT% -Djava.ext.dirs="%BASE_DIR%\lib";"%JAVA_HOME%\jre\lib\ext";"%JAVA_HOME%\lib\ext"" set "JAVA_OPT=%JAVA_OPT% -cp "%CLASSPATH%"" diff --git a/distribution/bin/tools.sh b/distribution/bin/tools.sh index 071794c63056a242f71b2915986414dc37c233a1..645a5959bbc8b22eb9717c720897182381bb5a22 100644 --- a/distribution/bin/tools.sh +++ b/distribution/bin/tools.sh @@ -36,7 +36,7 @@ export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH} #=========================================================================================== # JVM Configuration #=========================================================================================== -JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m" +JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m" JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext" JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" diff --git a/distribution/pom.xml b/distribution/pom.xml index 4e3e78fcd9e87235baa88bb5500b085021a275fe..1e3a4ddb3afc150f77c9c46549ba91b49e82f10a 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -20,7 +20,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT rocketmq-distribution rocketmq-distribution ${project.version} diff --git a/docs/cn/README.md b/docs/cn/README.md index c8bdc8dc0d3f1ac460b551e213caf8cdb77a948d..a47ec6452dc31d1a63c7db9c36c2e5429f42661f 100644 --- a/docs/cn/README.md +++ b/docs/cn/README.md @@ -1,4 +1,4 @@ -Apache RocketMQ开发者指南 +Apache RocketMQ开发者指南 -------- ##### 这个开发者指南是帮忙您快速了解,并使用 Apache RocketMQ @@ -14,7 +14,7 @@ - [架构(Architecture)](architecture.md):介绍RocketMQ部署架构和技术架构。 -- [设计(Design)](design.md):介绍RocketMQ关键机制的设计原理,主要包括消息存储、通信机制、消息过滤、负载均衡、事务消息等。 +- [设计(Design)](design.md):介绍RocketMQ关键机制的设计原理,主要包括消息存储、通信机制、消息过滤、负载均衡、事物消息等。 ### 3. 样例 diff --git a/docs/cn/best_practice.md b/docs/cn/best_practice.md index e4b04e0d564c4d4b8c0d494df3c1a707f6de57a4..39febbcddba2e2a722e30761591a3bc03f58f8a4 100755 --- a/docs/cn/best_practice.md +++ b/docs/cn/best_practice.md @@ -289,6 +289,7 @@ DefaultMQProducer、TransactionMQProducer、DefaultMQPushConsumer、DefaultMQPul | offsetStore | | 消费进度存储 | | consumeThreadMin | 10 | 消费线程池最小线程数 | | consumeThreadMax | 20 | 消费线程池最大线程数 | +| | | | | consumeConcurrentlyMaxSpan | 2000 | 单队列并行消费允许的最大跨度 | | pullThresholdForQueue | 1000 | 拉消息本地队列缓存消息最大数 | | pullInterval | 0 | 拉消息间隔,由于是长轮询,所以为0,但是如果应用为了流控,也可以设置大于0的值,单位毫秒 | diff --git a/docs/cn/concept.md b/docs/cn/concept.md index b486b38195d68a48a32ded7afe061c1db0216eea..87d691b8e6627f822d31b0315c98389ae5c602e3 100644 --- a/docs/cn/concept.md +++ b/docs/cn/concept.md @@ -43,8 +43,11 @@ RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer ## 14 严格顺序消息(Strictly Ordered Message) 严格顺序消息模式下,消费者收到的所有消息均是有顺序的。 -## 15 消息(Message) +## 15 代理服务器(Broker Server) +消息中转角色,负责存储消息、转发消息。代理服务器在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。 + +## 16 消息(Message) 消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。RocketMQ中每个消息拥有唯一的Message ID,且可以携带具有业务标识的Key。系统提供了通过Message ID和Key查询消息的功能。 -## 16 标签(Tag) +## 17 标签(Tag) 为消息设置的标志,用于同一主题下区分不同类型的消息。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同标签。标签能够有效地保持代码的清晰度和连贯性,并优化RocketMQ提供的查询系统。消费者可以根据Tag实现对不同子主题的不同消费逻辑,实现更好的扩展性。 diff --git a/docs/cn/features.md b/docs/cn/features.md index 859e0f84a3464f1377d27304d0f544da2e9deb17..1c0456b28842e9a1d281bc1d51bcb14aeed5afa8 100644 --- a/docs/cn/features.md +++ b/docs/cn/features.md @@ -12,7 +12,7 @@ - 分区顺序 对于指定的一个 Topic,所有消息根据 sharding key 进行区块分区。 同一个分区内的消息按照严格的 FIFO 顺序进行发布和消费。 Sharding key 是顺序消息中用来区分不同分区的关键字段,和普通消息的 Key 是完全不同的概念。 适用场景:性能要求高,以 sharding key 作为分区字段,在同一个区块中严格的按照 FIFO 原则进行消息发布和消费的场景。 -## 3 消息过滤 +##3 消息过滤 RocketMQ的消费者可以根据Tag进行消息过滤,也支持自定义属性过滤。消息过滤目前是在Broker端实现的,优点是减少了对于Consumer无用消息的网络传输,缺点是增加了Broker的负担、而且实现相对复杂。 ## 4 消息可靠性 RocketMQ支持消息的高可靠,影响消息可靠性的几种情况: diff --git a/example/pom.xml b/example/pom.xml index 5e160276e546f2687148793f85f2085aa01abde9..ac83beae8f38e8005bc49f7bbb2463676c489e71 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -19,7 +19,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 @@ -51,12 +51,12 @@ org.apache.rocketmq rocketmq-openmessaging - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT org.apache.rocketmq rocketmq-acl - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT diff --git a/filter/pom.xml b/filter/pom.xml index 9b2128d9575813e8cea26de118dfe7d397ed0aa6..7f33e996285f52962bbbc9c2bed5645573b6b94b 100644 --- a/filter/pom.xml +++ b/filter/pom.xml @@ -20,7 +20,7 @@ rocketmq-all org.apache.rocketmq - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 diff --git a/logappender/pom.xml b/logappender/pom.xml index 667f21358707a5fc984a5ed76a16595326aa696a..2fd6da2001d2b5753ec13d117e4ad925d09907cc 100644 --- a/logappender/pom.xml +++ b/logappender/pom.xml @@ -19,7 +19,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 rocketmq-logappender diff --git a/logging/pom.xml b/logging/pom.xml index 95c70b504f3dbfacb90ac8bed5c2f92cb61e229e..fb104526e766f9412f1666eb5fea751d7e542e0f 100644 --- a/logging/pom.xml +++ b/logging/pom.xml @@ -19,7 +19,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 diff --git a/namesrv/pom.xml b/namesrv/pom.xml index bb858b91e1b8d2ae0eb5c8f34cd79a01a427230c..d98403e4e8caccdb3d629cc4ca066bd4c6ccd4e9 100644 --- a/namesrv/pom.xml +++ b/namesrv/pom.xml @@ -19,7 +19,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 diff --git a/openmessaging/pom.xml b/openmessaging/pom.xml index 8215a3f628e6bd5fb61321b55a64056c85aa90cb..0f6aa2e538ca527c1ec3e50951f9cdab976f7e8d 100644 --- a/openmessaging/pom.xml +++ b/openmessaging/pom.xml @@ -20,7 +20,7 @@ rocketmq-all org.apache.rocketmq - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index f622df75a75fbd5b16fac5a67f6c3489b840228b..7d183e748848b315647415642370f062a1ea9e1c 100644 --- a/pom.xml +++ b/pom.xml @@ -16,8 +16,7 @@ limitations under the License. --> - + org.apache @@ -30,7 +29,7 @@ 2012 org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT pom Apache RocketMQ ${project.version} http://rocketmq.apache.org/ @@ -159,7 +158,7 @@ - + true @@ -608,13 +607,6 @@ log4j-slf4j-impl 2.7 - - commons-validator - commons-validator - 1.6 - - - diff --git a/remoting/pom.xml b/remoting/pom.xml index 68aebd9484bf43c130685928e8d6f9d019929483..132e21bfadaf50e7cab6f00c5d18e09e3c854c28 100644 --- a/remoting/pom.xml +++ b/remoting/pom.xml @@ -19,7 +19,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 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 f244bf4c853551ad8b4810f95a78b039ae6d239b..585b60b798cd0986748f9df035b6229690464f05 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,17 +17,18 @@ package org.apache.rocketmq.remoting.common; import io.netty.channel.Channel; +import org.apache.rocketmq.remoting.exception.RemotingConnectException; +import org.apache.rocketmq.remoting.exception.RemotingSendRequestException; +import org.apache.rocketmq.remoting.exception.RemotingTimeoutException; +import org.apache.rocketmq.logging.InternalLogger; +import org.apache.rocketmq.logging.InternalLoggerFactory; +import org.apache.rocketmq.remoting.protocol.RemotingCommand; + 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.logging.InternalLogger; -import org.apache.rocketmq.logging.InternalLoggerFactory; -import org.apache.rocketmq.remoting.exception.RemotingConnectException; -import org.apache.rocketmq.remoting.exception.RemotingSendRequestException; -import org.apache.rocketmq.remoting.exception.RemotingTimeoutException; -import org.apache.rocketmq.remoting.protocol.RemotingCommand; public class RemotingHelper { public static final String ROCKETMQ_REMOTING = "RocketmqRemoting"; @@ -52,10 +53,8 @@ public class RemotingHelper { } public static SocketAddress string2SocketAddress(final String addr) { - int split = addr.lastIndexOf(":"); - String host = addr.substring(0, split); - String port = addr.substring(split + 1); - InetSocketAddress isa = new InetSocketAddress(host, Integer.parseInt(port)); + String[] s = addr.split(":"); + InetSocketAddress isa = new InetSocketAddress(s[0], Integer.parseInt(s[1])); return isa; } 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 a16940e561c5cec23c9df021c429e1c64d500b88..3da3a1839603396a1bd592971059b436a1082e08 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 @@ -31,6 +31,7 @@ import java.nio.channels.SocketChannel; import java.nio.channels.spi.SelectorProvider; import java.util.ArrayList; import java.util.Enumeration; + import org.apache.rocketmq.logging.InternalLogger; import org.apache.rocketmq.logging.InternalLoggerFactory; @@ -144,10 +145,8 @@ public class RemotingUtil { } public static SocketAddress string2SocketAddress(final String addr) { - int split = addr.lastIndexOf(":"); - String host = addr.substring(0, split); - String port = addr.substring(split + 1); - InetSocketAddress isa = new InetSocketAddress(host, Integer.parseInt(port)); + String[] s = addr.split(":"); + InetSocketAddress isa = new InetSocketAddress(s[0], Integer.parseInt(s[1])); return isa; } diff --git a/srvutil/pom.xml b/srvutil/pom.xml index 6aa9fa31a22d6df814aac19be7c1b28905dd4ebb..d616edd95ee94b4310926e4c24032576b36cc40f 100644 --- a/srvutil/pom.xml +++ b/srvutil/pom.xml @@ -19,7 +19,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 diff --git a/store/pom.xml b/store/pom.xml index 79e337b0b8086bfad68e6fb010a645707e329fec..b96f8799c3946bd3c68dd3bcb43c0b33d6c11a59 100644 --- a/store/pom.xml +++ b/store/pom.xml @@ -19,7 +19,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 diff --git a/store/src/main/java/org/apache/rocketmq/store/CommitLog.java b/store/src/main/java/org/apache/rocketmq/store/CommitLog.java index 3d89fe4c5198cafc22fd33033716215a577fe6ef..2ab66e84634f119b7dcb3b08e95c3399f26aff44 100644 --- a/store/src/main/java/org/apache/rocketmq/store/CommitLog.java +++ b/store/src/main/java/org/apache/rocketmq/store/CommitLog.java @@ -16,8 +16,6 @@ */ package org.apache.rocketmq.store; -import java.net.Inet6Address; -import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.HashMap; @@ -28,14 +26,14 @@ import java.util.concurrent.TimeUnit; import org.apache.rocketmq.common.ServiceThread; import org.apache.rocketmq.common.UtilAll; import org.apache.rocketmq.common.constant.LoggerName; +import org.apache.rocketmq.logging.InternalLogger; +import org.apache.rocketmq.logging.InternalLoggerFactory; import org.apache.rocketmq.common.message.MessageAccessor; import org.apache.rocketmq.common.message.MessageConst; import org.apache.rocketmq.common.message.MessageDecoder; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.common.message.MessageExtBatch; import org.apache.rocketmq.common.sysflag.MessageSysFlag; -import org.apache.rocketmq.logging.InternalLogger; -import org.apache.rocketmq.logging.InternalLoggerFactory; import org.apache.rocketmq.store.config.BrokerRole; import org.apache.rocketmq.store.config.FlushDiskType; import org.apache.rocketmq.store.ha.HAService; @@ -272,21 +270,11 @@ public class CommitLog { long bornTimeStamp = byteBuffer.getLong(); - ByteBuffer byteBuffer1; - if ((sysFlag & MessageSysFlag.BORNHOST_V6_FLAG) == 0) { - byteBuffer1 = byteBuffer.get(bytesContent, 0, 4 + 4); - } else { - byteBuffer1 = byteBuffer.get(bytesContent, 0, 16 + 4); - } + ByteBuffer byteBuffer1 = byteBuffer.get(bytesContent, 0, 8); long storeTimestamp = byteBuffer.getLong(); - ByteBuffer byteBuffer2; - if ((sysFlag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0) { - byteBuffer2 = byteBuffer.get(bytesContent, 0, 4 + 4); - } else { - byteBuffer2 = byteBuffer.get(bytesContent, 0, 16 + 4); - } + ByteBuffer byteBuffer2 = byteBuffer.get(bytesContent, 0, 8); int reconsumeTimes = byteBuffer.getInt(); @@ -351,7 +339,7 @@ public class CommitLog { } } - int readLength = calMsgLength(sysFlag, bodyLen, topicLen, propertiesLength); + int readLength = calMsgLength(bodyLen, topicLen, propertiesLength); if (totalSize != readLength) { doNothingForDeadCode(reconsumeTimes); doNothingForDeadCode(flag); @@ -384,9 +372,7 @@ public class CommitLog { return new DispatchRequest(-1, false /* success */); } - protected static int calMsgLength(int sysFlag, int bodyLength, int topicLength, int propertiesLength) { - int bornhostLength = (sysFlag & MessageSysFlag.BORNHOST_V6_FLAG) == 0 ? 8 : 20; - int storehostAddressLength = (sysFlag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0 ? 8 : 20; + protected static int calMsgLength(int bodyLength, int topicLength, int propertiesLength) { final int msgLen = 4 //TOTALSIZE + 4 //MAGICCODE + 4 //BODYCRC @@ -396,9 +382,9 @@ public class CommitLog { + 8 //PHYSICALOFFSET + 4 //SYSFLAG + 8 //BORNTIMESTAMP - + bornhostLength //BORNHOST + + 8 //BORNHOST + 8 //STORETIMESTAMP - + storehostAddressLength //STOREHOSTADDRESS + + 8 //STOREHOSTADDRESS + 4 //RECONSUMETIMES + 8 //Prepared Transaction Offset + 4 + (bodyLength > 0 ? bodyLength : 0) //BODY @@ -510,10 +496,7 @@ public class CommitLog { return false; } - int sysFlag = byteBuffer.getInt(MessageDecoder.SYSFLAG_POSITION); - int bornhostLength = (sysFlag & MessageSysFlag.BORNHOST_V6_FLAG) == 0 ? 8 : 20; - int msgStoreTimePos = 4 + 4 + 4 + 4 + 4 + 8 + 8 + 4 + 8 + bornhostLength; - long storeTimestamp = byteBuffer.getLong(msgStoreTimePos); + long storeTimestamp = byteBuffer.getLong(MessageDecoder.MESSAGE_STORE_TIMESTAMP_POSTION); if (0 == storeTimestamp) { return false; } @@ -586,18 +569,7 @@ public class CommitLog { } } - InetSocketAddress bornSocketAddress = (InetSocketAddress) msg.getBornHost(); - if (bornSocketAddress.getAddress() instanceof Inet6Address) { - msg.setBornHostV6Flag(); - } - - InetSocketAddress storeSocketAddress = (InetSocketAddress) msg.getStoreHost(); - if (storeSocketAddress.getAddress() instanceof Inet6Address) { - msg.setStoreHostAddressV6Flag(); - } - - long eclipsedTimeInLock = 0; - + long elapsedTimeInLock = 0; MappedFile unlockMappedFile = null; MappedFile mappedFile = this.mappedFileQueue.getLastMappedFile(); @@ -647,14 +619,14 @@ public class CommitLog { return new PutMessageResult(PutMessageStatus.UNKNOWN_ERROR, result); } - eclipsedTimeInLock = this.defaultMessageStore.getSystemClock().now() - beginLockTimestamp; + elapsedTimeInLock = this.defaultMessageStore.getSystemClock().now() - beginLockTimestamp; beginTimeInLock = 0; } finally { putMessageLock.unlock(); } - if (eclipsedTimeInLock > 500) { - log.warn("[NOTIFYME]putMessage in lock cost time(ms)={}, bodyLength={} AppendMessageResult={}", eclipsedTimeInLock, msg.getBody().length, result); + if (elapsedTimeInLock > 500) { + log.warn("[NOTIFYME]putMessage in lock cost time(ms)={}, bodyLength={} AppendMessageResult={}", elapsedTimeInLock, msg.getBody().length, result); } if (null != unlockMappedFile && this.defaultMessageStore.getMessageStoreConfig().isWarmMapedFileEnable()) { @@ -742,17 +714,7 @@ public class CommitLog { return new PutMessageResult(PutMessageStatus.MESSAGE_ILLEGAL, null); } - InetSocketAddress bornSocketAddress = (InetSocketAddress) messageExtBatch.getBornHost(); - if (bornSocketAddress.getAddress() instanceof Inet6Address) { - messageExtBatch.setBornHostV6Flag(); - } - - InetSocketAddress storeSocketAddress = (InetSocketAddress) messageExtBatch.getStoreHost(); - if (storeSocketAddress.getAddress() instanceof Inet6Address) { - messageExtBatch.setStoreHostAddressV6Flag(); - } - - long eclipsedTimeInLock = 0; + long elapsedTimeInLock = 0; MappedFile unlockMappedFile = null; MappedFile mappedFile = this.mappedFileQueue.getLastMappedFile(); @@ -807,14 +769,14 @@ public class CommitLog { return new PutMessageResult(PutMessageStatus.UNKNOWN_ERROR, result); } - eclipsedTimeInLock = this.defaultMessageStore.getSystemClock().now() - beginLockTimestamp; + elapsedTimeInLock = this.defaultMessageStore.getSystemClock().now() - beginLockTimestamp; beginTimeInLock = 0; } finally { putMessageLock.unlock(); } - if (eclipsedTimeInLock > 500) { - log.warn("[NOTIFYME]putMessages in lock cost time(ms)={}, bodyLength={} AppendMessageResult={}", eclipsedTimeInLock, messageExtBatch.getBody().length, result); + if (elapsedTimeInLock > 500) { + log.warn("[NOTIFYME]putMessages in lock cost time(ms)={}, bodyLength={} AppendMessageResult={}", elapsedTimeInLock, messageExtBatch.getBody().length, result); } if (null != unlockMappedFile && this.defaultMessageStore.getMessageStoreConfig().isWarmMapedFileEnable()) { @@ -842,10 +804,7 @@ public class CommitLog { SelectMappedBufferResult result = this.getMessage(offset, size); if (null != result) { try { - int sysFlag = result.getByteBuffer().getInt(MessageDecoder.SYSFLAG_POSITION); - int bornhostLength = (sysFlag & MessageSysFlag.BORNHOST_V6_FLAG) == 0 ? 8 : 20; - int msgStoreTimePos = 4 + 4 + 4 + 4 + 4 + 8 + 8 + 4 + 8 + bornhostLength; - return result.getByteBuffer().getLong(msgStoreTimePos); + return result.getByteBuffer().getLong(MessageDecoder.MESSAGE_STORE_TIMESTAMP_POSTION); } finally { result.release(); } @@ -1211,7 +1170,6 @@ public class CommitLog { // File at the end of the minimum fixed length empty private static final int END_FILE_MIN_BLANK_LENGTH = 4 + 4; private final ByteBuffer msgIdMemory; - private final ByteBuffer msgIdV6Memory; // Store the message content private final ByteBuffer msgStoreItemMemory; // The maximum length of the message @@ -1221,9 +1179,10 @@ public class CommitLog { private final StringBuilder msgIdBuilder = new StringBuilder(); + private final ByteBuffer hostHolder = ByteBuffer.allocate(8); + DefaultAppendMessageCallback(final int size) { - this.msgIdMemory = ByteBuffer.allocate(4 + 4 + 8); - this.msgIdV6Memory = ByteBuffer.allocate(16 + 4 + 8); + this.msgIdMemory = ByteBuffer.allocate(MessageDecoder.MSG_ID_LENGTH); this.msgStoreItemMemory = ByteBuffer.allocate(size + END_FILE_MIN_BLANK_LENGTH); this.maxMessageSize = size; } @@ -1239,20 +1198,8 @@ public class CommitLog { // PHY OFFSET long wroteOffset = fileFromOffset + byteBuffer.position(); - int sysflag = msgInner.getSysFlag(); - - int bornHostLength = (sysflag & MessageSysFlag.BORNHOST_V6_FLAG) == 0 ? 4 + 4 : 16 + 4; - int storeHostLength = (sysflag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0 ? 4 + 4 : 16 + 4; - ByteBuffer bornHostHolder = ByteBuffer.allocate(bornHostLength); - ByteBuffer storeHostHolder = ByteBuffer.allocate(storeHostLength); - - this.resetByteBuffer(storeHostHolder, storeHostLength); - String msgId; - if ((sysflag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0) { - msgId = MessageDecoder.createMessageId(this.msgIdMemory, msgInner.getStoreHostBytes(storeHostHolder), wroteOffset); - } else { - msgId = MessageDecoder.createMessageId(this.msgIdV6Memory, msgInner.getStoreHostBytes(storeHostHolder), wroteOffset); - } + this.resetByteBuffer(hostHolder, 8); + String msgId = MessageDecoder.createMessageId(this.msgIdMemory, msgInner.getStoreHostBytes(hostHolder), wroteOffset); // Record ConsumeQueue information keyBuilder.setLength(0); @@ -1299,7 +1246,7 @@ public class CommitLog { final int bodyLength = msgInner.getBody() == null ? 0 : msgInner.getBody().length; - final int msgLen = calMsgLength(msgInner.getSysFlag(), bodyLength, topicLength, propertiesLength); + final int msgLen = calMsgLength(bodyLength, topicLength, propertiesLength); // Exceeds the maximum message if (msgLen > this.maxMessageSize) { @@ -1344,13 +1291,14 @@ public class CommitLog { // 9 BORNTIMESTAMP this.msgStoreItemMemory.putLong(msgInner.getBornTimestamp()); // 10 BORNHOST - this.resetByteBuffer(bornHostHolder, bornHostLength); - this.msgStoreItemMemory.put(msgInner.getBornHostBytes(bornHostHolder)); + this.resetByteBuffer(hostHolder, 8); + this.msgStoreItemMemory.put(msgInner.getBornHostBytes(hostHolder)); // 11 STORETIMESTAMP this.msgStoreItemMemory.putLong(msgInner.getStoreTimestamp()); // 12 STOREHOSTADDRESS - this.resetByteBuffer(storeHostHolder, storeHostLength); - this.msgStoreItemMemory.put(msgInner.getStoreHostBytes(storeHostHolder)); + this.resetByteBuffer(hostHolder, 8); + this.msgStoreItemMemory.put(msgInner.getStoreHostBytes(hostHolder)); + //this.msgBatchMemory.put(msgInner.getStoreHostBytes()); // 13 RECONSUMETIMES this.msgStoreItemMemory.putInt(msgInner.getReconsumeTimes()); // 14 Prepared Transaction Offset @@ -1411,13 +1359,8 @@ public class CommitLog { msgIdBuilder.setLength(0); final long beginTimeMills = CommitLog.this.defaultMessageStore.now(); ByteBuffer messagesByteBuff = messageExtBatch.getEncodedBuff(); - - int sysFlag = messageExtBatch.getSysFlag(); - int storeHostLength = (sysFlag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0 ? 4 + 4 : 16 + 4; - ByteBuffer storeHostHolder = ByteBuffer.allocate(storeHostLength); - - this.resetByteBuffer(storeHostHolder, storeHostLength); - ByteBuffer storeHostBytes = messageExtBatch.getStoreHostBytes(storeHostHolder); + this.resetByteBuffer(hostHolder, 8); + ByteBuffer storeHostBytes = messageExtBatch.getStoreHostBytes(hostHolder); messagesByteBuff.mark(); while (messagesByteBuff.hasRemaining()) { // 1 TOTALSIZE @@ -1453,13 +1396,7 @@ public class CommitLog { messagesByteBuff.putLong(wroteOffset + totalMsgLen - msgLen); storeHostBytes.rewind(); - String msgId; - if ((sysFlag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0) { - msgId = MessageDecoder.createMessageId(this.msgIdMemory, storeHostBytes, wroteOffset + totalMsgLen - msgLen); - } else { - msgId = MessageDecoder.createMessageId(this.msgIdV6Memory, storeHostBytes, wroteOffset + totalMsgLen - msgLen); - } - + String msgId = MessageDecoder.createMessageId(this.msgIdMemory, storeHostBytes, wroteOffset + totalMsgLen - msgLen); if (msgIdBuilder.length() > 0) { msgIdBuilder.append(',').append(msgId); } else { @@ -1495,6 +1432,8 @@ public class CommitLog { // The maximum length of the message private final int maxMessageSize; + private final ByteBuffer hostHolder = ByteBuffer.allocate(8); + MessageExtBatchEncoder(final int size) { this.msgBatchMemory = ByteBuffer.allocateDirect(size); this.maxMessageSize = size; @@ -1504,13 +1443,6 @@ public class CommitLog { msgBatchMemory.clear(); //not thread-safe int totalMsgLen = 0; ByteBuffer messagesByteBuff = messageExtBatch.wrap(); - - int sysFlag = messageExtBatch.getSysFlag(); - int bornHostLength = (sysFlag & MessageSysFlag.BORNHOST_V6_FLAG) == 0 ? 4 + 4 : 16 + 4; - int storeHostLength = (sysFlag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0 ? 4 + 4 : 16 + 4; - ByteBuffer bornHostHolder = ByteBuffer.allocate(bornHostLength); - ByteBuffer storeHostHolder = ByteBuffer.allocate(storeHostLength); - while (messagesByteBuff.hasRemaining()) { // 1 TOTALSIZE messagesByteBuff.getInt(); @@ -1534,7 +1466,7 @@ public class CommitLog { final int topicLength = topicData.length; - final int msgLen = calMsgLength(messageExtBatch.getSysFlag(), bodyLen, topicLength, propertiesLen); + final int msgLen = calMsgLength(bodyLen, topicLength, propertiesLen); // Exceeds the maximum message if (msgLen > this.maxMessageSize) { @@ -1568,13 +1500,13 @@ public class CommitLog { // 9 BORNTIMESTAMP this.msgBatchMemory.putLong(messageExtBatch.getBornTimestamp()); // 10 BORNHOST - this.resetByteBuffer(bornHostHolder, bornHostLength); - this.msgBatchMemory.put(messageExtBatch.getBornHostBytes(bornHostHolder)); + this.resetByteBuffer(hostHolder, 8); + this.msgBatchMemory.put(messageExtBatch.getBornHostBytes(hostHolder)); // 11 STORETIMESTAMP this.msgBatchMemory.putLong(messageExtBatch.getStoreTimestamp()); // 12 STOREHOSTADDRESS - this.resetByteBuffer(storeHostHolder, storeHostLength); - this.msgBatchMemory.put(messageExtBatch.getStoreHostBytes(storeHostHolder)); + this.resetByteBuffer(hostHolder, 8); + this.msgBatchMemory.put(messageExtBatch.getStoreHostBytes(hostHolder)); // 13 RECONSUMETIMES this.msgBatchMemory.putInt(messageExtBatch.getReconsumeTimes()); // 14 Prepared Transaction Offset, batch does not support transaction diff --git a/store/src/main/java/org/apache/rocketmq/store/DefaultMessageStore.java b/store/src/main/java/org/apache/rocketmq/store/DefaultMessageStore.java index d5ba5692a928e4b65b41ec94be0356b0c81dd1c9..971b1e75b38da514fd7e8c5f12e5ff5e3dc9c2ab 100644 --- a/store/src/main/java/org/apache/rocketmq/store/DefaultMessageStore.java +++ b/store/src/main/java/org/apache/rocketmq/store/DefaultMessageStore.java @@ -19,8 +19,6 @@ package org.apache.rocketmq.store; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; -import java.net.Inet6Address; -import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.channels.FileLock; @@ -287,6 +285,8 @@ public class DefaultMessageStore implements MessageStore { this.shutdown = false; } + + public void shutdown() { if (!this.shutdown) { this.shutdown = true; @@ -469,7 +469,7 @@ public class DefaultMessageStore implements MessageStore { long diff = this.systemClock.now() - begin; return diff < 10000000 - && diff > this.messageStoreConfig.getOsPageCacheBusyTimeOutMills(); + && diff > this.messageStoreConfig.getOsPageCacheBusyTimeOutMills(); } @Override @@ -1042,9 +1042,7 @@ public class DefaultMessageStore implements MessageStore { int i = 0; for (; i < bufferConsumeQueue.getSize(); i += ConsumeQueue.CQ_STORE_UNIT_SIZE) { long offsetPy = bufferConsumeQueue.getByteBuffer().getLong(); - InetSocketAddress inetSocketAddress = (InetSocketAddress) storeHost; - int msgIdLength = (inetSocketAddress.getAddress() instanceof Inet6Address) ? 16 + 4 + 8 : 4 + 4 + 8; - final ByteBuffer msgIdMemory = ByteBuffer.allocate(msgIdLength); + final ByteBuffer msgIdMemory = ByteBuffer.allocate(MessageDecoder.MSG_ID_LENGTH); String msgId = MessageDecoder.createMessageId(msgIdMemory, MessageExt.socketAddress2ByteBuffer(storeHost), offsetPy); messageIds.put(msgId, nextOffset++); diff --git a/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java b/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java index 7891f71067a26e4118efde7c79a0b7de7279b8be..2543e96d05790a89ac9bdd87461239c66aeb9809 100644 --- a/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java +++ b/store/src/main/java/org/apache/rocketmq/store/config/MessageStoreConfig.java @@ -80,7 +80,7 @@ public class MessageStoreConfig { private int fileReservedTime = 72; // Flow control for ConsumeQueue private int putMsgIndexHightWater = 600000; - // The maximum size of message,default is 4M + // The maximum size of a single log file,default is 512K private int maxMessageSize = 1024 * 1024 * 4; // Whether check the CRC32 of the records consumed. // This ensures no on-the-wire or on-disk corruption to the messages occurred. diff --git a/store/src/main/java/org/apache/rocketmq/store/dledger/DLedgerCommitLog.java b/store/src/main/java/org/apache/rocketmq/store/dledger/DLedgerCommitLog.java index 13da48bfe9f08408c57212ea506b674939bbb3ac..17be11b1c3a847003e8d5bfb8b57a28c467880e5 100644 --- a/store/src/main/java/org/apache/rocketmq/store/dledger/DLedgerCommitLog.java +++ b/store/src/main/java/org/apache/rocketmq/store/dledger/DLedgerCommitLog.java @@ -68,11 +68,12 @@ public class DLedgerCommitLog extends CommitLog { //This offset separate the old commitlog from dledger commitlog private long dividedCommitlogOffset = -1; + private boolean isInrecoveringOldCommitlog = false; public DLedgerCommitLog(final DefaultMessageStore defaultMessageStore) { super(defaultMessageStore); - dLedgerConfig = new DLedgerConfig(); + dLedgerConfig = new DLedgerConfig(); dLedgerConfig.setEnableDiskForceClean(defaultMessageStore.getMessageStoreConfig().isCleanFileForciblyEnable()); dLedgerConfig.setStoreType(DLedgerConfig.FILE); dLedgerConfig.setSelfId(defaultMessageStore.getMessageStoreConfig().getdLegerSelfId()); @@ -98,7 +99,12 @@ public class DLedgerCommitLog extends CommitLog { @Override public boolean load() { - return super.load(); + boolean result = super.load(); + if (!result) { + return false; + } + + return true; } private void refreshConfig() { @@ -157,6 +163,8 @@ public class DLedgerCommitLog extends CommitLog { log.warn("Should not set confirm offset {} for dleger commitlog", phyOffset); } + + @Override public long remainHowManyDataToCommit() { return dLedgerFileList.remainHowManyDataToCommit(); @@ -177,7 +185,7 @@ public class DLedgerCommitLog extends CommitLog { if (mappedFileQueue.getMappedFiles().isEmpty()) { refreshConfig(); //To prevent too much log in defaultMessageStore - return Integer.MAX_VALUE; + return Integer.MAX_VALUE; } else { disableDeleteDledger(); } @@ -198,6 +206,7 @@ public class DLedgerCommitLog extends CommitLog { return 1; } + public SelectMappedBufferResult convertSbr(SelectMmapBufferResult sbr) { if (sbr == null) { return null; @@ -228,6 +237,7 @@ public class DLedgerCommitLog extends CommitLog { return this.getData(offset, offset == 0); } + @Override public SelectMappedBufferResult getData(final long offset, final boolean returnFirstOnNotFound) { if (offset < dividedCommitlogOffset) { @@ -241,7 +251,7 @@ public class DLedgerCommitLog extends CommitLog { if (mappedFile != null) { int pos = (int) (offset % mappedFileSize); SelectMmapBufferResult sbr = mappedFile.selectMappedBuffer(pos); - return convertSbr(truncate(sbr)); + return convertSbr(truncate(sbr)); } return null; @@ -273,7 +283,7 @@ public class DLedgerCommitLog extends CommitLog { if (mappedFile == null) { return; } - ByteBuffer byteBuffer = mappedFile.sliceByteBuffer(); + ByteBuffer byteBuffer = mappedFile.sliceByteBuffer(); byteBuffer.position(mappedFile.getWrotePosition()); boolean needWriteMagicCode = true; // 1 TOTAL SIZE @@ -306,7 +316,7 @@ public class DLedgerCommitLog extends CommitLog { } @Override - public void recoverAbnormally(long maxPhyOffsetOfConsumeQueue) { + public void recoverAbnormally(long maxPhyOffsetOfConsumeQueue) { recover(maxPhyOffsetOfConsumeQueue); } @@ -324,9 +334,9 @@ public class DLedgerCommitLog extends CommitLog { try { int bodyOffset = DLedgerEntry.BODY_OFFSET; int pos = byteBuffer.position(); - int magic = byteBuffer.getInt(); + int magic = byteBuffer.getInt(); //In dledger, this field is size, it must be gt 0, so it could prevent collision - int magicOld = byteBuffer.getInt(); + int magicOld = byteBuffer.getInt(); if (magicOld == CommitLog.BLANK_MAGIC_CODE || magicOld == CommitLog.MESSAGE_MAGIC_CODE) { byteBuffer.position(pos); return super.checkMessageAndReturnSize(byteBuffer, checkCRC, readBody); @@ -404,10 +414,10 @@ public class DLedgerCommitLog extends CommitLog { long elapsedTimeInLock; long queueOffset; try { - beginTimeInDledgerLock = this.defaultMessageStore.getSystemClock().now(); + beginTimeInDledgerLock = this.defaultMessageStore.getSystemClock().now(); encodeResult = this.messageSerializer.serialize(msg); queueOffset = topicQueueTable.get(encodeResult.queueOffsetKey); - if (encodeResult.status != AppendMessageStatus.PUT_OK) { + if (encodeResult.status != AppendMessageStatus.PUT_OK) { return new PutMessageResult(PutMessageStatus.MESSAGE_ILLEGAL, new AppendMessageResult(encodeResult.status)); } AppendEntryRequest request = new AppendEntryRequest(); @@ -418,11 +428,8 @@ public class DLedgerCommitLog extends CommitLog { if (dledgerFuture.getPos() == -1) { return new PutMessageResult(PutMessageStatus.OS_PAGECACHE_BUSY, new AppendMessageResult(AppendMessageStatus.UNKNOWN_ERROR)); } - long wroteOffset = dledgerFuture.getPos() + DLedgerEntry.BODY_OFFSET; - - int msgIdLength = (msg.getSysFlag() & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0 ? 4 + 4 + 8 : 16 + 4 + 8; - ByteBuffer buffer = ByteBuffer.allocate(msgIdLength); - + long wroteOffset = dledgerFuture.getPos() + DLedgerEntry.BODY_OFFSET; + ByteBuffer buffer = ByteBuffer.allocate(MessageDecoder.MSG_ID_LENGTH); String msgId = MessageDecoder.createMessageId(buffer, msg.getStoreHostBytes(), wroteOffset); elapsedTimeInLock = this.defaultMessageStore.getSystemClock().now() - beginTimeInDledgerLock; appendResult = new AppendMessageResult(AppendMessageStatus.PUT_OK, wroteOffset, encodeResult.data.length, msgId, System.currentTimeMillis(), queueOffset, elapsedTimeInLock); @@ -489,6 +496,8 @@ public class DLedgerCommitLog extends CommitLog { return new PutMessageResult(PutMessageStatus.MESSAGE_ILLEGAL, null); } + + @Override public SelectMappedBufferResult getMessage(final long offset, final int size) { if (offset < dividedCommitlogOffset) { @@ -498,7 +507,7 @@ public class DLedgerCommitLog extends CommitLog { MmapFile mappedFile = this.dLedgerFileList.findMappedFileByOffset(offset, offset == 0); if (mappedFile != null) { int pos = (int) (offset % mappedFileSize); - return convertSbr(mappedFile.selectMappedBuffer(pos, size)); + return convertSbr(mappedFile.selectMappedBuffer(pos, size)); } return null; } @@ -555,7 +564,6 @@ public class DLedgerCommitLog extends CommitLog { private String queueOffsetKey; private byte[] data; private AppendMessageStatus status; - public EncodeResult(AppendMessageStatus status, byte[] data, String queueOffsetKey) { this.data = data; this.status = status; @@ -567,7 +575,6 @@ public class DLedgerCommitLog extends CommitLog { // File at the end of the minimum fixed length empty private static final int END_FILE_MIN_BLANK_LENGTH = 4 + 4; private final ByteBuffer msgIdMemory; - private final ByteBuffer msgIdV6Memory; // Store the message content private final ByteBuffer msgStoreItemMemory; // The maximum length of the message @@ -577,11 +584,10 @@ public class DLedgerCommitLog extends CommitLog { private final StringBuilder msgIdBuilder = new StringBuilder(); -// private final ByteBuffer hostHolder = ByteBuffer.allocate(8); + private final ByteBuffer hostHolder = ByteBuffer.allocate(8); MessageSerializer(final int size) { - this.msgIdMemory = ByteBuffer.allocate(4 + 4 + 8); - this.msgIdV6Memory = ByteBuffer.allocate(16 + 4 + 8); + this.msgIdMemory = ByteBuffer.allocate(MessageDecoder.MSG_ID_LENGTH); this.msgStoreItemMemory = ByteBuffer.allocate(size + END_FILE_MIN_BLANK_LENGTH); this.maxMessageSize = size; } @@ -596,13 +602,7 @@ public class DLedgerCommitLog extends CommitLog { // PHY OFFSET long wroteOffset = 0; - int sysflag = msgInner.getSysFlag(); - - int bornHostLength = (sysflag & MessageSysFlag.BORNHOST_V6_FLAG) == 0 ? 4 + 4 : 16 + 4; - int storeHostLength = (sysflag & MessageSysFlag.STOREHOSTADDRESS_V6_FLAG) == 0 ? 4 + 4 : 16 + 4; - ByteBuffer bornHostHolder = ByteBuffer.allocate(bornHostLength); - ByteBuffer storeHostHolder = ByteBuffer.allocate(storeHostLength); - + this.resetByteBuffer(hostHolder, 8); // Record ConsumeQueue information keyBuilder.setLength(0); keyBuilder.append(msgInner.getTopic()); @@ -649,7 +649,7 @@ public class DLedgerCommitLog extends CommitLog { final int bodyLength = msgInner.getBody() == null ? 0 : msgInner.getBody().length; - final int msgLen = calMsgLength(msgInner.getSysFlag(), bodyLength, topicLength, propertiesLength); + final int msgLen = calMsgLength(bodyLength, topicLength, propertiesLength); // Exceeds the maximum message if (msgLen > this.maxMessageSize) { @@ -678,13 +678,13 @@ public class DLedgerCommitLog extends CommitLog { // 9 BORNTIMESTAMP this.msgStoreItemMemory.putLong(msgInner.getBornTimestamp()); // 10 BORNHOST - this.resetByteBuffer(bornHostHolder, bornHostLength); - this.msgStoreItemMemory.put(msgInner.getBornHostBytes(bornHostHolder)); + this.resetByteBuffer(hostHolder, 8); + this.msgStoreItemMemory.put(msgInner.getBornHostBytes(hostHolder)); // 11 STORETIMESTAMP this.msgStoreItemMemory.putLong(msgInner.getStoreTimestamp()); // 12 STOREHOSTADDRESS - this.resetByteBuffer(storeHostHolder, storeHostLength); - this.msgStoreItemMemory.put(msgInner.getStoreHostBytes(storeHostHolder)); + this.resetByteBuffer(hostHolder, 8); + this.msgStoreItemMemory.put(msgInner.getStoreHostBytes(hostHolder)); //this.msgBatchMemory.put(msgInner.getStoreHostBytes()); // 13 RECONSUMETIMES this.msgStoreItemMemory.putInt(msgInner.getReconsumeTimes()); @@ -719,7 +719,6 @@ public class DLedgerCommitLog extends CommitLog { public static class DLedgerSelectMappedBufferResult extends SelectMappedBufferResult { private SelectMmapBufferResult sbr; - public DLedgerSelectMappedBufferResult(SelectMmapBufferResult sbr) { super(sbr.getStartOffset(), sbr.getByteBuffer(), sbr.getSize(), null); this.sbr = sbr; diff --git a/store/src/main/java/org/apache/rocketmq/store/ha/HAService.java b/store/src/main/java/org/apache/rocketmq/store/ha/HAService.java index 84fb4217eaaff387c7e759b54d28c3abeda1a2d0..bbadd1bcfe8ef991f017eeb23145b204ce4567e4 100644 --- a/store/src/main/java/org/apache/rocketmq/store/ha/HAService.java +++ b/store/src/main/java/org/apache/rocketmq/store/ha/HAService.java @@ -374,7 +374,6 @@ public class HAService { } } - lastWriteTimestamp = HAService.this.defaultMessageStore.getSystemClock().now(); return !this.reportOffset.hasRemaining(); } @@ -407,6 +406,7 @@ public class HAService { try { int readSize = this.socketChannel.read(this.byteBufferRead); if (readSize > 0) { + lastWriteTimestamp = HAService.this.defaultMessageStore.getSystemClock().now(); readSizeZeroTimes = 0; boolean result = this.dispatchReadRequest(); if (!result) { diff --git a/store/src/test/java/org/apache/rocketmq/store/AppendCallbackTest.java b/store/src/test/java/org/apache/rocketmq/store/AppendCallbackTest.java index f46b3befed63fc25f9c0901b60f97c54a68616f8..fbb2a746c4f96686b273adb4e0847f927a6cc1ff 100644 --- a/store/src/test/java/org/apache/rocketmq/store/AppendCallbackTest.java +++ b/store/src/test/java/org/apache/rocketmq/store/AppendCallbackTest.java @@ -97,43 +97,6 @@ public class AppendCallbackTest { assertTrue(result.getMsgId().length() > 0); //should have already constructed some message ids } - @Test - public void testAppendIPv6HostMessageBatchEndOfFile() throws Exception { - List messages = new ArrayList<>(); - String topic = "test-topic"; - int queue = 0; - for (int i = 0; i < 10; i++) { - Message msg = new Message(); - msg.setBody("body".getBytes()); - msg.setTopic(topic); - msg.setTags("abc"); - messages.add(msg); - } - MessageExtBatch messageExtBatch = new MessageExtBatch(); - messageExtBatch.setTopic(topic); - messageExtBatch.setQueueId(queue); - messageExtBatch.setBornTimestamp(System.currentTimeMillis()); - messageExtBatch.setMsgId("24084004018081003FAA1DDE2B3F898A00002A9F0000000000000CA0"); - messageExtBatch.setSysFlag(0); - messageExtBatch.setBornHostV6Flag(); - messageExtBatch.setStoreHostAddressV6Flag(); - messageExtBatch.setBornHost(new InetSocketAddress("1050:0000:0000:0000:0005:0600:300c:326b", 123)); - messageExtBatch.setStoreHost(new InetSocketAddress("::1", 124)); - messageExtBatch.setBody(MessageDecoder.encodeMessages(messages)); - - messageExtBatch.setEncodedBuff(batchEncoder.encode(messageExtBatch)); - ByteBuffer buff = ByteBuffer.allocate(1024 * 10); - //encounter end of file when append half of the data - AppendMessageResult result = callback.doAppend(0, buff, 1000, messageExtBatch); - assertEquals(AppendMessageStatus.END_OF_FILE, result.getStatus()); - assertEquals(0, result.getWroteOffset()); - assertEquals(0, result.getLogicsOffset()); - assertEquals(1000, result.getWroteBytes()); - assertEquals(8, buff.position()); //write blank size and magic value - - assertTrue(result.getMsgId().length() > 0); //should have already constructed some message ids - } - @Test public void testAppendMessageBatchSucc() throws Exception { List messages = new ArrayList<>(); @@ -190,64 +153,4 @@ public class AppendCallbackTest { } - @Test - public void testAppendIPv6HostMessageBatchSucc() throws Exception { - List messages = new ArrayList<>(); - String topic = "test-topic"; - int queue = 0; - for (int i = 0; i < 10; i++) { - Message msg = new Message(); - msg.setBody("body".getBytes()); - msg.setTopic(topic); - msg.setTags("abc"); - messages.add(msg); - } - MessageExtBatch messageExtBatch = new MessageExtBatch(); - messageExtBatch.setTopic(topic); - messageExtBatch.setQueueId(queue); - messageExtBatch.setBornTimestamp(System.currentTimeMillis()); - messageExtBatch.setMsgId("24084004018081003FAA1DDE2B3F898A00002A9F0000000000000CA0"); - messageExtBatch.setSysFlag(0); - messageExtBatch.setBornHostV6Flag(); - messageExtBatch.setStoreHostAddressV6Flag(); - messageExtBatch.setBornHost(new InetSocketAddress("1050:0000:0000:0000:0005:0600:300c:326b", 123)); - messageExtBatch.setStoreHost(new InetSocketAddress("::1", 124)); - messageExtBatch.setBody(MessageDecoder.encodeMessages(messages)); - - messageExtBatch.setEncodedBuff(batchEncoder.encode(messageExtBatch)); - ByteBuffer buff = ByteBuffer.allocate(1024 * 10); - AppendMessageResult allresult = callback.doAppend(0, buff, 1024 * 10, messageExtBatch); - - assertEquals(AppendMessageStatus.PUT_OK, allresult.getStatus()); - assertEquals(0, allresult.getWroteOffset()); - assertEquals(0, allresult.getLogicsOffset()); - assertEquals(buff.position(), allresult.getWroteBytes()); - - assertEquals(messages.size(), allresult.getMsgNum()); - - Set msgIds = new HashSet<>(); - for (String msgId : allresult.getMsgId().split(",")) { - assertEquals(56, msgId.length()); - msgIds.add(msgId); - } - assertEquals(messages.size(), msgIds.size()); - - List decodeMsgs = MessageDecoder.decodes((ByteBuffer) buff.flip()); - assertEquals(decodeMsgs.size(), decodeMsgs.size()); - long queueOffset = decodeMsgs.get(0).getQueueOffset(); - long storeTimeStamp = decodeMsgs.get(0).getStoreTimestamp(); - for (int i = 0; i < messages.size(); i++) { - assertEquals(messages.get(i).getTopic(), decodeMsgs.get(i).getTopic()); - assertEquals(new String(messages.get(i).getBody()), new String(decodeMsgs.get(i).getBody())); - assertEquals(messages.get(i).getTags(), decodeMsgs.get(i).getTags()); - - assertEquals(messageExtBatch.getBornHostNameString(), decodeMsgs.get(i).getBornHostNameString()); - - assertEquals(messageExtBatch.getBornTimestamp(), decodeMsgs.get(i).getBornTimestamp()); - assertEquals(storeTimeStamp, decodeMsgs.get(i).getStoreTimestamp()); - assertEquals(queueOffset++, decodeMsgs.get(i).getQueueOffset()); - } - - } - } diff --git a/store/src/test/java/org/apache/rocketmq/store/BatchPutMessageTest.java b/store/src/test/java/org/apache/rocketmq/store/BatchPutMessageTest.java index 8618dbb0e56ed2804303d1b08bbe94cc5e54f500..0c8e5bb1472caf268cea6522de7ebf332a5db42c 100644 --- a/store/src/test/java/org/apache/rocketmq/store/BatchPutMessageTest.java +++ b/store/src/test/java/org/apache/rocketmq/store/BatchPutMessageTest.java @@ -23,7 +23,6 @@ import org.apache.rocketmq.common.message.Message; import org.apache.rocketmq.common.message.MessageDecoder; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.common.message.MessageExtBatch; -import org.apache.rocketmq.common.sysflag.MessageSysFlag; import org.apache.rocketmq.store.config.FlushDiskType; import org.apache.rocketmq.store.config.MessageStoreConfig; import org.apache.rocketmq.store.stats.BrokerStatsManager; @@ -126,58 +125,6 @@ public class BatchPutMessageTest { } - @Test - public void testPutIPv6HostMessages() throws Exception { - List messages = new ArrayList<>(); - String topic = "batch-write-topic"; - int queue = 0; - int[] msgLengthArr = new int[11]; - msgLengthArr[0] = 0; - int j = 1; - for (int i = 0; i < 10; i++) { - Message msg = new Message(); - msg.setBody(("body" + i).getBytes()); - msg.setTopic(topic); - msg.setTags("TAG1"); - msg.setKeys(String.valueOf(System.currentTimeMillis())); - messages.add(msg); - String properties = messageProperties2String(msg.getProperties()); - byte[] propertiesBytes = properties.getBytes(CHARSET_UTF8); - short propertiesLength = (short) propertiesBytes.length; - final byte[] topicData = msg.getTopic().getBytes(MessageDecoder.CHARSET_UTF8); - final int topicLength = topicData.length; - msgLengthArr[j] = calIPv6HostMsgLength(msg.getBody().length, topicLength, propertiesLength) + msgLengthArr[j - 1]; - j++; - } - byte[] batchMessageBody = MessageDecoder.encodeMessages(messages); - MessageExtBatch messageExtBatch = new MessageExtBatch(); - messageExtBatch.setTopic(topic); - messageExtBatch.setQueueId(queue); - messageExtBatch.setBody(batchMessageBody); - messageExtBatch.setMsgId("24084004018081003FAA1DDE2B3F898A00002A9F0000000000000CA0"); - messageExtBatch.setBornTimestamp(System.currentTimeMillis()); - messageExtBatch.setSysFlag(0); - messageExtBatch.setBornHostV6Flag(); - messageExtBatch.setStoreHostAddressV6Flag(); - messageExtBatch.setStoreHost(new InetSocketAddress("1050:0000:0000:0000:0005:0600:300c:326b", 125)); - messageExtBatch.setBornHost(new InetSocketAddress("::1", 126)); - - PutMessageResult putMessageResult = messageStore.putMessages(messageExtBatch); - assertThat(putMessageResult.isOk()).isTrue(); - - Thread.sleep(3 * 1000); - - for (long i = 0; i < 10; i++) { - MessageExt messageExt = messageStore.lookMessageByOffset(msgLengthArr[(int) i]); - assertThat(messageExt).isNotNull(); - GetMessageResult result = messageStore.getMessage("batch_write_group", topic, queue, i, 1024 * 1024, null); - assertThat(result).isNotNull(); - assertThat(result.getStatus()).isEqualTo(GetMessageStatus.FOUND); - result.release(); - } - - } - private int calMsgLength(int bodyLength, int topicLength, int propertiesLength) { final int msgLen = 4 //TOTALSIZE + 4 //MAGICCODE @@ -200,28 +147,6 @@ public class BatchPutMessageTest { return msgLen; } - private int calIPv6HostMsgLength(int bodyLength, int topicLength, int propertiesLength) { - final int msgLen = 4 //TOTALSIZE - + 4 //MAGICCODE - + 4 //BODYCRC - + 4 //QUEUEID - + 4 //FLAG - + 8 //QUEUEOFFSET - + 8 //PHYSICALOFFSET - + 4 //SYSFLAG - + 8 //BORNTIMESTAMP - + 20 //BORNHOST - + 8 //STORETIMESTAMP - + 20 //STOREHOSTADDRESS - + 4 //RECONSUMETIMES - + 8 //Prepared Transaction Offset - + 4 + (bodyLength > 0 ? bodyLength : 0) //BODY - + 1 + topicLength //TOPIC - + 2 + (propertiesLength > 0 ? propertiesLength : 0) //propertiesLength - + 0; - return msgLen; - } - public String messageProperties2String(Map properties) { StringBuilder sb = new StringBuilder(); if (properties != null) { diff --git a/store/src/test/java/org/apache/rocketmq/store/ConsumeQueueTest.java b/store/src/test/java/org/apache/rocketmq/store/ConsumeQueueTest.java index 7c57813da7e8bdc5753886a461856db383b30e06..c9730306b5d6793811191697062b9efc3f8894a6 100644 --- a/store/src/test/java/org/apache/rocketmq/store/ConsumeQueueTest.java +++ b/store/src/test/java/org/apache/rocketmq/store/ConsumeQueueTest.java @@ -83,29 +83,6 @@ public class ConsumeQueueTest { return msg; } - public MessageExtBrokerInner buildIPv6HostMessage() { - MessageExtBrokerInner msg = new MessageExtBrokerInner(); - msg.setTopic(topic); - msg.setTags("TAG1"); - msg.setKeys("Hello"); - msg.setBody(msgBody); - msg.setMsgId("24084004018081003FAA1DDE2B3F898A00002A9F0000000000000CA0"); - msg.setKeys(String.valueOf(System.currentTimeMillis())); - msg.setQueueId(queueId); - msg.setSysFlag(0); - msg.setBornHostV6Flag(); - msg.setStoreHostAddressV6Flag(); - msg.setBornTimestamp(System.currentTimeMillis()); - msg.setBornHost(new InetSocketAddress("1050:0000:0000:0000:0005:0600:300c:326b", 123)); - msg.setStoreHost(new InetSocketAddress("::1", 124)); - for (int i = 0; i < 1; i++) { - msg.putUserProperty(String.valueOf(i), "imagoodperson" + i); - } - msg.setPropertiesString(MessageDecoder.messageProperties2String(msg.getProperties())); - - return msg; - } - public MessageStoreConfig buildStoreConfig(int commitLogFileSize, int cqFileSize, boolean enableCqExt, int cqExtFileSize) { MessageStoreConfig messageStoreConfig = new MessageStoreConfig(); @@ -150,11 +127,7 @@ public class ConsumeQueueTest { long totalMsgs = 200; for (long i = 0; i < totalMsgs; i++) { - if (i < totalMsgs / 2) { - master.putMessage(buildMessage()); - } else { - master.putMessage(buildIPv6HostMessage()); - } + master.putMessage(buildMessage()); } } diff --git a/store/src/test/java/org/apache/rocketmq/store/DefaultMessageStoreTest.java b/store/src/test/java/org/apache/rocketmq/store/DefaultMessageStoreTest.java index fd13e71a427d07db60400392a8718bcc64de0298..785977468e05138198b8da07ee28d10c17c404ef 100644 --- a/store/src/test/java/org/apache/rocketmq/store/DefaultMessageStoreTest.java +++ b/store/src/test/java/org/apache/rocketmq/store/DefaultMessageStoreTest.java @@ -24,7 +24,6 @@ import java.lang.reflect.Method; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; -import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; @@ -117,19 +116,13 @@ public class DefaultMessageStoreTest { @Test public void testWriteAndRead() { - long ipv4HostMsgs = 10; - long ipv6HostMsgs = 10; - long totalMsgs = ipv4HostMsgs + ipv6HostMsgs; + long totalMsgs = 10; QUEUE_TOTAL = 1; MessageBody = StoreMessage.getBytes(); - for (long i = 0; i < ipv4HostMsgs; i++) { + for (long i = 0; i < totalMsgs; i++) { messageStore.putMessage(buildMessage()); } - for (long i = 0; i < ipv6HostMsgs; i++) { - messageStore.putMessage(buildIPv6HostMessage()); - } - StoreTestUtil.waitCommitLogReput((DefaultMessageStore) messageStore); for (long i = 0; i < totalMsgs; i++) { @@ -141,7 +134,7 @@ public class DefaultMessageStoreTest { } @Test - public void testLookMessageByOffset_OffsetIsFirst() { + public void should_look_message_successfully_when_offset_is_first() { final int totalCount = 10; int queueId = new Random().nextInt(10); String topic = "FooBar"; @@ -157,7 +150,7 @@ public class DefaultMessageStoreTest { } @Test - public void testLookMessageByOffset_OffsetIsLast() { + public void should_look_message_successfully_when_offset_is_last() { final int totalCount = 10; int queueId = new Random().nextInt(10); String topic = "FooBar"; @@ -171,7 +164,7 @@ public class DefaultMessageStoreTest { } @Test - public void testLookMessageByOffset_OffsetIsOutOfBound() { + public void should_look_message_failed_and_return_null_when_offset_is_out_of_bound() { final int totalCount = 10; int queueId = new Random().nextInt(10); String topic = "FooBar"; @@ -184,7 +177,7 @@ public class DefaultMessageStoreTest { } @Test - public void testGetOffsetInQueueByTime() { + public void should_get_consume_queue_offset_successfully_when_incomming_by_timestamp() throws InterruptedException { final int totalCount = 10; int queueId = 0; String topic = "FooBar"; @@ -203,7 +196,7 @@ public class DefaultMessageStoreTest { } @Test - public void testGetOffsetInQueueByTime_TimestampIsSkewing() { + public void should_get_consume_queue_offset_successfully_when_timestamp_is_skewing() throws InterruptedException { final int totalCount = 10; int queueId = 0; String topic = "FooBar"; @@ -228,7 +221,7 @@ public class DefaultMessageStoreTest { } @Test - public void testGetOffsetInQueueByTime_TimestampSkewingIsLarge() { + public void should_get_min_of_max_consume_queue_offset_when_timestamp_s_skewing_is_large() throws InterruptedException { final int totalCount = 10; int queueId = 0; String topic = "FooBar"; @@ -254,7 +247,7 @@ public class DefaultMessageStoreTest { } @Test - public void testGetOffsetInQueueByTime_ConsumeQueueNotFound1() { + public void should_return_zero_when_consume_queue_not_found() throws InterruptedException { final int totalCount = 10; int queueId = 0; int wrongQueueId = 1; @@ -270,7 +263,7 @@ public class DefaultMessageStoreTest { } @Test - public void testGetOffsetInQueueByTime_ConsumeQueueNotFound2() { + public void should_return_negative_one_when_invoke_getMessageStoreTimeStamp_if_consume_queue_not_found() throws InterruptedException { final int totalCount = 10; int queueId = 0; int wrongQueueId = 1; @@ -285,7 +278,7 @@ public class DefaultMessageStoreTest { } @Test - public void testGetOffsetInQueueByTime_ConsumeQueueOffsetNotExist() { + public void should_return_negative_one_when_invoke_getMessageStoreTimeStamp_if_consumeQueueOffset_not_exist() throws InterruptedException { final int totalCount = 10; int queueId = 0; int wrongQueueId = 1; @@ -300,8 +293,9 @@ public class DefaultMessageStoreTest { assertThat(messageStoreTimeStamp).isEqualTo(-1); } + @Test - public void testGetMessageStoreTimeStamp() { + public void should_get_message_store_timestamp_successfully_when_incomming_by_topic_queueId_and_consumeQueueOffset() throws InterruptedException { final int totalCount = 10; int queueId = 0; String topic = "FooBar"; @@ -310,7 +304,7 @@ public class DefaultMessageStoreTest { StoreTestUtil.waitCommitLogReput((DefaultMessageStore) messageStore); ConsumeQueue consumeQueue = getDefaultMessageStore().findConsumeQueue(topic, queueId); - int minOffsetInQueue = (int) consumeQueue.getMinOffsetInQueue(); + int minOffsetInQueue = (int)consumeQueue.getMinOffsetInQueue(); for (int i = minOffsetInQueue; i < consumeQueue.getMaxOffsetInQueue(); i++) { long messageStoreTimeStamp = messageStore.getMessageStoreTimeStamp(topic, queueId, i); assertThat(messageStoreTimeStamp).isEqualTo(appendMessageResults[i].getStoreTimestamp()); @@ -318,14 +312,14 @@ public class DefaultMessageStoreTest { } @Test - public void testGetStoreTime_ParamIsNull() { + public void should_return_negative_one_when_invoke_getStoreTime_if_incomming_param_is_null() { long storeTime = getStoreTime(null); assertThat(storeTime).isEqualTo(-1); } @Test - public void testGetStoreTime_EverythingIsOk() { + public void should_get_store_time_successfully_when_invoke_getStoreTime_if_everything_is_ok() throws InterruptedException { final int totalCount = 10; int queueId = 0; String topic = "FooBar"; @@ -343,7 +337,7 @@ public class DefaultMessageStoreTest { } @Test - public void testGetStoreTime_PhyOffsetIsLessThanCommitLogMinOffset() { + public void should_return_negative_one_when_invoke_getStoreTime_if_phyOffset_is_less_than_commitLog_s_minOffset() { long phyOffset = -10; int size = 138; ByteBuffer byteBuffer = ByteBuffer.allocate(100); @@ -360,7 +354,7 @@ public class DefaultMessageStoreTest { } private DefaultMessageStore getDefaultMessageStore() { - return (DefaultMessageStore) this.messageStore; + return (DefaultMessageStore)this.messageStore; } private AppendMessageResult[] putMessages(int totalCount, String topic, int queueId) { @@ -371,9 +365,7 @@ public class DefaultMessageStoreTest { AppendMessageResult[] appendMessageResultArray = new AppendMessageResult[totalCount]; for (int i = 0; i < totalCount; i++) { String messageBody = buildMessageBodyByOffset(StoreMessage, i); - - MessageExtBrokerInner msgInner = - i < totalCount / 2 ? buildMessage(messageBody.getBytes(), topic) : buildIPv6HostMessage(messageBody.getBytes(), topic); + MessageExtBrokerInner msgInner = buildMessage(messageBody.getBytes(), topic); msgInner.setQueueId(queueId); PutMessageResult result = messageStore.putMessage(msgInner); appendMessageResultArray[i] = result.getAppendMessageResult(); @@ -382,7 +374,7 @@ public class DefaultMessageStoreTest { try { Thread.sleep(10); } catch (InterruptedException e) { - throw new RuntimeException("Thread sleep ERROR"); + throw new RuntimeException("Thread sleep ERROR"); } } } @@ -405,7 +397,7 @@ public class DefaultMessageStoreTest { try { Method getStoreTime = getDefaultMessageStore().getClass().getDeclaredMethod("getStoreTime", SelectMappedBufferResult.class); getStoreTime.setAccessible(true); - return (long) getStoreTime.invoke(getDefaultMessageStore(), result); + return (long)getStoreTime.invoke(getDefaultMessageStore(), result); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new RuntimeException(e); } @@ -426,43 +418,10 @@ public class DefaultMessageStoreTest { return msg; } - private MessageExtBrokerInner buildIPv6HostMessage(byte[] messageBody, String topic) { - MessageExtBrokerInner msg = new MessageExtBrokerInner(); - msg.setTopic(topic); - msg.setTags("TAG1"); - msg.setKeys("Hello"); - msg.setBody(messageBody); - msg.setMsgId("24084004018081003FAA1DDE2B3F898A00002A9F0000000000000CA0"); - msg.setKeys(String.valueOf(System.currentTimeMillis())); - msg.setQueueId(Math.abs(QueueId.getAndIncrement()) % QUEUE_TOTAL); - msg.setSysFlag(0); - msg.setBornHostV6Flag(); - msg.setStoreHostAddressV6Flag(); - msg.setBornTimestamp(System.currentTimeMillis()); - try { - msg.setBornHost(new InetSocketAddress(InetAddress.getByName("1050:0000:0000:0000:0005:0600:300c:326b"), 0)); - } catch (UnknownHostException e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - - try { - msg.setStoreHost(new InetSocketAddress(InetAddress.getByName("::1"), 0)); - } catch (UnknownHostException e) { - e.printStackTrace(); - assertThat(Boolean.FALSE).isTrue(); - } - return msg; - } - private MessageExtBrokerInner buildMessage() { return buildMessage(MessageBody, "FooBar"); } - private MessageExtBrokerInner buildIPv6HostMessage() { - return buildIPv6HostMessage(MessageBody, "FooBar"); - } - private void verifyThatMasterIsFunctional(long totalMsgs, MessageStore master) { for (long i = 0; i < totalMsgs; i++) { master.putMessage(buildMessage()); @@ -518,7 +477,7 @@ public class DefaultMessageStoreTest { messageStore.putMessage(messageExtBrokerInner); } - // Thread.sleep(100);//wait for build consumer queue + // Thread.sleep(100);//wait for build consumer queue StoreTestUtil.waitCommitLogReput((DefaultMessageStore) messageStore); long maxPhyOffset = messageStore.getMaxPhyOffset(); @@ -628,7 +587,7 @@ public class DefaultMessageStoreTest { private class MyMessageArrivingListener implements MessageArrivingListener { @Override public void arriving(String topic, int queueId, long logicOffset, long tagsCode, long msgStoreTime, - byte[] filterBitMap, Map properties) { + byte[] filterBitMap, Map properties) { } } } diff --git a/store/src/test/java/org/apache/rocketmq/store/StoreTestBase.java b/store/src/test/java/org/apache/rocketmq/store/StoreTestBase.java index a736754de47b4ce6d699b63360dfebf1eb86ee0d..0dcb3b254c0c949ad4f4186b8148dccb70332abf 100644 --- a/store/src/test/java/org/apache/rocketmq/store/StoreTestBase.java +++ b/store/src/test/java/org/apache/rocketmq/store/StoreTestBase.java @@ -20,12 +20,12 @@ import java.io.File; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; -import java.net.UnknownHostException; import java.util.HashSet; import java.util.Set; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import org.apache.rocketmq.common.UtilAll; +import org.apache.rocketmq.store.config.StorePathConfigHelper; import org.junit.After; public class StoreTestBase { @@ -59,33 +59,6 @@ public class StoreTestBase { return msg; } - protected MessageExtBrokerInner buildIPv6HostMessage() { - MessageExtBrokerInner msg = new MessageExtBrokerInner(); - msg.setTopic("StoreTest"); - msg.setTags("TAG1"); - msg.setKeys("Hello"); - msg.setBody(MessageBody); - msg.setMsgId("24084004018081003FAA1DDE2B3F898A00002A9F0000000000000CA0"); - msg.setKeys(String.valueOf(System.currentTimeMillis())); - msg.setQueueId(Math.abs(QueueId.getAndIncrement()) % QUEUE_TOTAL); - msg.setSysFlag(0); - msg.setBornHostV6Flag(); - msg.setStoreHostAddressV6Flag(); - msg.setBornTimestamp(System.currentTimeMillis()); - try { - msg.setBornHost(new InetSocketAddress(InetAddress.getByName("1050:0000:0000:0000:0005:0600:300c:326b"), 8123)); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - - try { - msg.setStoreHost(new InetSocketAddress(InetAddress.getByName("::1"), 8123)); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - return msg; - } - public static String createBaseDir() { String baseDir = System.getProperty("user.home") + File.separator + "unitteststore" + File.separator + UUID.randomUUID(); final File file = new File(baseDir); @@ -101,6 +74,7 @@ public class StoreTestBase { return file.createNewFile(); } + public static void deleteFile(String fileName) { deleteFile(new File(fileName)); } diff --git a/store/src/test/java/org/apache/rocketmq/store/dledger/DLedgerCommitlogTest.java b/store/src/test/java/org/apache/rocketmq/store/dledger/DLedgerCommitlogTest.java index f0b9205302e965a832393d788d122e64bbb5d0aa..d0829d122a1ca1ad250053678f812eb1edac7c57 100644 --- a/store/src/test/java/org/apache/rocketmq/store/dledger/DLedgerCommitlogTest.java +++ b/store/src/test/java/org/apache/rocketmq/store/dledger/DLedgerCommitlogTest.java @@ -145,8 +145,7 @@ public class DLedgerCommitlogTest extends MessageStoreTestBase { List results = new ArrayList<>(); for (int i = 0; i < 10; i++) { - MessageExtBrokerInner msgInner = - i < 5 ? buildMessage() : buildIPv6HostMessage(); + MessageExtBrokerInner msgInner = buildMessage(); msgInner.setTopic(topic); msgInner.setQueueId(0); PutMessageResult putMessageResult = messageStore.putMessage(msgInner); @@ -210,39 +209,5 @@ public class DLedgerCommitlogTest extends MessageStoreTestBase { followerStore.shutdown(); } - @Test - public void testIPv6HostMsgCommittedPos() throws Exception { - String peers = String.format("n0-localhost:%d;n1-localhost:%d", nextPort(), nextPort()); - String group = UUID.randomUUID().toString(); - DefaultMessageStore leaderStore = createDledgerMessageStore(createBaseDir(), group,"n0", peers, "n0", false, 0); - - String topic = UUID.randomUUID().toString(); - MessageExtBrokerInner msgInner = buildIPv6HostMessage(); - msgInner.setTopic(topic); - msgInner.setQueueId(0); - PutMessageResult putMessageResult = leaderStore.putMessage(msgInner); - Assert.assertEquals(PutMessageStatus.OS_PAGECACHE_BUSY, putMessageResult.getPutMessageStatus()); - - Thread.sleep(1000); - - Assert.assertEquals(0, leaderStore.getCommitLog().getMaxOffset()); - Assert.assertEquals(0, leaderStore.getMaxOffsetInQueue(topic, 0)); - - - DefaultMessageStore followerStore = createDledgerMessageStore(createBaseDir(), group,"n1", peers, "n0", false, 0); - Thread.sleep(2000); - - Assert.assertEquals(1, leaderStore.getMaxOffsetInQueue(topic, 0)); - Assert.assertEquals(1, followerStore.getMaxOffsetInQueue(topic, 0)); - Assert.assertTrue(leaderStore.getCommitLog().getMaxOffset() > 0); - - - leaderStore.destroy(); - followerStore.destroy(); - - leaderStore.shutdown(); - followerStore.shutdown(); - } - } diff --git a/store/src/test/java/org/apache/rocketmq/store/dledger/MessageStoreTestBase.java b/store/src/test/java/org/apache/rocketmq/store/dledger/MessageStoreTestBase.java index 5b0ca347579dc7e391dab25645d5a87620a89269..2da2fb7a2d5259a3fbbf5f4547607bee90e866f9 100644 --- a/store/src/test/java/org/apache/rocketmq/store/dledger/MessageStoreTestBase.java +++ b/store/src/test/java/org/apache/rocketmq/store/dledger/MessageStoreTestBase.java @@ -19,7 +19,6 @@ package org.apache.rocketmq.store.dledger; import io.openmessaging.storage.dledger.DLedgerConfig; import io.openmessaging.storage.dledger.DLedgerServer; import java.io.File; -import java.net.UnknownHostException; import java.util.Arrays; import org.apache.rocketmq.common.BrokerConfig; import org.apache.rocketmq.common.message.MessageDecoder; @@ -119,7 +118,7 @@ public class MessageStoreTestBase extends StoreTestBase { return defaultMessageStore; } - protected void doPutMessages(MessageStore messageStore, String topic, int queueId, int num, long beginLogicsOffset) throws UnknownHostException { + protected void doPutMessages(MessageStore messageStore, String topic, int queueId, int num, long beginLogicsOffset) { for (int i = 0; i < num; i++) { MessageExtBrokerInner msgInner = buildMessage(); msgInner.setTopic(topic); diff --git a/test/pom.xml b/test/pom.xml index c3d131888411d4e6b4e972e4cf7c54a1b3df2f5f..87bb77637ebc6872f736fb2aaf476bebc8579a34 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -20,7 +20,7 @@ rocketmq-all org.apache.rocketmq - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0 diff --git a/tools/pom.xml b/tools/pom.xml index 061f3c76bd89c756f0b55b94502b51e3adc858ba..ac6f6f4d6a7a6f3d0b22f4524c1920ebbdb56b97 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -19,7 +19,7 @@ org.apache.rocketmq rocketmq-all - 4.6.0-SNAPSHOT + 4.5.2-SNAPSHOT 4.0.0