raft: handled panic for Term due to IOB
Instead of raising panic, returning an error instead for better handling #6215release-3.1
parent
cc4f4b47bc
commit
9b3b1f80dd
|
@ -232,7 +232,7 @@ func (l *raftLog) term(i uint64) (uint64, error) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return t, nil
|
return t, nil
|
||||||
}
|
}
|
||||||
if err == ErrCompacted {
|
if err == ErrCompacted || err == ErrUnavailable {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
panic(err) // TODO(bdarnell)
|
panic(err) // TODO(bdarnell)
|
||||||
|
|
|
@ -130,6 +130,9 @@ func (ms *MemoryStorage) Term(i uint64) (uint64, error) {
|
||||||
if i < offset {
|
if i < offset {
|
||||||
return 0, ErrCompacted
|
return 0, ErrCompacted
|
||||||
}
|
}
|
||||||
|
if int(i-offset) >= len(ms.ents) {
|
||||||
|
return 0, ErrUnavailable
|
||||||
|
}
|
||||||
return ms.ents[i-offset].Term, nil
|
return ms.ents[i-offset].Term, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ func TestStorageTerm(t *testing.T) {
|
||||||
{3, nil, 3, false},
|
{3, nil, 3, false},
|
||||||
{4, nil, 4, false},
|
{4, nil, 4, false},
|
||||||
{5, nil, 5, false},
|
{5, nil, 5, false},
|
||||||
{6, nil, 0, true},
|
{6, ErrUnavailable, 0, false},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range tests {
|
for i, tt := range tests {
|
||||||
|
|
Loading…
Reference in New Issue