HBASE-21421 Do not kill RS if reportOnlineRegions fails

This commit is contained in:
Allan Yang 2018-11-06 14:56:33 +08:00
parent bcd98513d2
commit d544b7adea
2 changed files with 10 additions and 5 deletions

View File

@ -1053,8 +1053,7 @@ public class AssignmentManager implements ServerListener {
} }
} }
void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set<byte[]> regionNames) void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set<byte[]> regionNames) {
throws YouAreDeadException {
final ServerName serverName = serverNode.getServerName(); final ServerName serverName = serverNode.getServerName();
try { try {
for (byte[] regionName: regionNames) { for (byte[] regionName: regionNames) {
@ -1097,9 +1096,10 @@ public class AssignmentManager implements ServerListener {
} }
} }
} catch (IOException e) { } catch (IOException e) {
LOG.warn("Killing " + serverName + ": " + e.getMessage()); //See HBASE-21421, we can count on reportRegionStateTransition calls
killRegionServer(serverNode); //We only log a warming here. It could be a network lag.
throw (YouAreDeadException)new YouAreDeadException(e.getMessage()).initCause(e); LOG.warn("Failed to checkOnlineRegionsReport, maybe due to network lag, "
+ "if this message continues, be careful of double assign", e);
} }
} }

View File

@ -45,6 +45,7 @@ import org.junit.AfterClass;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.ClassRule; import org.junit.ClassRule;
import org.junit.Ignore;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.experimental.categories.Category; import org.junit.experimental.categories.Category;
@ -137,7 +138,11 @@ public class TestRogueRSAssignment {
admin.setBalancerRunning(true, false); admin.setBalancerRunning(true, false);
} }
/**
* Ignore this test, see HBASE-21421
*/
@Test @Test
@Ignore
public void testReportRSWithWrongRegion() throws Exception { public void testReportRSWithWrongRegion() throws Exception {
final TableName tableName = TableName.valueOf(this.name.getMethodName()); final TableName tableName = TableName.valueOf(this.name.getMethodName());