store/tikv: use tikv.error.ErrEntryTooLarge instead of kv error (#24351)
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user