1 Commits

Author SHA1 Message Date
Erik Johnston
29037e3ca1 Fix clippy lints 2022-06-06 09:59:17 +01:00
10 changed files with 373 additions and 415 deletions

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"rust-analyzer.checkOnSave.command": "clippy"
}

657
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,6 +9,7 @@ version = "0.1.0"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
clap = "2.33.0"
indicatif = "0.16.0" indicatif = "0.16.0"
openssl = "0.10.32" openssl = "0.10.32"
postgres = "0.19.0" postgres = "0.19.0"
@@ -18,7 +19,7 @@ rayon = "1.3.0"
string_cache = "0.8.0" string_cache = "0.8.0"
env_logger = "0.9.0" env_logger = "0.9.0"
log = "0.4.14" log = "0.4.14"
pyo3-log = "0.6.0" pyo3-log = "0.4.0"
log-panics = "2.0.0" log-panics = "2.0.0"
[dependencies.state-map] [dependencies.state-map]
@@ -28,16 +29,12 @@ git = "https://github.com/matrix-org/rust-matrix-state-map"
[lib] [lib]
crate-type = ["cdylib", "rlib"] crate-type = ["cdylib", "rlib"]
[dependencies.clap]
version = "3.1.14"
features = ["cargo"]
[dependencies.pyo3] [dependencies.pyo3]
version = "0.16.4" version = "0.14.1"
features = ["extension-module"] features = ["extension-module","abi3-py36"]
[dependencies.tikv-jemallocator] [dependencies.tikv-jemallocator]
version = "0.5.0" version = "0.4.1"
optional = true optional = true
[features] [features]

View File

