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:
Yexiang Zhang 2021-11-18 23:41:39 +08:00 committed by GitHub
parent b0d9bb8821
commit b11da6307c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 1 deletions

View File

@ -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)
}

View File

@ -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