Skip to content

Commit

Permalink
migration: update cometbft tx size for t78 migration
Browse files Browse the repository at this point in the history
Refs #4594, #4582.
  • Loading branch information
conorsch committed Jun 14, 2024
1 parent 5793168 commit 1d4e7be
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 2 deletions.
8 changes: 7 additions & 1 deletion crates/bin/pd/src/migrate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,13 @@ 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() {
testnet78::update_cometbft_mempool_settings(comet_home)?;
} 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
44 changes: 43 additions & 1 deletion crates/bin/pd/src/migrate/testnet78.rs
Original file line number Diff line number Diff line change
Expand Up @@ -520,8 +520,50 @@ fn truncate(s: &str, max_bytes: usize) -> &str {
&s[..closest]
}

mod tests {
/// Edit the node's CometBFT config file to set mempool.max_tx_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");
use std::fs::OpenOptions;
use std::io::Write;
use tendermint_config::TendermintConfig;
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 this 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")?;

// These asseratiosn are left over from debugging, can be removed.
let config_munged = TendermintConfig::load_toml_file(&cometbft_config_path)?;
let new_block_size = config_munged.mempool.max_txs_bytes;
assert_ne!(
new_block_size, pre_migration_value,
"post-migration max_txs_bytes remains pre-migration value"
);
assert_eq!(
new_block_size, post_migration_value,
"post-migration max_txs_bytes value not correctly updated"
);

Ok(())
}

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

0 comments on commit 1d4e7be

Please sign in to comment.