From 9b3b1f80dd992f31e04f10061e1ba6c0f7880c7d Mon Sep 17 00:00:00 2001 From: sharat Date: Thu, 18 Aug 2016 23:11:38 +0530 Subject: [PATCH] raft: handled panic for Term due to IOB Instead of raising panic, returning an error instead for better handling #6215 --- raft/log.go | 2 +- raft/storage.go | 3 +++ raft/storage_test.go | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/raft/log.go b/raft/log.go index e626385d5..c3036d3c9 100644 --- a/raft/log.go +++ b/raft/log.go @@ -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) diff --git a/raft/storage.go b/raft/storage.go index 4b18842fa..57a525e39 100644 --- a/raft/storage.go +++ b/raft/storage.go @@ -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 } diff --git a/raft/storage_test.go b/raft/storage_test.go index 39e7124fb..71d50b4c9 100644 --- a/raft/storage_test.go +++ b/raft/storage_test.go @@ -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 {