mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-08 06:15:33 +00:00
consensus: timeout params in toml used as overrides (#8186)
Replaces the set of timeout parameters in the config.toml file with unsafe-*override versions of the corresponding ConsensusParams.Timeout field. These fields can be used for the duration of v0.36 to override the consensus param in case of emergency. Adds a set to the ./internal/consensus/State type for correctly calculating the value of each timeout based on the set of overrides specified.
This commit is contained in:
@@ -247,24 +247,24 @@ func (params ConsensusParams) ValidateConsensusParams() error {
|
||||
params.Synchrony.Precision)
|
||||
}
|
||||
|
||||
if params.Timeout.Propose < 0 {
|
||||
return fmt.Errorf("timeout.ProposeDelta must not be negative. Got: %d", params.Timeout.Propose)
|
||||
if params.Timeout.Propose <= 0 {
|
||||
return fmt.Errorf("timeout.ProposeDelta must be greater than 0. Got: %d", params.Timeout.Propose)
|
||||
}
|
||||
|
||||
if params.Timeout.ProposeDelta < 0 {
|
||||
return fmt.Errorf("timeout.ProposeDelta must not be negative. Got: %d", params.Timeout.ProposeDelta)
|
||||
if params.Timeout.ProposeDelta <= 0 {
|
||||
return fmt.Errorf("timeout.ProposeDelta must be greater than 0. Got: %d", params.Timeout.ProposeDelta)
|
||||
}
|
||||
|
||||
if params.Timeout.Vote < 0 {
|
||||
return fmt.Errorf("timeout.Vote must not be negative. Got: %d", params.Timeout.Vote)
|
||||
if params.Timeout.Vote <= 0 {
|
||||
return fmt.Errorf("timeout.Vote must be greater than 0. Got: %d", params.Timeout.Vote)
|
||||
}
|
||||
|
||||
if params.Timeout.VoteDelta < 0 {
|
||||
return fmt.Errorf("timeout.VoteDelta must not be negative. Got: %d", params.Timeout.VoteDelta)
|
||||
if params.Timeout.VoteDelta <= 0 {
|
||||
return fmt.Errorf("timeout.VoteDelta must be greater than 0. Got: %d", params.Timeout.VoteDelta)
|
||||
}
|
||||
|
||||
if params.Timeout.Commit < 0 {
|
||||
return fmt.Errorf("timeout.Commit must not be negative. Got: %d", params.Timeout.Commit)
|
||||
if params.Timeout.Commit <= 0 {
|
||||
return fmt.Errorf("timeout.Commit must be greater than 0. Got: %d", params.Timeout.Commit)
|
||||
}
|
||||
|
||||
if len(params.Validator.PubKeyTypes) == 0 {
|
||||
|
||||
@@ -19,11 +19,13 @@ var (
|
||||
|
||||
func TestConsensusParamsValidation(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
params ConsensusParams
|
||||
valid bool
|
||||
}{
|
||||
// test block params
|
||||
{
|
||||
name: "block params valid",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 1,
|
||||
evidenceAge: 2,
|
||||
@@ -32,6 +34,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
valid: true,
|
||||
},
|
||||
{
|
||||
name: "block params invalid MaxBytes",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 0,
|
||||
evidenceAge: 2,
|
||||
@@ -40,6 +43,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
valid: false,
|
||||
},
|
||||
{
|
||||
name: "block params large MaxBytes",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 47 * 1024 * 1024,
|
||||
evidenceAge: 2,
|
||||
@@ -48,6 +52,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
valid: true,
|
||||
},
|
||||
{
|
||||
name: "block params small MaxBytes",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 10,
|
||||
evidenceAge: 2,
|
||||
@@ -56,6 +61,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
valid: true,
|
||||
},
|
||||
{
|
||||
name: "block params 100MB MaxBytes",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 100 * 1024 * 1024,
|
||||
evidenceAge: 2,
|
||||
@@ -64,6 +70,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
valid: true,
|
||||
},
|
||||
{
|
||||
name: "block params MaxBytes too large",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 101 * 1024 * 1024,
|
||||
evidenceAge: 2,
|
||||
@@ -72,14 +79,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
valid: false,
|
||||
},
|
||||
{
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 1024 * 1024 * 1024,
|
||||
evidenceAge: 2,
|
||||
precision: 1,
|
||||
messageDelay: 1}),
|
||||
valid: false,
|
||||
},
|
||||
{
|
||||
name: "block params 1GB MaxBytes",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 1024 * 1024 * 1024,
|
||||
evidenceAge: 2,
|
||||
@@ -89,6 +89,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
},
|
||||
// test evidence params
|
||||
{
|
||||
name: "evidence MaxAge and MaxBytes 0",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 1,
|
||||
evidenceAge: 0,
|
||||
@@ -98,6 +99,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
valid: false,
|
||||
},
|
||||
{
|
||||
name: "evidence MaxBytes greater than Block.MaxBytes",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 1,
|
||||
evidenceAge: 2,
|
||||
@@ -107,6 +109,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
valid: false,
|
||||
},
|
||||
{
|
||||
name: "evidence size below Block.MaxBytes",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 1000,
|
||||
evidenceAge: 2,
|
||||
@@ -116,6 +119,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
valid: true,
|
||||
},
|
||||
{
|
||||
name: "evidence MaxAgeDuration < 0",
|
||||
params: makeParams(makeParamsArgs{
|
||||
blockBytes: 1,
|
||||
evidenceAge: -1,
|
||||
@@ -124,8 +128,8 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
messageDelay: 1}),
|
||||
valid: false,
|
||||
},
|
||||
// test no pubkey type provided
|
||||
{
|
||||
name: "no pubkey types",
|
||||
params: makeParams(makeParamsArgs{
|
||||
evidenceAge: 2,
|
||||
pubkeyTypes: []string{},
|
||||
@@ -133,8 +137,8 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
messageDelay: 1}),
|
||||
valid: false,
|
||||
},
|
||||
// test invalid pubkey type provided
|
||||
{
|
||||
name: "invalid pubkey types",
|
||||
params: makeParams(makeParamsArgs{
|
||||
evidenceAge: 2,
|
||||
pubkeyTypes: []string{"potatoes make good pubkeys"},
|
||||
@@ -142,8 +146,8 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
messageDelay: 1}),
|
||||
valid: false,
|
||||
},
|
||||
// test invalid pubkey type provided
|
||||
{
|
||||
name: "negative MessageDelay",
|
||||
params: makeParams(makeParamsArgs{
|
||||
evidenceAge: 2,
|
||||
precision: 1,
|
||||
@@ -151,6 +155,7 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
valid: false,
|
||||
},
|
||||
{
|
||||
name: "negative Precision",
|
||||
params: makeParams(makeParamsArgs{
|
||||
evidenceAge: 2,
|
||||
precision: -1,
|
||||
@@ -159,11 +164,13 @@ func TestConsensusParamsValidation(t *testing.T) {
|
||||
},
|
||||
}
|
||||
for i, tc := range testCases {
|
||||
if tc.valid {
|
||||
assert.NoErrorf(t, tc.params.ValidateConsensusParams(), "expected no error for valid params (#%d)", i)
|
||||
} else {
|
||||
assert.Errorf(t, tc.params.ValidateConsensusParams(), "expected error for non valid params (#%d)", i)
|
||||
}
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
if tc.valid {
|
||||
assert.NoErrorf(t, tc.params.ValidateConsensusParams(), "expected no error for valid params (#%d)", i)
|
||||
} else {
|
||||
assert.Errorf(t, tc.params.ValidateConsensusParams(), "expected error for non valid params (#%d)", i)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,18 +182,34 @@ type makeParamsArgs struct {
|
||||
pubkeyTypes []string
|
||||
precision time.Duration
|
||||
messageDelay time.Duration
|
||||
propose time.Duration
|
||||
proposeDelta time.Duration
|
||||
vote time.Duration
|
||||
voteDelta time.Duration
|
||||
commit time.Duration
|
||||
bypassCommitTimeout bool
|
||||
|
||||
propose *time.Duration
|
||||
proposeDelta *time.Duration
|
||||
vote *time.Duration
|
||||
voteDelta *time.Duration
|
||||
commit *time.Duration
|
||||
}
|
||||
|
||||
func makeParams(args makeParamsArgs) ConsensusParams {
|
||||
if args.pubkeyTypes == nil {
|
||||
args.pubkeyTypes = valEd25519
|
||||
}
|
||||
if args.propose == nil {
|
||||
args.propose = durationPtr(1)
|
||||
}
|
||||
if args.proposeDelta == nil {
|
||||
args.proposeDelta = durationPtr(1)
|
||||
}
|
||||
if args.vote == nil {
|
||||
args.vote = durationPtr(1)
|
||||
}
|
||||
if args.voteDelta == nil {
|
||||
args.voteDelta = durationPtr(1)
|
||||
}
|
||||
if args.commit == nil {
|
||||
args.commit = durationPtr(1)
|
||||
}
|
||||
return ConsensusParams{
|
||||
Block: BlockParams{
|
||||
MaxBytes: args.blockBytes,
|
||||
@@ -205,11 +228,11 @@ func makeParams(args makeParamsArgs) ConsensusParams {
|
||||
MessageDelay: args.messageDelay,
|
||||
},
|
||||
Timeout: TimeoutParams{
|
||||
Propose: args.propose,
|
||||
ProposeDelta: args.proposeDelta,
|
||||
Vote: args.vote,
|
||||
VoteDelta: args.voteDelta,
|
||||
Commit: args.commit,
|
||||
Propose: *args.propose,
|
||||
ProposeDelta: *args.proposeDelta,
|
||||
Vote: *args.vote,
|
||||
VoteDelta: *args.voteDelta,
|
||||
Commit: *args.commit,
|
||||
BypassCommitTimeout: args.bypassCommitTimeout,
|
||||
},
|
||||
}
|
||||
@@ -268,11 +291,11 @@ func TestConsensusParamsUpdate(t *testing.T) {
|
||||
{
|
||||
// update timeout params
|
||||
intialParams: makeParams(makeParamsArgs{
|
||||
propose: 3 * time.Second,
|
||||
proposeDelta: 500 * time.Millisecond,
|
||||
vote: time.Second,
|
||||
voteDelta: 500 * time.Millisecond,
|
||||
commit: time.Second,
|
||||
propose: durationPtr(3 * time.Second),
|
||||
proposeDelta: durationPtr(500 * time.Millisecond),
|
||||
vote: durationPtr(time.Second),
|
||||
voteDelta: durationPtr(500 * time.Millisecond),
|
||||
commit: durationPtr(time.Second),
|
||||
bypassCommitTimeout: false,
|
||||
}),
|
||||
updates: &tmproto.ConsensusParams{
|
||||
@@ -286,11 +309,11 @@ func TestConsensusParamsUpdate(t *testing.T) {
|
||||
},
|
||||
},
|
||||
updatedParams: makeParams(makeParamsArgs{
|
||||
propose: 2 * time.Second,
|
||||
proposeDelta: 400 * time.Millisecond,
|
||||
vote: 5 * time.Second,
|
||||
voteDelta: 400 * time.Millisecond,
|
||||
commit: time.Minute,
|
||||
propose: durationPtr(2 * time.Second),
|
||||
proposeDelta: durationPtr(400 * time.Millisecond),
|
||||
vote: durationPtr(5 * time.Second),
|
||||
voteDelta: durationPtr(400 * time.Millisecond),
|
||||
commit: durationPtr(time.Minute),
|
||||
bypassCommitTimeout: true,
|
||||
}),
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user