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
}