Преглед изворни кода

raft: lock storage when compact it

etcd now compact raft storage asynchronously, and append entry to raft
storage may happen at the same time. Add the lock to fix the bug that
the entries saved in storage may be organized in a wrong way.
Yicheng Qin пре 11 година
родитељ
комит
c6de464587
1 измењених фајлова са 2 додато и 0 уклоњено
  1. 2 0
      raft/storage.go

+ 2 - 0
raft/storage.go

@@ -194,6 +194,8 @@ func (ms *MemoryStorage) CreateSnapshot(i uint64, cs *pb.ConfState, data []byte)
 // It is the application's responsibility to not attempt to compact an index
 // It is the application's responsibility to not attempt to compact an index
 // greater than raftLog.applied.
 // greater than raftLog.applied.
 func (ms *MemoryStorage) Compact(compactIndex uint64) error {
 func (ms *MemoryStorage) Compact(compactIndex uint64) error {
+	ms.Lock()
+	defer ms.Unlock()
 	offset := ms.ents[0].Index
 	offset := ms.ents[0].Index
 	if compactIndex <= offset {
 	if compactIndex <= offset {
 		return ErrCompacted
 		return ErrCompacted