diff --git a/Cargo.lock b/Cargo.lock index b904e6e771..201ad5f8d8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -290,7 +290,7 @@ dependencies = [ [[package]] name = "btc_spv_bin" -version = "0.21.2" +version = "0.21.3" dependencies = [ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3071,37 +3071,37 @@ dependencies = [ [[package]] name = "solana-archiver" -version = "0.21.2" +version = "0.21.3" dependencies = [ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "console 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-core 0.21.2", - "solana-logger 0.21.2", - "solana-metrics 0.21.2", - "solana-net-utils 0.21.2", - "solana-sdk 0.21.2", + "solana-clap-utils 0.21.3", + "solana-core 0.21.3", + "solana-logger 0.21.3", + "solana-metrics 0.21.3", + "solana-net-utils 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-banking-bench" -version = "0.21.2" +version = "0.21.3" dependencies = [ "crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-core 0.21.2", - "solana-ledger 0.21.2", - "solana-logger 0.21.2", - "solana-measure 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", + "solana-core 0.21.3", + "solana-ledger 0.21.3", + "solana-logger 0.21.3", + "solana-measure 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-bench-exchange" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3117,36 +3117,36 @@ dependencies = [ "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-client 0.21.2", - "solana-core 0.21.2", - "solana-drone 0.21.2", - "solana-exchange-program 0.21.2", - "solana-genesis 0.21.2", - "solana-local-cluster 0.21.2", - "solana-logger 0.21.2", - "solana-metrics 0.21.2", - "solana-net-utils 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", + "solana-clap-utils 0.21.3", + "solana-client 0.21.3", + "solana-core 0.21.3", + "solana-drone 0.21.3", + "solana-exchange-program 0.21.3", + "solana-genesis 0.21.3", + "solana-local-cluster 0.21.3", + "solana-logger 0.21.3", + "solana-metrics 0.21.3", + "solana-net-utils 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "ws 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-bench-streamer" -version = "0.21.2" +version = "0.21.3" dependencies = [ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-core 0.21.2", - "solana-logger 0.21.2", - "solana-net-utils 0.21.2", + "solana-clap-utils 0.21.3", + "solana-core 0.21.3", + "solana-logger 0.21.3", + "solana-net-utils 0.21.3", ] [[package]] name = "solana-bench-tps" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3158,39 +3158,39 @@ dependencies = [ "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-client 0.21.2", - "solana-core 0.21.2", - "solana-drone 0.21.2", - "solana-genesis 0.21.2", - "solana-librapay-api 0.21.2", - "solana-local-cluster 0.21.2", - "solana-logger 0.21.2", - "solana-measure 0.21.2", - "solana-metrics 0.21.2", - "solana-move-loader-program 0.21.2", - "solana-net-utils 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", + "solana-clap-utils 0.21.3", + "solana-client 0.21.3", + "solana-core 0.21.3", + "solana-drone 0.21.3", + "solana-genesis 0.21.3", + "solana-librapay-api 0.21.3", + "solana-local-cluster 0.21.3", + "solana-logger 0.21.3", + "solana-measure 0.21.3", + "solana-metrics 0.21.3", + "solana-move-loader-program 0.21.3", + "solana-net-utils 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-bpf-loader-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-sdk 0.21.2", + "solana-logger 0.21.3", + "solana-sdk 0.21.3", "solana_rbpf 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-btc-spv-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3200,12 +3200,12 @@ dependencies = [ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.21.2", + "solana-sdk 0.21.3", ] [[package]] name = "solana-budget-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3214,32 +3214,32 @@ dependencies = [ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-chacha-sys" -version = "0.21.2" +version = "0.21.3" dependencies = [ "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-clap-utils" -version = "0.21.2" +version = "0.21.3" dependencies = [ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "rpassword 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.21.2", + "solana-sdk 0.21.3", "tiny-bip39 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-cli" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3259,27 +3259,27 @@ dependencies = [ "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-budget-program 0.21.2", - "solana-clap-utils 0.21.2", - "solana-client 0.21.2", - "solana-config-program 0.21.2", - "solana-core 0.21.2", - "solana-drone 0.21.2", - "solana-logger 0.21.2", - "solana-net-utils 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", - "solana-stake-program 0.21.2", - "solana-storage-program 0.21.2", - "solana-vote-program 0.21.2", - "solana-vote-signer 0.21.2", + "solana-budget-program 0.21.3", + "solana-clap-utils 0.21.3", + "solana-client 0.21.3", + "solana-config-program 0.21.3", + "solana-core 0.21.3", + "solana-drone 0.21.3", + "solana-logger 0.21.3", + "solana-net-utils 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", + "solana-stake-program 0.21.3", + "solana-storage-program 0.21.3", + "solana-vote-program 0.21.3", + "solana-vote-signer 0.21.3", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-client" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3292,42 +3292,42 @@ dependencies = [ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-net-utils 0.21.2", - "solana-sdk 0.21.2", + "solana-logger 0.21.3", + "solana-net-utils 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-config-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-sdk 0.21.2", + "solana-logger 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-config-tests" -version = "0.21.2" +version = "0.21.3" dependencies = [ "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-config-program 0.21.2", - "solana-logger 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", + "solana-config-program 0.21.3", + "solana-logger 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-core" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3364,26 +3364,26 @@ dependencies = [ "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-budget-program 0.21.2", - "solana-chacha-sys 0.21.2", - "solana-clap-utils 0.21.2", - "solana-client 0.21.2", - "solana-drone 0.21.2", - "solana-ledger 0.21.2", - "solana-logger 0.21.2", - "solana-measure 0.21.2", - "solana-merkle-tree 0.21.2", - "solana-metrics 0.21.2", - "solana-net-utils 0.21.2", - "solana-perf 0.21.2", - "solana-rayon-threadlimit 0.21.2", + "solana-budget-program 0.21.3", + "solana-chacha-sys 0.21.3", + "solana-clap-utils 0.21.3", + "solana-client 0.21.3", + "solana-drone 0.21.3", + "solana-ledger 0.21.3", + "solana-logger 0.21.3", + "solana-measure 0.21.3", + "solana-merkle-tree 0.21.3", + "solana-metrics 0.21.3", + "solana-net-utils 0.21.3", + "solana-perf 0.21.3", + "solana-rayon-threadlimit 0.21.3", "solana-reed-solomon-erasure 4.0.1-3 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", - "solana-stake-program 0.21.2", - "solana-storage-program 0.21.2", - "solana-vote-program 0.21.2", - "solana-vote-signer 0.21.2", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", + "solana-stake-program 0.21.3", + "solana-storage-program 0.21.3", + "solana-vote-program 0.21.3", + "solana-vote-signer 0.21.3", "symlink 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "sys-info 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3396,7 +3396,7 @@ dependencies = [ [[package]] name = "solana-crate-features" -version = "0.21.2" +version = "0.21.3" dependencies = [ "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3419,7 +3419,7 @@ dependencies = [ [[package]] name = "solana-drone" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3428,40 +3428,40 @@ dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-logger 0.21.2", - "solana-metrics 0.21.2", - "solana-sdk 0.21.2", + "solana-clap-utils 0.21.3", + "solana-logger 0.21.3", + "solana-metrics 0.21.3", + "solana-sdk 0.21.3", "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-exchange-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-metrics 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", + "solana-logger 0.21.3", + "solana-metrics 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-failure-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-fixed-buf" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3470,7 +3470,7 @@ dependencies = [ [[package]] name = "solana-genesis" -version = "0.21.2" +version = "0.21.3" dependencies = [ "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3479,49 +3479,49 @@ dependencies = [ "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-genesis-programs 0.21.2", - "solana-ledger 0.21.2", - "solana-sdk 0.21.2", - "solana-stake-program 0.21.2", - "solana-storage-program 0.21.2", - "solana-vote-program 0.21.2", + "solana-clap-utils 0.21.3", + "solana-genesis-programs 0.21.3", + "solana-ledger 0.21.3", + "solana-sdk 0.21.3", + "solana-stake-program 0.21.3", + "solana-storage-program 0.21.3", + "solana-vote-program 0.21.3", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-genesis-programs" -version = "0.21.2" +version = "0.21.3" dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-bpf-loader-program 0.21.2", - "solana-budget-program 0.21.2", - "solana-config-program 0.21.2", - "solana-exchange-program 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", - "solana-stake-program 0.21.2", - "solana-storage-program 0.21.2", - "solana-vest-program 0.21.2", - "solana-vote-program 0.21.2", + "solana-bpf-loader-program 0.21.3", + "solana-budget-program 0.21.3", + "solana-config-program 0.21.3", + "solana-exchange-program 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", + "solana-stake-program 0.21.3", + "solana-storage-program 0.21.3", + "solana-vest-program 0.21.3", + "solana-vote-program 0.21.3", ] [[package]] name = "solana-gossip" -version = "0.21.2" +version = "0.21.3" dependencies = [ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-client 0.21.2", - "solana-core 0.21.2", - "solana-logger 0.21.2", - "solana-net-utils 0.21.2", - "solana-sdk 0.21.2", + "solana-clap-utils 0.21.3", + "solana-client 0.21.3", + "solana-core 0.21.3", + "solana-logger 0.21.3", + "solana-net-utils 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-install" -version = "0.21.2" +version = "0.21.3" dependencies = [ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3540,11 +3540,11 @@ dependencies = [ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-client 0.21.2", - "solana-config-program 0.21.2", - "solana-logger 0.21.2", - "solana-sdk 0.21.2", + "solana-clap-utils 0.21.3", + "solana-client 0.21.3", + "solana-config-program 0.21.3", + "solana-logger 0.21.3", + "solana-sdk 0.21.3", "tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3554,21 +3554,21 @@ dependencies = [ [[package]] name = "solana-keygen" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bs58 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", "rpassword 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-sdk 0.21.2", + "solana-clap-utils 0.21.3", + "solana-sdk 0.21.3", "tiny-bip39 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-ledger" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3592,20 +3592,20 @@ dependencies = [ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-budget-program 0.21.2", - "solana-client 0.21.2", - "solana-genesis-programs 0.21.2", - "solana-logger 0.21.2", - "solana-measure 0.21.2", - "solana-merkle-tree 0.21.2", - "solana-metrics 0.21.2", - "solana-perf 0.21.2", - "solana-rayon-threadlimit 0.21.2", + "solana-budget-program 0.21.3", + "solana-client 0.21.3", + "solana-genesis-programs 0.21.3", + "solana-logger 0.21.3", + "solana-measure 0.21.3", + "solana-merkle-tree 0.21.3", + "solana-metrics 0.21.3", + "solana-perf 0.21.3", + "solana-rayon-threadlimit 0.21.3", "solana-reed-solomon-erasure 4.0.1-3 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", - "solana-stake-program 0.21.2", - "solana-vote-program 0.21.2", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", + "solana-stake-program 0.21.3", + "solana-vote-program 0.21.3", "sys-info 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", "tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3613,7 +3613,7 @@ dependencies = [ [[package]] name = "solana-ledger-tool" -version = "0.21.2" +version = "0.21.3" dependencies = [ "assert_cmd 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3622,59 +3622,59 @@ dependencies = [ "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-ledger 0.21.2", - "solana-logger 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", - "solana-vote-program 0.21.2", + "solana-clap-utils 0.21.3", + "solana-ledger 0.21.3", + "solana-logger 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", + "solana-vote-program 0.21.3", ] [[package]] name = "solana-librapay-api" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-move-loader-program 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", + "solana-logger 0.21.3", + "solana-move-loader-program 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", "solana_libra_language_e2e_tests 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)", "solana_libra_types 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-local-cluster" -version = "0.21.2" +version = "0.21.3" dependencies = [ "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-client 0.21.2", - "solana-config-program 0.21.2", - "solana-core 0.21.2", - "solana-drone 0.21.2", - "solana-exchange-program 0.21.2", - "solana-genesis-programs 0.21.2", - "solana-ledger 0.21.2", - "solana-logger 0.21.2", - "solana-rayon-threadlimit 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", - "solana-stake-program 0.21.2", - "solana-storage-program 0.21.2", - "solana-vest-program 0.21.2", - "solana-vote-program 0.21.2", + "solana-client 0.21.3", + "solana-config-program 0.21.3", + "solana-core 0.21.3", + "solana-drone 0.21.3", + "solana-exchange-program 0.21.3", + "solana-genesis-programs 0.21.3", + "solana-ledger 0.21.3", + "solana-logger 0.21.3", + "solana-rayon-threadlimit 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", + "solana-stake-program 0.21.3", + "solana-storage-program 0.21.3", + "solana-vest-program 0.21.3", + "solana-vote-program 0.21.3", "symlink 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-log-analyzer" -version = "0.21.2" +version = "0.21.3" dependencies = [ "byte-unit 3.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3683,13 +3683,13 @@ dependencies = [ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-logger 0.21.2", + "solana-clap-utils 0.21.3", + "solana-logger 0.21.3", ] [[package]] name = "solana-logger" -version = "0.21.2" +version = "0.21.3" dependencies = [ "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3698,22 +3698,22 @@ dependencies = [ [[package]] name = "solana-measure" -version = "0.21.2" +version = "0.21.3" dependencies = [ - "solana-sdk 0.21.2", + "solana-sdk 0.21.3", ] [[package]] name = "solana-merkle-tree" -version = "0.21.2" +version = "0.21.3" dependencies = [ "hex 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.21.2", + "solana-sdk 0.21.3", ] [[package]] name = "solana-metrics" -version = "0.21.2" +version = "0.21.3" dependencies = [ "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3722,13 +3722,13 @@ dependencies = [ "reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.21.2", + "solana-sdk 0.21.3", "sys-info 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-move-loader-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3739,8 +3739,8 @@ dependencies = [ "serde_bytes 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-sdk 0.21.2", + "solana-logger 0.21.3", + "solana-sdk 0.21.3", "solana_libra_bytecode_verifier 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)", "solana_libra_canonical_serialization 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)", "solana_libra_compiler 0.0.1-sol4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3757,7 +3757,7 @@ dependencies = [ [[package]] name = "solana-net-shaper" -version = "0.21.2" +version = "0.21.3" dependencies = [ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3766,13 +3766,13 @@ dependencies = [ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-logger 0.21.2", + "solana-clap-utils 0.21.3", + "solana-logger 0.21.3", ] [[package]] name = "solana-net-utils" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3783,37 +3783,37 @@ dependencies = [ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-logger 0.21.2", + "solana-clap-utils 0.21.3", + "solana-logger 0.21.3", "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-noop-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-sdk 0.21.2", + "solana-logger 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-ownable-api" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-derive 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-perf" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "dlopen 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3825,16 +3825,16 @@ dependencies = [ "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-budget-program 0.21.2", - "solana-logger 0.21.2", - "solana-metrics 0.21.2", - "solana-rayon-threadlimit 0.21.2", - "solana-sdk 0.21.2", + "solana-budget-program 0.21.3", + "solana-logger 0.21.3", + "solana-metrics 0.21.3", + "solana-rayon-threadlimit 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-rayon-threadlimit" -version = "0.21.2" +version = "0.21.3" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "sys-info 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3852,7 +3852,7 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "bv 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3870,23 +3870,23 @@ dependencies = [ "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-bpf-loader-program 0.21.2", - "solana-logger 0.21.2", - "solana-measure 0.21.2", - "solana-metrics 0.21.2", - "solana-noop-program 0.21.2", - "solana-rayon-threadlimit 0.21.2", - "solana-sdk 0.21.2", - "solana-stake-program 0.21.2", - "solana-storage-program 0.21.2", - "solana-vote-program 0.21.2", + "solana-bpf-loader-program 0.21.3", + "solana-logger 0.21.3", + "solana-measure 0.21.3", + "solana-metrics 0.21.3", + "solana-noop-program 0.21.3", + "solana-rayon-threadlimit 0.21.3", + "solana-sdk 0.21.3", + "solana-stake-program 0.21.3", + "solana-storage-program 0.21.3", + "solana-vote-program 0.21.3", "sys-info 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-scripts" -version = "0.22.0" +version = "0.21.3" dependencies = [ "csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3894,7 +3894,7 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "0.21.2" +version = "0.21.3" dependencies = [ "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3917,15 +3917,15 @@ dependencies = [ "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-crate-features 0.21.2", - "solana-logger 0.21.2", - "solana-sdk-macro 0.21.2", + "solana-crate-features 0.21.3", + "solana-logger 0.21.3", + "solana-sdk-macro 0.21.3", "tiny-bip39 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-sdk-c" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3935,12 +3935,12 @@ dependencies = [ "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.21.2", + "solana-sdk 0.21.3", ] [[package]] name = "solana-sdk-macro" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bs58 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3950,7 +3950,7 @@ dependencies = [ [[package]] name = "solana-stake-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3959,29 +3959,29 @@ dependencies = [ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-config-program 0.21.2", - "solana-logger 0.21.2", - "solana-metrics 0.21.2", - "solana-sdk 0.21.2", - "solana-vote-program 0.21.2", + "solana-config-program 0.21.3", + "solana-logger 0.21.3", + "solana-metrics 0.21.3", + "solana-sdk 0.21.3", + "solana-vote-program 0.21.3", ] [[package]] name = "solana-stake-tests" -version = "0.21.2" +version = "0.21.3" dependencies = [ "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", - "solana-stake-program 0.21.2", - "solana-vote-program 0.21.2", + "solana-logger 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", + "solana-stake-program 0.21.3", + "solana-vote-program 0.21.3", ] [[package]] name = "solana-storage-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3990,35 +3990,35 @@ dependencies = [ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-sdk 0.21.2", + "solana-logger 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-storage-tests" -version = "0.21.2" +version = "0.21.3" dependencies = [ "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", - "solana-storage-program 0.21.2", + "solana-logger 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", + "solana-storage-program 0.21.3", ] [[package]] name = "solana-upload-perf" -version = "0.21.2" +version = "0.21.3" dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-metrics 0.21.2", + "solana-metrics 0.21.3", ] [[package]] name = "solana-validator" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4029,26 +4029,26 @@ dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-client 0.21.2", - "solana-core 0.21.2", - "solana-drone 0.21.2", - "solana-ledger 0.21.2", - "solana-logger 0.21.2", - "solana-metrics 0.21.2", - "solana-net-utils 0.21.2", - "solana-perf 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", - "solana-vote-program 0.21.2", - "solana-vote-signer 0.21.2", + "solana-clap-utils 0.21.3", + "solana-client 0.21.3", + "solana-core 0.21.3", + "solana-drone 0.21.3", + "solana-ledger 0.21.3", + "solana-logger 0.21.3", + "solana-metrics 0.21.3", + "solana-net-utils 0.21.3", + "solana-perf 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", + "solana-vote-program 0.21.3", + "solana-vote-signer 0.21.3", "tar 0.4.26 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-vest-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4057,14 +4057,14 @@ dependencies = [ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-config-program 0.21.2", - "solana-runtime 0.21.2", - "solana-sdk 0.21.2", + "solana-config-program 0.21.3", + "solana-runtime 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-vote-program" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4072,14 +4072,14 @@ dependencies = [ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.21.2", - "solana-metrics 0.21.2", - "solana-sdk 0.21.2", + "solana-logger 0.21.3", + "solana-metrics 0.21.3", + "solana-sdk 0.21.3", ] [[package]] name = "solana-vote-signer" -version = "0.21.2" +version = "0.21.3" dependencies = [ "bs58 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4089,9 +4089,9 @@ dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-clap-utils 0.21.2", - "solana-metrics 0.21.2", - "solana-sdk 0.21.2", + "solana-clap-utils 0.21.3", + "solana-metrics 0.21.3", + "solana-sdk 0.21.3", ] [[package]] diff --git a/ledger/src/blocktree.rs b/ledger/src/blocktree.rs index 94406d6093..cbe140a247 100644 --- a/ledger/src/blocktree.rs +++ b/ledger/src/blocktree.rs @@ -357,10 +357,20 @@ impl Blocktree { Ok(slot_iterator.take_while(move |((shred_slot, _), _)| *shred_slot == slot)) } + pub fn slot_coding_iterator<'a>( + &'a self, + slot: Slot, + ) -> Result)> + 'a> { + let slot_iterator = self + .db + .iter::(IteratorMode::From((slot, 0), IteratorDirection::Forward))?; + Ok(slot_iterator.take_while(move |((shred_slot, _), _)| *shred_slot == slot)) + } + fn try_shred_recovery( db: &Database, erasure_metas: &HashMap<(u64, u64), ErasureMeta>, - index_working_set: &HashMap, + index_working_set: &mut HashMap, prev_inserted_datas: &mut HashMap<(u64, u64), Shred>, prev_inserted_codes: &mut HashMap<(u64, u64), Shred>, ) -> Vec { @@ -385,8 +395,8 @@ impl Blocktree { ); }; - let index_meta_entry = index_working_set.get(&slot).expect("Index"); - let index = &index_meta_entry.index; + let index_meta_entry = index_working_set.get_mut(&slot).expect("Index"); + let index = &mut index_meta_entry.index; match erasure_meta.status(&index) { ErasureMetaStatus::CanRecover => { // Find shreds for this erasure set and try recovery @@ -413,8 +423,17 @@ impl Blocktree { }); (set_index..set_index + erasure_meta.config.num_coding() as u64).for_each( |i| { - if let Some(shred) = - prev_inserted_codes.remove(&(slot, i)).or_else(|| { + if let Some(shred) = prev_inserted_codes + .remove(&(slot, i)) + .map(|s| { + // Remove from the index so it doesn't get committed. We know + // this is safe to do because everything in + // `prev_inserted_codes` does not yet exist in blocktree + // (guaranteed by `check_cache_coding_shred`) + index.coding_mut().set_present(i, false); + s + }) + .or_else(|| { if index.coding().is_present(i) { let some_code = code_cf .get_bytes((slot, i)) @@ -450,8 +469,14 @@ impl Blocktree { ErasureMetaStatus::DataFull => { (set_index..set_index + erasure_meta.config.num_coding() as u64).for_each( |i| { - // Remove saved coding shreds. We don't need these for future recovery - let _ = prev_inserted_codes.remove(&(slot, i)); + // Remove saved coding shreds. We don't need these for future recovery. + if prev_inserted_codes.remove(&(slot, i)).is_some() { + // Remove from the index so it doesn't get committed. We know + // this is safe to do because everything in + // `prev_inserted_codes` does not yet exist in blocktree + // (guaranteed by `check_cache_coding_shred`) + index.coding_mut().set_present(i, false); + } }, ); submit_metrics(false, "complete".into(), 0); @@ -524,7 +549,7 @@ impl Blocktree { let recovered_data = Self::try_shred_recovery( &db, &erasure_metas, - &index_working_set, + &mut index_working_set, &mut just_inserted_data_shreds, &mut just_inserted_coding_shreds, ); @@ -681,6 +706,13 @@ impl Blocktree { ); } + // Should be safe to modify index_meta here. Two cases + // 1) Recovery happens: Then all inserted erasure metas are removed + // from just_received_coding_shreds, and nothing wll be committed by + // `check_insert_coding_shred`, so the coding index meta will not be + // committed + index_meta.coding_mut().set_present(shred_index, true); + just_received_coding_shreds .entry((slot, shred_index)) .or_insert_with(|| shred); @@ -2083,10 +2115,12 @@ pub mod tests { use crate::{ entry::{next_entry, next_entry_mut}, genesis_utils::{create_genesis_config, GenesisConfigInfo}, + leader_schedule::{FixedSchedule, LeaderSchedule}, shred::{max_ticks_per_n_shreds, DataShredHeader}, }; use itertools::Itertools; use rand::{seq::SliceRandom, thread_rng}; + use solana_runtime::bank::Bank; use solana_sdk::{ hash::{self, Hash}, instruction::CompiledInstruction, @@ -2098,11 +2132,7 @@ pub mod tests { use std::{iter::FromIterator, time::Duration}; // used for tests only - fn make_slot_entries_with_transactions( - slot: Slot, - parent_slot: Slot, - num_entries: u64, - ) -> (Vec, Vec) { + fn make_slot_entries_with_transactions(num_entries: u64) -> Vec { let mut entries: Vec = Vec::new(); for _ in 0..num_entries { let transaction = Transaction::new_with_compiled_instructions( @@ -2116,8 +2146,7 @@ pub mod tests { let mut tick = create_ticks(1, 0, Hash::default()); entries.append(&mut tick); } - let shreds = entries_to_test_shreds(entries.clone(), slot, parent_slot, true, 0); - (shreds, entries) + entries } #[test] @@ -4161,8 +4190,8 @@ pub mod tests { #[test] fn test_get_confirmed_block() { let slot = 0; - let (shreds, entries) = make_slot_entries_with_transactions(slot, 0, 100); - + let entries = make_slot_entries_with_transactions(100); + let shreds = entries_to_test_shreds(entries.clone(), slot, 0, true, 0); let ledger_path = get_tmp_ledger_path!(); let ledger = Blocktree::open(&ledger_path).unwrap(); ledger.insert_shreds(shreds, None, false).unwrap(); @@ -4333,4 +4362,236 @@ pub mod tests { } Blocktree::destroy(&blocktree_path).expect("Expected successful database destruction"); } + + #[test] + fn test_recovery() { + let slot = 1; + let (data_shreds, coding_shreds, leader_schedule_cache) = + setup_erasure_shreds(slot, 0, 100, 1.0); + let blocktree_path = get_tmp_ledger_path!(); + { + let blocktree = Blocktree::open(&blocktree_path).unwrap(); + blocktree + .insert_shreds(coding_shreds, Some(&leader_schedule_cache), false) + .unwrap(); + let shred_bufs: Vec<_> = data_shreds + .iter() + .map(|shred| shred.payload.clone()) + .collect(); + + // Check all the data shreds were recovered + for (s, buf) in data_shreds.iter().zip(shred_bufs) { + assert_eq!( + blocktree + .get_data_shred(s.slot(), s.index() as u64) + .unwrap() + .unwrap(), + buf + ); + } + + verify_index_integrity(&blocktree, slot); + } + Blocktree::destroy(&blocktree_path).expect("Expected successful database destruction"); + } + + #[test] + fn test_index_integrity() { + let slot = 1; + let num_entries = 100; + let (data_shreds, coding_shreds, leader_schedule_cache) = + setup_erasure_shreds(slot, 0, num_entries, 1.0); + assert!(data_shreds.len() > 3); + assert!(coding_shreds.len() > 3); + let blocktree_path = get_tmp_ledger_path!(); + { + let blocktree = Blocktree::open(&blocktree_path).unwrap(); + // Test inserting all the shreds + let all_shreds: Vec<_> = data_shreds + .iter() + .cloned() + .chain(coding_shreds.iter().cloned()) + .collect(); + blocktree + .insert_shreds(all_shreds, Some(&leader_schedule_cache), false) + .unwrap(); + verify_index_integrity(&blocktree, slot); + blocktree.purge_slots(0, Some(slot)); + + // Test inserting just the codes, enough for recovery + blocktree + .insert_shreds(coding_shreds.clone(), Some(&leader_schedule_cache), false) + .unwrap(); + verify_index_integrity(&blocktree, slot); + blocktree.purge_slots(0, Some(slot)); + + // Test inserting some codes, but not enough for recovery + blocktree + .insert_shreds( + coding_shreds[..coding_shreds.len() - 1].to_vec(), + Some(&leader_schedule_cache), + false, + ) + .unwrap(); + verify_index_integrity(&blocktree, slot); + blocktree.purge_slots(0, Some(slot)); + + // Test inserting just the codes, and some data, enough for recovery + let shreds: Vec<_> = data_shreds[..data_shreds.len() - 1] + .iter() + .cloned() + .chain(coding_shreds[..coding_shreds.len() - 1].iter().cloned()) + .collect(); + blocktree + .insert_shreds(shreds, Some(&leader_schedule_cache), false) + .unwrap(); + verify_index_integrity(&blocktree, slot); + blocktree.purge_slots(0, Some(slot)); + + // Test inserting some codes, and some data, but enough for recovery + let shreds: Vec<_> = data_shreds[..data_shreds.len() / 2 - 1] + .iter() + .cloned() + .chain(coding_shreds[..coding_shreds.len() / 2 - 1].iter().cloned()) + .collect(); + blocktree + .insert_shreds(shreds, Some(&leader_schedule_cache), false) + .unwrap(); + verify_index_integrity(&blocktree, slot); + blocktree.purge_slots(0, Some(slot)); + + // Test inserting all shreds in 2 rounds, make sure nothing is lost + let shreds1: Vec<_> = data_shreds[..data_shreds.len() / 2 - 1] + .iter() + .cloned() + .chain(coding_shreds[..coding_shreds.len() / 2 - 1].iter().cloned()) + .collect(); + let shreds2: Vec<_> = data_shreds[data_shreds.len() / 2 - 1..] + .iter() + .cloned() + .chain(coding_shreds[coding_shreds.len() / 2 - 1..].iter().cloned()) + .collect(); + blocktree + .insert_shreds(shreds1, Some(&leader_schedule_cache), false) + .unwrap(); + blocktree + .insert_shreds(shreds2, Some(&leader_schedule_cache), false) + .unwrap(); + verify_index_integrity(&blocktree, slot); + blocktree.purge_slots(0, Some(slot)); + + // Test not all, but enough data and coding shreds in 2 rounds to trigger recovery, + // make sure nothing is lost + let shreds1: Vec<_> = data_shreds[..data_shreds.len() / 2 - 1] + .iter() + .cloned() + .chain(coding_shreds[..coding_shreds.len() / 2 - 1].iter().cloned()) + .collect(); + let shreds2: Vec<_> = data_shreds[data_shreds.len() / 2 - 1..data_shreds.len() / 2] + .iter() + .cloned() + .chain( + coding_shreds[coding_shreds.len() / 2 - 1..data_shreds.len() / 2] + .iter() + .cloned(), + ) + .collect(); + blocktree + .insert_shreds(shreds1, Some(&leader_schedule_cache), false) + .unwrap(); + blocktree + .insert_shreds(shreds2, Some(&leader_schedule_cache), false) + .unwrap(); + verify_index_integrity(&blocktree, slot); + blocktree.purge_slots(0, Some(slot)); + + // Test insert shreds in 2 rounds, but not enough to trigger + // recovery, make sure nothing is lost + let shreds1: Vec<_> = data_shreds[..data_shreds.len() / 2 - 2] + .iter() + .cloned() + .chain(coding_shreds[..coding_shreds.len() / 2 - 2].iter().cloned()) + .collect(); + let shreds2: Vec<_> = data_shreds[data_shreds.len() / 2 - 2..data_shreds.len() / 2 - 1] + .iter() + .cloned() + .chain( + coding_shreds[coding_shreds.len() / 2 - 2..coding_shreds.len() / 2 - 1] + .iter() + .cloned(), + ) + .collect(); + blocktree + .insert_shreds(shreds1, Some(&leader_schedule_cache), false) + .unwrap(); + blocktree + .insert_shreds(shreds2, Some(&leader_schedule_cache), false) + .unwrap(); + verify_index_integrity(&blocktree, slot); + blocktree.purge_slots(0, Some(slot)); + } + Blocktree::destroy(&blocktree_path).expect("Expected successful database destruction"); + } + + fn setup_erasure_shreds( + slot: u64, + parent_slot: u64, + num_entries: u64, + erasure_rate: f32, + ) -> (Vec, Vec, Arc) { + let entries = make_slot_entries_with_transactions(num_entries); + let leader_keypair = Arc::new(Keypair::new()); + let shredder = Shredder::new( + slot, + parent_slot, + erasure_rate, + leader_keypair.clone(), + 0, + 0, + ) + .expect("Failed in creating shredder"); + let (data_shreds, coding_shreds, _) = shredder.entries_to_shreds(&entries, true, 0); + + let genesis_config = create_genesis_config(2).genesis_config; + let bank = Arc::new(Bank::new(&genesis_config)); + let mut leader_schedule_cache = LeaderScheduleCache::new_from_bank(&bank); + let fixed_schedule = FixedSchedule { + leader_schedule: Arc::new(LeaderSchedule::new_from_schedule(vec![ + leader_keypair.pubkey() + ])), + start_epoch: 0, + }; + leader_schedule_cache.set_fixed_leader_schedule(Some(fixed_schedule)); + + (data_shreds, coding_shreds, Arc::new(leader_schedule_cache)) + } + + fn verify_index_integrity(blocktree: &Blocktree, slot: u64) { + let index = blocktree.get_index(slot).unwrap().unwrap(); + // Test the set of data shreds in the index and in the data column + // family are the same + let data_iter = blocktree.slot_data_iterator(slot).unwrap(); + let mut num_data = 0; + for ((slot, index), _) in data_iter { + num_data += 1; + assert!(blocktree.get_data_shred(slot, index).unwrap().is_some()); + } + + // Test the data index doesn't have anything extra + let num_data_in_index = index.data().num_data(); + assert_eq!(num_data_in_index, num_data); + + // Test the set of coding shreds in the index and in the coding column + // family are the same + let coding_iter = blocktree.slot_coding_iterator(slot).unwrap(); + let mut num_coding = 0; + for ((slot, index), _) in coding_iter { + num_coding += 1; + assert!(blocktree.get_coding_shred(slot, index).unwrap().is_some()); + } + + // Test the data index doesn't have anything extra + let num_coding_in_index = index.coding().num_coding(); + assert_eq!(num_coding_in_index, num_coding); + } } diff --git a/ledger/src/blocktree_meta.rs b/ledger/src/blocktree_meta.rs index b27a143848..5e5e9734b3 100644 --- a/ledger/src/blocktree_meta.rs +++ b/ledger/src/blocktree_meta.rs @@ -97,6 +97,10 @@ impl Index { } impl CodingIndex { + pub fn num_coding(&self) -> usize { + self.index.len() + } + pub fn present_in_bounds(&self, bounds: impl RangeBounds) -> usize { self.index.range(bounds).count() } @@ -121,6 +125,10 @@ impl CodingIndex { } impl DataIndex { + pub fn num_data(&self) -> usize { + self.index.len() + } + pub fn present_in_bounds(&self, bounds: impl RangeBounds) -> usize { self.index.range(bounds).count() }