storage: return ErrFutureRev if rev is a future one

This commit is contained in:
Yicheng Qin 2015-06-17 16:39:34 -07:00
parent 94924d04db
commit 93f477944b
2 changed files with 5 additions and 0 deletions

View File

@ -24,6 +24,7 @@ var (
ErrTnxIDMismatch = errors.New("storage: tnx id mismatch") ErrTnxIDMismatch = errors.New("storage: tnx id mismatch")
ErrCompacted = errors.New("storage: required reversion has been compacted") ErrCompacted = errors.New("storage: required reversion has been compacted")
ErrFutureRev = errors.New("storage: required reversion is a future reversion")
) )
type store struct { type store struct {
@ -240,6 +241,9 @@ func (a *store) Equal(b *store) bool {
// range is a keyword in Go, add Keys suffix. // 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) { 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 { if rangeRev <= 0 {
rev = int64(s.currentRev.main) rev = int64(s.currentRev.main)
if s.currentRev.sub > 0 { if s.currentRev.sub > 0 {

View File

@ -79,6 +79,7 @@ func TestRangeBadRev(t *testing.T) {
}{ }{
{2, ErrCompacted}, {2, ErrCompacted},
{3, ErrCompacted}, {3, ErrCompacted},
{4, ErrFutureRev},
} }
for i, tt := range tests { for i, tt := range tests {
_, _, err := s.Range([]byte("foo"), []byte("foo3"), 0, tt.rev) _, _, err := s.Range([]byte("foo"), []byte("foo3"), 0, tt.rev)