helper

package
v0.0.0-...-6e93ed8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 21, 2024 License: Apache-2.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const (
	HotRead  = "read"
	HotWrite = "write"
)

Constants that used to distinguish the hot region info request.

View Source
const MaxBackoffTimeoutForMvccGet = 5000

MaxBackoffTimeoutForMvccGet is a derived value from previous implementation possible experiencing value 5000ms.

Variables

This section is empty.

Functions

func CollectTiFlashStatus

func CollectTiFlashStatus(statusAddress string, keyspaceID tikv.KeyspaceID, tableID int64, regionReplica *map[int64]int) error

CollectTiFlashStatus query sync status of one table from TiFlash store. `regionReplica` is a map from RegionID to count of TiFlash Replicas in this region.

func ComputeTiFlashStatus

func ComputeTiFlashStatus(reader *bufio.Reader, regionReplica *map[int64]int) error

ComputeTiFlashStatus is helper function for CollectTiFlashStatus.

func GetTiFlashTableIDFromEndKey

func GetTiFlashTableIDFromEndKey(endKey string) int64

GetTiFlashTableIDFromEndKey computes tableID from pd rule's endKey.

func SyncTableSchemaToTiFlash

func SyncTableSchemaToTiFlash(statusAddress string, keyspaceID tikv.KeyspaceID, tableID int64) error

SyncTableSchemaToTiFlash query sync schema of one table to TiFlash store.

Types

type FrameItem

type FrameItem struct {
	DBName      string   `json:"db_name"`
	TableName   string   `json:"table_name"`
	TableID     int64    `json:"table_id"`
	IsRecord    bool     `json:"is_record"`
	RecordID    int64    `json:"record_id,omitempty"`
	IndexName   string   `json:"index_name,omitempty"`
	IndexID     int64    `json:"index_id,omitempty"`
	IndexValues []string `json:"index_values,omitempty"`
}

FrameItem includes a index's or record's meta data with table's info.

func NewFrameItemFromRegionKey

func NewFrameItemFromRegionKey(key []byte) (frame *FrameItem, err error)

NewFrameItemFromRegionKey creates a FrameItem with region's startKey or endKey, returns err when key is illegal.

type Helper

type Helper struct {
	Store       Storage
	RegionCache *tikv.RegionCache
	// contains filtered or unexported fields
}

Helper is a middleware to get some information from tikv/pd. It can be used for TiDB's http api or mem table.

func NewHelper

func NewHelper(store Storage) *Helper

NewHelper gets a Helper from Storage

func (*Helper) FetchHotRegion

func (h *Helper) FetchHotRegion(ctx context.Context, rw string) (map[uint64]RegionMetric, error)

FetchHotRegion fetches the hot region information from PD's http api.

func (*Helper) FetchRegionTableIndex

func (h *Helper) FetchRegionTableIndex(metrics map[uint64]RegionMetric, is infoschema.SchemaAndTable, filter func([]*model.DBInfo) []*model.DBInfo) ([]HotTableIndex, error)

FetchRegionTableIndex constructs a map that maps a table to its hot region information by the given raw hot RegionMetric metrics.

func (*Helper) FilterMemDBs

func (*Helper) FilterMemDBs(oldSchemas []*model.DBInfo) (schemas []*model.DBInfo)

FilterMemDBs filters memory databases in the input schemas.

func (*Helper) FindTableIndexOfRegion

func (*Helper) FindTableIndexOfRegion(is infoschema.SchemaAndTable, hotRange *RegionFrameRange) *FrameItem

FindTableIndexOfRegion finds what table is involved in this hot region. And constructs the new frame item for future use.

func (*Helper) GetMvccByEncodedKey

func (h *Helper) GetMvccByEncodedKey(encodedKey kv.Key) (*kvrpcpb.MvccGetByKeyResponse, error)

GetMvccByEncodedKey get the MVCC value by the specific encoded key.

