diff --git a/Cargo.lock b/Cargo.lock index 9e33ab94..42245d42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -437,9 +437,9 @@ dependencies = [ "lru-cache", "nix", "num_cpus", - "opentelemetry 0.21.0", + "opentelemetry", "opentelemetry-jaeger", - "opentelemetry_sdk 0.21.2", + "opentelemetry_sdk", "parking_lot", "rand", "regex", @@ -876,19 +876,13 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.5", + "indexmap", "slab", "tokio", "tokio-util", "tracing", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.3" @@ -905,7 +899,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "692eaaf7f7607518dd3cef090f1474b61edc5301d8012f09579920df68b725ee" dependencies = [ - "hashbrown 0.14.3", + "hashbrown", ] [[package]] @@ -1108,16 +1102,6 @@ dependencies = [ "png", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - [[package]] name = "indexmap" version = "2.2.5" @@ -1125,7 +1109,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown", "serde", ] @@ -1612,16 +1596,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" -[[package]] -name = "opentelemetry" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9591d937bc0e6d2feb6f71a559540ab300ea49955229c347a517a28d27784c54" -dependencies = [ - "opentelemetry_api", - "opentelemetry_sdk 0.20.0", -] - [[package]] name = "opentelemetry" version = "0.21.0" @@ -1630,7 +1604,7 @@ checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a" dependencies = [ "futures-core", "futures-sink", - "indexmap 2.2.5", + "indexmap", "js-sys", "once_cell", "pin-project-lite", @@ -1647,9 +1621,9 @@ dependencies = [ "async-trait", "futures-core", "futures-util", - "opentelemetry 0.21.0", + "opentelemetry", "opentelemetry-semantic-conventions", - "opentelemetry_sdk 0.21.2", + "opentelemetry_sdk", "thrift", "tokio", ] @@ -1660,43 +1634,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5774f1ef1f982ef2a447f6ee04ec383981a3ab99c8e77a1a7b30182e65bbc84" dependencies = [ - "opentelemetry 0.21.0", -] - -[[package]] -name = "opentelemetry_api" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a81f725323db1b1206ca3da8bb19874bbd3f57c3bcd59471bfb04525b265b9b" -dependencies = [ - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "js-sys", - "once_cell", - "pin-project-lite", - "thiserror", - "urlencoding", -] - -[[package]] -name = "opentelemetry_sdk" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8e705a0612d48139799fcbaba0d4a90f06277153e43dd2bdc16c6f0edd8026" -dependencies = [ - "async-trait", - "crossbeam-channel", - "futures-channel", - "futures-executor", - "futures-util", - "once_cell", - "opentelemetry_api", - "ordered-float 3.9.2", - "percent-encoding", - "rand", - "regex", - "thiserror", + "opentelemetry", ] [[package]] @@ -1710,8 +1648,9 @@ dependencies = [ "futures-channel", "futures-executor", "futures-util", + "glob", "once_cell", - "opentelemetry 0.21.0", + "opentelemetry", "ordered-float 4.2.0", "percent-encoding", "rand", @@ -1729,15 +1668,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "ordered-float" -version = "3.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-float" version = "4.2.0" @@ -2212,7 +2142,7 @@ dependencies = [ "bytes", "form_urlencoded", "http", - "indexmap 2.2.5", + "indexmap", "js_int", "konst", "percent-encoding", @@ -2236,7 +2166,7 @@ version = "0.27.11" source = "git+https://github.com/girlbossceo/ruma?branch=conduwuit-changes#13b8386812679b33235c68fa1ec0b50c4647d05a" dependencies = [ "as_variant", - "indexmap 2.2.5", + "indexmap", "js_int", "js_option", "percent-encoding", @@ -2542,7 +2472,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20e1066e1cfa6692a722cf40386a2caec36da5ddc4a2c16df592f0f609677e8c" dependencies = [ "form_urlencoded", - "indexmap 2.2.5", + "indexmap", "itoa", "ryu", "serde", @@ -2606,7 +2536,7 @@ version = "0.9.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fd075d994154d4a774f95b51fb96bdc2832b0ea48425c92546073816cda1f2f" dependencies = [ - "indexmap 2.2.5", + "indexmap", "itoa", "ryu", "serde", @@ -3077,7 +3007,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.2.5", + "indexmap", "serde", "serde_spanned", "toml_datetime", @@ -3178,17 +3108,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "tracing-log" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - [[package]] name = "tracing-log" version = "0.2.0" @@ -3202,16 +3121,20 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.20.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc09e402904a5261e42cf27aea09ccb7d5318c6717a9eec3d8e2e65c56b18f19" +checksum = "c67ac25c5407e7b961fafc6f7e9aa5958fd297aada2d20fa2ae1737357e55596" dependencies = [ + "js-sys", "once_cell", - "opentelemetry 0.20.0", + "opentelemetry", + "opentelemetry_sdk", + "smallvec", "tracing", "tracing-core", - "tracing-log 0.1.4", + "tracing-log", "tracing-subscriber", + "web-time", ] [[package]] @@ -3229,7 +3152,7 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log 0.2.0", + "tracing-log", ] [[package]] @@ -3488,6 +3411,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "webpage" version = "2.0.0" diff --git a/Cargo.toml b/Cargo.toml index 48c9ee5b..5ea21e57 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -163,7 +163,7 @@ optional = true version = "0.2.0" optional = true [dependencies.tracing-opentelemetry] -version = "0.20.0" +version = "0.22.0" optional = true [dependencies.opentelemetry_sdk] version = "0.21.2" @@ -178,12 +178,10 @@ features = ["rt-tokio"] [dependencies.tikv-jemallocator] version = "0.5.4" optional = true -default-features = false features = ["unprefixed_malloc_on_supported_platforms"] [dependencies.tikv-jemalloc-ctl] version = "0.5.4" optional = true -default-features = false features = ["use_std"] # for URL previews @@ -256,6 +254,7 @@ git = "https://github.com/zaidoon1/rust-rocksdb" #branch = "master" rev = "3e4a0f632a8c0c2839c7d183725c53895110d907" optional = true +default-features = true features = [ "multi-threaded-cf", "zstd", @@ -285,7 +284,8 @@ optional = true [target.'cfg(not(unix))'.dependencies] -tokio = { version = "1.36.0", features = ["fs", +tokio = { version = "1.36.0", features = [ + "fs", "macros", "sync", ] } # tokio signals are not used on non-*nix platforms @@ -300,21 +300,18 @@ tokio = { version = "1.36.0", features = [ "sync", "signal", ] } -# unix socket support -[dependencies.hyperlocal] -git = "https://github.com/softprops/hyperlocal" -rev = "2ee4d149644600d326559af0d2b235c945b05c04" -features = ["server"] +hyperlocal = { git = "https://github.com/softprops/hyperlocal", rev = "2ee4d149644600d326559af0d2b235c945b05c04", features = ["server"] } # unix socket support [features] default = ["conduit_bin", "backend_rocksdb", "systemd"] +conduit_bin = ["axum"] backend_sqlite = ["sqlite"] -backend_rocksdb = ["rust-rocksdb", "num_cpus"] +backend_rocksdb = ["rocksdb"] +rocksdb = ["rust-rocksdb", "num_cpus"] jemalloc = ["tikv-jemalloc-ctl", "tikv-jemallocator"] sqlite = ["rusqlite", "parking_lot", "thread_local", "num_cpus"] -conduit_bin = ["axum"] systemd = ["sd-notify"] #gzip_compression = ["tower-http/compression-gzip"] diff --git a/src/database/abstraction/rocksdb.rs b/src/database/abstraction/rocksdb.rs index 7de08f78..ddd448fd 100644 --- a/src/database/abstraction/rocksdb.rs +++ b/src/database/abstraction/rocksdb.rs @@ -4,7 +4,7 @@ use std::{ sync::{Arc, RwLock}, }; -use rocksdb::{ +use rust_rocksdb::{ FlushOptions, LogLevel::{Debug, Error, Fatal, Info, Warn}, }; @@ -14,8 +14,8 @@ use super::{super::Config, watchers::Watchers, KeyValueDatabaseEngine, KvTree}; use crate::{utils, Result}; pub(crate) struct Engine { - rocks: rocksdb::DBWithThreadMode, - cache: rocksdb::Cache, + rocks: rust_rocksdb::DBWithThreadMode, + cache: rust_rocksdb::Cache, old_cfs: Vec, config: Config, } @@ -27,9 +27,9 @@ struct RocksDbEngineTree<'a> { write_lock: RwLock<()>, } -fn db_options(rocksdb_cache: &rocksdb::Cache, config: &Config) -> rocksdb::Options { +fn db_options(rocksdb_cache: &rust_rocksdb::Cache, config: &Config) -> rust_rocksdb::Options { // block-based options: https://docs.rs/rocksdb/latest/rocksdb/struct.BlockBasedOptions.html# - let mut block_based_options = rocksdb::BlockBasedOptions::default(); + let mut block_based_options = rust_rocksdb::BlockBasedOptions::default(); block_based_options.set_block_cache(rocksdb_cache); @@ -39,7 +39,7 @@ fn db_options(rocksdb_cache: &rocksdb::Cache, config: &Config) -> rocksdb::Optio block_based_options.set_cache_index_and_filter_blocks(true); // database options: https://docs.rs/rocksdb/latest/rocksdb/struct.Options.html# - let mut db_opts = rocksdb::Options::default(); + let mut db_opts = rust_rocksdb::Options::default(); let rocksdb_log_level = match config.rocksdb_log_level.as_ref() { "debug" => Debug, @@ -80,8 +80,8 @@ fn db_options(rocksdb_cache: &rocksdb::Cache, config: &Config) -> rocksdb::Optio threads.try_into().expect("Failed to convert \"rocksdb_parallelism_threads\" usize into i32"), ); //db_opts.set_max_open_files(config.rocksdb_max_open_files); - db_opts.set_compression_type(rocksdb::DBCompressionType::Zstd); - db_opts.set_compaction_style(rocksdb::DBCompactionStyle::Level); + db_opts.set_compression_type(rust_rocksdb::DBCompressionType::Zstd); + db_opts.set_compaction_style(rust_rocksdb::DBCompactionStyle::Level); db_opts.optimize_level_style_compaction(10 * 1024 * 1024); // https://github.com/facebook/rocksdb/wiki/Setup-Options-and-Basic-Tuning @@ -93,9 +93,9 @@ fn db_options(rocksdb_cache: &rocksdb::Cache, config: &Config) -> rocksdb::Optio // Unclean shutdowns of a Matrix homeserver are likely to be fine when // recovered in this manner as it's likely any lost information will be // restored via federation. - db_opts.set_wal_recovery_mode(rocksdb::DBRecoveryMode::TolerateCorruptedTailRecords); + db_opts.set_wal_recovery_mode(rust_rocksdb::DBRecoveryMode::TolerateCorruptedTailRecords); - let prefix_extractor = rocksdb::SliceTransform::create_fixed_prefix(1); + let prefix_extractor = rust_rocksdb::SliceTransform::create_fixed_prefix(1); db_opts.set_prefix_extractor(prefix_extractor); db_opts @@ -104,20 +104,21 @@ fn db_options(rocksdb_cache: &rocksdb::Cache, config: &Config) -> rocksdb::Optio impl KeyValueDatabaseEngine for Arc { fn open(config: &Config) -> Result { let cache_capacity_bytes = (config.db_cache_capacity_mb * 1024.0 * 1024.0) as usize; - let rocksdb_cache = rocksdb::Cache::new_lru_cache(cache_capacity_bytes); + let rocksdb_cache = rust_rocksdb::Cache::new_lru_cache(cache_capacity_bytes); let db_opts = db_options(&rocksdb_cache, config); debug!("Listing column families in database"); - let cfs = rocksdb::DBWithThreadMode::::list_cf(&db_opts, &config.database_path) - .unwrap_or_default(); + let cfs = + rust_rocksdb::DBWithThreadMode::::list_cf(&db_opts, &config.database_path) + .unwrap_or_default(); debug!("Opening column family descriptors in database"); info!("RocksDB database compaction will take place now, a delay in startup is expected"); - let db = rocksdb::DBWithThreadMode::::open_cf_descriptors( + let db = rust_rocksdb::DBWithThreadMode::::open_cf_descriptors( &db_opts, &config.database_path, - cfs.iter().map(|name| rocksdb::ColumnFamilyDescriptor::new(name, db_options(&rocksdb_cache, config))), + cfs.iter().map(|name| rust_rocksdb::ColumnFamilyDescriptor::new(name, db_options(&rocksdb_cache, config))), )?; Ok(Arc::new(Engine { @@ -145,13 +146,13 @@ impl KeyValueDatabaseEngine for Arc { fn flush(&self) -> Result<()> { debug!("Running flush_wal (no sync)"); - rocksdb::DBCommon::flush_wal(&self.rocks, false)?; + rust_rocksdb::DBCommon::flush_wal(&self.rocks, false)?; Ok(()) } fn memory_usage(&self) -> Result { - let stats = rocksdb::perf::get_memory_usage_stats(Some(&[&self.rocks]), Some(&[&self.cache]))?; + let stats = rust_rocksdb::perf::get_memory_usage_stats(Some(&[&self.rocks]), Some(&[&self.cache]))?; Ok(format!( "Approximate memory usage of all the mem-tables: {:.3} MB\nApproximate memory usage of un-flushed \ mem-tables: {:.3} MB\nApproximate memory usage of all the table readers: {:.3} MB\nApproximate memory \ @@ -166,7 +167,7 @@ impl KeyValueDatabaseEngine for Arc { fn cleanup(&self) -> Result<()> { debug!("Running flush_opt"); - rocksdb::DBCommon::flush_opt(&self.rocks, &FlushOptions::default())?; + rust_rocksdb::DBCommon::flush_opt(&self.rocks, &FlushOptions::default())?; Ok(()) } @@ -177,7 +178,7 @@ impl KeyValueDatabaseEngine for Arc { } impl RocksDbEngineTree<'_> { - fn cf(&self) -> Arc> { self.db.rocks.cf_handle(self.name).unwrap() } + fn cf(&self) -> Arc> { self.db.rocks.cf_handle(self.name).unwrap() } } impl KvTree for RocksDbEngineTree<'_> { @@ -207,7 +208,7 @@ impl KvTree for RocksDbEngineTree<'_> { Box::new( self.db .rocks - .iterator_cf(&self.cf(), rocksdb::IteratorMode::Start) + .iterator_cf(&self.cf(), rust_rocksdb::IteratorMode::Start) .map(std::result::Result::unwrap) .map(|(k, v)| (Vec::from(k), Vec::from(v))), ) @@ -219,12 +220,12 @@ impl KvTree for RocksDbEngineTree<'_> { .rocks .iterator_cf( &self.cf(), - rocksdb::IteratorMode::From( + rust_rocksdb::IteratorMode::From( from, if backwards { - rocksdb::Direction::Reverse + rust_rocksdb::Direction::Reverse } else { - rocksdb::Direction::Forward + rust_rocksdb::Direction::Forward }, ), ) @@ -262,7 +263,10 @@ impl KvTree for RocksDbEngineTree<'_> { Box::new( self.db .rocks - .iterator_cf(&self.cf(), rocksdb::IteratorMode::From(&prefix, rocksdb::Direction::Forward)) + .iterator_cf( + &self.cf(), + rust_rocksdb::IteratorMode::From(&prefix, rust_rocksdb::Direction::Forward), + ) .map(std::result::Result::unwrap) .map(|(k, v)| (Vec::from(k), Vec::from(v))) .take_while(move |(k, _)| k.starts_with(&prefix)), diff --git a/src/database/abstraction/sqlite.rs b/src/database/abstraction/sqlite.rs index b36a13b4..9a524506 100644 --- a/src/database/abstraction/sqlite.rs +++ b/src/database/abstraction/sqlite.rs @@ -15,8 +15,8 @@ use super::{watchers::Watchers, KeyValueDatabaseEngine, KvTree}; use crate::{database::Config, Result}; thread_local! { - static READ_CONNECTION: RefCell> = RefCell::new(None); - static READ_CONNECTION_ITERATOR: RefCell> = RefCell::new(None); + static READ_CONNECTION: RefCell> = const { RefCell::new(None) }; + static READ_CONNECTION_ITERATOR: RefCell> = const { RefCell::new(None) }; } struct PreparedStatementIterator<'a> { diff --git a/src/main.rs b/src/main.rs index b1483a2a..db093905 100644 --- a/src/main.rs +++ b/src/main.rs @@ -386,6 +386,7 @@ async fn run_server() -> io::Result<()> { } }; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(not(feature = "zstd_compression"))] { app = routes().layer(middlewares).into_make_service() diff --git a/src/service/media/mod.rs b/src/service/media/mod.rs index 688c1abf..2862a76d 100644 --- a/src/service/media/mod.rs +++ b/src/service/media/mod.rs @@ -52,11 +52,13 @@ impl Service { let path; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(feature = "sha256_media")] { path = services().globals.get_media_file_new(&key) }; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(not(feature = "sha256_media"))] { path = services().globals.get_media_file(&key) @@ -73,11 +75,13 @@ impl Service { for key in keys { let file_path; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(feature = "sha256_media")] { file_path = services().globals.get_media_file_new(&key) }; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(not(feature = "sha256_media"))] { file_path = services().globals.get_media_file(&key) @@ -109,15 +113,17 @@ impl Service { let key = self.db.create_file_metadata(mxc, width, height, content_disposition, content_type)?; let path; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(feature = "sha256_media")] { - path = services().globals.get_media_file_new(&key); - } + path = services().globals.get_media_file_new(&key) + }; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(not(feature = "sha256_media"))] { - path = services().globals.get_media_file(&key); - } + path = services().globals.get_media_file(&key) + }; let mut f = File::create(path).await?; f.write_all(file).await?; @@ -130,11 +136,13 @@ impl Service { if let Ok((content_disposition, content_type, key)) = self.db.search_file_metadata(mxc, 0, 0) { let path; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(feature = "sha256_media")] { path = services().globals.get_media_file_new(&key) }; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(not(feature = "sha256_media"))] { path = services().globals.get_media_file(&key) @@ -208,11 +216,13 @@ impl Service { let path; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(feature = "sha256_media")] { path = services().globals.get_media_file_new(&key) }; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(not(feature = "sha256_media"))] { path = services().globals.get_media_file(&key) @@ -292,11 +302,13 @@ impl Service { // Using saved thumbnail let path; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(feature = "sha256_media")] { path = services().globals.get_media_file_new(&key) }; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(not(feature = "sha256_media"))] { path = services().globals.get_media_file(&key) @@ -314,11 +326,13 @@ impl Service { // Generate a thumbnail let path; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(feature = "sha256_media")] { path = services().globals.get_media_file_new(&key) }; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(not(feature = "sha256_media"))] { path = services().globals.get_media_file(&key) @@ -388,11 +402,13 @@ impl Service { let path; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(feature = "sha256_media")] { path = services().globals.get_media_file_new(&thumbnail_key) }; + #[allow(clippy::unnecessary_operation)] // error[E0658]: attributes on expressions are experimental #[cfg(not(feature = "sha256_media"))] { path = services().globals.get_media_file(&thumbnail_key) diff --git a/src/utils/error.rs b/src/utils/error.rs index 279b76ec..98a2c9bd 100644 --- a/src/utils/error.rs +++ b/src/utils/error.rs @@ -31,7 +31,7 @@ pub enum Error { #[error("There was a problem with the connection to the rocksdb database: {source}")] RocksDbError { #[from] - source: rocksdb::Error, + source: rust_rocksdb::Error, }, #[error("Could not generate an image.")] ImageError {