`solana-validator set-identity` no longer writes a tower file unnecessarily
This commit is contained in:
parent
8438366d1b
commit
b719d6a2ad
|
@ -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
|
||||
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
|
||||
|
|
|
@ -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
|
||||
))
|
||||
})?;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue