Compare commits
1 Commits
erikj/cont
...
erikj/fix_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
29037e3ca1 |
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"rust-analyzer.checkOnSave.command": "clippy"
|
||||||
|
}
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
# Contributing
|
|
||||||
|
|
||||||
## Sign off
|
|
||||||
|
|
||||||
In order to have a concrete record that your contribution is intentional
|
|
||||||
and you agree to license it under the same terms as the project's license, we've adopted the
|
|
||||||
same lightweight approach that the Linux Kernel
|
|
||||||
[submitting patches process](
|
|
||||||
https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin>),
|
|
||||||
[Docker](https://github.com/docker/docker/blob/master/CONTRIBUTING.md), and many other
|
|
||||||
projects use: the DCO ([Developer Certificate of Origin](http://developercertificate.org/)).
|
|
||||||
This is a simple declaration that you wrote
|
|
||||||
the contribution or otherwise have the right to contribute it to Matrix:
|
|
||||||
|
|
||||||
```
|
|
||||||
Developer Certificate of Origin
|
|
||||||
Version 1.1
|
|
||||||
|
|
||||||
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
|
|
||||||
660 York Street, Suite 102,
|
|
||||||
San Francisco, CA 94110 USA
|
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies of this
|
|
||||||
license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Developer's Certificate of Origin 1.1
|
|
||||||
|
|
||||||
By making a contribution to this project, I certify that:
|
|
||||||
|
|
||||||
(a) The contribution was created in whole or in part by me and I
|
|
||||||
have the right to submit it under the open source license
|
|
||||||
indicated in the file; or
|
|
||||||
|
|
||||||
(b) The contribution is based upon previous work that, to the best
|
|
||||||
of my knowledge, is covered under an appropriate open source
|
|
||||||
license and I have the right under that license to submit that
|
|
||||||
work with modifications, whether created in whole or in part
|
|
||||||
by me, under the same open source license (unless I am
|
|
||||||
permitted to submit under a different license), as indicated
|
|
||||||
in the file; or
|
|
||||||
|
|
||||||
(c) The contribution was provided directly to me by some other
|
|
||||||
person who certified (a), (b) or (c) and I have not modified
|
|
||||||
it.
|
|
||||||
|
|
||||||
(d) I understand and agree that this project and the contribution
|
|
||||||
are public and that a record of the contribution (including all
|
|
||||||
personal information I submit with it, including my sign-off) is
|
|
||||||
maintained indefinitely and may be redistributed consistent with
|
|
||||||
this project or the open source license(s) involved.
|
|
||||||
```
|
|
||||||
|
|
||||||
If you agree to this for your contribution, then all that's needed is to
|
|
||||||
include the line in your commit or pull request comment:
|
|
||||||
|
|
||||||
```
|
|
||||||
Signed-off-by: Your Name <your@email.example.org>
|
|
||||||
```
|
|
||||||
|
|
||||||
We accept contributions under a legally identifiable name, such as
|
|
||||||
your name on government documentation or common-law names (names
|
|
||||||
claimed by legitimate usage or repute). Unfortunately, we cannot
|
|
||||||
accept anonymous contributions at this time.
|
|
||||||
|
|
||||||
Git allows you to add this signoff automatically when using the `-s`
|
|
||||||
flag to `git commit`, which uses the name and email set in your
|
|
||||||
`user.name` and `user.email` git configs.
|
|
||||||
|
|
||||||
### Private Sign off
|
|
||||||
|
|
||||||
If you would like to provide your legal name privately to the Matrix.org
|
|
||||||
Foundation (instead of in a public commit or comment), you can do so
|
|
||||||
by emailing your legal name and a link to the pull request to
|
|
||||||
[dco@matrix.org](mailto:dco@matrix.org?subject=Private%20sign%20off).
|
|
||||||
It helps to include "sign off" or similar in the subject line. You will then
|
|
||||||
be instructed further.
|
|
||||||
|
|
||||||
Once private sign off is complete, doing so for future contributions will not
|
|
||||||
be required.
|
|
||||||
|
|
||||||
657
Cargo.lock
generated
657
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
13
Cargo.toml
13
Cargo.toml
@@ -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]
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
59
src/lib.rs
59
src/lib.rs
@@ -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)
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user