Documentation ¶
Index ¶
- func LockRows(eng engine.Engine, proc *process.Process, rel engine.Relation, tableID uint64, ...) error
- func LockTable(eng engine.Engine, proc *process.Process, tableID uint64, pkType types.Type, ...) error
- func LockTableWithUniqueID(ctx context.Context, uniqueID string, tableID uint64, ...) error
- func UnlockWithUniqueID(ctx context.Context, uniqueID string) error
- type Argument
- func (arg *Argument) AddLockTarget(tableID uint64, primaryColumnIndexInBatch int32, primaryColumnType types.Type, ...) *Argument
- func (arg *Argument) AddLockTargetWithMode(tableID uint64, mode lock.LockMode, primaryColumnIndexInBatch int32, ...) *Argument
- func (arg *Argument) AddLockTargetWithPartition(tableIDs []uint64, primaryColumnIndexInBatch int32, ...) *Argument
- func (arg *Argument) AddLockTargetWithPartitionAndMode(tableIDs []uint64, mode lock.LockMode, primaryColumnIndexInBatch int32, ...) *Argument
- func (arg *Argument) Block() bool
- func (arg *Argument) Call(proc *process.Process) (vm.CallResult, error)
- func (arg *Argument) CopyToPipelineTarget() []*pipeline.LockTarget
- func (arg *Argument) Free(proc *process.Process, pipelineFailed bool, err error)
- func (arg *Argument) GetOperatorBase() *vm.OperatorBase
- func (arg *Argument) LockTable(tableID uint64, changeDef bool) *Argument
- func (arg *Argument) LockTableWithMode(tableID uint64, mode lock.LockMode, changeDef bool) *Argument
- func (arg *Argument) Prepare(proc *process.Process) error
- func (arg *Argument) Release()
- func (arg *Argument) SetBlock(block bool) *Argument
- func (arg *Argument) String(buf *bytes.Buffer)
- func (arg Argument) TypeName() string
- type FetchLockRowsFunc
- type LockOptions
- func (opts LockOptions) WithFetchLockRowsFunc(fetchFunc FetchLockRowsFunc) LockOptions
- func (opts LockOptions) WithFilterRows(filter RowsFilter, filterCols []int32) LockOptions
- func (opts LockOptions) WithHasNewVersionInRangeFunc(fn hasNewVersionInRangeFunc) LockOptions
- func (opts LockOptions) WithLockGroup(group uint32) LockOptions
- func (opts LockOptions) WithLockMode(mode lock.LockMode) LockOptions
- func (opts LockOptions) WithLockSharding(sharding lock.Sharding) LockOptions
- func (opts LockOptions) WithLockTable(lockTable, changeDef bool) LockOptions
- func (opts LockOptions) WithMaxBytesPerLock(maxBytesPerLock int) LockOptions
- type RowsFilter
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func LockRows ¶
func LockRows( eng engine.Engine, proc *process.Process, rel engine.Relation, tableID uint64, vec *vector.Vector, pkType types.Type, lockMode lock.LockMode, sharding lock.Sharding, group uint32, ) error
LockRow lock rows in table, rows will be locked, and wait current txn closed.
func LockTable ¶
func LockTable( eng engine.Engine, proc *process.Process, tableID uint64, pkType types.Type, changeDef bool) error
LockTable lock table, all rows in the table will be locked, and wait current txn closed.
func LockTableWithUniqueID ¶ added in v1.0.0
func LockTableWithUniqueID( ctx context.Context, uniqueID string, tableID uint64, txnClient client.TxnClient, pkType types.Type, eng engine.Engine, mp *mpool.MPool, mode lock.LockMode) error
LockTableWithUniqueID is similar to LockTable, but used to lock a table directly based on a unique identifier, without using an external transaction.
Types ¶
type Argument ¶
type Argument struct { vm.OperatorBase // contains filtered or unexported fields }
Argument lock op argument.
func NewArgument ¶
func NewArgument() *Argument
func NewArgumentByEngine ¶ added in v1.2.0
NewArgument create new lock op argument.
func (*Argument) AddLockTarget ¶
func (arg *Argument) AddLockTarget( tableID uint64, primaryColumnIndexInBatch int32, primaryColumnType types.Type, refreshTimestampIndexInBatch int32) *Argument
AddLockTarget add lock target, LockMode_Exclusive will used
func (*Argument) AddLockTargetWithMode ¶ added in v1.0.0
func (arg *Argument) AddLockTargetWithMode( tableID uint64, mode lock.LockMode, primaryColumnIndexInBatch int32, primaryColumnType types.Type, refreshTimestampIndexInBatch int32) *Argument
AddLockTargetWithMode add lock target with lock mode
func (*Argument) AddLockTargetWithPartition ¶
func (arg *Argument) AddLockTargetWithPartition( tableIDs []uint64, primaryColumnIndexInBatch int32, primaryColumnType types.Type, refreshTimestampIndexInBatch int32, partitionTableIDMappingInBatch int32) *Argument
AddLockTargetWithPartition add lock targets for partition tables. Our partitioned table implementation has each partition as a separate table. So when modifying data, these rows may belong to different partitions. For lock op does not care about the logic of data and partition mapping calculation, the caller needs to tell the lock op.
tableIDs: the set of ids of the sub-tables of the partition to which the data of the current operation is attributed after calculation.
partitionTableIDMappingInBatch: the ID index of the sub-table corresponding to the data. Index of tableIDs
func (*Argument) AddLockTargetWithPartitionAndMode ¶ added in v1.0.0
func (arg *Argument) AddLockTargetWithPartitionAndMode( tableIDs []uint64, mode lock.LockMode, primaryColumnIndexInBatch int32, primaryColumnType types.Type, refreshTimestampIndexInBatch int32, partitionTableIDMappingInBatch int32) *Argument
AddLockTargetWithPartitionAndMode is similar to AddLockTargetWithPartition, but you can specify the lock mode
func (*Argument) Call ¶ added in v1.1.0
Call the lock op is used to add locks into lockservice of the Table operated by the current transaction under a pessimistic transaction.
In RC's transaction mode, after successful locking, if an accessed data is found to be concurrently modified by other transactions, a Timestamp column will be put on the output vectors for querying the latest data, and subsequent op needs to check this column to check whether the latest data needs to be read.
func (*Argument) CopyToPipelineTarget ¶
func (arg *Argument) CopyToPipelineTarget() []*pipeline.LockTarget
AddLockTarget add lock targets
func (*Argument) GetOperatorBase ¶ added in v1.2.0
func (arg *Argument) GetOperatorBase() *vm.OperatorBase
func (*Argument) LockTableWithMode ¶ added in v1.0.0
func (arg *Argument) LockTableWithMode( tableID uint64, mode lock.LockMode, changeDef bool) *Argument
LockTableWithMode is similar to LockTable, but with specify lock mode
func (*Argument) SetBlock ¶
SetBlock set the lock op is blocked. If true lock op will block the current pipeline, and cache all input batches. And wait for all the input's batch to be locked before outputting the cached batch to the downstream operator. E.g. select for update, only we get all lock result, then select can be performed, otherwise, if we need retry in RC mode, we may get wrong result.
type FetchLockRowsFunc ¶
type FetchLockRowsFunc func( vec *vector.Vector, parker *types.Packer, tp types.Type, max int, lockTable bool, filter RowsFilter, filterCols []int32) (bool, [][]byte, lock.Granularity)
FetchLockRowsFunc fetch lock rows from vector.
func GetFetchRowsFunc ¶
func GetFetchRowsFunc(t types.Type) FetchLockRowsFunc
GetFetchRowsFunc get FetchLockRowsFunc based on primary key type
type LockOptions ¶
type LockOptions struct {
// contains filtered or unexported fields
}
LockOptions lock operation options
func DefaultLockOptions ¶
func DefaultLockOptions(parker *types.Packer) LockOptions
DefaultLockOptions create a default lock operation. The parker is used to encode primary key into lock row.
func (LockOptions) WithFetchLockRowsFunc ¶
func (opts LockOptions) WithFetchLockRowsFunc(fetchFunc FetchLockRowsFunc) LockOptions
WithFetchLockRowsFunc set the primary key into lock rows conversion function.
func (LockOptions) WithFilterRows ¶
func (opts LockOptions) WithFilterRows( filter RowsFilter, filterCols []int32) LockOptions
WithFilterRows set filter rows, filterCols used to rowsFilter func
func (LockOptions) WithHasNewVersionInRangeFunc ¶
func (opts LockOptions) WithHasNewVersionInRangeFunc(fn hasNewVersionInRangeFunc) LockOptions
WithHasNewVersionInRangeFunc setup hasNewVersionInRange func
func (LockOptions) WithLockGroup ¶ added in v1.1.0
func (opts LockOptions) WithLockGroup(group uint32) LockOptions
WithLockGroup set lock group
func (LockOptions) WithLockMode ¶
func (opts LockOptions) WithLockMode(mode lock.LockMode) LockOptions
WithLockMode set lock mode, Exclusive or Shared
func (LockOptions) WithLockSharding ¶ added in v1.1.0
func (opts LockOptions) WithLockSharding(sharding lock.Sharding) LockOptions
WithLockSharding set lock sharding
func (LockOptions) WithLockTable ¶
func (opts LockOptions) WithLockTable(lockTable, changeDef bool) LockOptions
WithLockTable set lock all table
func (LockOptions) WithMaxBytesPerLock ¶
func (opts LockOptions) WithMaxBytesPerLock(maxBytesPerLock int) LockOptions
WithMaxBytesPerLock every lock operation, will add some lock rows into lockservice. If very many rows of data are added at once, this can result in an excessive memory footprint. This value limits the amount of lock memory that can be allocated per lock operation, and if it is exceeded, it will be converted to a range lock.
type RowsFilter ¶
RowsFilter used to filter row from primary vector. The row will not lock if filter return false.