From 86faa3f9952548ea8b8d7a362a34761d759bbcf4 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Tue, 12 Nov 2019 22:01:04 -0700 Subject: [PATCH] Properly type RpcClient::get_version() (#6919) --- ci/publish-tarball.sh | 3 +++ cli/src/cluster_query.rs | 19 +++---------------- client/src/rpc_client.rs | 6 +++--- client/src/rpc_request.rs | 21 ++++++++++++++++++++- core/src/rpc.rs | 22 ++-------------------- core/tests/client.rs | 4 ++-- 6 files changed, 33 insertions(+), 42 deletions(-) diff --git a/ci/publish-tarball.sh b/ci/publish-tarball.sh index 655cec695d..d6f2464955 100755 --- a/ci/publish-tarball.sh +++ b/ci/publish-tarball.sh @@ -67,6 +67,9 @@ echo --- Creating tarball echo "target: $TARGET" ) > solana-release/version.yml + # Make CHANNEL available to include in the software version information + export CHANNEL + source ci/rust-version.sh stable scripts/cargo-install-all.sh +"$rust_stable" --use-move solana-release diff --git a/cli/src/cluster_query.rs b/cli/src/cluster_query.rs index 680c45939f..b833a08121 100644 --- a/cli/src/cluster_query.rs +++ b/cli/src/cluster_query.rs @@ -7,7 +7,6 @@ use crate::{ }; use clap::{value_t_or_exit, App, Arg, ArgMatches, SubCommand}; use console::{style, Emoji}; -use serde_json::Value; use solana_client::{rpc_client::RpcClient, rpc_request::RpcVoteAccountInfo}; use solana_sdk::{ clock, @@ -131,21 +130,9 @@ pub fn parse_show_validators(matches: &ArgMatches<'_>) -> Result ProcessResult { - let remote_version: Value = serde_json::from_str(&rpc_client.get_version()?)?; - println!( - "{} {}", - style("Cluster versions from:").bold(), - config.json_rpc_url - ); - if let Some(versions) = remote_version.as_object() { - for (key, value) in versions.iter() { - if let Some(value_string) = value.as_str() { - println_name_value(&format!("* {}:", key), &value_string); - } - } - } - Ok("".to_string()) +pub fn process_cluster_version(rpc_client: &RpcClient, _config: &CliConfig) -> ProcessResult { + let remote_version = rpc_client.get_version()?; + Ok(remote_version.solana_core) } pub fn process_fees(rpc_client: &RpcClient) -> ProcessResult { diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index 60163f21b7..99cf339c18 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -4,7 +4,7 @@ use crate::{ generic_rpc_client_request::GenericRpcClientRequest, mock_rpc_client_request::MockRpcClientRequest, rpc_client_request::RpcClientRequest, - rpc_request::{RpcEpochInfo, RpcRequest, RpcVoteAccountStatus}, + rpc_request::{RpcEpochInfo, RpcRequest, RpcVersionInfo, RpcVoteAccountStatus}, }; use bincode::serialize; use log::*; @@ -234,7 +234,7 @@ impl RpcClient { }) } - pub fn get_version(&self) -> io::Result { + pub fn get_version(&self) -> io::Result { let response = self .client .send(&RpcRequest::GetVersion, None, 0, None) @@ -245,7 +245,7 @@ impl RpcClient { ) })?; - serde_json::to_string(&response).map_err(|err| { + serde_json::from_value(response).map_err(|err| { io::Error::new( io::ErrorKind::Other, format!("GetVersion parse failure: {}", err), diff --git a/client/src/rpc_request.rs b/client/src/rpc_request.rs index e1c3dc7866..6c8b3495e4 100644 --- a/client/src/rpc_request.rs +++ b/client/src/rpc_request.rs @@ -4,7 +4,7 @@ use solana_sdk::{ clock::{Epoch, Slot}, commitment_config::CommitmentConfig, }; -use std::{error, fmt, io}; +use std::{error, fmt, io, net::SocketAddr}; pub type RpcResponseIn = JsonResult>; pub type RpcResponse = io::Result>; @@ -20,6 +20,18 @@ pub struct Response { pub value: T, } +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct RpcContactInfo { + /// Pubkey of the node as a base-58 string + pub pubkey: String, + /// Gossip port + pub gossip: Option, + /// Tpu port + pub tpu: Option, + /// JSON RPC port + pub rpc: Option, +} + #[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "camelCase")] pub struct RpcEpochInfo { @@ -36,6 +48,13 @@ pub struct RpcEpochInfo { pub absolute_slot: Slot, } +#[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(rename_all = "kebab-case")] +pub struct RpcVersionInfo { + /// The current version of solana-core + pub solana_core: String, +} + #[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "camelCase")] pub struct RpcVoteAccountStatus { diff --git a/core/src/rpc.rs b/core/src/rpc.rs index 3f135cb3fe..ebe5b08210 100644 --- a/core/src/rpc.rs +++ b/core/src/rpc.rs @@ -13,7 +13,8 @@ use bincode::serialize; use jsonrpc_core::{Error, Metadata, Result}; use jsonrpc_derive::rpc; use solana_client::rpc_request::{ - Response, RpcEpochInfo, RpcResponseContext, RpcVoteAccountInfo, RpcVoteAccountStatus, + Response, RpcContactInfo, RpcEpochInfo, RpcResponseContext, RpcVersionInfo, RpcVoteAccountInfo, + RpcVoteAccountStatus, }; use solana_drone::drone::request_airdrop_transaction; use solana_ledger::{ @@ -342,25 +343,6 @@ pub struct Meta { } impl Metadata for Meta {} -#[derive(Serialize, Deserialize, Clone, Debug)] -pub struct RpcContactInfo { - /// Pubkey of the node as a base-58 string - pub pubkey: String, - /// Gossip port - pub gossip: Option, - /// Tpu port - pub tpu: Option, - /// JSON RPC port - pub rpc: Option, -} - -#[derive(Serialize, Deserialize, Clone, Debug)] -#[serde(rename_all = "kebab-case")] -pub struct RpcVersionInfo { - /// The current version of solana-core - pub solana_core: String, -} - #[rpc(server)] pub trait RpcSol { type Metadata; diff --git a/core/tests/client.rs b/core/tests/client.rs index 87f235c1f2..0ad379d329 100644 --- a/core/tests/client.rs +++ b/core/tests/client.rs @@ -18,8 +18,8 @@ fn test_rpc_client() { let client = RpcClient::new_socket(leader_data.rpc); assert_eq!( - client.get_version().unwrap(), - format!("{{\"solana-core\":\"{}\"}}", solana_core::version!()) + client.get_version().unwrap().solana_core, + solana_core::version!() ); assert_eq!(client.get_balance(&bob_pubkey).unwrap(), 0);