func (*Helper) GetMvccByEncodedKeyWithTS

func (h *Helper) GetMvccByEncodedKeyWithTS(encodedKey kv.Key, startTS uint64) (*kvrpcpb.MvccGetByKeyResponse, error)

GetMvccByEncodedKeyWithTS get the MVCC value by the specific encoded key, if lock is encountered it would be resolved.

func (*Helper) GetMvccByStartTs

func (h *Helper) GetMvccByStartTs(startTS uint64, startKey, endKey kv.Key) (*MvccKV, error)

GetMvccByStartTs gets Mvcc info by startTS from tikv.

func (*Helper) GetPDAddr

func (h *Helper) GetPDAddr() ([]string, error)

GetPDAddr return the PD Address.

func (*Helper) GetPDRegionStats

func (h *Helper) GetPDRegionStats(ctx context.Context, tableID int64, noIndexStats bool) (*pd.RegionStats, error)

GetPDRegionStats get the RegionStats by tableID from PD by HTTP API.

func (*Helper) GetRegionsTableInfo

func (h *Helper) GetRegionsTableInfo(regionsInfo *pd.RegionsInfo, is infoschema.SchemaAndTable, filter func([]*model.DBInfo) []*model.DBInfo) map[int64][]TableInfo

GetRegionsTableInfo returns a map maps region id to its tables or indices. Assuming tables or indices key ranges never intersect. Regions key ranges can intersect.

func (*Helper) GetTablesInfoWithKeyRange

func (*Helper) GetTablesInfoWithKeyRange(is infoschema.SchemaAndTable, filter func([]*model.DBInfo) []*model.DBInfo) []TableInfoWithKeyRange

GetTablesInfoWithKeyRange returns a slice containing tableInfos with key ranges of all tables in schemas.

func (*Helper) ParseRegionsTableInfos

func (*Helper) ParseRegionsTableInfos(regionsInfo []*pd.RegionInfo, tables []TableInfoWithKeyRange) map[int64][]TableInfo

ParseRegionsTableInfos parses the tables or indices in regions according to key range.

func (*Helper) ScrapeHotInfo

func (h *Helper) ScrapeHotInfo(ctx context.Context, rw string, is infoschema.SchemaAndTable, filter func([]*model.DBInfo) []*model.DBInfo) ([]HotTableIndex, error)

ScrapeHotInfo gets the needed hot region information by the url given.

func (*Helper) TryGetPDHTTPClient

func (h *Helper) TryGetPDHTTPClient() (pd.Client, error)

TryGetPDHTTPClient tries to get a PD HTTP client if it's available.

type HotTableIndex

type HotTableIndex struct {
	RegionID     uint64        `json:"region_id"`
	RegionMetric *RegionMetric `json:"region_metric"`
	DbName       string        `json:"db_name"`
	TableName    string        `json:"table_name"`
	TableID      int64         `json:"table_id"`
	IndexName    string        `json:"index_name"`
	IndexID      int64         `json:"index_id"`
}

HotTableIndex contains region and its table/index info.

type MvccKV

type MvccKV struct {
	Key      string                        `json:"key"`
	RegionID uint64                        `json:"region_id"`
	Value    *kvrpcpb.MvccGetByKeyResponse `json:"value"`
}

MvccKV wraps the key's mvcc info in tikv.

type RegionFrameRange

type RegionFrameRange struct {
	First *FrameItem // start frame of the region
	Last  *FrameItem // end frame of the region
	// contains filtered or unexported fields
}

RegionFrameRange contains a frame range info which the region covered.

func NewRegionFrameRange

func NewRegionFrameRange(region *tikv.KeyLocation) (idxRange *RegionFrameRange, err error)

NewRegionFrameRange init a NewRegionFrameRange with region info.

func (*RegionFrameRange) GetIndexFrame

func (r *RegionFrameRange) GetIndexFrame(tableID, indexID int64, dbName, tableName, indexName string) *FrameItem

