diff --git a/ethdb/kv_lmdb.go b/ethdb/kv_lmdb.go index d867012d0f8a67fad112fd6b6442f6e99919a8d3..50ff2292406287a7d23984bf367dfa6285073802 100644 --- a/ethdb/kv_lmdb.go +++ b/ethdb/kv_lmdb.go @@ -1172,15 +1172,14 @@ func (c *LmdbCursor) putDupSort(key []byte, value []byte) error { } if len(key) != from { - _, _, err := c.set(key) + err := c.putNoOverwrite(key, value) if err != nil { - if lmdb.IsNotFound(err) { - return c.put(key, value) + if lmdb.IsKeyExists(err) { + return c.putCurrent(key, value) } return err } - - return c.putCurrent(key, value) + return nil } value = append(key[to:], value...) diff --git a/ethdb/kv_mdbx.go b/ethdb/kv_mdbx.go index 1011c06376137697615b787dc5ff1105636f6d6e..f3a43f78e50c8d07e2885b6215eeeee1b9462754 100644 --- a/ethdb/kv_mdbx.go +++ b/ethdb/kv_mdbx.go @@ -1161,15 +1161,14 @@ func (c *MdbxCursor) putDupSort(key []byte, value []byte) error { } if len(key) != from { - _, _, err := c.set(key) + err := c.putNoOverwrite(key, value) if err != nil { - if mdbx.IsNotFound(err) { - return c.put(key, value) + if mdbx.IsKeyExists(err) { + return c.putCurrent(key, value) } return err } - - return c.putCurrent(key, value) + return nil } value = append(key[to:], value...) diff --git a/ethdb/mdbx/error.go b/ethdb/mdbx/error.go index eaf433c0af51f6a9c2f31a1f1f017181291c4771..6c70ec4426b281e082feb83679cd70cc566d3574 100644 --- a/ethdb/mdbx/error.go +++ b/ethdb/mdbx/error.go @@ -92,6 +92,10 @@ func IsNotFound(err error) bool { return IsErrno(err, NotFound) } +func IsKeyExists(err error) bool { + return IsErrno(err, KeyExist) +} + // IsNotExist returns true the path passed to the Env.Open method does not // exist. func IsNotExist(err error) bool { diff --git a/go.mod b/go.mod index 4b4688280edf25d63e44025550fc4c442330ff8a..7ed56ba64e8945da91308e3542eff6cb09b5f532 100644 --- a/go.mod +++ b/go.mod @@ -48,7 +48,7 @@ require ( github.com/julienschmidt/httprouter v1.2.0 github.com/karalabe/usb v0.0.0-20191104083709-911d15fe12a9 github.com/kevinburke/go-bindata v3.21.0+incompatible - github.com/ledgerwatch/lmdb-go v1.17.1 + github.com/ledgerwatch/lmdb-go v1.17.2 github.com/llgcode/draw2d v0.0.0-20200603164053-19660b984a28 github.com/logrusorgru/aurora v2.0.3+incompatible github.com/mattn/go-colorable v0.1.7 diff --git a/go.sum b/go.sum index 5c14f2c581f3c664532cd876b4f8f5091c0f2dac..db3413bba375a7e66b8d98c47f16f3e69b621f01 100644 --- a/go.sum +++ b/go.sum @@ -499,8 +499,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/ledgerwatch/lmdb-go v1.17.1 h1:1Ridp9Pf4Ao3Db9JzpcwCDusWISwqhbghsg0Rj27GGw= -github.com/ledgerwatch/lmdb-go v1.17.1/go.mod h1:NKRpCxksoTQPyxsUcBiVOe0135uqnJsnf6cElxmOL0o= +github.com/ledgerwatch/lmdb-go v1.17.2 h1:O4b/r1IjQSN1nzz45kgUzYC8XeLGcV4+I/JGHgeOkPo= +github.com/ledgerwatch/lmdb-go v1.17.2/go.mod h1:NKRpCxksoTQPyxsUcBiVOe0135uqnJsnf6cElxmOL0o= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=