View Javadoc
1   /*
2    * Copyright 2021 TiKV Project Authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   *
16   */
17  
18  package org.tikv.common.util;
19  
20  import org.tikv.common.log.SlowLog;
21  
22  public interface BackOffer {
23    // Back off types.
24    int seconds = 1000;
25    int TSO_MAX_BACKOFF = 5 * seconds;
26    int SCANNER_NEXT_MAX_BACKOFF = 40 * seconds;
27    int BATCH_GET_MAX_BACKOFF = 40 * seconds;
28    int COP_NEXT_MAX_BACKOFF = 40 * seconds;
29    int GET_MAX_BACKOFF = 40 * seconds;
30    int RAWKV_MAX_BACKOFF = 20 * seconds;
31    int PD_INFO_BACKOFF = 5 * seconds;
32    int TIKV_SWITCH_MODE_BACKOFF = seconds;
33    int SPLIT_REGION_BACKOFF = 12000;
34    int SCATTER_REGION_BACKOFF = 30000;
35    int INGEST_BACKOFF = 30000;
36  
37    /**
38     * doBackOff sleeps a while base on the BackOffType and records the error message. Will stop until
39     * max back off time exceeded and throw an exception to the caller.
40     */
41    void doBackOff(BackOffFunction.BackOffFuncType funcType, Exception err);
42  
43    /** check if deadline exceeded. */
44    void checkTimeout();
45  
46    /**
47     * canRetryAfterSleep sleeps a while base on the BackOffType and records the error message. Will
48     * stop until max back off time exceeded and throw an exception to the caller. It will return
49     * false if the total sleep time has exceed some limit condition.
50     */
51    boolean canRetryAfterSleep(BackOffFunction.BackOffFuncType funcType);
52  
53    /**
54     * BackoffWithMaxSleep sleeps a while base on the backoffType and records the error message and
55     * never sleep more than maxSleepMs for each sleep.
56     */
57    void doBackOffWithMaxSleep(
58        BackOffFunction.BackOffFuncType funcType, long maxSleepMs, Exception err);
59  
60    // Back off strategies
61    enum BackOffStrategy {
62      // NoJitter makes the backoff sequence strict exponential.
63      NoJitter,
64      // FullJitter applies random factors to strict exponential.
65      FullJitter,
66      // EqualJitter is also randomized, but prevents very short sleeps.
67      EqualJitter,
68      // DecorrJitter increases the maximum jitter based on the last random value.
69      DecorrJitter
70    }
71  
72    SlowLog getSlowLog();
73  
74    Long getClusterId();
75  }