[
https://issues.apache.org/jira/browse/HADOOP-19329?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17985805#comment-17985805
]
ASF GitHub Bot commented on HADOOP-19329:
-----------------------------------------
pan3793 commented on code in PR #7759:
URL: https://github.com/apache/hadoop/pull/7759#discussion_r2163271330
##########
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/SignalUtil.java:
##########
@@ -0,0 +1,152 @@
+/*
+ * 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.hadoop.util;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+
+import org.apache.hadoop.util.dynamic.BindingUtils;
+import org.apache.hadoop.util.dynamic.DynConstructors;
+import org.apache.hadoop.util.dynamic.DynMethods;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+
[email protected]
+public class SignalUtil {
+
+ static final Class<?> jdkSignalClazz =
+ BindingUtils.loadClassSafely("sun.misc.Signal");
+ static final Class<?> jdkSignalHandlerClazz =
+ BindingUtils.loadClassSafely("sun.misc.SignalHandler");
+
+ static DynConstructors.Ctor<?> jdkSignalCtor =
+ new DynConstructors.Builder()
+ .impl(jdkSignalClazz, String.class)
+ .build();
+
+ static DynMethods.StaticMethod jdkSignalHandleStaticMethod =
+ new DynMethods.Builder("handle")
+ .impl(jdkSignalClazz, jdkSignalClazz, jdkSignalHandlerClazz)
+ .buildStatic();
+
+ static DynMethods.StaticMethod jdkSignalRaiseStaticMethod =
+ new DynMethods.Builder("raise")
+ .impl(jdkSignalClazz, jdkSignalClazz)
+ .buildStatic();
+
+ static DynMethods.UnboundMethod jdkSignalHandlerHandleMethod =
+ new DynMethods.Builder("handle")
+ .impl(jdkSignalHandlerClazz, jdkSignalClazz)
+ .build();
+
+ @InterfaceAudience.Private
+ public static class Signal {
+ private final static DynMethods.UnboundMethod getNumberMethod =
+ new DynMethods.Builder("getNumber").impl(jdkSignalClazz).build();
+
+ private final static DynMethods.UnboundMethod getNameMethod =
+ new DynMethods.Builder("getName").impl(jdkSignalClazz).build();
+
+ private final Object delegate;
+
+ public Signal(String name) {
+ this.delegate = jdkSignalCtor.newInstance(name);
+ }
+
+ public Signal(Object delegate) {
+ Preconditions.checkArgument(jdkSignalClazz.isInstance(delegate),
+ String.format("Expected class is '%s', but actual class is '%s'",
+ jdkSignalClazz.getName(), delegate.getClass().getName()));
+ this.delegate = delegate;
+ }
+
+ public int getNumber() {
+ return getNumberMethod.bind(delegate).invoke();
+ }
+
+ public String getName() {
+ return getNameMethod.bind(delegate).invoke();
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof Signal) {
+ return delegate.equals(((Signal)obj).delegate);
+ }
+ return false;
+ }
+
+ public int hashCode() {
+ return delegate.hashCode();
+ }
+
+ public String toString() {
+ return delegate.toString();
+ }
+ }
+
+ @InterfaceAudience.Private
+ public interface Handler {
+ void handle(Signal sig);
+ }
+
+ static class JdkSignalHandlerImpl implements Handler {
+
+ private final Object delegate;
+
+ JdkSignalHandlerImpl(Handler handler) {
+ this.delegate = Proxy.newProxyInstance(
+ getClass().getClassLoader(),
+ new Class<?>[] { jdkSignalHandlerClazz },
+ (proxyObj, method, args) -> {
+ if ("handle".equals(method.getName()) && args.length == 1 &&
jdkSignalClazz.isInstance(args[0])) {
+ handler.handle(new Signal(args[0]));
+ return null;
+ } else {
+ return InvocationHandler.invokeDefault(proxyObj, method, args);
Review Comment:
it calls wrong method, fixed.
> [JDK17] Remove usage of sun.misc.Signal
> ---------------------------------------
>
> Key: HADOOP-19329
> URL: https://issues.apache.org/jira/browse/HADOOP-19329
> Project: Hadoop Common
> Issue Type: Sub-task
> Components: build
> Reporter: yanmin
> Assignee: yanmin
> Priority: Major
> Labels: pull-request-available
>
> when we build hadoop in JDK11 runtime based on
> [https://github.com/apache/hadoop/pull/7085|https://github.com/apache/hadoop/pull/7085,]
> JDK11 build is failing as flowing due to: {{package sun.misc does not
> exist}} in.
>
> This is because that package sun.misc is not supported after jdk11.
> {code:java}
> [ERROR] Failed to execute goal
> org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile
> (default-compile) on project hadoop-common: Compilation failure: Compilation
> failure:
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/SignalLogger.java:[22,16]
> package sun.misc does not exist
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/SignalLogger.java:[23,16]
> package sun.misc does not exist
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/SignalLogger.java:[44,43]
> cannot find symbol
> [ERROR] symbol: class SignalHandler
> [ERROR] location: class org.apache.hadoop.util.SignalLogger
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/SignalLogger.java:[46,19]
> cannot find symbol
> [ERROR] symbol: class SignalHandler
> [ERROR] location: class org.apache.hadoop.util.SignalLogger.Handler
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/SignalLogger.java:[59,24]
> cannot find symbol
> [ERROR] symbol: class Signal
> [ERROR] location: class org.apache.hadoop.util.SignalLogger.Handler
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/service/launcher/IrqHandler.java:[26,16]
> package sun.misc does not exist
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/service/launcher/IrqHandler.java:[27,16]
> package sun.misc does not exist
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/service/launcher/IrqHandler.java:[42,42]
> cannot find symbol
> [ERROR] symbol: class SignalHandler
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/service/launcher/IrqHandler.java:[71,11]
> cannot find symbol
> [ERROR] symbol: class Signal
> [ERROR] location: class org.apache.hadoop.service.launcher.IrqHandler
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/service/launcher/IrqHandler.java:[126,22]
> cannot find symbol
> [ERROR] symbol: class Signal
> [ERROR] location: class org.apache.hadoop.service.launcher.IrqHandler
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java:[48,16]
> package sun.misc does not exist
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/FastByteComparisons.java:[27,16]
> package sun.misc does not exist
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/FastByteComparisons.java:[134,20]
> cannot find symbol
> [ERROR] symbol: class Unsafe
> [ERROR] location: class
> org.apache.hadoop.io.FastByteComparisons.LexicographicalComparerHolder.UnsafeComparer
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/SignalLogger.java:[50,39]
> cannot find symbol
> [ERROR] symbol: class Signal
> [ERROR] location: class org.apache.hadoop.util.SignalLogger.Handler
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/SignalLogger.java:[50,21]
> cannot find symbol
> [ERROR] symbol: variable Signal
> [ERROR] location: class org.apache.hadoop.util.SignalLogger.Handler
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/SignalLogger.java:[58,5]
> method does not override or implement a method from a supertype
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/service/launcher/IrqHandler.java:[92,20]
> cannot find symbol
> [ERROR] symbol: class Signal
> [ERROR] location: class org.apache.hadoop.service.launcher.IrqHandler
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/service/launcher/IrqHandler.java:[93,7]
> cannot find symbol
> [ERROR] symbol: variable Signal
> [ERROR] location: class org.apache.hadoop.service.launcher.IrqHandler
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/service/launcher/IrqHandler.java:[113,5]
> cannot find symbol
> [ERROR] symbol: variable Signal
> [ERROR] location: class org.apache.hadoop.service.launcher.IrqHandler
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/service/launcher/IrqHandler.java:[125,3]
> method does not override or implement a method from a supertype
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java:[901,17]
> cannot find symbol
> [ERROR] symbol: class Unsafe
> [ERROR] location: class org.apache.hadoop.io.nativeio.NativeIO
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java:[903,7]
> cannot find symbol
> [ERROR] symbol: class Unsafe
> [ERROR] location: class org.apache.hadoop.io.nativeio.NativeIO
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java:[903,24]
> cannot find symbol
> [ERROR] symbol: class Unsafe
> [ERROR] location: class org.apache.hadoop.io.nativeio.NativeIO
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/FastByteComparisons.java:[140,22]
> cannot find symbol
> [ERROR] symbol: class Unsafe
> [ERROR] location: class
> org.apache.hadoop.io.FastByteComparisons.LexicographicalComparerHolder.UnsafeComparer
> [ERROR]
> /hadoop/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/FastByteComparisons.java:[145,29]
> cannot find symbol
> [ERROR] symbol: class Unsafe
> [ERROR] -> [Help 1]
> [ERROR]
> [ERROR] To see the full stack trace of the errors, re-run Maven with the -e
> switch.
> [ERROR] Re-run Maven using the -X switch to enable full debug logging.
> [ERROR]
> [ERROR] For more information about the errors and possible solutions, please
> read the following articles:
> [ERROR] [Help 1]
> http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
> [ERROR]
> [ERROR] After correcting the problems, you can resume the build with the
> command
> [ERROR] mvn <args> -rf :hadoop-common
> {code}
> related jira: https://issues.apache.org/jira/browse/HADOOP-19298
>
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]