Configurable update tracks to help testing.

This commit is contained in:
Gav Wood 2016-12-15 18:51:59 +01:00
parent fa319ff64c
commit 4a2b418fc2
No known key found for this signature in database
GPG Key ID: C49C1ACA1CC9B252
8 changed files with 67 additions and 26 deletions

17
Cargo.lock generated
View File

@ -33,8 +33,8 @@ dependencies = [
"num_cpus 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"number_prefix 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "number_prefix 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-hash-fetch 1.5.0", "parity-hash-fetch 1.5.0",
"parity-updater 1.5.0",
"parity-rpc-client 1.4.0", "parity-rpc-client 1.4.0",
"parity-updater 1.5.0",
"regex 0.1.68 (registry+https://github.com/rust-lang/crates.io-index)", "regex 0.1.68 (registry+https://github.com/rust-lang/crates.io-index)",
"rlp 0.1.0", "rlp 0.1.0",
"rpassword 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rpassword 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -890,7 +890,7 @@ version = "3.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_codegen 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)", "serde_codegen 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1398,6 +1398,17 @@ dependencies = [
"parity-hash-fetch 1.5.0", "parity-hash-fetch 1.5.0",
] ]
[[package]]
name = "parking_lot"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "parking_lot" name = "parking_lot"
version = "0.3.6" version = "0.3.6"
@ -1650,6 +1661,7 @@ dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
"termios 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "termios 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
@ -2265,6 +2277,7 @@ dependencies = [
"checksum owning_ref 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8d91377085359426407a287ab16884a0111ba473aa6844ff01d4ec20ce3d75e7" "checksum owning_ref 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8d91377085359426407a287ab16884a0111ba473aa6844ff01d4ec20ce3d75e7"
"checksum parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "98378dec0a185da2b7180308752f0bad73aaa949c3e0a3b0528d0e067945f7ab" "checksum parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "98378dec0a185da2b7180308752f0bad73aaa949c3e0a3b0528d0e067945f7ab"
"checksum parity-ui-precompiled 1.4.0 (git+https://github.com/ethcore/js-precompiled.git)" = "<none>" "checksum parity-ui-precompiled 1.4.0 (git+https://github.com/ethcore/js-precompiled.git)" = "<none>"
"checksum parking_lot 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "968f685642555d2f7e202c48b8b11de80569e9bfea817f7f12d7c61aac62d4e6"
"checksum parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e1435e7a2a00dfebededd6c6bdbd54008001e94b4a2aadd6aef0dc4c56317621" "checksum parking_lot 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e1435e7a2a00dfebededd6c6bdbd54008001e94b4a2aadd6aef0dc4c56317621"
"checksum parking_lot_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb1b97670a2ffadce7c397fb80a3d687c4f3060140b885621ef1653d0e5d5068" "checksum parking_lot_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb1b97670a2ffadce7c397fb80a3d687c4f3060140b885621ef1653d0e5d5068"
"checksum phf 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)" = "447d9d45f2e0b4a9b532e808365abf18fc211be6ca217202fcd45236ef12f026" "checksum phf 0.7.14 (registry+https://github.com/rust-lang/crates.io-index)" = "447d9d45f2e0b4a9b532e808365abf18fc211be6ca217202fcd45236ef12f026"

View File

@ -27,7 +27,9 @@ pub enum ReleaseTrack {
Beta, Beta,
/// Nightly track. /// Nightly track.
Nightly, Nightly,
/// No known track. /// Testing track.
Testing,
/// No known track, also "current executable's track" when it's not yet known.
Unknown, Unknown,
} }
@ -37,7 +39,8 @@ impl fmt::Display for ReleaseTrack {
ReleaseTrack::Stable => "stable", ReleaseTrack::Stable => "stable",
ReleaseTrack::Beta => "beta", ReleaseTrack::Beta => "beta",
ReleaseTrack::Nightly => "nightly", ReleaseTrack::Nightly => "nightly",
ReleaseTrack::Unknown => "unknown", ReleaseTrack::Testing => "testing",
ReleaseTrack::Unknown => "unknown",
}) })
} }
} }
@ -48,6 +51,7 @@ impl<'a> From<&'a str> for ReleaseTrack {
"stable" => ReleaseTrack::Stable, "stable" => ReleaseTrack::Stable,
"beta" => ReleaseTrack::Beta, "beta" => ReleaseTrack::Beta,
"nightly" => ReleaseTrack::Nightly, "nightly" => ReleaseTrack::Nightly,
"testing" => ReleaseTrack::Testing,
_ => ReleaseTrack::Unknown, _ => ReleaseTrack::Unknown,
} }
} }
@ -59,6 +63,7 @@ impl From<u8> for ReleaseTrack {
1 => ReleaseTrack::Stable, 1 => ReleaseTrack::Stable,
2 => ReleaseTrack::Beta, 2 => ReleaseTrack::Beta,
3 => ReleaseTrack::Nightly, 3 => ReleaseTrack::Nightly,
4 => ReleaseTrack::Testing,
_ => ReleaseTrack::Unknown, _ => ReleaseTrack::Unknown,
} }
} }
@ -70,6 +75,7 @@ impl Into<u8> for ReleaseTrack {
ReleaseTrack::Stable => 1, ReleaseTrack::Stable => 1,
ReleaseTrack::Beta => 2, ReleaseTrack::Beta => 2,
ReleaseTrack::Nightly => 3, ReleaseTrack::Nightly => 3,
ReleaseTrack::Testing => 4,
ReleaseTrack::Unknown => 0, ReleaseTrack::Unknown => 0,
} }
} }

