This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 2ed976009b HDDS-10121. GenericTestUtils.getFieldReflection fails with
Java 17. (#6073)
2ed976009b is described below
commit 2ed976009be28b9a1c37011e6a3677d23cb9b7b4
Author: Devesh Kumar Singh <[email protected]>
AuthorDate: Wed Jan 24 18:15:19 2024 +0530
HDDS-10121. GenericTestUtils.getFieldReflection fails with Java 17. (#6073)
---
.../org/apache/ozone/test/GenericTestUtils.java | 47 +++++++++++++++++++++-
.../dist/src/shell/ozone/ozone-functions.sh | 3 +-
2 files changed, 47 insertions(+), 3 deletions(-)
diff --git
a/hadoop-hdds/test-utils/src/main/java/org/apache/ozone/test/GenericTestUtils.java
b/hadoop-hdds/test-utils/src/main/java/org/apache/ozone/test/GenericTestUtils.java
index 92e059296c..79f0a09374 100644
---
a/hadoop-hdds/test-utils/src/main/java/org/apache/ozone/test/GenericTestUtils.java
+++
b/hadoop-hdds/test-utils/src/main/java/org/apache/ozone/test/GenericTestUtils.java
@@ -24,6 +24,8 @@ import java.io.OutputStream;
import java.io.PrintStream;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.time.Instant;
import java.util.List;
import java.util.Map;
@@ -226,7 +228,7 @@ public abstract class GenericTestUtils {
boolean isAccessible = field.isAccessible();
field.setAccessible(true);
- Field modifiersField = Field.class.getDeclaredField("modifiers");
+ Field modifiersField = ReflectionUtils.getModifiersField();
boolean modifierFieldAccessible = modifiersField.isAccessible();
modifiersField.setAccessible(true);
int modifierVal = modifiersField.getInt(field);
@@ -246,7 +248,7 @@ public abstract class GenericTestUtils {
boolean isAccessible = field.isAccessible();
field.setAccessible(true);
- Field modifiersField = Field.class.getDeclaredField("modifiers");
+ Field modifiersField = ReflectionUtils.getModifiersField();
boolean modifierFieldAccessible = modifiersField.isAccessible();
modifiersField.setAccessible(true);
int modifierVal = modifiersField.getInt(field);
@@ -468,4 +470,45 @@ public abstract class GenericTestUtils {
}
}
+ /**
+ * This class is a utility class for java reflection operations.
+ */
+ public static final class ReflectionUtils {
+
+ /**
+ * This method provides the modifiers field using reflection approach
which is compatible
+ * for both pre Java 9 and post java 9 versions.
+ * @return modifiers field
+ * @throws IllegalAccessException
+ * @throws NoSuchFieldException
+ */
+ public static Field getModifiersField() throws IllegalAccessException,
NoSuchFieldException {
+ Field modifiersField = null;
+ try {
+ modifiersField = Field.class.getDeclaredField("modifiers");
+ } catch (NoSuchFieldException e) {
+ try {
+ Method getDeclaredFields0 = Class.class.getDeclaredMethod(
+ "getDeclaredFields0", boolean.class);
+ boolean accessibleBeforeSet = getDeclaredFields0.isAccessible();
+ getDeclaredFields0.setAccessible(true);
+ Field[] fields = (Field[]) getDeclaredFields0.invoke(Field.class,
false);
+ getDeclaredFields0.setAccessible(accessibleBeforeSet);
+ for (Field field : fields) {
+ if ("modifiers".equals(field.getName())) {
+ modifiersField = field;
+ break;
+ }
+ }
+ if (modifiersField == null) {
+ throw e;
+ }
+ } catch (InvocationTargetException | NoSuchMethodException ex) {
+ e.addSuppressed(ex);
+ throw e;
+ }
+ }
+ return modifiersField;
+ }
+ }
}
diff --git a/hadoop-ozone/dist/src/shell/ozone/ozone-functions.sh
b/hadoop-ozone/dist/src/shell/ozone/ozone-functions.sh
index 392372bfc1..f9994438c2 100755
--- a/hadoop-ozone/dist/src/shell/ozone/ozone-functions.sh
+++ b/hadoop-ozone/dist/src/shell/ozone/ozone-functions.sh
@@ -1428,12 +1428,13 @@ function ozone_set_module_access_args
# populate JVM args based on java version
if [[ "${JAVA_MAJOR_VERSION}" -ge 17 ]]; then
- OZONE_MODULE_ACCESS_ARGS="--add-opens java.base/java.lang=ALL-UNNAMED"
OZONE_MODULE_ACCESS_ARGS="${OZONE_MODULE_ACCESS_ARGS} --add-opens
java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED"
OZONE_MODULE_ACCESS_ARGS="${OZONE_MODULE_ACCESS_ARGS} --add-exports
java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED"
fi
if [[ "${JAVA_MAJOR_VERSION}" -ge 9 ]]; then
OZONE_MODULE_ACCESS_ARGS="${OZONE_MODULE_ACCESS_ARGS} --add-opens
java.base/java.nio=ALL-UNNAMED"
+ OZONE_MODULE_ACCESS_ARGS="${OZONE_MODULE_ACCESS_ARGS} --add-opens
java.base/java.lang=ALL-UNNAMED"
+ OZONE_MODULE_ACCESS_ARGS="${OZONE_MODULE_ACCESS_ARGS} --add-opens
java.base/java.lang.reflect=ALL-UNNAMED"
fi
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]