remove ticks_per_slot from blocktree (#3297)
This commit is contained in:
@ -127,7 +127,7 @@ mod test {
|
|||||||
genesis_block.ticks_per_slot = ticks_per_slot;
|
genesis_block.ticks_per_slot = ticks_per_slot;
|
||||||
|
|
||||||
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block);
|
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block);
|
||||||
let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap();
|
let blocktree = Blocktree::open(&ledger_path).unwrap();
|
||||||
|
|
||||||
// Set up blockstream
|
// Set up blockstream
|
||||||
let mut blockstream = Blockstream::new("test_stream".to_string());
|
let mut blockstream = Blockstream::new("test_stream".to_string());
|
||||||
@ -150,7 +150,9 @@ mod test {
|
|||||||
let expected_entries = entries.clone();
|
let expected_entries = entries.clone();
|
||||||
let expected_tick_heights = [5, 6, 7, 8, 8, 9];
|
let expected_tick_heights = [5, 6, 7, 8, 8, 9];
|
||||||
|
|
||||||
blocktree.write_entries(1, 0, 0, &entries).unwrap();
|
blocktree
|
||||||
|
.write_entries(1, 0, 0, ticks_per_slot, &entries)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
slot_full_sender.send((1, leader_id)).unwrap();
|
slot_full_sender.send((1, leader_id)).unwrap();
|
||||||
BlockstreamService::process_entries(
|
BlockstreamService::process_entries(
|
||||||
|
@ -142,7 +142,6 @@ pub struct Blocktree {
|
|||||||
data_cf: DataCf,
|
data_cf: DataCf,
|
||||||
erasure_cf: ErasureCf,
|
erasure_cf: ErasureCf,
|
||||||
pub new_blobs_signals: Vec<SyncSender<bool>>,
|
pub new_blobs_signals: Vec<SyncSender<bool>>,
|
||||||
ticks_per_slot: u64,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Column family for metadata about a leader slot
|
// Column family for metadata about a leader slot
|
||||||
@ -161,24 +160,6 @@ impl Blocktree {
|
|||||||
Ok((blocktree, signal_receiver))
|
Ok((blocktree, signal_receiver))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn open_config(ledger_path: &str, ticks_per_slot: u64) -> Result<Self> {
|
|
||||||
let mut blocktree = Self::open(ledger_path)?;
|
|
||||||
blocktree.ticks_per_slot = ticks_per_slot;
|
|
||||||
Ok(blocktree)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn open_with_config_signal(
|
|
||||||
ledger_path: &str,
|
|
||||||
ticks_per_slot: u64,
|
|
||||||
) -> Result<(Self, Receiver<bool>)> {
|
|
||||||
let mut blocktree = Self::open(ledger_path)?;
|
|
||||||
let (signal_sender, signal_receiver) = sync_channel(1);
|
|
||||||
blocktree.new_blobs_signals = vec![signal_sender];
|
|
||||||
blocktree.ticks_per_slot = ticks_per_slot;
|
|
||||||
|
|
||||||
Ok((blocktree, signal_receiver))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn meta(&self, slot: u64) -> Result<Option<SlotMeta>> {
|
pub fn meta(&self, slot: u64) -> Result<Option<SlotMeta>> {
|
||||||
self.meta_cf.get(&MetaCf::key(slot))
|
self.meta_cf.get(&MetaCf::key(slot))
|
||||||
}
|
}
|
||||||
@ -239,14 +220,13 @@ impl Blocktree {
|
|||||||
start_slot: u64,
|
start_slot: u64,
|
||||||
num_ticks_in_start_slot: u64,
|
num_ticks_in_start_slot: u64,
|
||||||
start_index: u64,
|
start_index: u64,
|
||||||
|
ticks_per_slot: u64,
|
||||||
entries: I,
|
entries: I,
|
||||||
) -> Result<()>
|
) -> Result<()>
|
||||||
where
|
where
|
||||||
I: IntoIterator,
|
I: IntoIterator,
|
||||||
I::Item: Borrow<Entry>,
|
I::Item: Borrow<Entry>,
|
||||||
{
|
{
|
||||||
let ticks_per_slot = self.ticks_per_slot;
|
|
||||||
|
|
||||||
assert!(num_ticks_in_start_slot < ticks_per_slot);
|
assert!(num_ticks_in_start_slot < ticks_per_slot);
|
||||||
let mut remaining_ticks_in_slot = ticks_per_slot - num_ticks_in_start_slot;
|
let mut remaining_ticks_in_slot = ticks_per_slot - num_ticks_in_start_slot;
|
||||||
|
|
||||||
@ -958,9 +938,9 @@ pub fn create_new_ledger(ledger_path: &str, genesis_block: &GenesisBlock) -> Res
|
|||||||
genesis_block.write(&ledger_path)?;
|
genesis_block.write(&ledger_path)?;
|
||||||
|
|
||||||
// Fill slot 0 with ticks that link back to the genesis_block to bootstrap the ledger.
|
// Fill slot 0 with ticks that link back to the genesis_block to bootstrap the ledger.
|
||||||
let blocktree = Blocktree::open_config(ledger_path, ticks_per_slot)?;
|
let blocktree = Blocktree::open(ledger_path)?;
|
||||||
let entries = crate::entry::create_ticks(ticks_per_slot, genesis_block.hash());
|
let entries = crate::entry::create_ticks(ticks_per_slot, genesis_block.hash());
|
||||||
blocktree.write_entries(0, 0, 0, &entries)?;
|
blocktree.write_entries(0, 0, 0, ticks_per_slot, &entries)?;
|
||||||
|
|
||||||
Ok(entries.last().unwrap().hash)
|
Ok(entries.last().unwrap().hash)
|
||||||
}
|
}
|
||||||
@ -1079,10 +1059,12 @@ pub mod tests {
|
|||||||
let ticks_per_slot = 10;
|
let ticks_per_slot = 10;
|
||||||
let num_slots = 10;
|
let num_slots = 10;
|
||||||
let num_ticks = ticks_per_slot * num_slots;
|
let num_ticks = ticks_per_slot * num_slots;
|
||||||
let ledger = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap();
|
let ledger = Blocktree::open(&ledger_path).unwrap();
|
||||||
|
|
||||||
let ticks = create_ticks(num_ticks, Hash::default());
|
let ticks = create_ticks(num_ticks, Hash::default());
|
||||||
ledger.write_entries(0, 0, 0, ticks.clone()).unwrap();
|
ledger
|
||||||
|
.write_entries(0, 0, 0, ticks_per_slot, ticks.clone())
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
for i in 0..num_slots {
|
for i in 0..num_slots {
|
||||||
let meta = ledger.meta(i).unwrap().unwrap();
|
let meta = ledger.meta(i).unwrap().unwrap();
|
||||||
@ -1112,6 +1094,7 @@ pub mod tests {
|
|||||||
num_slots,
|
num_slots,
|
||||||
ticks_per_slot - 1,
|
ticks_per_slot - 1,
|
||||||
ticks_per_slot - 2,
|
ticks_per_slot - 2,
|
||||||
|
ticks_per_slot,
|
||||||
&ticks[0..2],
|
&ticks[0..2],
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -1159,11 +1142,15 @@ pub mod tests {
|
|||||||
let ticks2 = ticks.split_off(num_ticks as usize);
|
let ticks2 = ticks.split_off(num_ticks as usize);
|
||||||
assert_eq!(ticks.len(), ticks2.len());
|
assert_eq!(ticks.len(), ticks2.len());
|
||||||
{
|
{
|
||||||
let ledger = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap();
|
let ledger = Blocktree::open(&ledger_path).unwrap();
|
||||||
|
|
||||||
ledger.write_entries(0, 0, 0, &ticks).unwrap();
|
ledger
|
||||||
|
.write_entries(0, 0, 0, ticks_per_slot, &ticks)
|
||||||
|
.unwrap();
|
||||||
ledger.reset_slot_consumed(0).unwrap();
|
ledger.reset_slot_consumed(0).unwrap();
|
||||||
ledger.write_entries(0, 0, 0, &ticks2).unwrap();
|
ledger
|
||||||
|
.write_entries(0, 0, 0, ticks_per_slot, &ticks2)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let ledger_ticks = ledger.get_slot_entries(0, 0, None).unwrap();
|
let ledger_ticks = ledger.get_slot_entries(0, 0, None).unwrap();
|
||||||
|
|
||||||
@ -1483,7 +1470,7 @@ pub mod tests {
|
|||||||
pub fn test_insert_data_blobs_consecutive() {
|
pub fn test_insert_data_blobs_consecutive() {
|
||||||
let blocktree_path = get_tmp_ledger_path("test_insert_data_blobs_consecutive");
|
let blocktree_path = get_tmp_ledger_path("test_insert_data_blobs_consecutive");
|
||||||
{
|
{
|
||||||
let blocktree = Blocktree::open_config(&blocktree_path, 32).unwrap();
|
let blocktree = Blocktree::open(&blocktree_path).unwrap();
|
||||||
let slot = 0;
|
let slot = 0;
|
||||||
let parent_slot = 0;
|
let parent_slot = 0;
|
||||||
// Write entries
|
// Write entries
|
||||||
@ -1618,6 +1605,7 @@ pub mod tests {
|
|||||||
0u64,
|
0u64,
|
||||||
0,
|
0,
|
||||||
(entries.len() - 1) as u64,
|
(entries.len() - 1) as u64,
|
||||||
|
16,
|
||||||
&entries[entries.len() - 1..],
|
&entries[entries.len() - 1..],
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -12,7 +12,6 @@ use rocksdb::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use solana_sdk::hash::Hash;
|
use solana_sdk::hash::Hash;
|
||||||
use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT;
|
|
||||||
|
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io;
|
use std::io;
|
||||||
@ -105,14 +104,12 @@ impl Blocktree {
|
|||||||
// Create the erasure column family
|
// Create the erasure column family
|
||||||
let erasure_cf = ErasureCf::new(db.clone());
|
let erasure_cf = ErasureCf::new(db.clone());
|
||||||
|
|
||||||
let ticks_per_slot = DEFAULT_TICKS_PER_SLOT;
|
|
||||||
Ok(Blocktree {
|
Ok(Blocktree {
|
||||||
db,
|
db,
|
||||||
meta_cf,
|
meta_cf,
|
||||||
data_cf,
|
data_cf,
|
||||||
erasure_cf,
|
erasure_cf,
|
||||||
new_blobs_signals: vec![],
|
new_blobs_signals: vec![],
|
||||||
ticks_per_slot,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,8 +274,8 @@ mod tests {
|
|||||||
let (ledger_path, mut blockhash) = create_new_tmp_ledger!(&genesis_block);
|
let (ledger_path, mut blockhash) = create_new_tmp_ledger!(&genesis_block);
|
||||||
debug!("ledger_path: {:?}", ledger_path);
|
debug!("ledger_path: {:?}", ledger_path);
|
||||||
|
|
||||||
let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot)
|
let blocktree =
|
||||||
.expect("Expected to successfully open database ledger");
|
Blocktree::open(&ledger_path).expect("Expected to successfully open database ledger");
|
||||||
|
|
||||||
// Write slot 1
|
// Write slot 1
|
||||||
// slot 1, points at slot 0. Missing one tick
|
// slot 1, points at slot 0. Missing one tick
|
||||||
@ -334,8 +334,8 @@ mod tests {
|
|||||||
slot 4
|
slot 4
|
||||||
|
|
||||||
*/
|
*/
|
||||||
let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot)
|
let blocktree =
|
||||||
.expect("Expected to successfully open database ledger");
|
Blocktree::open(&ledger_path).expect("Expected to successfully open database ledger");
|
||||||
|
|
||||||
// Fork 1, ending at slot 3
|
// Fork 1, ending at slot 3
|
||||||
let last_slot1_entry_hash =
|
let last_slot1_entry_hash =
|
||||||
@ -472,7 +472,9 @@ mod tests {
|
|||||||
|
|
||||||
let blocktree =
|
let blocktree =
|
||||||
Blocktree::open(&ledger_path).expect("Expected to successfully open database ledger");
|
Blocktree::open(&ledger_path).expect("Expected to successfully open database ledger");
|
||||||
blocktree.write_entries(1, 0, 0, &entries).unwrap();
|
blocktree
|
||||||
|
.write_entries(1, 0, 0, genesis_block.ticks_per_slot, &entries)
|
||||||
|
.unwrap();
|
||||||
let entry_height = genesis_block.ticks_per_slot + entries.len() as u64;
|
let entry_height = genesis_block.ticks_per_slot + entries.len() as u64;
|
||||||
let (bank_forks, bank_forks_info) =
|
let (bank_forks, bank_forks_info) =
|
||||||
process_blocktree(&genesis_block, &blocktree, None).unwrap();
|
process_blocktree(&genesis_block, &blocktree, None).unwrap();
|
||||||
|
@ -142,11 +142,13 @@ mod tests {
|
|||||||
let ledger_dir = "chacha_test_encrypt_file";
|
let ledger_dir = "chacha_test_encrypt_file";
|
||||||
let ledger_path = get_tmp_ledger_path(ledger_dir);
|
let ledger_path = get_tmp_ledger_path(ledger_dir);
|
||||||
let ticks_per_slot = 16;
|
let ticks_per_slot = 16;
|
||||||
let blocktree = Arc::new(Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap());
|
let blocktree = Arc::new(Blocktree::open(&ledger_path).unwrap());
|
||||||
let out_path = Path::new("test_chacha_encrypt_file_output.txt.enc");
|
let out_path = Path::new("test_chacha_encrypt_file_output.txt.enc");
|
||||||
|
|
||||||
let entries = make_tiny_deterministic_test_entries(32);
|
let entries = make_tiny_deterministic_test_entries(32);
|
||||||
blocktree.write_entries(0, 0, 0, &entries).unwrap();
|
blocktree
|
||||||
|
.write_entries(0, 0, 0, ticks_per_slot, &entries)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let mut key = hex!(
|
let mut key = hex!(
|
||||||
"abcd1234abcd1234abcd1234abcd1234 abcd1234abcd1234abcd1234abcd1234
|
"abcd1234abcd1234abcd1234abcd1234 abcd1234abcd1234abcd1234abcd1234
|
||||||
|
@ -127,9 +127,11 @@ mod tests {
|
|||||||
let ledger_dir = "test_encrypt_file_many_keys_single";
|
let ledger_dir = "test_encrypt_file_many_keys_single";
|
||||||
let ledger_path = get_tmp_ledger_path(ledger_dir);
|
let ledger_path = get_tmp_ledger_path(ledger_dir);
|
||||||
let ticks_per_slot = 16;
|
let ticks_per_slot = 16;
|
||||||
let blocktree = Arc::new(Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap());
|
let blocktree = Arc::new(Blocktree::open(&ledger_path).unwrap());
|
||||||
|
|
||||||
blocktree.write_entries(0, 0, 0, &entries).unwrap();
|
blocktree
|
||||||
|
.write_entries(0, 0, 0, ticks_per_slot, &entries)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let out_path = Path::new("test_chacha_encrypt_file_many_keys_single_output.txt.enc");
|
let out_path = Path::new("test_chacha_encrypt_file_many_keys_single_output.txt.enc");
|
||||||
|
|
||||||
@ -161,8 +163,10 @@ mod tests {
|
|||||||
let ledger_dir = "test_encrypt_file_many_keys_multiple";
|
let ledger_dir = "test_encrypt_file_many_keys_multiple";
|
||||||
let ledger_path = get_tmp_ledger_path(ledger_dir);
|
let ledger_path = get_tmp_ledger_path(ledger_dir);
|
||||||
let ticks_per_slot = 16;
|
let ticks_per_slot = 16;
|
||||||
let blocktree = Arc::new(Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap());
|
let blocktree = Arc::new(Blocktree::open(&ledger_path).unwrap());
|
||||||
blocktree.write_entries(0, 0, 0, &entries).unwrap();
|
blocktree
|
||||||
|
.write_entries(0, 0, 0, ticks_per_slot, &entries)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let out_path = Path::new("test_chacha_encrypt_file_many_keys_multiple_output.txt.enc");
|
let out_path = Path::new("test_chacha_encrypt_file_many_keys_multiple_output.txt.enc");
|
||||||
|
|
||||||
|
@ -282,8 +282,7 @@ pub fn new_banks_from_blocktree(
|
|||||||
let genesis_block =
|
let genesis_block =
|
||||||
GenesisBlock::load(blocktree_path).expect("Expected to successfully open genesis block");
|
GenesisBlock::load(blocktree_path).expect("Expected to successfully open genesis block");
|
||||||
|
|
||||||
let (blocktree, ledger_signal_receiver) =
|
let (blocktree, ledger_signal_receiver) = Blocktree::open_with_signal(blocktree_path)
|
||||||
Blocktree::open_with_config_signal(blocktree_path, genesis_block.ticks_per_slot)
|
|
||||||
.expect("Expected to successfully open database ledger");
|
.expect("Expected to successfully open database ledger");
|
||||||
|
|
||||||
let (bank_forks, bank_forks_info) =
|
let (bank_forks, bank_forks_info) =
|
||||||
|
@ -440,7 +440,9 @@ mod test {
|
|||||||
|
|
||||||
info!("Send ReplayStage an entry, should see it on the ledger writer receiver");
|
info!("Send ReplayStage an entry, should see it on the ledger writer receiver");
|
||||||
let next_tick = create_ticks(1, bank.last_blockhash());
|
let next_tick = create_ticks(1, bank.last_blockhash());
|
||||||
blocktree.write_entries(1, 0, 0, next_tick.clone()).unwrap();
|
blocktree
|
||||||
|
.write_entries(1, 0, 0, genesis_block.ticks_per_slot, next_tick.clone())
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let received_tick = ledger_writer_recv
|
let received_tick = ledger_writer_recv
|
||||||
.recv()
|
.recv()
|
||||||
|
@ -513,8 +513,10 @@ mod tests {
|
|||||||
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block);
|
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block);
|
||||||
|
|
||||||
let entries = make_tiny_test_entries(64);
|
let entries = make_tiny_test_entries(64);
|
||||||
let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap();
|
let blocktree = Blocktree::open(&ledger_path).unwrap();
|
||||||
blocktree.write_entries(1, 0, 0, &entries).unwrap();
|
blocktree
|
||||||
|
.write_entries(1, 0, 0, ticks_per_slot, &entries)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let cluster_info = test_cluster_info(&keypair.pubkey());
|
let cluster_info = test_cluster_info(&keypair.pubkey());
|
||||||
|
|
||||||
@ -575,8 +577,10 @@ mod tests {
|
|||||||
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block);
|
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block);
|
||||||
|
|
||||||
let entries = make_tiny_test_entries(128);
|
let entries = make_tiny_test_entries(128);
|
||||||
let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap();
|
let blocktree = Blocktree::open(&ledger_path).unwrap();
|
||||||
blocktree.write_entries(1, 0, 0, &entries).unwrap();
|
blocktree
|
||||||
|
.write_entries(1, 0, 0, ticks_per_slot, &entries)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
let cluster_info = test_cluster_info(&keypair.pubkey());
|
let cluster_info = test_cluster_info(&keypair.pubkey());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user