raft: handled panic for Term due to IOB

Instead of raising panic, returning an error instead for better handling

#6215
release-3.1
sharat 2016-08-18 23:11:38 +05:30
parent cc4f4b47bc
commit 9b3b1f80dd
3 changed files with 5 additions and 2 deletions

View File

@ -232,7 +232,7 @@ func (l *raftLog) term(i uint64) (uint64, error) {
if err == nil {
return t, nil
}
if err == ErrCompacted {
if err == ErrCompacted || err == ErrUnavailable {
return 0, err
}
panic(err) // TODO(bdarnell)

View File

@ -130,6 +130,9 @@ func (ms *MemoryStorage) Term(i uint64) (uint64, error) {
if i < offset {
return 0, ErrCompacted
}
if int(i-offset) >= len(ms.ents) {
return 0, ErrUnavailable
}
return ms.ents[i-offset].Term, nil
}

View File

@ -35,7 +35,7 @@ func TestStorageTerm(t *testing.T) {
{3, nil, 3, false},
{4, nil, 4, false},
{5, nil, 5, false},
{6, nil, 0, true},
{6, ErrUnavailable, 0, false},
}
for i, tt := range tests {