`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)
|
restored_tower.adjust_lockouts_after_replay(root_bank.slot(), &slot_history)
|
||||||
}).
|
}).
|
||||||
unwrap_or_else(|err| {
|
unwrap_or_else(|err| {
|
||||||
// It's a fatal error if the tower is not present. This is
|
if err.is_file_missing() {
|
||||||
// necessary to prevent the validator from violating
|
Tower::new_from_bankforks(
|
||||||
// lockouts for its new identity
|
&bank_forks.read().unwrap(),
|
||||||
|
&my_pubkey,
|
||||||
|
&vote_account,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
error!("Failed to load tower for {}: {}", my_pubkey, err);
|
error!("Failed to load tower for {}: {}", my_pubkey, err);
|
||||||
std::process::exit(1);
|
std::process::exit(1);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Ensure the validator can land votes with the new identity before
|
// 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| {
|
meta.with_post_init(|post_init| {
|
||||||
// Ensure a Tower exists for the new identity and exit gracefully.
|
if require_tower {
|
||||||
// ReplayStage will be less forgiving if it fails to load the new tower.
|
let _ = Tower::restore(meta.tower_storage.as_ref(), &identity_keypair.pubkey())
|
||||||
if let Err(err) =
|
.map_err(|err| {
|
||||||
Tower::restore(meta.tower_storage.as_ref(), &identity_keypair.pubkey()).map_err(
|
|
||||||
|err| {
|
|
||||||
jsonrpc_core::error::Error::invalid_params(format!(
|
jsonrpc_core::error::Error::invalid_params(format!(
|
||||||
"Unable to load tower file for identity {}: {}",
|
"Unable to load tower file for identity {}: {}",
|
||||||
identity_keypair.pubkey(),
|
identity_keypair.pubkey(),
|
||||||
err
|
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