You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Duo Zhang (Jira)" <ji...@apache.org> on 2022/02/27 09:21:00 UTC
[jira] [Commented] (HBASE-26773) [hbase-thirdparty] Introduce a hbase-unsafe module in hbase-thirdparty to remove the direct references of Unsafe in our main code base
[ https://issues.apache.org/jira/browse/HBASE-26773?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17498548#comment-17498548 ]
Duo Zhang commented on HBASE-26773:
-----------------------------------
This is my code for generating the HBaseUnsafe and HBaseUnsafe0 code.
{code}
package com.github.apache9.unsafe;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Generator {
private static final Pattern METHOD = Pattern.compile("public (final )?(native )?(\\S+)\\s+(\\S+)\\((.*)\\)");
public static void main(String[] args) throws Exception {
try (PrintWriter pw = new PrintWriter("/home/zhangduo/hbase/HBaseUnsafe0")) {
for (String line : Files.readAllLines(Paths.get("/home/zhangduo/hbase/all_methods"))) {
Matcher m = METHOD.matcher(line);
if (m.find()) {
String returnType = m.group(3);
String name = m.group(4);
String params = m.group(5);
pw.println("public static " + returnType + " " + name + "(" + params + ") {");
if (!returnType.equals("void")) {
pw.print("return ");
}
pw.print("HBaseUnsafe0." + name + "(");
if (params.trim().length() > 0) {
String[] typeAndNames = params.split(",\\s*");
String str = Stream.of(typeAndNames).map(typeAndName -> typeAndName.split("\\s+")[1])
.collect(Collectors.joining(", "));
pw.print(str);
}
pw.println(");");
pw.println("}");
pw.println();
} else {
System.out.println("error: " + line);
}
}
}
}
}
{code}
https://github.com/Apache9/TempCode/blob/master/src/main/java/com/github/apache9/unsafe/Generator.java
First you need get a file with all the public methods of Unsafe. This is not very hard, just use grep and some manual work.
> [hbase-thirdparty] Introduce a hbase-unsafe module in hbase-thirdparty to remove the direct references of Unsafe in our main code base
> --------------------------------------------------------------------------------------------------------------------------------------
>
> Key: HBASE-26773
> URL: https://issues.apache.org/jira/browse/HBASE-26773
> Project: HBase
> Issue Type: Improvement
> Components: compatibility, thirdparty
> Reporter: Duo Zhang
> Assignee: Duo Zhang
> Priority: Major
>
> For java 9+, sun.misc.Unsafe is in the module jdk.unsupported. When compiling with java 11 --release 8, these symbols will not be exported and lead to compile errors.
> There is a jdk issue
> https://bugs.openjdk.java.net/browse/JDK-8214165
> But seems the jdk team does not want to fix it. So if we want to move up to java 11 but still keep the java 8 compatibility, a possible choice is to remove the direct reference of sun.misc.Unsafe so at compile time there will be no problem, and at runtime we export the jdk.unsupported so there will be no problem too.
> For more details, please see the discussion of this thread on the dev mailing list.
> https://lists.apache.org/thread/w5lrxkhswlonj09xf9hcwgvck3nsjdfx
--
This message was sent by Atlassian Jira
(v8.20.1#820001)