Documentation ¶
Index ¶
- Constants
- Variables
- func BootstrapWithMultiRegions(cluster *Cluster, splitKeys ...[]byte) (storeID uint64, regionIDs, peerIDs []uint64)
- func BootstrapWithMultiStores(cluster *Cluster, n int) (storeIDs, peerIDs []uint64, regionID uint64, leaderPeer uint64)
- func BootstrapWithSingleStore(cluster *Cluster) (storeID, peerID, regionID uint64)
- func NewPDClient(cluster *Cluster) pd.Client
- type Cluster
- func (c *Cluster) AddPeer(regionID, storeID, peerID uint64)
- func (c *Cluster) AddStore(storeID uint64, addr string)
- func (c *Cluster) AllocID() uint64
- func (c *Cluster) AllocIDs(n int) []uint64
- func (c *Cluster) Bootstrap(regionID uint64, storeIDs, peerIDs []uint64, leaderStoreID uint64)
- func (c *Cluster) CancelStore(storeID uint64)
- func (c *Cluster) ChangeLeader(regionID, leaderStoreID uint64)
- func (c *Cluster) GetAllRegions() []*Region
- func (c *Cluster) GetAndCheckStoreByAddr(addr string) (*metapb.Store, error)
- func (c *Cluster) GetRegion(regionID uint64) (*metapb.Region, uint64)
- func (c *Cluster) GetRegionByID(regionID uint64) (*metapb.Region, *metapb.Peer)
- func (c *Cluster) GetRegionByKey(key []byte) (*metapb.Region, *metapb.Peer)
- func (c *Cluster) GetStore(storeID uint64) *metapb.Store
- func (c *Cluster) GetStoreByAddr(addr string) *metapb.Store
- func (c *Cluster) GiveUpLeader(regionID uint64)
- func (c *Cluster) Merge(regionID1, regionID2 uint64)
- func (c *Cluster) RemovePeer(regionID, storeID uint64)
- func (c *Cluster) RemoveStore(storeID uint64)
- func (c *Cluster) Split(regionID, newRegionID uint64, key []byte, peerIDs []uint64, ...)
- func (c *Cluster) SplitIndex(mvccStore *MvccStore, tableID, indexID int64, count int)
- func (c *Cluster) SplitRaw(regionID, newRegionID uint64, rawKey []byte, peerIDs []uint64, ...)
- func (c *Cluster) SplitTable(mvccStore *MvccStore, tableID int64, count int)
- func (c *Cluster) StartStore(storeID uint64)
- func (c *Cluster) StopStore(storeID uint64)
- func (c *Cluster) UnCancelStore(storeID uint64)
- func (c *Cluster) UpdateStoreAddr(storeID uint64, addr string)
- type ErrAbort
- type ErrAlreadyCommitted
- type ErrLocked
- type ErrRetryable
- type Iterator
- type MVCCDebugger
- type MVCCLevelDB
- func (mvcc *MVCCLevelDB) BatchGet(ks [][]byte, startTS uint64, isoLevel kvrpcpb.IsolationLevel) []Pair
- func (mvcc *MVCCLevelDB) Cleanup(key []byte, startTS uint64) error
- func (mvcc *MVCCLevelDB) Close() error
- func (mvcc *MVCCLevelDB) Commit(keys [][]byte, startTS, commitTS uint64) error
- func (mvcc *MVCCLevelDB) Get(key []byte, startTS uint64, isoLevel kvrpcpb.IsolationLevel) ([]byte, error)
- func (mvcc *MVCCLevelDB) Prewrite(mutations []*kvrpcpb.Mutation, primary []byte, startTS uint64, ttl uint64) []error
- func (mvcc *MVCCLevelDB) ResolveLock(startKey, endKey []byte, startTS, commitTS uint64) error
- func (mvcc *MVCCLevelDB) ReverseScan(startKey, endKey []byte, limit int, startTS uint64, ...) []Pair
- func (mvcc *MVCCLevelDB) Rollback(keys [][]byte, startTS uint64) error
- func (mvcc *MVCCLevelDB) Scan(startKey, endKey []byte, limit int, startTS uint64, ...) []Pair
- func (mvcc *MVCCLevelDB) ScanLock(startKey, endKey []byte, maxTS uint64) ([]*kvrpcpb.LockInfo, error)
- type MVCCStore
- type MvccKey
- type MvccStore
- func (s *MvccStore) BatchGet(ks [][]byte, startTS uint64, isoLevel kvrpcpb.IsolationLevel) []Pair
- func (s *MvccStore) Cleanup(key []byte, startTS uint64) error
- func (s *MvccStore) Commit(keys [][]byte, startTS, commitTS uint64) error
- func (s *MvccStore) Get(key []byte, startTS uint64, isoLevel kvrpcpb.IsolationLevel) ([]byte, error)
- func (s *MvccStore) MvccGetByKey(key []byte) *kvrpcpb.MvccInfo
- func (s *MvccStore) MvccGetByStartTS(startKey, endKey []byte, starTS uint64) (*kvrpcpb.MvccInfo, []byte)
- func (s *MvccStore) Prewrite(mutations []*kvrpcpb.Mutation, primary []byte, startTS uint64, ttl uint64) []error
- func (s *MvccStore) RawDelete(key []byte)
- func (s *MvccStore) RawGet(key []byte) []byte
- func (s *MvccStore) RawPut(key, value []byte)
- func (s *MvccStore) RawScan(startKey, endKey []byte, limit int) []Pair
- func (s *MvccStore) ResolveLock(startKey, endKey []byte, startTS, commitTS uint64) error
- func (s *MvccStore) ReverseScan(startKey, endKey []byte, limit int, startTS uint64, ...) []Pair
- func (s *MvccStore) Rollback(keys [][]byte, startTS uint64) error
- func (s *MvccStore) Scan(startKey, endKey []byte, limit int, startTS uint64, ...) []Pair
- func (s *MvccStore) ScanLock(startKey, endKey []byte, maxTS uint64) ([]*kvrpcpb.LockInfo, error)
- type Pair
- type RPCClient
- type RawKV
- type Region
- type Store
Constants ¶
const ( // FlagIgnoreTruncate indicates if truncate error should be ignored. // Read-only statements should ignore truncate error, write statements should not ignore truncate error. FlagIgnoreTruncate uint64 = 1 // FlagTruncateAsWarning indicates if truncate error should be returned as warning. // This flag only matters if FlagIgnoreTruncate is not set, in strict sql mode, truncate error should // be returned as error, in non-strict sql mode, truncate error should be saved as warning. FlagTruncateAsWarning uint64 = 1 << 1 )
Flags are used by tipb.SelectRequest.Flags to handle execution mode, like how to handle truncate error.
Variables ¶
var ErrInvalidEncodedKey = errors.New("invalid encoded key")
ErrInvalidEncodedKey describes parsing an invalid format of EncodedKey.
Functions ¶
func BootstrapWithMultiRegions ¶
func BootstrapWithMultiRegions(cluster *Cluster, splitKeys ...[]byte) (storeID uint64, regionIDs, peerIDs []uint64)
BootstrapWithMultiRegions initializes a Cluster with multiple Regions and 1 Store. The number of Regions will be len(splitKeys) + 1.
func BootstrapWithMultiStores ¶
func BootstrapWithMultiStores(cluster *Cluster, n int) (storeIDs, peerIDs []uint64, regionID uint64, leaderPeer uint64)
BootstrapWithMultiStores initializes a Cluster with 1 Region and n Stores.
func BootstrapWithSingleStore ¶
BootstrapWithSingleStore initializes a Cluster with 1 Region and 1 Store.
func NewPDClient ¶
func NewPDClient(cluster *Cluster) pd.Client
NewPDClient creates a mock pd.Client that uses local timestamp and meta data from a Cluster.
Types ¶
type Cluster ¶
Cluster simulates a TiKV cluster. It focuses on management and the change of meta data. A Cluster mainly includes following 3 kinds of meta data:
- Region: A Region is a fragment of TiKV's data whose range is [start, end). The data of a Region is duplicated to multiple Peers and distributed in multiple Stores.
- Peer: A Peer is a replica of a Region's data. All peers of a Region form a group, each group elects a Leader to provide services.
- Store: A Store is a storage/service node. Try to think it as a TiKV server process. Only the store with request's Region's leader Peer could respond to client's request.
func NewCluster ¶
func NewCluster() *Cluster
NewCluster creates an empty cluster. It needs to be bootstrapped before providing service.
func (*Cluster) AllocID ¶
AllocID creates an unique ID in cluster. The ID could be used as either StoreID, RegionID, or PeerID.
func (*Cluster) Bootstrap ¶
Bootstrap creates the first Region. The Stores should be in the Cluster before bootstrap.
func (*Cluster) CancelStore ¶
CancelStore makes the store with cancel state true.
func (*Cluster) ChangeLeader ¶
ChangeLeader sets the Region's leader Peer. Caller should guarantee the Peer exists.
func (*Cluster) GetAllRegions ¶
GetAllRegions gets all the regions in the cluster.
func (*Cluster) GetAndCheckStoreByAddr ¶
GetAndCheckStoreByAddr checks and returns a Store's meta by an addr
func (*Cluster) GetRegionByID ¶
GetRegionByID returns the Region and its leader whose ID is regionID.
func (*Cluster) GetRegionByKey ¶
GetRegionByKey returns the Region and its leader whose range contains the key.
func (*Cluster) GetStoreByAddr ¶
GetStoreByAddr returns a Store's meta by an addr.
func (*Cluster) GiveUpLeader ¶
GiveUpLeader sets the Region's leader to 0. The Region will have no leader before calling ChangeLeader().
func (*Cluster) RemovePeer ¶
RemovePeer removes the Peer from the Region. Note that if the Peer is leader, the Region will have no leader before calling ChangeLeader().
func (*Cluster) RemoveStore ¶
RemoveStore removes a Store from the cluster.
func (*Cluster) Split ¶
func (c *Cluster) Split(regionID, newRegionID uint64, key []byte, peerIDs []uint64, leaderPeerID uint64)
Split splits a Region at the key (encoded) and creates new Region.
func (*Cluster) SplitIndex ¶
SplitIndex evenly splits the data in index into count regions. Only works for single store.
func (*Cluster) SplitRaw ¶
func (c *Cluster) SplitRaw(regionID, newRegionID uint64, rawKey []byte, peerIDs []uint64, leaderPeerID uint64)
SplitRaw splits a Region at the key (not encoded) and creates new Region.
func (*Cluster) SplitTable ¶
SplitTable evenly splits the data in table into count regions. Only works for single store.
func (*Cluster) StartStore ¶
StartStore starts a store with storeID.
func (*Cluster) UnCancelStore ¶
UnCancelStore makes the store with cancel state false.
func (*Cluster) UpdateStoreAddr ¶
UpdateStoreAddr updates store address for cluster.
type ErrAbort ¶
type ErrAbort string
ErrAbort means something is wrong and client should abort the txn.
type ErrAlreadyCommitted ¶
type ErrAlreadyCommitted uint64
ErrAlreadyCommitted is returned specially when client tries to rollback a committed lock.
func (ErrAlreadyCommitted) Error ¶
func (e ErrAlreadyCommitted) Error() string
type ErrLocked ¶
ErrLocked is returned when trying to Read/Write on a locked key. Client should backoff or cleanup the lock then retry.
type ErrRetryable ¶
type ErrRetryable string
ErrRetryable suggests that client may restart the txn. e.g. write conflict.
func (ErrRetryable) Error ¶
func (e ErrRetryable) Error() string
type Iterator ¶
Iterator wraps iterator.Iterator to provide Valid() method.
type MVCCDebugger ¶
type MVCCDebugger interface { MvccGetByStartTS(startKey, endKey []byte, starTS uint64) (*kvrpcpb.MvccInfo, []byte) MvccGetByKey(key []byte) *kvrpcpb.MvccInfo }
MVCCDebugger is for debugging.
type MVCCLevelDB ¶
type MVCCLevelDB struct {
// contains filtered or unexported fields
}
MVCCLevelDB implements the MVCCStore interface.
func NewMVCCLevelDB ¶
func NewMVCCLevelDB(path string) (*MVCCLevelDB, error)
NewMVCCLevelDB returns a new MVCCLevelDB object.
func (*MVCCLevelDB) BatchGet ¶
func (mvcc *MVCCLevelDB) BatchGet(ks [][]byte, startTS uint64, isoLevel kvrpcpb.IsolationLevel) []Pair
BatchGet implements the MVCCStore interface.
func (*MVCCLevelDB) Cleanup ¶
func (mvcc *MVCCLevelDB) Cleanup(key []byte, startTS uint64) error
Cleanup implements the MVCCStore interface.
func (*MVCCLevelDB) Close ¶
func (mvcc *MVCCLevelDB) Close() error
Close calls leveldb's Close to free resources.
func (*MVCCLevelDB) Commit ¶
func (mvcc *MVCCLevelDB) Commit(keys [][]byte, startTS, commitTS uint64) error
Commit implements the MVCCStore interface.
func (*MVCCLevelDB) Get ¶
func (mvcc *MVCCLevelDB) Get(key []byte, startTS uint64, isoLevel kvrpcpb.IsolationLevel) ([]byte, error)
Get implements the MVCCStore interface. key cannot be nil or []byte{}
func (*MVCCLevelDB) Prewrite ¶
func (mvcc *MVCCLevelDB) Prewrite(mutations []*kvrpcpb.Mutation, primary []byte, startTS uint64, ttl uint64) []error
Prewrite implements the MVCCStore interface.
func (*MVCCLevelDB) ResolveLock ¶
func (mvcc *MVCCLevelDB) ResolveLock(startKey, endKey []byte, startTS, commitTS uint64) error
ResolveLock implements the MVCCStore interface.
func (*MVCCLevelDB) ReverseScan ¶
func (mvcc *MVCCLevelDB) ReverseScan(startKey, endKey []byte, limit int, startTS uint64, isoLevel kvrpcpb.IsolationLevel) []Pair
ReverseScan implements the MVCCStore interface. The search range is [startKey, endKey).
func (*MVCCLevelDB) Rollback ¶
func (mvcc *MVCCLevelDB) Rollback(keys [][]byte, startTS uint64) error
Rollback implements the MVCCStore interface.
func (*MVCCLevelDB) Scan ¶
func (mvcc *MVCCLevelDB) Scan(startKey, endKey []byte, limit int, startTS uint64, isoLevel kvrpcpb.IsolationLevel) []Pair
Scan implements the MVCCStore interface.
type MVCCStore ¶
type MVCCStore interface { Get(key []byte, startTS uint64, isoLevel kvrpcpb.IsolationLevel) ([]byte, error) Scan(startKey, endKey []byte, limit int, startTS uint64, isoLevel kvrpcpb.IsolationLevel) []Pair ReverseScan(startKey, endKey []byte, limit int, startTS uint64, isoLevel kvrpcpb.IsolationLevel) []Pair BatchGet(ks [][]byte, startTS uint64, isoLevel kvrpcpb.IsolationLevel) []Pair Prewrite(mutations []*kvrpcpb.Mutation, primary []byte, startTS uint64, ttl uint64) []error Commit(keys [][]byte, startTS, commitTS uint64) error Rollback(keys [][]byte, startTS uint64) error Cleanup(key []byte, startTS uint64) error ScanLock(startKey, endKey []byte, maxTS uint64) ([]*kvrpcpb.LockInfo, error) ResolveLock(startKey, endKey []byte, startTS, commitTS uint64) error }
MVCCStore is a mvcc key-value storage.
type MvccKey ¶
type MvccKey []byte
MvccKey is the encoded key type. On TiKV, keys are encoded before they are saved into storage engine.
type MvccStore ¶
MvccStore is an in-memory, multi-versioned, transaction-supported kv storage.
func (*MvccStore) Get ¶
func (s *MvccStore) Get(key []byte, startTS uint64, isoLevel kvrpcpb.IsolationLevel) ([]byte, error)
Get reads a key by ts.
func (*MvccStore) MvccGetByKey ¶
MvccGetByKey gets mvcc info for the key
func (*MvccStore) MvccGetByStartTS ¶
func (s *MvccStore) MvccGetByStartTS(startKey, endKey []byte, starTS uint64) (*kvrpcpb.MvccInfo, []byte)
MvccGetByStartTS gets mvcc info for the primary key with startTS
func (*MvccStore) Prewrite ¶
func (s *MvccStore) Prewrite(mutations []*kvrpcpb.Mutation, primary []byte, startTS uint64, ttl uint64) []error
Prewrite acquires a lock on a key. (1st phase of 2PC).
func (*MvccStore) ResolveLock ¶
ResolveLock resolves all orphan locks belong to a transaction.
func (*MvccStore) ReverseScan ¶
func (s *MvccStore) ReverseScan(startKey, endKey []byte, limit int, startTS uint64, isoLevel kvrpcpb.IsolationLevel) []Pair
ReverseScan reads up to a limited number of Pairs that greater than or equal to startKey and less than endKey in descending order.
func (*MvccStore) Rollback ¶
Rollback cleanups multiple locks, often used when rolling back a conflict txn.
type RPCClient ¶
RPCClient sends kv RPC calls to mock cluster.
func NewRPCClient ¶
NewRPCClient creates an RPCClient. Note that close the RPCClient may close the underlying MvccStore.
type RawKV ¶
type RawKV interface { RawGet(key []byte) []byte RawScan(startKey, endKey []byte, limit int) []Pair RawPut(key, value []byte) RawDelete(key []byte) }
RawKV is a key-value storage. MVCCStore can be implemented upon it with timestamp encoded into key.