mirror of https://github.com/tikv/client-java.git
				
				
				
			Co-authored-by: iosmanthus <dengliming@pingcap.com>
This commit is contained in:
		
							parent
							
								
									191cea0182
								
							
						
					
					
						commit
						1267187c11
					
				| 
						 | 
				
			
			@ -175,6 +175,11 @@ public class TiSession implements AutoCloseable {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    this.client = PDClient.createRaw(conf, keyCodec, channelFactory);
 | 
			
		||||
    if (conf.getApiVersion().isV2() && !StoreVersion.minTiKVVersion(Version.API_V2, client)) {
 | 
			
		||||
      throw new IllegalStateException(
 | 
			
		||||
          "With API v2, store versions should not older than " + Version.API_V2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.enableGrpcForward = conf.getEnableGrpcForward();
 | 
			
		||||
    if (this.enableGrpcForward) {
 | 
			
		||||
      logger.info("enable grpc forward for high available");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,4 +25,6 @@ public class Version {
 | 
			
		|||
  public static final String RESOLVE_LOCK_V4 = "4.0.0";
 | 
			
		||||
 | 
			
		||||
  public static final String BATCH_WRITE = "3.0.14";
 | 
			
		||||
 | 
			
		||||
  public static final String API_V2 = "6.1.0";
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -150,4 +150,15 @@ public class ApiVersionTest {
 | 
			
		|||
      Assert.assertNotNull(e);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void testAccessOldVersionClusterWithV2() {
 | 
			
		||||
    Assume.assumeFalse(minTiKVVersion("6.1.0"));
 | 
			
		||||
 | 
			
		||||
    try (RawKVClient client = createRawClient(ApiVersion.V2)) {
 | 
			
		||||
      Assert.fail("Should not create V2 client while store version is less than 6.1.0");
 | 
			
		||||
    } catch (Exception e) {
 | 
			
		||||
      Assert.assertNotNull(e);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,7 @@ import org.tikv.common.region.TiRegion;
 | 
			
		|||
import org.tikv.common.region.TiStore;
 | 
			
		||||
import org.tikv.kvproto.Metapb;
 | 
			
		||||
import org.tikv.kvproto.Pdpb;
 | 
			
		||||
import org.tikv.kvproto.Pdpb.GetAllStoresResponse;
 | 
			
		||||
 | 
			
		||||
public class MockThreeStoresTest extends PDMockServerTest {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -68,17 +69,17 @@ public class MockThreeStoresTest extends PDMockServerTest {
 | 
			
		|||
        ImmutableList.of(
 | 
			
		||||
            Metapb.Store.newBuilder()
 | 
			
		||||
                .setAddress("127.0.0.1:" + ports[0])
 | 
			
		||||
                .setVersion("5.0.0")
 | 
			
		||||
                .setVersion(Version.API_V2)
 | 
			
		||||
                .setId(0x1)
 | 
			
		||||
                .build(),
 | 
			
		||||
            Metapb.Store.newBuilder()
 | 
			
		||||
                .setAddress("127.0.0.1:" + ports[1])
 | 
			
		||||
                .setVersion("5.0.0")
 | 
			
		||||
                .setVersion(Version.API_V2)
 | 
			
		||||
                .setId(0x2)
 | 
			
		||||
                .build(),
 | 
			
		||||
            Metapb.Store.newBuilder()
 | 
			
		||||
                .setAddress("127.0.0.1:" + ports[2])
 | 
			
		||||
                .setVersion("5.0.0")
 | 
			
		||||
                .setVersion(Version.API_V2)
 | 
			
		||||
                .setId(0x3)
 | 
			
		||||
                .build());
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -94,6 +95,10 @@ public class MockThreeStoresTest extends PDMockServerTest {
 | 
			
		|||
            int i = (int) request.getStoreId() - 1;
 | 
			
		||||
            return Pdpb.GetStoreResponse.newBuilder().setStore(stores.get(i)).build();
 | 
			
		||||
          });
 | 
			
		||||
      server.addGetAllStoresListener(
 | 
			
		||||
          request -> {
 | 
			
		||||
            return GetAllStoresResponse.newBuilder().addAllStores(stores).build();
 | 
			
		||||
          });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.region =
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,7 @@
 | 
			
		|||
 | 
			
		||||
package org.tikv.common;
 | 
			
		||||
 | 
			
		||||
import com.google.common.collect.ImmutableList;
 | 
			
		||||
import com.google.protobuf.ByteString;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.junit.Assert;
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +28,10 @@ import org.tikv.common.codec.CodecDataOutput;
 | 
			
		|||
import org.tikv.common.util.ConcreteBackOffer;
 | 
			
		||||
import org.tikv.common.util.Pair;
 | 
			
		||||
import org.tikv.kvproto.Metapb;
 | 
			
		||||
import org.tikv.kvproto.Metapb.Store;
 | 
			
		||||
import org.tikv.kvproto.Metapb.StoreState;
 | 
			
		||||
import org.tikv.kvproto.Pdpb;
 | 
			
		||||
import org.tikv.kvproto.Pdpb.GetAllStoresResponse;
 | 
			
		||||
import org.tikv.kvproto.Pdpb.GetRegionResponse;
 | 
			
		||||
import org.tikv.kvproto.Pdpb.Region;
 | 
			
		||||
import org.tikv.kvproto.Pdpb.ScanRegionsResponse;
 | 
			
		||||
| 
						 | 
				
			
			@ -35,6 +39,18 @@ import org.tikv.kvproto.Pdpb.ScanRegionsResponse;
 | 
			
		|||
public class PDClientV2MockTest extends PDMockServerTest {
 | 
			
		||||
  @Before
 | 
			
		||||
  public void init() throws Exception {
 | 
			
		||||
    leader.addGetAllStoresListener(
 | 
			
		||||
        request -> {
 | 
			
		||||
          return GetAllStoresResponse.newBuilder()
 | 
			
		||||
              .addAllStores(
 | 
			
		||||
                  ImmutableList.of(
 | 
			
		||||
                      Store.newBuilder()
 | 
			
		||||
                          .setId(0x1)
 | 
			
		||||
                          .setState(StoreState.Up)
 | 
			
		||||
                          .setVersion(Version.API_V2)
 | 
			
		||||
                          .build()))
 | 
			
		||||
              .build();
 | 
			
		||||
        });
 | 
			
		||||
    upgradeToV2Cluster();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,8 @@ import java.net.ServerSocket;
 | 
			
		|||
import java.util.Optional;
 | 
			
		||||
import java.util.function.Function;
 | 
			
		||||
import org.tikv.kvproto.PDGrpc;
 | 
			
		||||
import org.tikv.kvproto.Pdpb.GetAllStoresRequest;
 | 
			
		||||
import org.tikv.kvproto.Pdpb.GetAllStoresResponse;
 | 
			
		||||
import org.tikv.kvproto.Pdpb.GetMembersRequest;
 | 
			
		||||
import org.tikv.kvproto.Pdpb.GetMembersResponse;
 | 
			
		||||
import org.tikv.kvproto.Pdpb.GetRegionByIDRequest;
 | 
			
		||||
| 
						 | 
				
			
			@ -54,6 +56,8 @@ public class PDMockServer extends PDGrpc.PDImplBase {
 | 
			
		|||
 | 
			
		||||
  private Function<ScanRegionsRequest, ScanRegionsResponse> scanRegionsListener;
 | 
			
		||||
 | 
			
		||||
  private Function<GetAllStoresRequest, GetAllStoresResponse> getAllStoresListener;
 | 
			
		||||
 | 
			
		||||
  public void addGetMembersListener(Function<GetMembersRequest, GetMembersResponse> func) {
 | 
			
		||||
    getMembersListener = func;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -144,6 +148,20 @@ public class PDMockServer extends PDGrpc.PDImplBase {
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public void addGetAllStoresListener(Function<GetAllStoresRequest, GetAllStoresResponse> func) {
 | 
			
		||||
    getAllStoresListener = func;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public void getAllStores(GetAllStoresRequest request, StreamObserver<GetAllStoresResponse> resp) {
 | 
			
		||||
    try {
 | 
			
		||||
      resp.onNext(Optional.ofNullable(getAllStoresListener.apply(request)).get());
 | 
			
		||||
      resp.onCompleted();
 | 
			
		||||
    } catch (Exception e) {
 | 
			
		||||
      resp.onError(Status.INTERNAL.asRuntimeException());
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public void start(long clusterId) throws IOException {
 | 
			
		||||
    int port;
 | 
			
		||||
    try (ServerSocket s = new ServerSocket(0)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue