This is an automated email from the ASF dual-hosted git repository.
stoty pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2 by this push:
new cac063aaa15 HBASE-29550 Reflection error in TestRSGroupsKillRS with
Java 21 (#7328)
cac063aaa15 is described below
commit cac063aaa15170e201ecb99314f3f5d0ed9f1387
Author: Istvan Toth <[email protected]>
AuthorDate: Mon Sep 22 16:18:06 2025 +0200
HBASE-29550 Reflection error in TestRSGroupsKillRS with Java 21 (#7328)
Signed-off-by: Duo Zhang <[email protected]>
---
.../org/apache/hadoop/hbase/trace/TraceUtil.java | 4 +--
.../org/apache/hadoop/hbase/util/VersionInfo.java | 5 ++-
.../hadoop/hbase/rsgroup/TestRSGroupsKillRS.java | 39 +++++++++++-----------
3 files changed, 26 insertions(+), 22 deletions(-)
diff --git
a/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/TraceUtil.java
b/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/TraceUtil.java
index 5b1fb86a351..260c0064f84 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/TraceUtil.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/TraceUtil.java
@@ -28,8 +28,8 @@ import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;
-import org.apache.hadoop.hbase.Version;
import org.apache.hadoop.hbase.util.FutureUtils;
+import org.apache.hadoop.hbase.util.VersionInfo;
import org.apache.yetus.audience.InterfaceAudience;
@InterfaceAudience.Private
@@ -39,7 +39,7 @@ public final class TraceUtil {
}
public static Tracer getGlobalTracer() {
- return GlobalOpenTelemetry.getTracer("org.apache.hbase", Version.version);
+ return GlobalOpenTelemetry.getTracer("org.apache.hbase",
VersionInfo.getVersion());
}
/**
diff --git
a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/VersionInfo.java
b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/VersionInfo.java
index 60a37af6048..80ae42a3a3b 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/VersionInfo.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/VersionInfo.java
@@ -40,12 +40,15 @@ public class VersionInfo {
// higher than any numbers in the version.
private static final int VERY_LARGE_NUMBER = 100000;
+ // Copying into a non-final member so that it can be changed by reflection
for testing
+ private static String version = Version.version;
+
/**
* Get the hbase version.
* @return the hbase version string, eg. "0.6.3-dev"
*/
public static String getVersion() {
- return Version.version;
+ return version;
}
/**
diff --git
a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsKillRS.java
b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsKillRS.java
index e11d8f5717c..6caf0a744e3 100644
---
a/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsKillRS.java
+++
b/hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsKillRS.java
@@ -22,7 +22,6 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -46,7 +45,6 @@ import org.apache.hadoop.hbase.net.Address;
import org.apache.hadoop.hbase.testclassification.LargeTests;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.JVMClusterUtil;
-import org.apache.hadoop.hbase.util.ReflectionUtils;
import org.apache.hadoop.hbase.util.VersionInfo;
import org.junit.After;
import org.junit.AfterClass;
@@ -266,24 +264,27 @@ public class TestRSGroupsKillRS extends TestRSGroupsBase {
Address address = servers.iterator().next();
int majorVersion = VersionInfo.getMajorVersion(originVersion);
assertTrue(majorVersion >= 1);
- String lowerVersion = String.valueOf(majorVersion - 1) +
originVersion.split("\\.")[1];
- setFinalStatic(Version.class.getField("version"), lowerVersion);
- TEST_UTIL.getMiniHBaseCluster().startRegionServer(address.getHostName(),
address.getPort());
- assertEquals(NUM_SLAVES_BASE,
- TEST_UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size());
- assertTrue(VersionInfo.compareVersion(originVersion,
- master.getRegionServerVersion(getServerName(servers.iterator().next())))
> 0);
- LOG.debug("wait for META assigned...");
- // SCP finished, which means all regions assigned too.
- TEST_UTIL.waitFor(60000, () ->
!TEST_UTIL.getHBaseCluster().getMaster().getProcedures().stream()
- .filter(p -> (p instanceof ServerCrashProcedure)).findAny().isPresent());
+ String lowerVersion =
+ String.valueOf(majorVersion - 1) +
originVersion.substring(originVersion.indexOf("."));
+ try {
+ setVersionInfoVersion(lowerVersion);
+ TEST_UTIL.getMiniHBaseCluster().startRegionServer(address.getHostName(),
address.getPort());
+ assertEquals(NUM_SLAVES_BASE,
+ TEST_UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size());
+ assertTrue(VersionInfo.compareVersion(originVersion,
+
master.getRegionServerVersion(getServerName(servers.iterator().next()))) > 0);
+ LOG.debug("wait for META assigned...");
+ // SCP finished, which means all regions assigned too.
+ TEST_UTIL.waitFor(60000, () ->
!TEST_UTIL.getHBaseCluster().getMaster().getProcedures()
+ .stream().filter(p -> (p instanceof
ServerCrashProcedure)).findAny().isPresent());
+ } finally {
+ setVersionInfoVersion(Version.version);
+ }
}
- private static void setFinalStatic(Field field, Object newValue) throws
Exception {
- field.setAccessible(true);
- Field modifiersField = ReflectionUtils.getModifiersField();
- modifiersField.setAccessible(true);
- modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
- field.set(null, newValue);
+ private static void setVersionInfoVersion(String newValue) throws Exception {
+ Field f = VersionInfo.class.getDeclaredField("version");
+ f.setAccessible(true);
+ f.set(null, newValue);
}
}