|
22 | 22 | import static org.junit.Assert.assertTrue; |
23 | 23 |
|
24 | 24 | import java.lang.reflect.Field; |
25 | | -import java.lang.reflect.Modifier; |
26 | 25 | import java.util.ArrayList; |
27 | 26 | import java.util.HashSet; |
28 | 27 | import java.util.List; |
|
46 | 45 | import org.apache.hadoop.hbase.testclassification.LargeTests; |
47 | 46 | import org.apache.hadoop.hbase.util.Bytes; |
48 | 47 | import org.apache.hadoop.hbase.util.JVMClusterUtil; |
49 | | -import org.apache.hadoop.hbase.util.ReflectionUtils; |
50 | 48 | import org.apache.hadoop.hbase.util.VersionInfo; |
51 | 49 | import org.junit.After; |
52 | 50 | import org.junit.AfterClass; |
@@ -266,24 +264,27 @@ public void testLowerMetaGroupVersion() throws Exception { |
266 | 264 | Address address = servers.iterator().next(); |
267 | 265 | int majorVersion = VersionInfo.getMajorVersion(originVersion); |
268 | 266 | 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 | + } |
280 | 283 | } |
281 | 284 |
|
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); |
288 | 289 | } |
289 | 290 | } |
0 commit comments