Fix compute_shred_version() (#7989)
automerge
(cherry picked from commit fd7d5cbe0d)
			
			
This commit is contained in:
		@@ -126,6 +126,7 @@ pub struct Validator {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Validator {
 | 
					impl Validator {
 | 
				
			||||||
 | 
					    #[allow(clippy::cognitive_complexity)]
 | 
				
			||||||
    pub fn new(
 | 
					    pub fn new(
 | 
				
			||||||
        mut node: Node,
 | 
					        mut node: Node,
 | 
				
			||||||
        keypair: &Arc<Keypair>,
 | 
					        keypair: &Arc<Keypair>,
 | 
				
			||||||
@@ -171,6 +172,15 @@ impl Validator {
 | 
				
			|||||||
        let exit = Arc::new(AtomicBool::new(false));
 | 
					        let exit = Arc::new(AtomicBool::new(false));
 | 
				
			||||||
        let bank_info = &bank_forks_info[0];
 | 
					        let bank_info = &bank_forks_info[0];
 | 
				
			||||||
        let bank = bank_forks[bank_info.bank_slot].clone();
 | 
					        let bank = bank_forks[bank_info.bank_slot].clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        info!("Starting validator from slot {}", bank.slot());
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            let hard_forks: Vec<_> = bank.hard_forks().read().unwrap().iter().copied().collect();
 | 
				
			||||||
 | 
					            if !hard_forks.is_empty() {
 | 
				
			||||||
 | 
					                info!("Hard forks: {:?}", hard_forks);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let bank_forks = Arc::new(RwLock::new(bank_forks));
 | 
					        let bank_forks = Arc::new(RwLock::new(bank_forks));
 | 
				
			||||||
        let block_commitment_cache = Arc::new(RwLock::new(BlockCommitmentCache::default()));
 | 
					        let block_commitment_cache = Arc::new(RwLock::new(BlockCommitmentCache::default()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -474,7 +484,7 @@ fn compute_shred_version(genesis_hash: &Hash, hard_forks: &HardForks) -> u16 {
 | 
				
			|||||||
    let mut hash = *genesis_hash;
 | 
					    let mut hash = *genesis_hash;
 | 
				
			||||||
    for (slot, count) in hard_forks.iter() {
 | 
					    for (slot, count) in hard_forks.iter() {
 | 
				
			||||||
        let mut buf = [0u8; 16];
 | 
					        let mut buf = [0u8; 16];
 | 
				
			||||||
        LittleEndian::write_u64(&mut buf[..7], *slot);
 | 
					        LittleEndian::write_u64(&mut buf[..8], *slot);
 | 
				
			||||||
        LittleEndian::write_u64(&mut buf[8..], *count as u64);
 | 
					        LittleEndian::write_u64(&mut buf[8..], *count as u64);
 | 
				
			||||||
        hash = extend_and_hash(&hash, &buf);
 | 
					        hash = extend_and_hash(&hash, &buf);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -653,6 +663,16 @@ mod tests {
 | 
				
			|||||||
    use crate::genesis_utils::create_genesis_config_with_leader;
 | 
					    use crate::genesis_utils::create_genesis_config_with_leader;
 | 
				
			||||||
    use std::fs::remove_dir_all;
 | 
					    use std::fs::remove_dir_all;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_compute_shred_version() {
 | 
				
			||||||
 | 
					        let mut hard_forks = HardForks::default();
 | 
				
			||||||
 | 
					        assert_eq!(compute_shred_version(&Hash::default(), &hard_forks), 1);
 | 
				
			||||||
 | 
					        hard_forks.register(1);
 | 
				
			||||||
 | 
					        assert_eq!(compute_shred_version(&Hash::default(), &hard_forks), 55551);
 | 
				
			||||||
 | 
					        hard_forks.register(1);
 | 
				
			||||||
 | 
					        assert_eq!(compute_shred_version(&Hash::default(), &hard_forks), 46353);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    fn validator_exit() {
 | 
					    fn validator_exit() {
 | 
				
			||||||
        solana_logger::setup();
 | 
					        solana_logger::setup();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -448,7 +448,7 @@ pub fn bank_from_archive<P: AsRef<Path>>(
 | 
				
			|||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        // Once v0.23.x is deployed, this default can be removed and snapshots without a version
 | 
					        // Once v0.23.x is deployed, this default can be removed and snapshots without a version
 | 
				
			||||||
        // file can be rejected
 | 
					        // file can be rejected
 | 
				
			||||||
        String::from("v0.22.3")
 | 
					        String::from("0.22.3")
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let bank = rebuild_bank_from_snapshots(
 | 
					    let bank = rebuild_bank_from_snapshots(
 | 
				
			||||||
@@ -525,7 +525,7 @@ where
 | 
				
			|||||||
        |stream| {
 | 
					        |stream| {
 | 
				
			||||||
            let mut bank: Bank = match snapshot_version {
 | 
					            let mut bank: Bank = match snapshot_version {
 | 
				
			||||||
                env!("CARGO_PKG_VERSION") => deserialize_from_snapshot(stream.by_ref())?,
 | 
					                env!("CARGO_PKG_VERSION") => deserialize_from_snapshot(stream.by_ref())?,
 | 
				
			||||||
                "v0.22.3" => {
 | 
					                "0.22.3" => {
 | 
				
			||||||
                    let bank0223: solana_runtime::bank::LegacyBank0223 =
 | 
					                    let bank0223: solana_runtime::bank::LegacyBank0223 =
 | 
				
			||||||
                        deserialize_from_snapshot(stream.by_ref())?;
 | 
					                        deserialize_from_snapshot(stream.by_ref())?;
 | 
				
			||||||
                    bank0223.into()
 | 
					                    bank0223.into()
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user