`solana-validator set-identity` no longer writes a tower file unnecessarily

This commit is contained in:
Michael Vines 2022-03-06 17:56:12 +01:00
parent 8438366d1b
commit b719d6a2ad
2 changed files with 13 additions and 34 deletions

View File

@ -735,11 +735,16 @@ impl ReplayStage {
restored_tower.adjust_lockouts_after_replay(root_bank.slot(), &slot_history)
}).
unwrap_or_else(|err| {
// It's a fatal error if the tower is not present. This is
// necessary to prevent the validator from violating
// lockouts for its new identity
error!("Failed to load tower for {}: {}", my_pubkey, err);
std::process::exit(1);
if err.is_file_missing() {
Tower::new_from_bankforks(
&bank_forks.read().unwrap(),
&my_pubkey,
&vote_account,
)
} else {
error!("Failed to load tower for {}: {}", my_pubkey, err);
std::process::exit(1);
}
});
// Ensure the validator can land votes with the new identity before

View File

@ -257,40 +257,14 @@ impl AdminRpc for AdminRpcImpl {
})?;
meta.with_post_init(|post_init| {
// Ensure a Tower exists for the new identity and exit gracefully.
// ReplayStage will be less forgiving if it fails to load the new tower.
if let Err(err) =
Tower::restore(meta.tower_storage.as_ref(), &identity_keypair.pubkey()).map_err(
|err| {
if require_tower {
let _ = Tower::restore(meta.tower_storage.as_ref(), &identity_keypair.pubkey())
.map_err(|err| {
jsonrpc_core::error::Error::invalid_params(format!(
"Unable to load tower file for identity {}: {}",
identity_keypair.pubkey(),
err
))
},
)
{
if require_tower {
return Err(err);
}
let root_bank = post_init.bank_forks.read().unwrap().root_bank();
let mut tower = Tower::new(
&identity_keypair.pubkey(),
&post_init.vote_account,
root_bank.slot(),
&root_bank,
);
// Forge a single vote to pacify `Tower::adjust_lockouts_after_replay` when its called
// by replay_stage
tower.record_bank_vote(&root_bank, &post_init.vote_account);
tower
.save(meta.tower_storage.as_ref(), &identity_keypair)
.map_err(|err| {
jsonrpc_core::error::Error::invalid_params(format!(
"Unable to create default tower file for ephemeral identity: {}",
err
))
})?;
}