GetIndexFrame returns the indnex frame of a table. If the table's indices are not covered by this frame range, it returns nil.

func (*RegionFrameRange) GetRecordFrame

func (r *RegionFrameRange) GetRecordFrame(tableID int64, dbName, tableName string, isCommonHandle bool) (f *FrameItem)

GetRecordFrame returns the record frame of a table. If the table's records are not covered by this frame range, it returns nil.

type RegionMetric

type RegionMetric struct {
	FlowBytes    uint64 `json:"flow_bytes"`
	MaxHotDegree int    `json:"max_hot_degree"`
	Count        int    `json:"region_count"`
}

RegionMetric presents the final metric output entry.

type Storage

type Storage interface {
	Begin(opts ...tikv.TxnOption) (kv.Transaction, error)
	GetSnapshot(ver kv.Version) kv.Snapshot
	GetClient() kv.Client
	GetMPPClient() kv.MPPClient
	Close() error
	UUID() string
	CurrentVersion(txnScope string) (kv.Version, error)
	CurrentTimestamp(txnScop string) (uint64, error)
	GetOracle() oracle.Oracle
	SupportDeleteRange() (supported bool)
	Name() string
	Describe() string
	ShowStatus(ctx context.Context, key string) (any, error)
	GetMemCache() kv.MemManager
	GetRegionCache() *tikv.RegionCache
	SendReq(bo *tikv.Backoffer, req *tikvrpc.Request, regionID tikv.RegionVerID, timeout time.Duration) (*tikvrpc.Response, error)
	GetLockResolver() *txnlock.LockResolver
	GetSafePointKV() tikv.SafePointKV
	UpdateSPCache(cachedSP uint64, cachedTime time.Time)
	SetOracle(oracle oracle.Oracle)
	SetTiKVClient(client tikv.Client)
	GetTiKVClient() tikv.Client
	Closed() <-chan struct{}
	GetMinSafeTS(txnScope string) uint64
	GetLockWaits() ([]*deadlockpb.WaitForEntry, error)
	GetCodec() tikv.Codec
	GetPDHTTPClient() pd.Client
	GetOption(any) (any, bool)
	SetOption(any, any)
}

Storage represents a storage that connects TiKV. Methods copied from kv.Storage and tikv.Storage due to limitation of go1.13.

type TableInfo

type TableInfo struct {
	DB          *model.DBInfo
	Table       *model.TableInfo
	IsPartition bool
	Partition   *model.PartitionDefinition
	IsIndex     bool
	Index       *model.IndexInfo
}

TableInfo stores the information of a table or an index

type TableInfoWithKeyRange

type TableInfoWithKeyRange struct {
	*TableInfo
	StartKey string
	EndKey   string
}

TableInfoWithKeyRange stores table or index information with its key range.

func NewIndexWithKeyRange

func NewIndexWithKeyRange(db *model.DBInfo, table *model.TableInfo, index *model.IndexInfo) TableInfoWithKeyRange

NewIndexWithKeyRange constructs TableInfoWithKeyRange for given index, it is exported only for test.

func NewTableWithKeyRange

func NewTableWithKeyRange(db *model.DBInfo, table *model.TableInfo) TableInfoWithKeyRange

NewTableWithKeyRange constructs TableInfoWithKeyRange for given table, it is exported only for test.

func (TableInfoWithKeyRange) GetEndKey

func (t TableInfoWithKeyRange) GetEndKey() string

GetEndKey implements `withKeyRange` interface.

func (TableInfoWithKeyRange) GetStartKey

func (t TableInfoWithKeyRange) GetStartKey() string

GetStartKey implements `withKeyRange` interface.

type TblIndex

type TblIndex struct {
	DbName    string
	TableName string
	TableID   int64
	IndexName string
	IndexID   int64
}

TblIndex stores the things to index one table.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL