Merge pull request #5115 from gyuho/gc

v3rpc: bytes-key map look-up gc optimization
release-3.0
Xiang Li 2016-04-17 13:21:47 -07:00
commit 9504df2917
1 changed files with 4 additions and 6 deletions

View File

@ -185,11 +185,10 @@ func checkRequestDupKeys(reqs []*pb.RequestUnion) error {
if preq == nil { if preq == nil {
continue continue
} }
key := string(preq.Key) if _, ok := keys[string(preq.Key)]; ok {
if _, ok := keys[key]; ok {
return rpctypes.ErrDuplicateKey return rpctypes.ErrDuplicateKey
} }
keys[key] = struct{}{} keys[string(preq.Key)] = struct{}{}
} }
// no need to check deletes if no puts; delete overlaps are permitted // no need to check deletes if no puts; delete overlaps are permitted
@ -214,13 +213,12 @@ func checkRequestDupKeys(reqs []*pb.RequestUnion) error {
if dreq == nil { if dreq == nil {
continue continue
} }
key := string(dreq.Key)
if dreq.RangeEnd == nil { if dreq.RangeEnd == nil {
if _, found := keys[key]; found { if _, found := keys[string(dreq.Key)]; found {
return rpctypes.ErrDuplicateKey return rpctypes.ErrDuplicateKey
} }
} else { } else {
lo := sort.SearchStrings(sortedKeys, key) lo := sort.SearchStrings(sortedKeys, string(dreq.Key))
hi := sort.SearchStrings(sortedKeys, string(dreq.RangeEnd)) hi := sort.SearchStrings(sortedKeys, string(dreq.RangeEnd))
if lo != hi { if lo != hi {
// element between lo and hi => overlap // element between lo and hi => overlap