diff --git a/client/client.go b/client/client.go index 3faa3a09215..27952df13cd 100644 --- a/client/client.go +++ b/client/client.go @@ -36,7 +36,6 @@ import ( "github.com/tikv/pd/client/tlsutil" "github.com/tikv/pd/client/tsoutil" "go.uber.org/zap" - "google.golang.org/grpc" ) const ( @@ -174,69 +173,6 @@ type Client interface { Close() } -// GetStoreOp represents available options when getting stores. -type GetStoreOp struct { - excludeTombstone bool -} - -// GetStoreOption configures GetStoreOp. -type GetStoreOption func(*GetStoreOp) - -// WithExcludeTombstone excludes tombstone stores from the result. -func WithExcludeTombstone() GetStoreOption { - return func(op *GetStoreOp) { op.excludeTombstone = true } -} - -// RegionsOp represents available options when operate regions -type RegionsOp struct { - group string - retryLimit uint64 - skipStoreLimit bool -} - -// RegionsOption configures RegionsOp -type RegionsOption func(op *RegionsOp) - -// WithGroup specify the group during Scatter/Split Regions -func WithGroup(group string) RegionsOption { - return func(op *RegionsOp) { op.group = group } -} - -// WithRetry specify the retry limit during Scatter/Split Regions -func WithRetry(retry uint64) RegionsOption { - return func(op *RegionsOp) { op.retryLimit = retry } -} - -// WithSkipStoreLimit specify if skip the store limit check during Scatter/Split Regions -func WithSkipStoreLimit() RegionsOption { - return func(op *RegionsOp) { op.skipStoreLimit = true } -} - -// GetRegionOp represents available options when getting regions. -type GetRegionOp struct { - needBuckets bool - allowFollowerHandle bool - outputMustContainAllKeyRange bool -} - -// GetRegionOption configures GetRegionOp. -type GetRegionOption func(op *GetRegionOp) - -// WithBuckets means getting region and its buckets. -func WithBuckets() GetRegionOption { - return func(op *GetRegionOp) { op.needBuckets = true } -} - -// WithAllowFollowerHandle means that client can send request to follower and let it handle this request. -func WithAllowFollowerHandle() GetRegionOption { - return func(op *GetRegionOp) { op.allowFollowerHandle = true } -} - -// WithOutputMustContainAllKeyRange means the output must contain all key ranges. -func WithOutputMustContainAllKeyRange() GetRegionOption { - return func(op *GetRegionOp) { op.outputMustContainAllKeyRange = true } -} - var ( // errUnmatchedClusterID is returned when found a PD with a different cluster ID. errUnmatchedClusterID = errors.New("[pd] unmatched cluster id") @@ -250,60 +186,6 @@ var ( errNoServiceModeReturned = errors.New("[pd] no service mode returned") ) -// ClientOption configures client. -type ClientOption func(c *client) - -// WithGRPCDialOptions configures the client with gRPC dial options. -func WithGRPCDialOptions(opts ...grpc.DialOption) ClientOption { - return func(c *client) { - c.option.gRPCDialOptions = append(c.option.gRPCDialOptions, opts...) - } -} - -// WithCustomTimeoutOption configures the client with timeout option. -func WithCustomTimeoutOption(timeout time.Duration) ClientOption { - return func(c *client) { - c.option.timeout = timeout - } -} - -// WithForwardingOption configures the client with forwarding option. -func WithForwardingOption(enableForwarding bool) ClientOption { - return func(c *client) { - c.option.enableForwarding = enableForwarding - } -} - -// WithTSOServerProxyOption configures the client to use TSO server proxy, -// i.e., the client will send TSO requests to the API leader (the TSO server -// proxy) which will forward the requests to the TSO servers. -func WithTSOServerProxyOption(useTSOServerProxy bool) ClientOption { - return func(c *client) { - c.option.useTSOServerProxy = useTSOServerProxy - } -} - -// WithMaxErrorRetry configures the client max retry times when connect meets error. -func WithMaxErrorRetry(count int) ClientOption { - return func(c *client) { - c.option.maxRetryTimes = count - } -} - -// WithMetricsLabels configures the client with metrics labels. -func WithMetricsLabels(labels prometheus.Labels) ClientOption { - return func(c *client) { - c.option.metricsLabels = labels - } -} - -// WithInitMetricsOption configures the client with metrics labels. -func WithInitMetricsOption(initMetrics bool) ClientOption { - return func(c *client) { - c.option.initMetrics = initMetrics - } -} - var _ Client = (*client)(nil) // serviceModeKeeper is for service mode switching. diff --git a/client/option.go b/client/option.go index 3f2b7119b52..ca21dcfefbf 100644 --- a/client/option.go +++ b/client/option.go @@ -142,3 +142,120 @@ func (o *option) setTSOClientRPCConcurrency(value int) { func (o *option) getTSOClientRPCConcurrency() int { return o.dynamicOptions[TSOClientRPCConcurrency].Load().(int) } + +// GetStoreOp represents available options when getting stores. +type GetStoreOp struct { + excludeTombstone bool +} + +// GetStoreOption configures GetStoreOp. +type GetStoreOption func(*GetStoreOp) + +// WithExcludeTombstone excludes tombstone stores from the result. +func WithExcludeTombstone() GetStoreOption { + return func(op *GetStoreOp) { op.excludeTombstone = true } +} + +// RegionsOp represents available options when operate regions +type RegionsOp struct { + group string + retryLimit uint64 + skipStoreLimit bool +} + +// RegionsOption configures RegionsOp +type RegionsOption func(op *RegionsOp) + +// WithGroup specify the group during Scatter/Split Regions +func WithGroup(group string) RegionsOption { + return func(op *RegionsOp) { op.group = group } +} + +// WithRetry specify the retry limit during Scatter/Split Regions +func WithRetry(retry uint64) RegionsOption { + return func(op *RegionsOp) { op.retryLimit = retry } +} + +// WithSkipStoreLimit specify if skip the store limit check during Scatter/Split Regions +func WithSkipStoreLimit() RegionsOption { + return func(op *RegionsOp) { op.skipStoreLimit = true } +} + +// GetRegionOp represents available options when getting regions. +type GetRegionOp struct { + needBuckets bool + allowFollowerHandle bool + outputMustContainAllKeyRange bool +} + +// GetRegionOption configures GetRegionOp. +type GetRegionOption func(op *GetRegionOp) + +// WithBuckets means getting region and its buckets. +func WithBuckets() GetRegionOption { + return func(op *GetRegionOp) { op.needBuckets = true } +} + +// WithAllowFollowerHandle means that client can send request to follower and let it handle this request. +func WithAllowFollowerHandle() GetRegionOption { + return func(op *GetRegionOp) { op.allowFollowerHandle = true } +} + +// WithOutputMustContainAllKeyRange means the output must contain all key ranges. +func WithOutputMustContainAllKeyRange() GetRegionOption { + return func(op *GetRegionOp) { op.outputMustContainAllKeyRange = true } +} + +// ClientOption configures client. +type ClientOption func(c *client) + +// WithGRPCDialOptions configures the client with gRPC dial options. +func WithGRPCDialOptions(opts ...grpc.DialOption) ClientOption { + return func(c *client) { + c.option.gRPCDialOptions = append(c.option.gRPCDialOptions, opts...) + } +} + +// WithCustomTimeoutOption configures the client with timeout option. +func WithCustomTimeoutOption(timeout time.Duration) ClientOption { + return func(c *client) { + c.option.timeout = timeout + } +} + +// WithForwardingOption configures the client with forwarding option. +func WithForwardingOption(enableForwarding bool) ClientOption { + return func(c *client) { + c.option.enableForwarding = enableForwarding + } +} + +// WithTSOServerProxyOption configures the client to use TSO server proxy, +// i.e., the client will send TSO requests to the API leader (the TSO server +// proxy) which will forward the requests to the TSO servers. +func WithTSOServerProxyOption(useTSOServerProxy bool) ClientOption { + return func(c *client) { + c.option.useTSOServerProxy = useTSOServerProxy + } +} + +// WithMaxErrorRetry configures the client max retry times when connect meets error. +func WithMaxErrorRetry(count int) ClientOption { + return func(c *client) { + c.option.maxRetryTimes = count + } +} + +// WithMetricsLabels configures the client with metrics labels. +func WithMetricsLabels(labels prometheus.Labels) ClientOption { + return func(c *client) { + c.option.metricsLabels = labels + } +} + +// WithInitMetricsOption configures the client with metrics labels. +func WithInitMetricsOption(initMetrics bool) ClientOption { + return func(c *client) { + c.option.initMetrics = initMetrics + } +}