From 93f477944b0197ba7eca885ecdf4c351468e4227 Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Wed, 17 Jun 2015 16:39:34 -0700 Subject: [PATCH] storage: return ErrFutureRev if rev is a future one --- storage/kvstore.go | 4 ++++ storage/kvstore_test.go | 1 + 2 files changed, 5 insertions(+) diff --git a/storage/kvstore.go b/storage/kvstore.go index f2b371783..87e24c352 100644 --- a/storage/kvstore.go +++ b/storage/kvstore.go @@ -24,6 +24,7 @@ var ( ErrTnxIDMismatch = errors.New("storage: tnx id mismatch") ErrCompacted = errors.New("storage: required reversion has been compacted") + ErrFutureRev = errors.New("storage: required reversion is a future reversion") ) type store struct { @@ -240,6 +241,9 @@ func (a *store) Equal(b *store) bool { // range is a keyword in Go, add Keys suffix. func (s *store) rangeKeys(key, end []byte, limit, rangeRev int64) (kvs []storagepb.KeyValue, rev int64, err error) { + if rangeRev > s.currentRev.main { + return nil, s.currentRev.main, ErrFutureRev + } if rangeRev <= 0 { rev = int64(s.currentRev.main) if s.currentRev.sub > 0 { diff --git a/storage/kvstore_test.go b/storage/kvstore_test.go index f186ed6b4..333b9927d 100644 --- a/storage/kvstore_test.go +++ b/storage/kvstore_test.go @@ -79,6 +79,7 @@ func TestRangeBadRev(t *testing.T) { }{ {2, ErrCompacted}, {3, ErrCompacted}, + {4, ErrFutureRev}, } for i, tt := range tests { _, _, err := s.Range([]byte("foo"), []byte("foo3"), 0, tt.rev)