コード例 #1
0
ファイル: fragmentstorage.go プロジェクト: syhao/sunbase
func (fs *FragmentStorage) CreateSnapshot(i uint64, cs *pb.ConfState, data []byte) (pb.Snapshot, error) {
	fs.Lock()
	defer fs.Unlock()
	snapshot := pb.Snapshot{}
	preSnapshot, err := fs.Snapshot()
	if err != nil {
		return snapshot, err
	}
	if i <= preSnapshot.Metadata.Index {
		return pb.Snapshot{}, ErrSnapOutOfDate
	}
	lastIndex, err := fs.LastIndex()
	if err != nil {
		return snapshot, err
	}
	if i > lastIndex {
		fmt.Errorf("snapshot %d is out of bound lastindex(%d)", i, lastIndex)
	}
	snapshot.Metadata.Index = i
	if en, err := fs.Entry(i); err != nil {
		return snapshot, err
	} else {
		snapshot.Metadata.Term = en.Term
	}
	if cs != nil {
		snapshot.Metadata.ConfState = *cs
	}
	snapshot.Data = data
	return snapshot, nil

}