func()

in store/engine/raft/store.go [139:174]


func (ds *DataStore) replayWAL() (*raftpb.Snapshot, error) {
	snapshot, err := ds.loadSnapshotFromDisk()
	if err != nil {
		return nil, fmt.Errorf("failed to load newest snapshot: %w", err)
	}

	w, err := ds.openWAL(snapshot)
	if err != nil {
		return nil, fmt.Errorf("failed to open WAL: %w", err)
	}
	ds.wal = w

	_, hardState, entries, err := w.ReadAll()
	if err != nil {
		return nil, fmt.Errorf("failed to read WAL: %w", err)
	}
	if snapshot != nil {
		_ = ds.raftStorage.ApplySnapshot(*snapshot)
	}
	if err := ds.raftStorage.SetHardState(hardState); err != nil {
		return nil, fmt.Errorf("failed to set hard state: %w", err)
	}
	if err := ds.raftStorage.Append(entries); err != nil {
		return nil, fmt.Errorf("failed to append entries: %w", err)
	}

	if err := ds.reloadSnapshot(); err != nil {
		return nil, fmt.Errorf("failed to reload snapshot: %w", err)
	}
	for _, entry := range entries {
		if err := ds.applyDataEntry(entry); err != nil {
			return nil, fmt.Errorf("failed to apply data entry: %w", err)
		}
	}
	return snapshot, nil
}