View File

@ -3,6 +3,7 @@ mode = "last"
mode_timeout = 300 mode_timeout = 300
mode_alarm = 3600 mode_alarm = 3600
auto_update = "critical" auto_update = "critical"
releases_track = "current"
no_download = false no_download = false
no_consensus = false no_consensus = false

View File

@ -86,6 +86,7 @@ usage! {
flag_mode_timeout: u64 = 300u64, or |c: &Config| otry!(c.parity).mode_timeout.clone(), flag_mode_timeout: u64 = 300u64, or |c: &Config| otry!(c.parity).mode_timeout.clone(),
flag_mode_alarm: u64 = 3600u64, or |c: &Config| otry!(c.parity).mode_alarm.clone(), flag_mode_alarm: u64 = 3600u64, or |c: &Config| otry!(c.parity).mode_alarm.clone(),
flag_auto_update: String = "critical", or |c: &Config| otry!(c.parity).auto_update.clone(), flag_auto_update: String = "critical", or |c: &Config| otry!(c.parity).auto_update.clone(),
flag_releases_track: String = "current", or |c: &Config| otry!(c.parity).releases_track.clone(),
flag_no_download: bool = false, or |c: &Config| otry!(c.parity).no_download.clone(), flag_no_download: bool = false, or |c: &Config| otry!(c.parity).no_download.clone(),
flag_no_consensus: bool = false, or |c: &Config| otry!(c.parity).no_consensus.clone(), flag_no_consensus: bool = false, or |c: &Config| otry!(c.parity).no_consensus.clone(),
flag_chain: String = "homestead", or |c: &Config| otry!(c.parity).chain.clone(), flag_chain: String = "homestead", or |c: &Config| otry!(c.parity).chain.clone(),
@ -313,6 +314,7 @@ struct Operating {
mode_timeout: Option<u64>, mode_timeout: Option<u64>,
mode_alarm: Option<u64>, mode_alarm: Option<u64>,
auto_update: Option<String>, auto_update: Option<String>,
releases_track: Option<String>,
no_download: Option<bool>, no_download: Option<bool>,
no_consensus: Option<bool>, no_consensus: Option<bool>,
chain: Option<String>, chain: Option<String>,
@ -540,6 +542,7 @@ mod tests {
flag_mode_timeout: 300u64, flag_mode_timeout: 300u64,
flag_mode_alarm: 3600u64, flag_mode_alarm: 3600u64,
flag_auto_update: "critical".into(), flag_auto_update: "critical".into(),
flag_releases_track: "current".into(),
flag_no_download: false, flag_no_download: false,
flag_no_consensus: false, flag_no_consensus: false,
flag_chain: "xyz".into(), flag_chain: "xyz".into(),
@ -717,6 +720,7 @@ mod tests {
mode_timeout: Some(15u64), mode_timeout: Some(15u64),
mode_alarm: Some(10u64), mode_alarm: Some(10u64),
auto_update: None, auto_update: None,
releases_track: None,
no_download: None, no_download: None,
no_consensus: None, no_consensus: None,
chain: Some("./chain.json".into()), chain: Some("./chain.json".into()),

View File

@ -34,12 +34,19 @@ Operating Options:
--mode-alarm SECS Specify the number of seconds before auto sleep --mode-alarm SECS Specify the number of seconds before auto sleep
reawake timeout occurs when mode is passive reawake timeout occurs when mode is passive
(default: {flag_mode_alarm}). (default: {flag_mode_alarm}).
--auto-update TRACK Set a release track to automatically update and --auto-update SET Set a releases set to automatically update and
install. install.
all - All updates in the current release track. all - All updates in the our release track.
critical - Only consensus/security updates. critical - Only consensus/security updates.
none - No updates will be auto-installed. none - No updates will be auto-installed.
(default: {flag_auto_update}). (default: {flag_auto_update}).
--releases-track TRACK Set which release track we should use for updates.
stable - Stable releases.
beta - Beta releases.
nightly - Nightly releases (unstable).
testing - Testing releases (do not use).
current - Whatever track this executable was
released on (default: {flag_releases_track}).
--no-download Normally new releases will be downloaded ready for --no-download Normally new releases will be downloaded ready for
updating. This disables it. Not recommended. updating. This disables it. Not recommended.
(default: {flag_no_download}). (default: {flag_no_download}).
@ -47,7 +54,7 @@ Operating Options:
issues regarding consensus. Not recommended. issues regarding consensus. Not recommended.
(default: {flag_no_consensus}). (default: {flag_no_consensus}).
--force-direct Run the originally installed version of Parity, --force-direct Run the originally installed version of Parity,
ignoring any updates that have since been installed. ignoring any updates that have since been installed.
--chain CHAIN Specify the blockchain type. CHAIN may be either a --chain CHAIN Specify the blockchain type. CHAIN may be either a
JSON chain specification file or olympic, frontier, JSON chain specification file or olympic, frontier,
homestead, mainnet, morden, ropsten, classic, expanse, homestead, mainnet, morden, ropsten, classic, expanse,

View File

@ -37,7 +37,7 @@ use ethcore_logger::Config as LogConfig;
use dir::Directories; use dir::Directories;
use dapps::Configuration as DappsConfiguration; use dapps::Configuration as DappsConfiguration;
use signer::{Configuration as SignerConfiguration}; use signer::{Configuration as SignerConfiguration};
use updater::{UpdatePolicy, UpdateFilter}; use updater::{UpdatePolicy, UpdateFilter, ReleaseTrack};
use run::RunCmd; use run::RunCmd;
use blockchain::{BlockchainCmd, ImportBlockchain, ExportBlockchain, KillBlockchain, ExportState, DataFormat}; use blockchain::{BlockchainCmd, ImportBlockchain, ExportBlockchain, KillBlockchain, ExportState, DataFormat};
use presale::ImportWallet; use presale::ImportWallet;
@ -693,6 +693,14 @@ impl Configuration {
"all" => UpdateFilter::All, "all" => UpdateFilter::All,
_ => return Err("Invalid value for `--auto-update`. See `--help` for more information.".into()), _ => return Err("Invalid value for `--auto-update`. See `--help` for more information.".into()),
}, },
track: match self.args.flag_releases_track.as_ref() {
"stable" => ReleaseTrack::Stable,
"beta" => ReleaseTrack::Beta,
"nightly" => ReleaseTrack::Nightly,
"testing" => ReleaseTrack::Testing,
"current" => ReleaseTrack::Unknown,
_ => return Err("Invalid value for `--releases-track`. See `--help` for more information.".into()),
},
}) })
} }

