Browse Source

It's better read from genDoc than from state.validators when appHeight==0 in replay (#2893)

* optimize addProposalBlockPart

* optimize addProposalBlockPart

* if ProposalBlockParts and LockedBlockParts both exist,let LockedBlockParts overwrite ProposalBlockParts.

* fix tryAddBlock

* broadcast lockedBlockParts in higher priority

* when appHeight==0, it's better fetch genDoc than state.validators.
pull/2919/head
JamesRay 6 years ago
committed by Ethan Buchman
parent
commit
fe3b97fd66
2 changed files with 9 additions and 1 deletions
  1. +6
    -1
      consensus/replay.go
  2. +3
    -0
      types/part_set.go

+ 6
- 1
consensus/replay.go View File

@ -276,7 +276,12 @@ func (h *Handshaker) ReplayBlocks(
// If appBlockHeight == 0 it means that we are at genesis and hence should send InitChain. // If appBlockHeight == 0 it means that we are at genesis and hence should send InitChain.
if appBlockHeight == 0 { if appBlockHeight == 0 {
nextVals := types.TM2PB.ValidatorUpdates(state.NextValidators) // state.Validators would work too.
validators := make([]*types.Validator, len(h.genDoc.Validators))
for i, val := range h.genDoc.Validators {
validators[i] = types.NewValidator(val.PubKey, val.Power)
}
validatorSet := types.NewValidatorSet(validators)
nextVals := types.TM2PB.ValidatorUpdates(validatorSet)
csParams := types.TM2PB.ConsensusParams(h.genDoc.ConsensusParams) csParams := types.TM2PB.ConsensusParams(h.genDoc.ConsensusParams)
req := abci.RequestInitChain{ req := abci.RequestInitChain{
Time: h.genDoc.GenesisTime, Time: h.genDoc.GenesisTime,


+ 3
- 0
types/part_set.go View File

@ -200,6 +200,9 @@ func (ps *PartSet) Total() int {
} }
func (ps *PartSet) AddPart(part *Part) (bool, error) { func (ps *PartSet) AddPart(part *Part) (bool, error) {
if ps == nil {
return false, nil
}
ps.mtx.Lock() ps.mtx.Lock()
defer ps.mtx.Unlock() defer ps.mtx.Unlock()


Loading…
Cancel
Save