Skip to content

Commit

Permalink
[close #497] let JVM ClassLoader load gRPC error related classes duri…
Browse files Browse the repository at this point in the history
…ng warmup (#496) (#498)
  • Loading branch information
ti-srebot authored Jan 25, 2022
1 parent 7f4fb95 commit 81a6efd
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 0 deletions.
8 changes: 8 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,14 @@
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<forkMode>always</forkMode>
</configuration>
</plugin>
</plugins>
</build>
</project>
8 changes: 8 additions & 0 deletions src/main/java/org/tikv/common/TiSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import org.tikv.common.region.TiRegion;
import org.tikv.common.region.TiStore;
import org.tikv.common.util.*;
import org.tikv.kvproto.Errorpb;
import org.tikv.kvproto.Metapb;
import org.tikv.kvproto.Pdpb;
import org.tikv.raw.RawKVClient;
Expand Down Expand Up @@ -99,6 +100,13 @@ private synchronized void warmUp() {
BackOffer backOffer = ConcreteBackOffer.newRawKVBackOff();

try {
// let JVM ClassLoader load gRPC error related classes
// this operation may cost 100ms
Errorpb.Error.newBuilder()
.setNotLeader(Errorpb.NotLeader.newBuilder().build())
.build()
.toString();

this.client = getPDClient();
this.regionManager = getRegionManager();
List<Metapb.Store> stores = this.client.getAllStores(backOffer);
Expand Down
60 changes: 60 additions & 0 deletions src/test/java/org/tikv/raw/WarmupTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Copyright 2021 TiKV Project Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.tikv.raw;

import static org.junit.Assert.assertTrue;

import org.junit.Test;
import org.tikv.BaseRawKVTest;
import org.tikv.common.TiConfiguration;
import org.tikv.common.TiSession;
import org.tikv.kvproto.Errorpb;

public class WarmupTest extends BaseRawKVTest {

@Test
public void testErrorpbToStringEnableWarmup() throws Exception {
TiConfiguration conf = createTiConfiguration();
TiSession session = TiSession.create(conf);

long start = System.currentTimeMillis();
Errorpb.Error.newBuilder()
.setNotLeader(Errorpb.NotLeader.newBuilder().build())
.build()
.toString();
long end = System.currentTimeMillis();
assertTrue(end - start < 10);
session.close();
}

@Test
public void testErrorpbToStringDisableWarmup() throws Exception {
TiConfiguration conf = createTiConfiguration();
conf.setWarmUpEnable(false);
TiSession session = TiSession.create(conf);

long start = System.currentTimeMillis();
Errorpb.Error.newBuilder()
.setNotLeader(Errorpb.NotLeader.newBuilder().build())
.build()
.toString();
long end = System.currentTimeMillis();
assertTrue(end - start > 10);
session.close();
}
}

0 comments on commit 81a6efd

Please sign in to comment.