Skip to content

Commit df1bfc0

Browse files
committed
HBASE-29550 Reflection error in TestRSGroupsKillRS with Java 21 (#7328)
Signed-off-by: Duo Zhang <zhangduo@apache.org> (cherry picked from commit cac063a)
1 parent b1269b1 commit df1bfc0

3 files changed

Lines changed: 26 additions & 22 deletions

File tree

hbase-common/src/main/java/org/apache/hadoop/hbase/trace/TraceUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
import java.util.concurrent.Callable;
2929
import java.util.concurrent.CompletableFuture;
3030
import java.util.function.Supplier;
31-
import org.apache.hadoop.hbase.Version;
3231
import org.apache.hadoop.hbase.util.FutureUtils;
32+
import org.apache.hadoop.hbase.util.VersionInfo;
3333
import org.apache.yetus.audience.InterfaceAudience;
3434

3535
@InterfaceAudience.Private
@@ -39,7 +39,7 @@ private TraceUtil() {
3939
}
4040

4141
public static Tracer getGlobalTracer() {
42-
return GlobalOpenTelemetry.getTracer("org.apache.hbase", Version.version);
42+
return GlobalOpenTelemetry.getTracer("org.apache.hbase", VersionInfo.getVersion());
4343
}
4444

4545
/**

hbase-common/src/main/java/org/apache/hadoop/hbase/util/VersionInfo.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,15 @@ public class VersionInfo {
4040
// higher than any numbers in the version.
4141
private static final int VERY_LARGE_NUMBER = 100000;
4242

43+
// Copying into a non-final member so that it can be changed by reflection for testing
44+
private static String version = Version.version;
45+
4346
/**
4447
* Get the hbase version.
4548
* @return the hbase version string, eg. "0.6.3-dev"
4649
*/
4750
public static String getVersion() {
48-
return Version.version;
51+
return version;
4952
}
5053

5154
/**

hbase-rsgroup/src/test/java/org/apache/hadoop/hbase/rsgroup/TestRSGroupsKillRS.java

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import static org.junit.Assert.assertTrue;
2323

2424
import java.lang.reflect.Field;
25-
import java.lang.reflect.Modifier;
2625
import java.util.ArrayList;
2726
import java.util.HashSet;
2827
import java.util.List;
@@ -46,7 +45,6 @@
4645
import org.apache.hadoop.hbase.testclassification.LargeTests;
4746
import org.apache.hadoop.hbase.util.Bytes;
4847
import org.apache.hadoop.hbase.util.JVMClusterUtil;
49-
import org.apache.hadoop.hbase.util.ReflectionUtils;
5048
import org.apache.hadoop.hbase.util.VersionInfo;
5149
import org.junit.After;
5250
import org.junit.AfterClass;
@@ -266,24 +264,27 @@ public void testLowerMetaGroupVersion() throws Exception {
266264
Address address = servers.iterator().next();
267265
int majorVersion = VersionInfo.getMajorVersion(originVersion);
268266
assertTrue(majorVersion >= 1);
269-
String lowerVersion = String.valueOf(majorVersion - 1) + originVersion.split("\\.")[1];
270-
setFinalStatic(Version.class.getField("version"), lowerVersion);
271-
TEST_UTIL.getMiniHBaseCluster().startRegionServer(address.getHostName(), address.getPort());
272-
assertEquals(NUM_SLAVES_BASE,
273-
TEST_UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size());
274-
assertTrue(VersionInfo.compareVersion(originVersion,
275-
master.getRegionServerVersion(getServerName(servers.iterator().next()))) > 0);
276-
LOG.debug("wait for META assigned...");
277-
// SCP finished, which means all regions assigned too.
278-
TEST_UTIL.waitFor(60000, () -> !TEST_UTIL.getHBaseCluster().getMaster().getProcedures().stream()
279-
.filter(p -> (p instanceof ServerCrashProcedure)).findAny().isPresent());
267+
String lowerVersion =
268+
String.valueOf(majorVersion - 1) + originVersion.substring(originVersion.indexOf("."));
269+
try {
270+
setVersionInfoVersion(lowerVersion);
271+
TEST_UTIL.getMiniHBaseCluster().startRegionServer(address.getHostName(), address.getPort());
272+
assertEquals(NUM_SLAVES_BASE,
273+
TEST_UTIL.getMiniHBaseCluster().getLiveRegionServerThreads().size());
274+
assertTrue(VersionInfo.compareVersion(originVersion,
275+
master.getRegionServerVersion(getServerName(servers.iterator().next()))) > 0);
276+
LOG.debug("wait for META assigned...");
277+
// SCP finished, which means all regions assigned too.
278+
TEST_UTIL.waitFor(60000, () -> !TEST_UTIL.getHBaseCluster().getMaster().getProcedures()
279+
.stream().filter(p -> (p instanceof ServerCrashProcedure)).findAny().isPresent());
280+
} finally {
281+
setVersionInfoVersion(Version.version);
282+
}
280283
}
281284

282-
private static void setFinalStatic(Field field, Object newValue) throws Exception {
283-
field.setAccessible(true);
284-
Field modifiersField = ReflectionUtils.getModifiersField();
285-
modifiersField.setAccessible(true);
286-
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
287-
field.set(null, newValue);
285+
private static void setVersionInfoVersion(String newValue) throws Exception {
286+
Field f = VersionInfo.class.getDeclaredField("version");
287+
f.setAccessible(true);
288+
f.set(null, newValue);
288289
}
289290
}

0 commit comments

Comments
 (0)