Add configuration updates for Tendermint v0.36. (#8310)

* v36: remove [fastsync] and [blocksync] config sections
* v36: remove [blocksync], consolidate rename
* v36: remove gRPC options from [rpc]
* v36: add top-level mode setting
* v36: remove deprecated per-node consensus timeouts
* v36: remove vestigial mempool.wal-dir setting
* v36: add queue-type setting
* v36: add p2p connection limits
* v36: add or update statsync.fetchers
* v36: add statesync.use-p2p setting
This commit is contained in:
M. J. Fromberger
2022-04-11 14:49:17 -07:00
committed by GitHub
parent 969690d81c
commit cf337cc3f2

View File

@@ -85,21 +85,138 @@ var plan = transform.Plan{
T: transform.SnakeToKebab(),
},
{
// Since https://github.com/tendermint/tendermint/pull/6896.
Desc: "Rename [fastsync] to [blocksync]",
T: transform.Rename(parser.Key{"fastsync"}, parser.Key{"blocksync"}),
// [fastsync] renamed in https://github.com/tendermint/tendermint/pull/6896.
// [blocksync] removed in https://github.com/tendermint/tendermint/pull/7159.
Desc: "Remove [fastsync] and [blocksync] sections",
T: transform.Func(func(_ context.Context, doc *tomledit.Document) error {
doc.First("fast-sync").Remove()
transform.FindTable(doc, "fastsync").Remove()
transform.FindTable(doc, "blocksync").Remove()
return nil
}),
ErrorOK: true,
},
{
// Since https://github.com/tendermint/tendermint/pull/7159.
Desc: "Move top-level fast_sync key to blocksync.enable",
T: transform.MoveKey(
parser.Key{"fast-sync"},
parser.Key{"blocksync"},
parser.Key{"enable"},
// Since https://github.com/tendermint/tendermint/pull/6241.
//
// TODO(creachadair): backport into v0.35.x.
Desc: `Add top-level mode setting (default "full")`,
T: transform.EnsureKey(nil, &parser.KeyValue{
Block: parser.Comments{"Mode of Node: full | validator | seed"},
Name: parser.Key{"mode"},
Value: parser.MustValue(`"full"`),
}),
ErrorOK: true,
},
{
// Since https://github.com/tendermint/tendermint/pull/7121.
Desc: "Remove gRPC settings from the [rpc] section",
T: transform.Func(func(_ context.Context, doc *tomledit.Document) error {
doc.First("rpc", "grpc-laddr").Remove()
doc.First("rpc", "grpc-max-open-connections").Remove()
return nil
}),
},
{
// Since https://github.com/tendermint/tendermint/pull/8217.
Desc: "Remove per-node consensus timeouts (converted to consensus parameters)",
T: transform.Remove(
parser.Key{"consensus", "skip-timeout-commit"},
parser.Key{"consensus", "timeout-commit"},
parser.Key{"consensus", "timeout-precommit"},
parser.Key{"consensus", "timeout-precommit-delta"},
parser.Key{"consensus", "timeout-prevote"},
parser.Key{"consensus", "timeout-prevote-delta"},
parser.Key{"consensus", "timeout-propose"},
parser.Key{"consensus", "timeout-propose-delta"},
),
ErrorOK: true,
},
{
// Since https://github.com/tendermint/tendermint/pull/6396.
//
// TODO(creachadair): backport into v0.35.x.
Desc: "Remove vestigial mempool.wal-dir setting",
T: transform.Remove(parser.Key{"mempool", "wal-dir"}),
ErrorOK: true,
},
{
// Since https://github.com/tendermint/tendermint/pull/6323.
//
// TODO(creachadair): backport into v0.35.x.
Desc: "Add new [p2p] queue-type setting",
T: transform.EnsureKey(parser.Key{"p2p"}, &parser.KeyValue{
Block: parser.Comments{"Select the p2p internal queue"},
Name: parser.Key{"queue-type"},
Value: parser.MustValue(`"priority"`),
}),
ErrorOK: true,
},
{
// Since https://github.com/tendermint/tendermint/pull/6353.
//
// TODO(creachadair): backport into v0.35.x.
Desc: "Add [p2p] connection count and rate limit settings",
T: transform.Func(func(_ context.Context, doc *tomledit.Document) error {
tab := transform.FindTable(doc, "p2p")
if tab == nil {
return errors.New("p2p table not found")
}
transform.InsertMapping(tab.Section, &parser.KeyValue{
Block: parser.Comments{"Maximum number of connections (inbound and outbound)."},
Name: parser.Key{"max-connections"},
Value: parser.MustValue("64"),
}, false)
transform.InsertMapping(tab.Section, &parser.KeyValue{
Block: parser.Comments{
"Rate limits the number of incoming connection attempts per IP address.",
},
Name: parser.Key{"max-incoming-connection-attempts"},
Value: parser.MustValue("100"),
}, false)
return nil
}),
},
{
// Added "chunk-fetchers" https://github.com/tendermint/tendermint/pull/6566.
// This value was backported into v0.34.11 (modulo casing).
// Renamed to "fetchers" https://github.com/tendermint/tendermint/pull/6587.
//
// TODO(creachadair): backport into v0.35.x.
Desc: "Rename statesync.chunk-fetchers to statesync.fetchers",
T: transform.Func(func(ctx context.Context, doc *tomledit.Document) error {
// If the key already exists, rename it preserving its value.
if found := doc.First("statesync", "chunk-fetchers"); found != nil {
found.KeyValue.Name = parser.Key{"fetchers"}
return nil
}
// Otherwise, add it.
return transform.EnsureKey(parser.Key{"statesync"}, &parser.KeyValue{
Block: parser.Comments{
"The number of concurrent chunk and block fetchers to run (default: 4).",
},
Name: parser.Key{"fetchers"},
Value: parser.MustValue("4"),
})(ctx, doc)
}),
},
{
// Since https://github.com/tendermint/tendermint/pull/6807.
// Backported into v0.34.13 (modulo casing).
//
// TODO(creachadair): backport into v0.35.x.
Desc: "Add statesync.use-p2p setting",
T: transform.EnsureKey(parser.Key{"statesync"}, &parser.KeyValue{
Block: parser.Comments{
"# State sync uses light client verification to verify state. This can be done either through the",
"# P2P layer or RPC layer. Set this to true to use the P2P layer. If false (default), RPC layer",
"# will be used.",
},
Name: parser.Key{"use-p2p"},
Value: parser.MustValue("false"),
}),
},
{
// Since https://github.com/tendermint/tendermint/pull/6462.
Desc: "Move priv-validator settings under [priv-validator]",
@@ -147,22 +264,6 @@ var plan = transform.Plan{
return nil
}),
},
{
// v1 removed: https://github.com/tendermint/tendermint/pull/5728
// v2 deprecated: https://github.com/tendermint/tendermint/pull/6730
Desc: `Set blocksync.version to "v0"`,
T: transform.Func(func(_ context.Context, doc *tomledit.Document) error {
v := doc.First("blocksync", "version")
if v == nil {
return nil // nothing to do
} else if !v.IsMapping() {
// This shouldn't happen, but is easier to debug than a panic.
return fmt.Errorf("blocksync.version is weird: %v", v)
}
v.Value.X = parser.MustValue(`"v0"`).X
return nil
}),
},
}
// ApplyFixes transforms doc and reports whether it succeeded.
@@ -248,8 +349,5 @@ func CheckValid(data []byte) error {
return fmt.Errorf("decoding config: %w", err)
}
// Stub in required value not stored in the config file, so that validation
// will not fail spuriously.
cfg.Mode = config.ModeValidator
return cfg.ValidateBasic()
}