@@ -181,7 +181,7 @@ impl<'a> Compressor<'a> {
panic!("Can only call `create_new_tree` once"); panic!("Can only call `create_new_tree` once");
} }
let pb = if cfg!(feature = "no-progress-bars") { let pb: ProgressBar = if cfg!(feature = "no-progress-bars") {
ProgressBar::hidden() ProgressBar::hidden()
} else { } else {
ProgressBar::new(self.original_state_map.len() as u64) ProgressBar::new(self.original_state_map.len() as u64)

View File

@@ -93,10 +93,7 @@ fn create_new_tree_does_nothing_if_already_compressed() {
for i in 0i64..=13i64 { for i in 0i64..=13i64 {
// edge from map // edge from map
let pred_group = initial_edges.get(&i); let prev = initial_edges.get(&i).copied();
// Need Option<i64> not Option<&i64>
let prev = pred_group.copied();
// insert that edge into the initial map // insert that edge into the initial map
initial.insert( initial.insert(

View File

@@ -142,10 +142,7 @@ fn stats_correct_if_no_changes() {
for i in 0i64..=13i64 { for i in 0i64..=13i64 {
// edge from map // edge from map
let pred_group = initial_edges.get(&i); let prev = initial_edges.get(&i).copied();
// Need Option<i64> not Option<&i64>
let prev = pred_group.copied();
// insert that edge into the initial map // insert that edge into the initial map
initial.insert( initial.insert(

View File

@@ -372,7 +372,7 @@ fn get_initial_data_from_db(
// Copy the data from the database into a map // Copy the data from the database into a map
let mut state_group_map: BTreeMap<i64, StateGroupEntry> = BTreeMap::new(); let mut state_group_map: BTreeMap<i64, StateGroupEntry> = BTreeMap::new();
let pb = if cfg!(feature = "no-progress-bars") { let pb: ProgressBar = if cfg!(feature = "no-progress-bars") {
ProgressBar::hidden() ProgressBar::hidden()
} else { } else {
ProgressBar::new_spinner() ProgressBar::new_spinner()
@@ -536,7 +536,7 @@ pub fn send_changes_to_db(
debug!("Writing changes..."); debug!("Writing changes...");
// setup the progress bar // setup the progress bar
let pb = if cfg!(feature = "no-progress-bars") { let pb: ProgressBar = if cfg!(feature = "no-progress-bars") {
ProgressBar::hidden() ProgressBar::hidden()
} else { } else {
ProgressBar::new(old_map.len() as u64) ProgressBar::new(old_map.len() as u64)

View File

@@ -23,7 +23,7 @@
use log::{info, warn, LevelFilter}; use log::{info, warn, LevelFilter};
use pyo3::{exceptions, prelude::*}; use pyo3::{exceptions, prelude::*};
use clap::{crate_authors, crate_description, crate_name, crate_version, Arg, Command}; use clap::{crate_authors, crate_description, crate_name, crate_version, value_t, App, Arg};
use indicatif::{ProgressBar, ProgressStyle}; use indicatif::{ProgressBar, ProgressStyle};
use rayon::prelude::*; use rayon::prelude::*;
use state_map::StateMap; use state_map::StateMap;
@@ -117,13 +117,13 @@ pub struct Config {
impl Config { impl Config {
/// Build up config from command line arguments /// Build up config from command line arguments
pub fn parse_arguments() -> Config { pub fn parse_arguments() -> Config {
let matches = Command::new(crate_name!()) let matches = App::new(crate_name!())
.version(crate_version!()) .version(crate_version!())
.author(crate_authors!("\n")) .author(crate_authors!("\n"))
.about(crate_description!()) .about(crate_description!())
.arg( .arg(
Arg::new("postgres-url") Arg::with_name("postgres-url")
.short('p') .short("p")
.value_name("POSTGRES_LOCATION") .value_name("POSTGRES_LOCATION")
.help("The configruation for connecting to the postgres database.") .help("The configruation for connecting to the postgres database.")
.long_help(concat!( .long_help(concat!(
@@ -136,8 +136,8 @@ impl Config {
.takes_value(true) .takes_value(true)
.required(true), .required(true),
).arg( ).arg(
Arg::new("room_id") Arg::with_name("room_id")
.short('r') .short("r")
.value_name("ROOM_ID") .value_name("ROOM_ID")
.help("The room to process") .help("The room to process")
.long_help(concat!( .long_help(concat!(
@@ -147,23 +147,23 @@ impl Config {
.takes_value(true) .takes_value(true)
.required(true), .required(true),
).arg( ).arg(
Arg::new("min_state_group") Arg::with_name("min_state_group")
.short('b') .short("b")
.value_name("MIN_STATE_GROUP") .value_name("MIN_STATE_GROUP")
.help("The state group to start processing from (non inclusive)") .help("The state group to start processing from (non inclusive)")
.takes_value(true) .takes_value(true)
.required(false), .required(false),
).arg( ).arg(
Arg::new("min_saved_rows") Arg::with_name("min_saved_rows")
.short('m') .short("m")
.value_name("COUNT") .value_name("COUNT")
.help("Abort if fewer than COUNT rows would be saved") .help("Abort if fewer than COUNT rows would be saved")
.long_help("If the compressor cannot save this many rows from the database then it will stop early") .long_help("If the compressor cannot save this many rows from the database then it will stop early")
.takes_value(true) .takes_value(true)
.required(false), .required(false),
).arg( ).arg(
Arg::new("groups_to_compress") Arg::with_name("groups_to_compress")
.short('n') .short("n")
.value_name("GROUPS_TO_COMPRESS") .value_name("GROUPS_TO_COMPRESS")
.help("How many groups to load into memory to compress") .help("How many groups to load into memory to compress")
.long_help(concat!( .long_help(concat!(
@@ -172,14 +172,14 @@ impl Config {
.takes_value(true) .takes_value(true)
.required(false), .required(false),
).arg( ).arg(
Arg::new("output_file") Arg::with_name("output_file")
.short('o') .short("o")
.value_name("FILE") .value_name("FILE")
.help("File to output the changes to in SQL") .help("File to output the changes to in SQL")
.takes_value(true), .takes_value(true),
).arg( ).arg(
Arg::new("max_state_group") Arg::with_name("max_state_group")
.short('s') .short("s")
.value_name("MAX_STATE_GROUP") .value_name("MAX_STATE_GROUP")
.help("The maximum state group to process up to") .help("The maximum state group to process up to")
.long_help(concat!( .long_help(concat!(
@@ -188,8 +188,8 @@ impl Config {
.takes_value(true) .takes_value(true)
.required(false), .required(false),
).arg( ).arg(
Arg::new("level_sizes") Arg::with_name("level_sizes")
.short('l') .short("l")
.value_name("LEVELS") .value_name("LEVELS")
.help("Sizes of each new level in the compression algorithm, as a comma separated list.") .help("Sizes of each new level in the compression algorithm, as a comma separated list.")
.long_help(concat!( .long_help(concat!(
@@ -205,30 +205,30 @@ impl Config {
.default_value("100,50,25") .default_value("100,50,25")
.takes_value(true), .takes_value(true),
).arg( ).arg(
Arg::new("transactions") Arg::with_name("transactions")
.short('t') .short("t")
.help("Whether to wrap each state group change in a transaction") .help("Whether to wrap each state group change in a transaction")
.long_help(concat!("If this flag is set then then each change to a particular", .long_help(concat!("If this flag is set then then each change to a particular",
" state group is wrapped in a transaction. This should be done if you wish to", " state group is wrapped in a transaction. This should be done if you wish to",
" apply the changes while synapse is still running.")) " apply the changes while synapse is still running."))
.requires("output_file"), .requires("output_file"),
).arg( ).arg(
Arg::new("graphs") Arg::with_name("graphs")
.short('g') .short("g")
.help("Output before and after graphs") .help("Output before and after graphs")
.long_help(concat!("If this flag is set then output the node and edge information for", .long_help(concat!("If this flag is set then output the node and edge information for",
" the state_group directed graph built up from the predecessor state_group links.", " the state_group directed graph built up from the predecessor state_group links.",
" These can be looked at in something like Gephi (https://gephi.org)")), " These can be looked at in something like Gephi (https://gephi.org)")),
).arg( ).arg(
Arg::new("commit_changes") Arg::with_name("commit_changes")
.short('c') .short("c")
.help("Commit changes to the database") .help("Commit changes to the database")
.long_help(concat!("If this flag is set then the changes the compressor makes will", .long_help(concat!("If this flag is set then the changes the compressor makes will",
" be committed to the database. This should be safe to use while synapse is running", " be committed to the database. This should be safe to use while synapse is running",
" as it assumes by default that the transactions flag is set")), " as it assumes by default that the transactions flag is set")),
).arg( ).arg(
Arg::new("no_verify") Arg::with_name("no_verify")
.short('N') .short("N")
.help("Do not double-check that the compression was performed correctly") .help("Do not double-check that the compression was performed correctly")
.long_help(concat!("If this flag is set then the verification of the compressed", .long_help(concat!("If this flag is set then the verification of the compressed",
" state groups, which compares them to the original groups, is skipped. This", " state groups, which compares them to the original groups, is skipped. This",
@@ -263,8 +263,7 @@ impl Config {
.value_of("max_state_group") .value_of("max_state_group")
.map(|s| s.parse().expect("max_state_group must be an integer")); .map(|s| s.parse().expect("max_state_group must be an integer"));
let level_sizes = matches let level_sizes = value_t!(matches, "level_sizes", LevelSizes)
.value_of_t::<LevelSizes>("level_sizes")
.unwrap_or_else(|e| panic!("Unable to parse level_sizes: {}", e)); .unwrap_or_else(|e| panic!("Unable to parse level_sizes: {}", e));
let transactions = matches.is_present("transactions"); let transactions = matches.is_present("transactions");
@@ -508,7 +507,7 @@ fn output_sql(
info!("Writing changes..."); info!("Writing changes...");
let pb = if cfg!(feature = "no-progress-bars") { let pb: ProgressBar = if cfg!(feature = "no-progress-bars") {
ProgressBar::hidden() ProgressBar::hidden()
} else { } else {
ProgressBar::new(old_map.len() as u64) ProgressBar::new(old_map.len() as u64)
@@ -622,7 +621,7 @@ fn check_that_maps_match(
) { ) {
info!("Checking that state maps match..."); info!("Checking that state maps match...");
let pb = if cfg!(feature = "no-progress-bars") { let pb: ProgressBar = if cfg!(feature = "no-progress-bars") {
ProgressBar::hidden() ProgressBar::hidden()
} else { } else {
ProgressBar::new(old_map.len() as u64) ProgressBar::new(old_map.len() as u64)

View File

@@ -1,11 +1,11 @@
[package] [package]
name = "synapse_auto_compressor" name = "synapse_auto_compressor"
authors = ["William Ashton"] authors = ["William Ashton"]
version = "0.1.3" version = "0.1.2"
edition = "2018" edition = "2018"
[package.metadata.maturin] [package.metadata.maturin]
requires-python = ">=3.7" requires-python = ">=3.6"
project-url = {Source = "https://github.com/matrix-org/rust-synapse-compress-state"} project-url = {Source = "https://github.com/matrix-org/rust-synapse-compress-state"}
classifier = [ classifier = [
"Development Status :: 4 - Beta", "Development Status :: 4 - Beta",
@@ -13,10 +13,11 @@ classifier = [
] ]
[dependencies] [dependencies]
clap = "2.33.0"
openssl = "0.10.32" openssl = "0.10.32"
postgres = "0.19.0" postgres = "0.19.0"
postgres-openssl = "0.5.0" postgres-openssl = "0.5.0"
tikv-jemallocator = "0.5.0" tikv-jemallocator = "0.4.1"
rand = "0.8.0" rand = "0.8.0"
serial_test = "0.5.1" serial_test = "0.5.1"
synapse_compress_state = { path = "../", features = ["no-progress-bars"] } synapse_compress_state = { path = "../", features = ["no-progress-bars"] }
@@ -24,16 +25,12 @@ env_logger = "0.9.0"
log = "0.4.14" log = "0.4.14"
log-panics = "2.0.0" log-panics = "2.0.0"
anyhow = "1.0.42" anyhow = "1.0.42"
pyo3-log = "0.6.0" pyo3-log = "0.4.0"
# Needed for pyo3 support # Needed for pyo3 support
[lib] [lib]
crate-type = ["cdylib", "rlib"] crate-type = ["cdylib", "rlib"]
[dependencies.clap]
version = "3.1.14"
features = ["cargo"]
[dependencies.pyo3] [dependencies.pyo3]
version = "0.16.4" version = "0.14.1"
features = ["extension-module"] features = ["extension-module","abi3-py36"]

View File

@@ -19,7 +19,7 @@
#[global_allocator] #[global_allocator]
static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
use clap::{crate_authors, crate_description, crate_name, crate_version, Arg, Command}; use clap::{crate_authors, crate_description, crate_name, crate_version, value_t, App, Arg};
use log::LevelFilter; use log::LevelFilter;
use std::env; use std::env;
use synapse_auto_compressor::{manager, state_saving, LevelInfo}; use synapse_auto_compressor::{manager, state_saving, LevelInfo};
@@ -50,13 +50,13 @@ fn main() {
log::info!("synapse_auto_compressor started"); log::info!("synapse_auto_compressor started");
// parse the command line arguments using the clap crate // parse the command line arguments using the clap crate
let arguments = Command::new(crate_name!()) let arguments = App::new(crate_name!())
.version(crate_version!()) .version(crate_version!())
.author(crate_authors!("\n")) .author(crate_authors!("\n"))
.about(crate_description!()) .about(crate_description!())
.arg( .arg(
Arg::new("postgres-url") Arg::with_name("postgres-url")
.short('p') .short("p")
.value_name("POSTGRES_LOCATION") .value_name("POSTGRES_LOCATION")
.help("The configruation for connecting to the postgres database.") .help("The configruation for connecting to the postgres database.")
.long_help(concat!( .long_help(concat!(
@@ -69,8 +69,8 @@ fn main() {
.takes_value(true) .takes_value(true)
.required(true), .required(true),
).arg( ).arg(
Arg::new("chunk_size") Arg::with_name("chunk_size")
.short('c') .short("c")
.value_name("COUNT") .value_name("COUNT")
.help("The maximum number of state groups to load into memroy at once") .help("The maximum number of state groups to load into memroy at once")
.long_help(concat!( .long_help(concat!(
@@ -85,8 +85,8 @@ fn main() {
.takes_value(true) .takes_value(true)
.required(true), .required(true),
).arg( ).arg(
Arg::new("default_levels") Arg::with_name("default_levels")
.short('l') .short("l")
.value_name("LEVELS") .value_name("LEVELS")
.help("Sizes of each new level in the compression algorithm, as a comma separated list.") .help("Sizes of each new level in the compression algorithm, as a comma separated list.")
.long_help(concat!( .long_help(concat!(
@@ -103,8 +103,8 @@ fn main() {
.takes_value(true) .takes_value(true)
.required(false), .required(false),
).arg( ).arg(
Arg::new("number_of_chunks") Arg::with_name("number_of_chunks")
.short('n') .short("n")
.value_name("CHUNKS_TO_COMPRESS") .value_name("CHUNKS_TO_COMPRESS")
.help("The number of chunks to compress") .help("The number of chunks to compress")
.long_help(concat!( .long_help(concat!(
@@ -127,8 +127,7 @@ fn main() {
.expect("A chunk size is required"); .expect("A chunk size is required");
// The default structure to use when compressing // The default structure to use when compressing
let default_levels = arguments let default_levels = value_t!(arguments, "default_levels", LevelInfo)
.value_of_t::<LevelInfo>("default_levels")
.unwrap_or_else(|e| panic!("Unable to parse default levels: {}", e)); .unwrap_or_else(|e| panic!("Unable to parse default levels: {}", e));
// The number of rooms to compress with this tool // The number of rooms to compress with this tool