diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5f41a4e..7ba1638 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -33,7 +33,7 @@ jobs: - name: "Formatting" cmd: fmt args: --all -- --check - rust: nightly + rust: stable - name: "Tests" cmd: nextest args: run --workspace --all-features --retries 3 diff --git a/Cargo.lock b/Cargo.lock index 9b88b54..c57c069 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -780,7 +780,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -974,11 +974,10 @@ dependencies = [ [[package]] name = "deadpool" -version = "0.10.0" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490" +checksum = "5ed5957ff93768adf7a65ab167a17835c3d2c3c50d084fe305174c112f468e2f" dependencies = [ - "async-trait", "deadpool-runtime", "num_cpus", "tokio", @@ -986,9 +985,9 @@ dependencies = [ [[package]] name = "deadpool-redis" -version = "0.14.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f2381b0e993d06a1f6d49f486b33bc4004085bf980340fc05726bacc681fff" +checksum = "c0965b977f1244bc3783bb27cd79cfcff335a8341da18f79232d00504b18eb1a" dependencies = [ "deadpool", "redis", @@ -1248,9 +1247,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1258,9 +1257,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" @@ -1275,9 +1274,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -1294,9 +1293,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -1305,21 +1304,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1575,7 +1574,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower-service", "tracing", @@ -1651,7 +1650,7 @@ dependencies = [ "http-body 1.0.0", "hyper 1.3.1", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower", "tower-service", @@ -1889,9 +1888,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libloading" @@ -1900,7 +1899,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" dependencies = [ "cfg-if", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -2119,9 +2118,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", @@ -2264,7 +2263,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -2484,6 +2483,7 @@ dependencies = [ "deadpool-redis", "futures", "moka", + "once_cell", "redis", "serde", "serde_json", @@ -2504,19 +2504,21 @@ dependencies = [ [[package]] name = "redis" -version = "0.24.0" +version = "0.32.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c580d9cbbe1d1b479e8d67cf9daf6a62c957e6846048408b80b43ac3f6af84cd" +checksum = "7cd3650deebc68526b304898b192fa4102a4ef0b9ada24da096559cb60e0eef8" dependencies = [ - "async-trait", "bytes", + "cfg-if", "combine", "futures-util", "itoa", + "num-bigint", "percent-encoding", "pin-project-lite", "ryu", "sha1_smol", + "socket2 0.6.0", "tokio", "tokio-util", "url", @@ -2965,6 +2967,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "spin" version = "0.9.8" @@ -3220,7 +3232,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.7", "tokio-macros", "windows-sys 0.48.0", ] @@ -3584,7 +3596,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -3602,7 +3614,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -3622,18 +3643,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -3644,9 +3665,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -3656,9 +3677,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -3668,15 +3689,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -3686,9 +3707,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -3698,9 +3719,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -3710,9 +3731,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -3722,9 +3743,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "write16" diff --git a/crates/analytics/tests/integration.rs b/crates/analytics/tests/integration.rs index 5e0834b..eda5a32 100644 --- a/crates/analytics/tests/integration.rs +++ b/crates/analytics/tests/integration.rs @@ -1,15 +1,7 @@ use { analytics::{ - AnalyticsExt, - BatchCollector, - BatchObserver, - CollectionObserver, - Collector, - CollectorConfig, - ExportObserver, - Exporter, - ParquetBatchFactory, - ParquetConfig, + AnalyticsExt, BatchCollector, BatchObserver, CollectionObserver, Collector, + CollectorConfig, ExportObserver, Exporter, ParquetBatchFactory, ParquetConfig, }, async_trait::async_trait, parquet_derive::ParquetRecordWriter, diff --git a/crates/geoip/src/block.rs b/crates/geoip/src/block.rs index 63e7a8b..362d1e4 100644 --- a/crates/geoip/src/block.rs +++ b/crates/geoip/src/block.rs @@ -85,7 +85,7 @@ impl ZoneFilter { geo_data .subdivisions .as_deref() - .map_or(false, |subdivisions| { + .is_some_and(|subdivisions| { subdivisions .iter() .filter_map(|sub| sub.iso_code) diff --git a/crates/geoip/src/lib.rs b/crates/geoip/src/lib.rs index 8b5b7bf..6f40e65 100644 --- a/crates/geoip/src/lib.rs +++ b/crates/geoip/src/lib.rs @@ -1,9 +1,7 @@ pub use maxminddb; use { aws_sdk_s3::{ - error::SdkError, - operation::get_object::GetObjectError, - primitives::ByteStreamError, + error::SdkError, operation::get_object::GetObjectError, primitives::ByteStreamError, Client as S3Client, }, bytes::Bytes, @@ -32,7 +30,7 @@ pub trait Resolver: Clone { fn lookup_geo_data(&self, addr: IpAddr) -> Result; } -impl<'a, T> Resolver for &'a T +impl Resolver for &T where T: Resolver, { @@ -110,15 +108,27 @@ impl Resolver for LocalResolver { #[derive(Debug, thiserror::Error)] pub enum MaxMindResolverError { #[error("S3 get object failed: {0}")] - GetObject(#[from] SdkError), + GetObject(Box>), #[error("Byte stream error: {0}")] - ByteStream(#[from] ByteStreamError), + ByteStream(Box), #[error("MaxMind DB lookup error: {0}")] MaxMindDB(#[from] maxminddb::MaxMindDBError), } +impl From> for MaxMindResolverError { + fn from(e: SdkError) -> Self { + MaxMindResolverError::GetObject(Box::new(e)) + } +} + +impl From for MaxMindResolverError { + fn from(e: ByteStreamError) -> Self { + MaxMindResolverError::ByteStream(Box::new(e)) + } +} + #[derive(Debug, Clone)] pub struct MaxMindResolver { reader: Arc>, diff --git a/crates/metrics/src/examples/macros_counter.rs b/crates/metrics/src/examples/macros_counter.rs index 3047162..4e585a2 100644 --- a/crates/metrics/src/examples/macros_counter.rs +++ b/crates/metrics/src/examples/macros_counter.rs @@ -1,12 +1,6 @@ use wc_metrics::{ - counter, - enum_ordinalize::Ordinalize, - BoolLabel, - EnumLabel, - OptionalBoolLabel, - OptionalEnumLabel, - OptionalStringLabel, - StringLabel, + counter, enum_ordinalize::Ordinalize, BoolLabel, EnumLabel, OptionalBoolLabel, + OptionalEnumLabel, OptionalStringLabel, StringLabel, }; #[derive(Clone, Copy, Debug, Ordinalize)] diff --git a/crates/metrics/src/examples/macros_future_metrics.rs b/crates/metrics/src/examples/macros_future_metrics.rs index 448b539..3f05bda 100644 --- a/crates/metrics/src/examples/macros_future_metrics.rs +++ b/crates/metrics/src/examples/macros_future_metrics.rs @@ -1,13 +1,6 @@ use wc_metrics::{ - enum_ordinalize::Ordinalize, - future_metrics, - BoolLabel, - EnumLabel, - FutureExt, - OptionalBoolLabel, - OptionalEnumLabel, - OptionalStringLabel, - StringLabel, + enum_ordinalize::Ordinalize, future_metrics, BoolLabel, EnumLabel, FutureExt, + OptionalBoolLabel, OptionalEnumLabel, OptionalStringLabel, StringLabel, }; #[derive(Clone, Copy, Debug, Ordinalize)] diff --git a/crates/metrics/src/examples/macros_gauge.rs b/crates/metrics/src/examples/macros_gauge.rs index 8b28275..cc3c6a9 100644 --- a/crates/metrics/src/examples/macros_gauge.rs +++ b/crates/metrics/src/examples/macros_gauge.rs @@ -1,12 +1,6 @@ use wc_metrics::{ - enum_ordinalize::Ordinalize, - gauge, - BoolLabel, - EnumLabel, - OptionalBoolLabel, - OptionalEnumLabel, - OptionalStringLabel, - StringLabel, + enum_ordinalize::Ordinalize, gauge, BoolLabel, EnumLabel, OptionalBoolLabel, OptionalEnumLabel, + OptionalStringLabel, StringLabel, }; #[derive(Clone, Copy, Debug, Ordinalize)] diff --git a/crates/metrics/src/examples/macros_histogram.rs b/crates/metrics/src/examples/macros_histogram.rs index 5374827..0b00f32 100644 --- a/crates/metrics/src/examples/macros_histogram.rs +++ b/crates/metrics/src/examples/macros_histogram.rs @@ -1,12 +1,6 @@ use wc_metrics::{ - enum_ordinalize::Ordinalize, - histogram, - BoolLabel, - EnumLabel, - OptionalBoolLabel, - OptionalEnumLabel, - OptionalStringLabel, - StringLabel, + enum_ordinalize::Ordinalize, histogram, BoolLabel, EnumLabel, OptionalBoolLabel, + OptionalEnumLabel, OptionalStringLabel, StringLabel, }; #[derive(Clone, Copy, Debug, Ordinalize)] diff --git a/crates/metrics/src/lazy.rs b/crates/metrics/src/lazy.rs index 04b264a..c981295 100644 --- a/crates/metrics/src/lazy.rs +++ b/crates/metrics/src/lazy.rs @@ -2,9 +2,7 @@ use { crate::{ label::{DynamicLabel, ResolveLabels, WithLabel}, sealed::{Decrement, Execute, Increment, Record, Set}, - Attrs, - Metric, - StaticAttrs, + Attrs, Metric, StaticAttrs, }, metrics::{Counter, Gauge, Histogram, IntoF64}, std::sync::OnceLock, @@ -79,7 +77,7 @@ where L: DynamicLabel, { /// See [`WithLabel::resolve_label`]. - pub fn resolve_label(&'static self, label: T) -> &M + pub fn resolve_label(&'static self, label: T) -> &'static M where WithLabel: Metric + ResolveLabels<(T,), Target = M>, { @@ -90,7 +88,7 @@ where pub fn resolve_labels( &'static self, labels: LS, - ) -> & as ResolveLabels>::Target + ) -> &'static as ResolveLabels>::Target where WithLabel: Metric + ResolveLabels, { diff --git a/crates/metrics/src/test.rs b/crates/metrics/src/test.rs index ae4c80c..5a15b3c 100644 --- a/crates/metrics/src/test.rs +++ b/crates/metrics/src/test.rs @@ -11,9 +11,7 @@ static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; #[test] fn suite() { use crate::examples::{ - macros_counter::counters, - macros_future_metrics::future_metrics, - macros_gauge::gauges, + macros_counter::counters, macros_future_metrics::future_metrics, macros_gauge::gauges, macros_histogram::histograms, }; diff --git a/crates/rate_limit/Cargo.toml b/crates/rate_limit/Cargo.toml index cdee74d..5cd1291 100644 --- a/crates/rate_limit/Cargo.toml +++ b/crates/rate_limit/Cargo.toml @@ -5,13 +5,14 @@ edition = "2021" [dependencies] chrono = { version = "0.4", features = ["serde"] } -deadpool-redis = "0.14" +deadpool-redis = "0.22" moka = { version = "0.12", features = ["future"] } -redis = { version = "0.24", default-features = false, features = ["script"] } +redis = { version = "0.32", default-features = false, features = ["script", "tokio-comp"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" thiserror = "1.0" tracing = "0.1" +once_cell = "1" [dev-dependencies] futures = "0.3" diff --git a/crates/rate_limit/src/lib.rs b/crates/rate_limit/src/lib.rs index 301ed0b..d36618f 100644 --- a/crates/rate_limit/src/lib.rs +++ b/crates/rate_limit/src/lib.rs @@ -2,6 +2,7 @@ use { chrono::{DateTime, Duration, Utc}, deadpool_redis::{Pool, PoolError}, moka::future::Cache, + once_cell::sync::Lazy, redis::{RedisError, Script}, std::{collections::HashMap, sync::Arc}, }; @@ -30,6 +31,9 @@ pub enum RateLimitError { Internal(InternalRateLimitError), } +static TOKEN_BUCKET_SCRIPT: Lazy