Skip to content

Commit

Permalink
migration: update cometbft config for testnet78
Browse files Browse the repository at this point in the history
We've already updated the CometBFT config template, but running nodes on
the current testnet will still be using the prior value, generated at
time of join. Let's update the value as part of `pd migrate`, logging a
warning if we fail to do so.

Refs #4594, #4582.
  • Loading branch information
conorsch committed Jun 17, 2024
1 parent d098f23 commit 869dee8
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 2 deletions.
12 changes: 11 additions & 1 deletion crates/bin/pd/src/migrate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,17 @@ impl Migration {
}

Migration::Testnet78 => {
testnet78::migrate(storage, pd_home.clone(), genesis_start).await?
testnet78::migrate(storage, pd_home.clone(), genesis_start).await?;
// Testnet78 migration munges CometBFT config TOML directly
if let Some(comet_home) = comet_home.clone() {
// Don't bail out on error: the TendermintConfig struct doesn't understand some
// valid config files, so we should just warn, not abort the overall migration.
let _ = testnet78::update_cometbft_mempool_settings(comet_home).map_err(|e| {
tracing::warn!(%e, "failed to update 'max_txs_bytes' value in cometbft config, set it manually before restarting")
});
} else {
tracing::warn!("cometbft home not specified, update 'max_txs_bytes' value manually before restarting");
}
}
// We keep historical migrations around for now, this will help inform an abstracted
// design. Feel free to remove it if it's causing you trouble.
Expand Down
32 changes: 31 additions & 1 deletion crates/bin/pd/src/migrate/testnet78.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
//! Contains functions related to the migration script of Testnet78.
use anyhow::Context;
use cnidarium::{Snapshot, StateDelta, StateWrite, Storage};
use futures::TryStreamExt as _;
use futures::{pin_mut, StreamExt};
Expand All @@ -16,7 +17,10 @@ use penumbra_proto::{StateReadProto, StateWriteProto};
use penumbra_sct::component::clock::EpochManager;
use penumbra_sct::component::clock::EpochRead;
use penumbra_stake::validator::Validator;
use std::fs::OpenOptions;
use std::io::Write;
use std::path::PathBuf;
use tendermint_config::TendermintConfig;
use tracing::instrument;

use crate::testnet::generate::TestnetConfig;
Expand Down Expand Up @@ -536,8 +540,34 @@ fn truncate(s: &str, max_bytes: usize) -> &str {
&s[..closest]
}

mod tests {
/// Edit the node's CometBFT config file to set `mempool.max_txs_bytes` to the required value.
/// This value will affect consensus, but the config setting is specified for CometBFT
/// specifically.
#[instrument]
pub(crate) fn update_cometbft_mempool_settings(cometbft_home: PathBuf) -> anyhow::Result<()> {
let cometbft_config_path = cometbft_home.join("config").join("config.toml");
tracing::debug!(cometbft_config_path = %cometbft_config_path.display(), "opening cometbft config file");
let mut cometbft_config = TendermintConfig::load_toml_file(&cometbft_config_path)
.context("failed to load pre-migration cometbft config file")?;
// We expect the pre-migration value to be '1073741824', assuming it's unedited from `pd testnet join`.
// let pre_migration_value = cometbft_config.mempool.max_txs_bytes;
// The new value was updated in GH4594 and represents ~10MB or (2^20 * 10).
let post_migration_value = 10485760;
// Set new value
cometbft_config.mempool.max_txs_bytes = post_migration_value;
// Overwrite file
let mut fh = OpenOptions::new()
.create(false)
.write(true)
.truncate(true)
.open(cometbft_config_path.clone())
.context("failed to open cometbft config file for writing")?;
fh.write_all(toml::to_string(&cometbft_config)?.as_bytes())
.context("failed to write updated cometbft config to toml file")?;
Ok(())
}

mod tests {
#[test]
fn truncation() {
use super::truncate;
Expand Down

0 comments on commit 869dee8

Please sign in to comment.