This is an automated email from the ASF dual-hosted git repository.
lizhanhui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git
The following commit(s) were added to refs/heads/develop by this push:
new 1be5ebc736 [ISSUE #7551] Reuse helper methods from Netty to free
direct byte buffer (#7550)
1be5ebc736 is described below
commit 1be5ebc7363e4bc6503c80688160a354f5a12f78
Author: Zhanhui Li <[email protected]>
AuthorDate: Mon Nov 13 09:45:37 2023 +0800
[ISSUE #7551] Reuse helper methods from Netty to free direct byte buffer
(#7550)
* Reuse helper methods from Netty to free direct byte buffer, making
codebase JDK 9+ compatible
Signed-off-by: Li Zhanhui <[email protected]>
* Guard against null
Signed-off-by: Li Zhanhui <[email protected]>
* fix #7552
Signed-off-by: Li Zhanhui <[email protected]>
---------
Signed-off-by: Li Zhanhui <[email protected]>
---
.../java/org/apache/rocketmq/common/UtilAll.java | 60 ++--------------------
.../org/apache/rocketmq/common/UtilAllTest.java | 10 ----
2 files changed, 3 insertions(+), 67 deletions(-)
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 95b6b09b41..2808f106ae 100644
--- a/common/src/main/java/org/apache/rocketmq/common/UtilAll.java
+++ b/common/src/main/java/org/apache/rocketmq/common/UtilAll.java
@@ -16,21 +16,18 @@
*/
package org.apache.rocketmq.common;
+import io.netty.util.internal.PlatformDependent;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.nio.ByteBuffer;
import java.nio.file.Files;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@@ -46,15 +43,11 @@ import java.util.function.Supplier;
import java.util.zip.CRC32;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.InflaterInputStream;
-import org.apache.commons.lang3.JavaVersion;
import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.SystemUtils;
import org.apache.commons.validator.routines.InetAddressValidator;
import org.apache.rocketmq.common.constant.LoggerName;
import org.apache.rocketmq.logging.org.slf4j.Logger;
import org.apache.rocketmq.logging.org.slf4j.LoggerFactory;
-import sun.misc.Unsafe;
-import sun.nio.ch.DirectBuffer;
public class UtilAll {
private static final Logger log =
LoggerFactory.getLogger(LoggerName.COMMON_LOGGER_NAME);
@@ -707,57 +700,10 @@ public class UtilAll {
}
public static void cleanBuffer(final ByteBuffer buffer) {
- if (buffer == null || !buffer.isDirect() || buffer.capacity() == 0) {
+ if (null == buffer) {
return;
}
- if (SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_9)) {
- try {
- Field field = Unsafe.class.getDeclaredField("theUnsafe");
- field.setAccessible(true);
- Unsafe unsafe = (Unsafe) field.get(null);
- Method cleaner = method(unsafe, "invokeCleaner", new Class[]
{ByteBuffer.class});
- cleaner.invoke(unsafe, viewed(buffer));
- } catch (Exception e) {
- throw new IllegalStateException(e);
- }
- } else {
- invoke(invoke(viewed(buffer), "cleaner"), "clean");
- }
- }
-
- public static Object invoke(final Object target, final String methodName,
final Class<?>... args) {
- return AccessController.doPrivileged(new PrivilegedAction<Object>() {
- @Override
- public Object run() {
- try {
- Method method = method(target, methodName, args);
- method.setAccessible(true);
- return method.invoke(target);
- } catch (Exception e) {
- throw new IllegalStateException(e);
- }
- }
- });
- }
-
- public static Method method(Object target, String methodName, Class<?>[]
args) throws NoSuchMethodException {
- try {
- return target.getClass().getMethod(methodName, args);
- } catch (NoSuchMethodException e) {
- return target.getClass().getDeclaredMethod(methodName, args);
- }
- }
-
- private static ByteBuffer viewed(ByteBuffer buffer) {
- if (!buffer.isDirect()) {
- throw new IllegalArgumentException("buffer is non-direct");
- }
- ByteBuffer viewedBuffer = (ByteBuffer) ((DirectBuffer)
buffer).attachment();
- if (viewedBuffer == null) {
- return buffer;
- } else {
- return viewed(viewedBuffer);
- }
+ PlatformDependent.freeDirectBuffer(buffer);
}
public static void ensureDirOK(final String dirName) {
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 94bb390eb6..cb288578cc 100644
--- a/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java
+++ b/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java
@@ -219,16 +219,6 @@ public class UtilAllTest {
UtilAll.cleanBuffer(ByteBuffer.allocate(0));
}
- @Test(expected = NoSuchMethodException.class)
- public void testMethod() throws NoSuchMethodException {
- UtilAll.method(new Object(), "noMethod", null);
- }
-
- @Test(expected = IllegalStateException.class)
- public void testInvoke() throws Exception {
- UtilAll.invoke(new Object(), "noMethod");
- }
-
@Test
public void testCalculateFileSizeInPath() throws Exception {
/**