Skip to content

Commit

Permalink
refactor: rename pd upgrade -> migrate
Browse files Browse the repository at this point in the history
Closes #3578.
  • Loading branch information
conorsch committed Jan 19, 2024
1 parent d8df8c7 commit 22f4262
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 20 deletions.
2 changes: 1 addition & 1 deletion crates/bin/pd/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ mod snapshot;

pub mod auto_https;
pub mod events;
pub mod migrate;
pub mod testnet;
pub mod upgrade;

pub use crate::metrics::register_metrics;
pub use consensus::Consensus;
Expand Down
19 changes: 9 additions & 10 deletions crates/bin/pd/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ use ibc_proto::ibc::core::client::v1::query_server::QueryServer as ClientQuerySe
use ibc_proto::ibc::core::connection::v1::query_server::QueryServer as ConnectionQueryServer;
use metrics_exporter_prometheus::PrometheusBuilder;
use pd::events::EventIndexLayer;
use pd::migrate::Migration::SimpleMigration;
use pd::testnet::{
config::{get_testnet_dir, parse_tm_address, url_has_necessary_parts},
generate::TestnetConfig,
join::testnet_join,
};
use pd::upgrade;
use penumbra_app::{PenumbraHost, SUBSTORE_PREFIXES};
use penumbra_proto::core::component::dex::v1alpha1::simulation_service_server::SimulationServiceServer;
use penumbra_proto::util::tendermint_proxy::v1alpha1::tendermint_proxy_service_server::TendermintProxyServiceServer;
Expand Down Expand Up @@ -148,13 +148,13 @@ enum RootCommand {
},
/// Run a migration on the exported storage state of the full node,
/// and create a genesis file.
Upgrade {
Migrate {
/// The directory containing exported state to which the upgrade will be applied.
#[clap(long, display_order = 200)]
upgrade_path: PathBuf,
target_dir: PathBuf,
#[clap(long, display_order = 300)]
/// Timestamp of the genesis file in RFC3339 format. If unset, defaults to the current time,
/// unless the migration script overrides it.
/// unless the migration logic overrides it.
genesis_start: Option<tendermint::time::Time>,
},
}
Expand Down Expand Up @@ -752,14 +752,13 @@ async fn main() -> anyhow::Result<()> {
// - apply checks: root hash, size, etc.
todo!()
}
RootCommand::Upgrade {
upgrade_path,
RootCommand::Migrate {
target_dir,
genesis_start,
} => {
use upgrade::Upgrade::SimpleUpgrade;
tracing::info!("upgrading state from {}", upgrade_path.display());
SimpleUpgrade
.migrate(upgrade_path.clone(), genesis_start)
tracing::info!("migrating state from {}", target_dir.display());
SimpleMigration
.migrate(target_dir.clone(), genesis_start)
.await
.context("failed to upgrade state")?;
}
Expand Down
21 changes: 14 additions & 7 deletions crates/bin/pd/src/upgrade.rs → crates/bin/pd/src/migrate.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
//! Logic for handling chain upgrades.
//!
//! When consensus-breaking changes are made to the Penumbra software,
//! node operators must coordinate to perform a chain upgrade.
//! This module declares how local `pd` state should be altered, if at all,
//! in order to be compatible with the network post-chain-upgrade.
use std::path::PathBuf;

use cnidarium::{StateDelta, StateWrite, Storage};
Expand All @@ -11,25 +17,26 @@ use penumbra_stake::{genesis::Content as StakeContent, StateReadExt as _};

use crate::testnet::generate::TestnetConfig;

pub enum Upgrade {
/// No-op migration
/// The kind of migration that should be performed.
pub enum Migration {
/// No-op migration.
Noop,
/// A simple migration: adds a key to the consensus state.
/// This is useful for testing upgrade mechanisms, including in production.
SimpleUpgrade,
SimpleMigration,
/// Migrates from testnet-64 to testnet-65.
Testnet65,
}

impl Upgrade {
impl Migration {
pub async fn migrate(
&self,
path_to_export: PathBuf,
genesis_start: Option<tendermint::time::Time>,
) -> anyhow::Result<()> {
match self {
Upgrade::Noop => (),
Upgrade::SimpleUpgrade => {
Migration::Noop => (),
Migration::SimpleMigration => {
let mut db_path = path_to_export.clone();
db_path.push("rocksdb");
let storage = Storage::load(db_path, SUBSTORE_PREFIXES.to_vec()).await?;
Expand Down Expand Up @@ -101,7 +108,7 @@ impl Upgrade {
std::fs::write(validator_state_path, fresh_validator_state)
.expect("can write validator state");
}
Upgrade::Testnet65 => { /* currently a no-op. */ }
Migration::Testnet65 => { /* currently a no-op. */ }
}
Ok(())
}
Expand Down
4 changes: 2 additions & 2 deletions docs/rustdoc/index.html
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of crates"><title>Index of crates</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="./static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="./static.files/rustdoc-452d19225583af2a.css"><meta name="rustdoc-vars" data-root-path="./" data-static-root-path="./static.files/" data-current-crate="pcli" data-themes="" data-resource-suffix="" data-rustdoc-version="1.77.0-nightly (fb5ed726f 2023-12-28)" data-channel="nightly" data-search-js="search-c17e98913a53b3b7.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="./static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="./static.files/main-6902632119e002ca.js"></script><noscript><link rel="stylesheet" href="./static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="./static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="./static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="./static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc mod sys"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="logo-container" href="./index.html"><img class="rust-logo" src="./static.files/rust-logo-151179464ae7ed46.svg" alt=""></a></nav><nav class="sidebar"><div class="sidebar-crate"><a class="logo-container" href="./index.html"><img class="rust-logo" src="./static.files/rust-logo-151179464ae7ed46.svg" alt="logo"></a><h2><a href="./index.html">Rustdoc</a><span class="version">1.77.0-nightly</span></h2></div><div class="version">(fb5ed726f 2023-12-28)</div></nav><div class="sidebar-resizer"></div>
<main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="./pcli/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="./help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="./settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="./static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><h1>List of all crates</h1><ul class="all-items"><li><a href="ark_ff/index.html">ark_ff</a></li><li><a href="ark_serialize/index.html">ark_serialize</a></li><li><a href="cnidarium/index.html">cnidarium</a></li><li><a href="cnidarium_component/index.html">cnidarium_component</a></li><li><a href="decaf377/index.html">decaf377</a></li><li><a href="decaf377_fmd/index.html">decaf377_fmd</a></li><li><a href="decaf377_ka/index.html">decaf377_ka</a></li><li><a href="decaf377_rdsa/index.html">decaf377_rdsa</a></li><li><a href="ibc_types/index.html">ibc_types</a></li><li><a href="jmt/index.html">jmt</a></li><li><a href="measure/index.html">measure</a></li><li><a href="pcli/index.html">pcli</a></li><li><a href="pclientd/index.html">pclientd</a></li><li><a href="pd/index.html">pd</a></li><li><a href="penumbra_app/index.html">penumbra_app</a></li><li><a href="penumbra_asset/index.html">penumbra_asset</a></li><li><a href="penumbra_chain/index.html">penumbra_chain</a></li><li><a href="penumbra_community_pool/index.html">penumbra_community_pool</a></li><li><a href="penumbra_custody/index.html">penumbra_custody</a></li><li><a href="penumbra_dex/index.html">penumbra_dex</a></li><li><a href="penumbra_distributions/index.html">penumbra_distributions</a></li><li><a href="penumbra_governance/index.html">penumbra_governance</a></li><li><a href="penumbra_ibc/index.html">penumbra_ibc</a></li><li><a href="penumbra_keys/index.html">penumbra_keys</a></li><li><a href="penumbra_num/index.html">penumbra_num</a></li><li><a href="penumbra_proof_params/index.html">penumbra_proof_params</a></li><li><a href="penumbra_proof_setup/index.html">penumbra_proof_setup</a></li><li><a href="penumbra_proto/index.html">penumbra_proto</a></li><li><a href="penumbra_sct/index.html">penumbra_sct</a></li><li><a href="penumbra_shielded_pool/index.html">penumbra_shielded_pool</a></li><li><a href="penumbra_tct/index.html">penumbra_tct</a></li><li><a href="penumbra_transaction/index.html">penumbra_transaction</a></li><li><a href="penumbra_txhash/index.html">penumbra_txhash</a></li><li><a href="penumbra_view/index.html">penumbra_view</a></li><li><a href="penumbra_wallet/index.html">penumbra_wallet</a></li><li><a href="penumbra_wasm/index.html">penumbra_wasm</a></li><li><a href="poseidon377/index.html">poseidon377</a></li><li><a href="poseidon_paramgen/index.html">poseidon_paramgen</a></li><li><a href="poseidon_permutation/index.html">poseidon_permutation</a></li><li><a href="tendermint/index.html">tendermint</a></li><li><a href="tendermint_config/index.html">tendermint_config</a></li><li><a href="tower_abci/index.html">tower_abci</a></li></ul></section></div></main></body></html>
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of crates"><title>Index of crates</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="./static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="./static.files/rustdoc-bf502f66ec635d5d.css"><meta name="rustdoc-vars" data-root-path="./" data-static-root-path="./static.files/" data-current-crate="pd" data-themes="" data-resource-suffix="" data-rustdoc-version="1.77.0-nightly (e51e98dde 2023-12-31)" data-channel="nightly" data-search-js="search-c17e98913a53b3b7.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="./static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="./static.files/main-0b2e2def73e61cbe.js"></script><noscript><link rel="stylesheet" href="./static.files/noscript-04d5337699b92874.css"></noscript><link rel="alternate icon" type="image/png" href="./static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="./static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="./static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc mod sys"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle" title="show sidebar"></button><a class="logo-container" href="./index.html"><img class="rust-logo" src="./static.files/rust-logo-151179464ae7ed46.svg" alt=""></a></nav><nav class="sidebar"><div class="sidebar-crate"><a class="logo-container" href="./index.html"><img class="rust-logo" src="./static.files/rust-logo-151179464ae7ed46.svg" alt="logo"></a><h2><a href="./index.html">Rustdoc</a><span class="version">1.77.0-nightly</span></h2></div><div class="version">(e51e98dde 2023-12-31)</div></nav><div class="sidebar-resizer"></div>
<main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="./pd/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="./help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="./settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="./static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><h1>List of all crates</h1><ul class="all-items"><li><a href="ark_ff/index.html">ark_ff</a></li><li><a href="ark_serialize/index.html">ark_serialize</a></li><li><a href="cnidarium/index.html">cnidarium</a></li><li><a href="cnidarium_component/index.html">cnidarium_component</a></li><li><a href="decaf377/index.html">decaf377</a></li><li><a href="decaf377_fmd/index.html">decaf377_fmd</a></li><li><a href="decaf377_ka/index.html">decaf377_ka</a></li><li><a href="decaf377_rdsa/index.html">decaf377_rdsa</a></li><li><a href="ibc_types/index.html">ibc_types</a></li><li><a href="jmt/index.html">jmt</a></li><li><a href="measure/index.html">measure</a></li><li><a href="pcli/index.html">pcli</a></li><li><a href="pclientd/index.html">pclientd</a></li><li><a href="pd/index.html">pd</a></li><li><a href="penumbra_app/index.html">penumbra_app</a></li><li><a href="penumbra_asset/index.html">penumbra_asset</a></li><li><a href="penumbra_chain/index.html">penumbra_chain</a></li><li><a href="penumbra_community_pool/index.html">penumbra_community_pool</a></li><li><a href="penumbra_custody/index.html">penumbra_custody</a></li><li><a href="penumbra_dex/index.html">penumbra_dex</a></li><li><a href="penumbra_distributions/index.html">penumbra_distributions</a></li><li><a href="penumbra_governance/index.html">penumbra_governance</a></li><li><a href="penumbra_ibc/index.html">penumbra_ibc</a></li><li><a href="penumbra_keys/index.html">penumbra_keys</a></li><li><a href="penumbra_num/index.html">penumbra_num</a></li><li><a href="penumbra_proof_params/index.html">penumbra_proof_params</a></li><li><a href="penumbra_proof_setup/index.html">penumbra_proof_setup</a></li><li><a href="penumbra_proto/index.html">penumbra_proto</a></li><li><a href="penumbra_sct/index.html">penumbra_sct</a></li><li><a href="penumbra_shielded_pool/index.html">penumbra_shielded_pool</a></li><li><a href="penumbra_tct/index.html">penumbra_tct</a></li><li><a href="penumbra_transaction/index.html">penumbra_transaction</a></li><li><a href="penumbra_txhash/index.html">penumbra_txhash</a></li><li><a href="penumbra_view/index.html">penumbra_view</a></li><li><a href="penumbra_wallet/index.html">penumbra_wallet</a></li><li><a href="penumbra_wasm/index.html">penumbra_wasm</a></li><li><a href="poseidon377/index.html">poseidon377</a></li><li><a href="poseidon_paramgen/index.html">poseidon_paramgen</a></li><li><a href="poseidon_permutation/index.html">poseidon_permutation</a></li><li><a href="tendermint/index.html">tendermint</a></li><li><a href="tendermint_config/index.html">tendermint_config</a></li><li><a href="tower_abci/index.html">tower_abci</a></li></ul></section></div></main></body></html>

0 comments on commit 22f4262

Please sign in to comment.