HBASE-23805 [Flakey Test] TestRaceBetweenSCPAndDTP

This commit is contained in:
stack 2020-02-05 22:01:19 -08:00
parent 5cda68899a
commit 09e8aff79c
1 changed files with 22 additions and 10 deletions

View File

@ -1,4 +1,4 @@
/**
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@ -18,6 +18,7 @@
package org.apache.hadoop.hbase.master.assignment;
import java.io.IOException;
import java.util.Optional;
import java.util.concurrent.CountDownLatch;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseClassTestRule;
@ -30,10 +31,12 @@ import org.apache.hadoop.hbase.master.HMaster;
import org.apache.hadoop.hbase.master.MasterServices;
import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;
import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;
import org.apache.hadoop.hbase.procedure2.Procedure;
import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;
import org.apache.hadoop.hbase.testclassification.MasterTests;
import org.apache.hadoop.hbase.testclassification.MediumTests;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.Threads;
import org.apache.zookeeper.KeeperException;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@ -46,7 +49,6 @@ import org.junit.experimental.categories.Category;
*/
@Category({ MasterTests.class, MediumTests.class })
public class TestRaceBetweenSCPAndDTP {
@ClassRule
public static final HBaseClassTestRule CLASS_RULE =
HBaseClassTestRule.forClass(TestRaceBetweenSCPAndDTP.class);
@ -120,15 +122,16 @@ public class TestRaceBetweenSCPAndDTP {
UTIL.getAdmin().disableTableAsync(NAME);
ARRIVE_GET_REGIONS_ON_TABLE.await();
UTIL.getMiniHBaseCluster().stopRegionServer(sn);
// Wait ServerCrashProcedure to init.
Thread.sleep(1000);
ProcedureExecutor<?> procExec =
UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();
long scpProcId =
procExec.getProcedures().stream().filter(p -> p instanceof ServerCrashProcedure)
.map(p -> (ServerCrashProcedure) p).findAny().get().getProcId();
UTIL.waitFor(60000, () -> procExec.isFinished(scpProcId));
UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();
UTIL.getMiniHBaseCluster().stopRegionServer(sn);
long pid = Procedure.NO_PROC_ID;
do {
Threads.sleep(1);
pid = getSCPPID(procExec);
} while (pid != Procedure.NO_PROC_ID);
final long scppid = pid;
UTIL.waitFor(60000, () -> procExec.isFinished(scppid));
RESUME_GET_REGIONS_ON_SERVER.countDown();
long dtpProcId =
@ -136,4 +139,13 @@ public class TestRaceBetweenSCPAndDTP {
.map(p -> (DisableTableProcedure) p).findAny().get().getProcId();
UTIL.waitFor(60000, () -> procExec.isFinished(dtpProcId));
}
/**
* @return Returns {@link Procedure#NO_PROC_ID} if no SCP found else actual pid.
*/
private long getSCPPID(ProcedureExecutor<?> e) {
Optional<ServerCrashProcedure> optional = e.getProcedures().stream().
filter(p -> p instanceof ServerCrashProcedure).map(p -> (ServerCrashProcedure) p).findAny();
return optional.isPresent()? optional.get().getProcId(): Procedure.NO_PROC_ID;
}
}