store/tikv: use tikv.error.ErrEntryTooLarge instead of kv error (#24351)

This commit is contained in:
Shirly
2021-04-28 20:45:57 +08:00
committed by GitHub
parent aaa3b748b3
commit 3f8e8beb21
3 changed files with 20 additions and 1 deletions

View File

@ -156,6 +156,10 @@ func toTiDBErr(err error) error {
return kv.ErrNotExist
}
if e, ok := err.(*tikverr.ErrEntryTooLarge); ok {
return kv.ErrEntryTooLarge.GenWithStackByArgs(e.Limit, e.Size)
}
if errors.ErrorEqual(err, tikverr.ErrInvalidTxn) {
return kv.ErrInvalidTxn
}

View File

@ -14,6 +14,8 @@
package error
import (
"fmt"
"github.com/pingcap/errors"
"github.com/pingcap/kvproto/pkg/kvrpcpb"
"github.com/pingcap/kvproto/pkg/pdpb"
@ -134,3 +136,13 @@ type ErrRetryable struct {
func (k *ErrRetryable) Error() string {
return k.Retryable
}
// ErrEntryTooLarge is the error when a key value entry is too large.
type ErrEntryTooLarge struct {
Limit uint64
Size uint64
}
func (e *ErrEntryTooLarge) Error() string {
return fmt.Sprintf("entry size too large, size: %v,limit: %v.", e.Size, e.Limit)
}

View File

@ -281,7 +281,10 @@ func (db *MemDB) set(key []byte, value []byte, ops ...kv.FlagsOp) error {
if value != nil {
if size := uint64(len(key) + len(value)); size > db.entrySizeLimit {
return tidbkv.ErrEntryTooLarge.GenWithStackByArgs(db.entrySizeLimit, size)
return &tikverr.ErrEntryTooLarge{
Limit: db.entrySizeLimit,
Size: size,
}
}
}