Adjust ledger-tool bigtable upload starting-slot default value (#29384)
Currently, if starting-slot is unspecified, a value of 0 will be chosen. In the common case where someone is operating on a much more recent range, this would result in a ton of wasted operations & time. Instead, choose a smarter default value for starting-slot based on what we detect is currently in the blockstore.
This commit is contained in:
parent
58d66e1113
commit
1cc8917b9f
|
@ -38,7 +38,7 @@ use {
|
||||||
|
|
||||||
async fn upload(
|
async fn upload(
|
||||||
blockstore: Blockstore,
|
blockstore: Blockstore,
|
||||||
mut starting_slot: Slot,
|
starting_slot: Option<Slot>,
|
||||||
ending_slot: Option<Slot>,
|
ending_slot: Option<Slot>,
|
||||||
force_reupload: bool,
|
force_reupload: bool,
|
||||||
config: solana_storage_bigtable::LedgerStorageConfig,
|
config: solana_storage_bigtable::LedgerStorageConfig,
|
||||||
|
@ -53,6 +53,15 @@ async fn upload(
|
||||||
};
|
};
|
||||||
let blockstore = Arc::new(blockstore);
|
let blockstore = Arc::new(blockstore);
|
||||||
|
|
||||||
|
let mut starting_slot = match starting_slot {
|
||||||
|
Some(slot) => slot,
|
||||||
|
// It is possible that the slot returned below could get purged by
|
||||||
|
// LedgerCleanupService before upload_confirmed_blocks() receives the
|
||||||
|
// value. This is ok because upload_confirmed_blocks() doesn't need
|
||||||
|
// the exact slot to be in ledger, the slot is only used as a bound.
|
||||||
|
None => blockstore.get_first_available_block()?,
|
||||||
|
};
|
||||||
|
|
||||||
let ending_slot = ending_slot.unwrap_or_else(|| blockstore.last_root());
|
let ending_slot = ending_slot.unwrap_or_else(|| blockstore.last_root());
|
||||||
|
|
||||||
while starting_slot <= ending_slot {
|
while starting_slot <= ending_slot {
|
||||||
|
@ -640,7 +649,7 @@ pub fn bigtable_process_command(
|
||||||
|
|
||||||
let future = match (subcommand, sub_matches) {
|
let future = match (subcommand, sub_matches) {
|
||||||
("upload", Some(arg_matches)) => {
|
("upload", Some(arg_matches)) => {
|
||||||
let starting_slot = value_t!(arg_matches, "starting_slot", Slot).unwrap_or(0);
|
let starting_slot = value_t!(arg_matches, "starting_slot", Slot).ok();
|
||||||
let ending_slot = value_t!(arg_matches, "ending_slot", Slot).ok();
|
let ending_slot = value_t!(arg_matches, "ending_slot", Slot).ok();
|
||||||
let force_reupload = arg_matches.is_present("force_reupload");
|
let force_reupload = arg_matches.is_present("force_reupload");
|
||||||
let blockstore = crate::open_blockstore(
|
let blockstore = crate::open_blockstore(
|
||||||
|
|
Loading…
Reference in New Issue