Instead of raising panic, returning an error instead for better handling #6215
@@ -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)
@@ -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
@@ -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 {