View File

@ -58,6 +58,9 @@ pub enum ReleaseTrack {
/// Nightly track. /// Nightly track.
#[serde(rename="nightly")] #[serde(rename="nightly")]
Nightly, Nightly,
/// Testing track.
#[serde(rename="testing")]
Testing,
/// No known track. /// No known track.
#[serde(rename="null")] #[serde(rename="null")]
Unknown, Unknown,
@ -69,6 +72,7 @@ impl Into<ReleaseTrack> for updater::ReleaseTrack {
updater::ReleaseTrack::Stable => ReleaseTrack::Stable, updater::ReleaseTrack::Stable => ReleaseTrack::Stable,
updater::ReleaseTrack::Beta => ReleaseTrack::Beta, updater::ReleaseTrack::Beta => ReleaseTrack::Beta,
updater::ReleaseTrack::Nightly => ReleaseTrack::Nightly, updater::ReleaseTrack::Nightly => ReleaseTrack::Nightly,
updater::ReleaseTrack::Testing => ReleaseTrack::Testing,
updater::ReleaseTrack::Unknown => ReleaseTrack::Unknown, updater::ReleaseTrack::Unknown => ReleaseTrack::Unknown,
} }
} }

View File

@ -18,7 +18,7 @@ use std::sync::{Arc, Weak};
use std::{fs, env}; use std::{fs, env};
use std::io::Write; use std::io::Write;
use std::path::{PathBuf}; use std::path::{PathBuf};
//use util::misc::platform; use util::misc::platform;
use ipc_common_types::{VersionInfo, ReleaseTrack}; use ipc_common_types::{VersionInfo, ReleaseTrack};
use util::{Address, H160, H256, FixedHash, Mutex, Bytes}; use util::{Address, H160, H256, FixedHash, Mutex, Bytes};
use ethcore::client::{BlockId, BlockChainClient, ChainNotify}; use ethcore::client::{BlockId, BlockChainClient, ChainNotify};
@ -47,6 +47,8 @@ pub struct UpdatePolicy {
pub require_consensus: bool, pub require_consensus: bool,
/// Which of those downloaded should be automatically installed. /// Which of those downloaded should be automatically installed.
pub filter: UpdateFilter, pub filter: UpdateFilter,
/// Which track we should be following.
pub track: ReleaseTrack,
} }
impl Default for UpdatePolicy { impl Default for UpdatePolicy {
@ -55,6 +57,7 @@ impl Default for UpdatePolicy {
enable_downloading: false, enable_downloading: false,
require_consensus: true, require_consensus: true,
filter: UpdateFilter::None, filter: UpdateFilter::None,
track: ReleaseTrack::Unknown,
} }
} }
} }
@ -89,14 +92,9 @@ pub struct Updater {
const CLIENT_ID: &'static str = "parity"; const CLIENT_ID: &'static str = "parity";
// TODO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! REMOVE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
fn platform() -> String {
"test".to_owned()
}
impl Updater { impl Updater {
pub fn new(client: Weak<BlockChainClient>, update_policy: UpdatePolicy) -> Arc<Self> { pub fn new(client: Weak<BlockChainClient>, update_policy: UpdatePolicy) -> Arc<Self> {
let mut u = Updater { let r = Arc::new(Updater {
update_policy: update_policy, update_policy: update_policy,
weak_self: Mutex::new(Default::default()), weak_self: Mutex::new(Default::default()),
client: client.clone(), client: client.clone(),
@ -105,14 +103,7 @@ impl Updater {
exit_handler: Mutex::new(None), exit_handler: Mutex::new(None),
this: VersionInfo::this(), this: VersionInfo::this(),
state: Mutex::new(Default::default()), state: Mutex::new(Default::default()),
}; });
// TODO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! REMOVE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if u.this.track == ReleaseTrack::Unknown {
u.this.track = ReleaseTrack::Nightly;
}
let r = Arc::new(u);
*r.fetcher.lock() = Some(fetch::Client::new(r.clone())); *r.fetcher.lock() = Some(fetch::Client::new(r.clone()));
*r.weak_self.lock() = Arc::downgrade(&r); *r.weak_self.lock() = Arc::downgrade(&r);
r.poll(); r.poll();
@ -135,6 +126,13 @@ impl Updater {
}) })
} }
fn track(&self) -> ReleaseTrack {
match self.update_policy.track {
ReleaseTrack::Unknown => self.this.track,
x => x,
}
}
fn collect_latest(&self) -> Result<OperationsInfo, String> { fn collect_latest(&self) -> Result<OperationsInfo, String> {
if let Some(ref operations) = *self.operations.lock() { if let Some(ref operations) = *self.operations.lock() {
let hh: H256 = self.this.hash.into(); let hh: H256 = self.this.hash.into();
@ -145,15 +143,15 @@ impl Updater {
if track > 0 {Some(fork as u64)} else {None} if track > 0 {Some(fork as u64)} else {None}
}); });
if self.this.track == ReleaseTrack::Unknown { if self.track() == ReleaseTrack::Unknown {
return Err(format!("Current executable ({}) is unreleased.", H160::from(self.this.hash))); return Err(format!("Current executable ({}) is unreleased.", H160::from(self.this.hash)));
} }
let latest_in_track = operations.latest_in_track(CLIENT_ID, self.this.track.into())?; let latest_in_track = operations.latest_in_track(CLIENT_ID, self.track().into())?;
let in_track = Self::collect_release_info(operations, &latest_in_track)?; let in_track = Self::collect_release_info(operations, &latest_in_track)?;
let mut in_minor = Some(in_track.clone()); let mut in_minor = Some(in_track.clone());
const PROOF: &'static str = "in_minor initialised and assigned with Some; loop breaks if None assigned; qed"; const PROOF: &'static str = "in_minor initialised and assigned with Some; loop breaks if None assigned; qed";
while in_minor.as_ref().expect(PROOF).version.track != self.this.track { while in_minor.as_ref().expect(PROOF).version.track != self.track() {
let track = match in_minor.as_ref().expect(PROOF).version.track { let track = match in_minor.as_ref().expect(PROOF).version.track {
ReleaseTrack::Beta => ReleaseTrack::Stable, ReleaseTrack::Beta => ReleaseTrack::Stable,
ReleaseTrack::Nightly => ReleaseTrack::Beta, ReleaseTrack::Nightly => ReleaseTrack::Beta,