mirror of https://github.com/tikv/client-go.git
txnkv: add ResourceGroupTagger for PessimisticLockRequest (#381)
* Add ResourceGroupTagger for PessimisticLockRequest Signed-off-by: mornyx <mornyx.z@gmail.com> * Fix circular dependency Signed-off-by: mornyx <mornyx.z@gmail.com>
This commit is contained in:
parent
b0d9bb8821
commit
b11da6307c
6
kv/kv.go
6
kv/kv.go
|
|
@ -25,6 +25,7 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/pingcap/kvproto/pkg/kvrpcpb"
|
||||
tikverr "github.com/tikv/client-go/v2/error"
|
||||
"github.com/tikv/client-go/v2/util"
|
||||
)
|
||||
|
|
@ -66,6 +67,11 @@ type LockCtx struct {
|
|||
LockExpired *uint32
|
||||
Stats *util.LockKeysDetails
|
||||
ResourceGroupTag []byte
|
||||
// ResourceGroupTagger is a special tagger used only for PessimisticLockRequest.
|
||||
// We did not use tikvrpc.ResourceGroupTagger here because the kv package is a
|
||||
// more basic component, and we cannot rely on tikvrpc.Request here, so we treat
|
||||
// LockCtx specially.
|
||||
ResourceGroupTagger func(*kvrpcpb.PessimisticLockRequest) []byte
|
||||
OnDeadlock func(*tikverr.ErrDeadlock)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -119,6 +119,9 @@ func (action actionPessimisticLock) handleSingleBatch(c *twoPhaseCommitter, bo *
|
|||
MinCommitTs: c.forUpdateTS + 1,
|
||||
}, kvrpcpb.Context{Priority: c.priority, SyncLog: c.syncLog, ResourceGroupTag: action.LockCtx.ResourceGroupTag,
|
||||
MaxExecutionDurationMs: uint64(client.MaxWriteExecutionTime.Milliseconds())})
|
||||
if action.LockCtx.ResourceGroupTag == nil && action.LockCtx.ResourceGroupTagger != nil {
|
||||
req.ResourceGroupTag = action.LockCtx.ResourceGroupTagger(req.Req.(*kvrpcpb.PessimisticLockRequest))
|
||||
}
|
||||
lockWaitStartTime := action.WaitStartTime
|
||||
for {
|
||||
// if lockWaitTime set, refine the request `WaitTimeout` field based on timeout limit
|
||||
|
|
|
|||
Loading…
Reference in New Issue