소스 검색

raft: not compact log if the compact index < first index of the log

It should ignore the compact operation instead of panic because the case that
the log is restored from snapshot before executing compact is reasonable.
Yicheng Qin 11 년 전
부모
커밋
4b43824be9
1개의 변경된 파일4개의 추가작업 그리고 0개의 파일을 삭제
  1. 4 0
      raft/raft.go

+ 4 - 0
raft/raft.go

@@ -534,6 +534,10 @@ func (r *raft) compact(index uint64, nodes []uint64, d []byte) {
 	if index > r.raftLog.applied {
 	if index > r.raftLog.applied {
 		panic(fmt.Sprintf("raft: compact index (%d) exceeds applied index (%d)", index, r.raftLog.applied))
 		panic(fmt.Sprintf("raft: compact index (%d) exceeds applied index (%d)", index, r.raftLog.applied))
 	}
 	}
+	if index < r.raftLog.offset {
+		//TODO: return an error?
+		return
+	}
 	r.raftLog.snap(d, index, r.raftLog.term(index), nodes)
 	r.raftLog.snap(d, index, r.raftLog.term(index), nodes)
 	r.raftLog.compact(index)
 	r.raftLog.compact(index)
 }
 }