Documentation ¶
Index ¶
Constants ¶
const ( ReadTimeoutShort = 20 * time.Second // For requests that read/write several key-values. ReadTimeoutMedium = 60 * time.Second // For requests that may need scan region. ReadTimeoutLong = 150 * time.Second // For requests that may need scan region multiple times. GCTimeout = 5 * time.Minute UnsafeDestroyRangeTimeout = 5 * time.Minute )
Timeout durations.
Variables ¶
var GrpcKeepAliveTime = time.Duration(10) * time.Second
GrpcKeepAliveTime is the duration of time after which if the client doesn't see any activity it pings the server to see if the transport is still alive.
var GrpcKeepAliveTimeout = time.Duration(3) * time.Second
GrpcKeepAliveTimeout is the duration of time for which the client waits after having pinged for keepalive check and if no activity is seen even after that the connection is closed.
var MaxCallMsgSize = 1<<31 - 1
MaxCallMsgSize set max gRPC receive message size received from server. If any message size is larger than current value, an error will be reported from gRPC.
var MaxConnectionCount uint = 16
MaxConnectionCount is the max gRPC connections that will be established with each tikv-server.
var MaxSendMsgSize = 1<<31 - 1
MaxSendMsgSize set max gRPC request message size sent to server. If any request message size is larger than current value, an error will be reported from gRPC.
Functions ¶
func CheckStreamTimeoutLoop ¶
func CheckStreamTimeoutLoop(ch <-chan *Lease)
CheckStreamTimeoutLoop runs periodically to check is there any stream request timeouted. Lease is an object to track stream requests, call this function with "go CheckStreamTimeoutLoop()"
Types ¶
type Client ¶
type Client interface { // Close should release all data. Close() error // SendRequest sends Request. SendRequest(ctx context.Context, addr string, req *Request, timeout time.Duration) (*Response, error) }
Client is a client that sends RPC. It should not be used after calling Close().
func NewRPCClient ¶
NewRPCClient manages connections and rpc calls with tikv-servers.
type CmdType ¶
type CmdType uint16
CmdType represents the concrete request type in Request or response type in Response.
const ( CmdGet CmdType = 1 + iota CmdScan CmdPrewrite CmdCommit CmdCleanup CmdBatchGet CmdBatchRollback CmdScanLock CmdResolveLock CmdGC CmdDeleteRange CmdRawGet CmdType = 256 + iota CmdRawBatchGet CmdRawPut CmdRawBatchPut CmdRawDelete CmdRawBatchDelete CmdRawDeleteRange CmdRawScan CmdUnsafeDestroyRange CmdCop CmdType = 512 + iota CmdCopStream CmdMvccGetByKey CmdType = 1024 + iota CmdMvccGetByStartTs CmdSplitRegion )
CmdType values.
type CopStreamResponse ¶
type CopStreamResponse struct { tikvpb.Tikv_CoprocessorStreamClient *coprocessor.Response // The first result of Recv() Timeout time.Duration Lease // Shared by this object and a background goroutine. }
CopStreamResponse combinates tikvpb.Tikv_CoprocessorStreamClient and the first Recv() result together. In streaming API, get grpc stream client may not involve any network packet, then region error have to be handled in Recv() function. This struct facilitates the error handling.
func (*CopStreamResponse) Close ¶
func (resp *CopStreamResponse) Close()
Close closes the CopStreamResponse object.
func (*CopStreamResponse) Recv ¶
func (resp *CopStreamResponse) Recv() (*coprocessor.Response, error)
Recv overrides the stream client Recv() function.
type Lease ¶
type Lease struct { Cancel context.CancelFunc // contains filtered or unexported fields }
Lease is used to implement grpc stream timeout.
type RegionRequestSender ¶
type RegionRequestSender struct {
// contains filtered or unexported fields
}
RegionRequestSender sends KV/Cop requests to tikv server. It handles network errors and some region errors internally.
Typically, a KV/Cop request is bind to a region, all keys that are involved in the request should be located in the region. The sending process begins with looking for the address of leader store's address of the target region from cache, and the request is then sent to the destination tikv server over TCP connection. If region is updated, can be caused by leader transfer, region split, region merge, or region balance, tikv server may not able to process request and send back a RegionError. RegionRequestSender takes care of errors that does not relevant to region range, such as 'I/O timeout', 'NotLeader', and 'ServerIsBusy'. For other errors, since region range have changed, the request may need to split, so we simply return the error to caller.
func NewRegionRequestSender ¶
func NewRegionRequestSender(regionCache *locate.RegionCache, client Client) *RegionRequestSender
NewRegionRequestSender creates a new sender.
type Request ¶
type Request struct { kvrpcpb.Context Type CmdType Get *kvrpcpb.GetRequest Scan *kvrpcpb.ScanRequest Prewrite *kvrpcpb.PrewriteRequest Commit *kvrpcpb.CommitRequest Cleanup *kvrpcpb.CleanupRequest BatchGet *kvrpcpb.BatchGetRequest BatchRollback *kvrpcpb.BatchRollbackRequest ScanLock *kvrpcpb.ScanLockRequest ResolveLock *kvrpcpb.ResolveLockRequest GC *kvrpcpb.GCRequest DeleteRange *kvrpcpb.DeleteRangeRequest RawGet *kvrpcpb.RawGetRequest RawBatchGet *kvrpcpb.RawBatchGetRequest RawPut *kvrpcpb.RawPutRequest RawBatchPut *kvrpcpb.RawBatchPutRequest RawDelete *kvrpcpb.RawDeleteRequest RawBatchDelete *kvrpcpb.RawBatchDeleteRequest RawDeleteRange *kvrpcpb.RawDeleteRangeRequest RawScan *kvrpcpb.RawScanRequest UnsafeDestroyRange *kvrpcpb.UnsafeDestroyRangeRequest Cop *coprocessor.Request MvccGetByKey *kvrpcpb.MvccGetByKeyRequest MvccGetByStartTs *kvrpcpb.MvccGetByStartTsRequest SplitRegion *kvrpcpb.SplitRegionRequest }
Request wraps all kv/coprocessor requests.
type Response ¶
type Response struct { Type CmdType Get *kvrpcpb.GetResponse Scan *kvrpcpb.ScanResponse Prewrite *kvrpcpb.PrewriteResponse Commit *kvrpcpb.CommitResponse Cleanup *kvrpcpb.CleanupResponse BatchGet *kvrpcpb.BatchGetResponse BatchRollback *kvrpcpb.BatchRollbackResponse ScanLock *kvrpcpb.ScanLockResponse ResolveLock *kvrpcpb.ResolveLockResponse GC *kvrpcpb.GCResponse DeleteRange *kvrpcpb.DeleteRangeResponse RawGet *kvrpcpb.RawGetResponse RawBatchGet *kvrpcpb.RawBatchGetResponse RawPut *kvrpcpb.RawPutResponse RawBatchPut *kvrpcpb.RawBatchPutResponse RawDelete *kvrpcpb.RawDeleteResponse RawBatchDelete *kvrpcpb.RawBatchDeleteResponse RawDeleteRange *kvrpcpb.RawDeleteRangeResponse RawScan *kvrpcpb.RawScanResponse UnsafeDestroyRange *kvrpcpb.UnsafeDestroyRangeResponse Cop *coprocessor.Response CopStream *CopStreamResponse MvccGetByKey *kvrpcpb.MvccGetByKeyResponse MvccGetByStartTS *kvrpcpb.MvccGetByStartTsResponse SplitRegion *kvrpcpb.SplitRegionResponse }
Response wraps all kv/coprocessor responses.
func CallRPC ¶
CallRPC launches a rpc call. ch is needed to implement timeout for coprocessor streaing, the stream object's cancel function will be sent to the channel, together with a lease checked by a background goroutine.
func GenRegionErrorResp ¶
GenRegionErrorResp returns corresponding Response with specified RegionError according to the given req.