[close #570] mockserver: fix unstable mock server cluster setup (#571)

This commit is contained in:
iosmanthus 2022-03-25 16:34:17 +08:00 committed by GitHub
parent 7278d5aa1d
commit f4e7c302ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 34 additions and 26 deletions

View File

@ -42,9 +42,11 @@ public class MockThreeStoresTest extends PDMockServerTest {
public void setup() throws IOException {
super.setup();
int basePort;
try (ServerSocket s = new ServerSocket(0)) {
basePort = s.getLocalPort();
int[] ports = new int[3];
for (int i = 0; i < ports.length; i++) {
try (ServerSocket s = new ServerSocket(0)) {
ports[i] = s.getLocalPort();
}
}
ImmutableList<Metapb.Peer> peers =
@ -65,17 +67,17 @@ public class MockThreeStoresTest extends PDMockServerTest {
stores =
ImmutableList.of(
Metapb.Store.newBuilder()
.setAddress("127.0.0.1:" + basePort)
.setAddress("127.0.0.1:" + ports[0])
.setVersion("5.0.0")
.setId(0x1)
.build(),
Metapb.Store.newBuilder()
.setAddress("127.0.0.1:" + (basePort + 1))
.setAddress("127.0.0.1:" + ports[1])
.setVersion("5.0.0")
.setId(0x2)
.build(),
Metapb.Store.newBuilder()
.setAddress("127.0.0.1:" + (basePort + 2))
.setAddress("127.0.0.1:" + ports[2])
.setVersion("5.0.0")
.setId(0x3)
.build());
@ -101,9 +103,9 @@ public class MockThreeStoresTest extends PDMockServerTest {
region.getPeers(0),
region.getPeersList(),
stores.stream().map(TiStore::new).collect(Collectors.toList()));
for (int i = 0; i < 3; i++) {
for (int port : ports) {
KVMockServer server = new KVMockServer();
server.start(this.region, basePort + i);
server.start(this.region, port);
servers.add(server);
}
}

View File

@ -47,7 +47,8 @@ public class PDClientMockTest extends PDMockServerTest {
@Test
public void testCreate() throws Exception {
try (PDClient client = session.getPDClient()) {
assertEquals(LOCAL_ADDR + ":" + leader.port, client.getPdClientWrapper().getLeaderInfo());
assertEquals(
LOCAL_ADDR + ":" + leader.getPort(), client.getPdClientWrapper().getLeaderInfo());
assertEquals(CLUSTER_ID, client.getHeader().getClusterId());
}
}
@ -55,17 +56,19 @@ public class PDClientMockTest extends PDMockServerTest {
@Test
public void testSwitchLeader() throws Exception {
try (PDClient client = session.getPDClient()) {
client.trySwitchLeader(HTTP + LOCAL_ADDR + ":" + (leader.port + 1));
// Switch leader to server 1
client.trySwitchLeader(HTTP + LOCAL_ADDR + ":" + pdServers.get(1).getPort());
assertEquals(
client.getPdClientWrapper().getLeaderInfo(), HTTP + LOCAL_ADDR + ":" + (leader.port + 1));
client.getPdClientWrapper().getLeaderInfo(),
HTTP + LOCAL_ADDR + ":" + pdServers.get(1).getPort());
}
tearDown();
setup(LOCAL_ADDR_IPV6);
try (PDClient client = session.getPDClient()) {
client.trySwitchLeader(HTTP + LOCAL_ADDR_IPV6 + ":" + (leader.port + 2));
client.trySwitchLeader(HTTP + LOCAL_ADDR_IPV6 + ":" + pdServers.get(2).getPort());
assertEquals(
client.getPdClientWrapper().getLeaderInfo(),
HTTP + LOCAL_ADDR_IPV6 + ":" + (leader.port + 2));
HTTP + LOCAL_ADDR_IPV6 + ":" + pdServers.get(2).getPort());
}
}

View File

@ -37,8 +37,7 @@ import org.tikv.kvproto.Pdpb.TsoRequest;
import org.tikv.kvproto.Pdpb.TsoResponse;
public class PDMockServer extends PDGrpc.PDImplBase {
public int port;
private int port;
private long clusterId;
private Server server;
@ -148,4 +147,8 @@ public class PDMockServer extends PDGrpc.PDImplBase {
public long getClusterId() {
return clusterId;
}
public long getPort() {
return port;
}
}

View File

@ -38,28 +38,30 @@ public abstract class PDMockServerTest {
}
void setup(String addr) throws IOException {
int basePort;
try (ServerSocket s = new ServerSocket(0)) {
basePort = s.getLocalPort();
int[] ports = new int[3];
for (int i = 0; i < ports.length; i++) {
try (ServerSocket s = new ServerSocket(0)) {
ports[i] = s.getLocalPort();
}
}
for (int i = 0; i < 3; i++) {
for (int i = 0; i < ports.length; i++) {
PDMockServer server = new PDMockServer();
server.start(CLUSTER_ID, basePort + i);
server.start(CLUSTER_ID, ports[i]);
server.addGetMembersListener(
(request) ->
GrpcUtils.makeGetMembersResponse(
server.getClusterId(),
GrpcUtils.makeMember(1, "http://" + addr + ":" + basePort),
GrpcUtils.makeMember(2, "http://" + addr + ":" + (basePort + 1)),
GrpcUtils.makeMember(3, "http://" + addr + ":" + (basePort + 2))));
GrpcUtils.makeMember(1, "http://" + addr + ":" + ports[0]),
GrpcUtils.makeMember(2, "http://" + addr + ":" + ports[1]),
GrpcUtils.makeMember(3, "http://" + addr + ":" + ports[2])));
pdServers.add(server);
if (i == 0) {
leader = server;
}
}
TiConfiguration conf = TiConfiguration.createDefault(addr + ":" + leader.port);
TiConfiguration conf = TiConfiguration.createDefault(addr + ":" + ports[0]);
conf.setKvMode("RAW");
conf.setWarmUpEnable(false);
conf.setTimeout(2000);

View File

@ -28,7 +28,6 @@ import org.tikv.kvproto.Pdpb;
import org.tikv.raw.RawKVClient;
public class SeekLeaderStoreTest extends MockThreeStoresTest {
private RawKVClient createClient() {
return session.createRawClient();
}

View File

@ -24,7 +24,6 @@ import org.tikv.common.KVMockServer.State;
import org.tikv.raw.RawKVClient;
public class SeekProxyStoreTest extends MockThreeStoresTest {
private RawKVClient createClient() {
return session.createRawClient();
}