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"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/pingcap/kvproto/pkg/kvrpcpb"
|
||||||
tikverr "github.com/tikv/client-go/v2/error"
|
tikverr "github.com/tikv/client-go/v2/error"
|
||||||
"github.com/tikv/client-go/v2/util"
|
"github.com/tikv/client-go/v2/util"
|
||||||
)
|
)
|
||||||
|
|
@ -66,6 +67,11 @@ type LockCtx struct {
|
||||||
LockExpired *uint32
|
LockExpired *uint32
|
||||||
Stats *util.LockKeysDetails
|
Stats *util.LockKeysDetails
|
||||||
ResourceGroupTag []byte
|
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)
|
OnDeadlock func(*tikverr.ErrDeadlock)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,9 @@ func (action actionPessimisticLock) handleSingleBatch(c *twoPhaseCommitter, bo *
|
||||||
MinCommitTs: c.forUpdateTS + 1,
|
MinCommitTs: c.forUpdateTS + 1,
|
||||||
}, kvrpcpb.Context{Priority: c.priority, SyncLog: c.syncLog, ResourceGroupTag: action.LockCtx.ResourceGroupTag,
|
}, kvrpcpb.Context{Priority: c.priority, SyncLog: c.syncLog, ResourceGroupTag: action.LockCtx.ResourceGroupTag,
|
||||||
MaxExecutionDurationMs: uint64(client.MaxWriteExecutionTime.Milliseconds())})
|
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
|
lockWaitStartTime := action.WaitStartTime
|
||||||
for {
|
for {
|
||||||
// if lockWaitTime set, refine the request `WaitTimeout` field based on timeout limit
|
// if lockWaitTime set, refine the request `WaitTimeout` field based on timeout limit
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue