Skip to content

Commit c1b928f

Browse files
authored
Merge pull request #68 from junkurihara/develop
0.3.2
2 parents 11a820f + 0b4414a commit c1b928f

15 files changed

Lines changed: 143 additions & 128 deletions

File tree

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[workspace.package]
2-
version = "0.3.1"
2+
version = "0.3.2"
33
authors = ["Jun Kurihara"]
44
homepage = "https://github.com/junkurihara/modoh-server"
55
repository = "https://github.com/junkurihara/modoh-server"
@@ -24,7 +24,7 @@ keywords = [
2424
"relay",
2525
"authorization",
2626
]
27-
edition = "2021"
27+
edition = "2024"
2828
publish = false
2929

3030
[workspace]

httpsig-registry/Cargo.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ edition.workspace = true
1313
publish.workspace = true
1414

1515
[dependencies]
16-
anyhow = { version = "1.0.95" }
17-
thiserror = { version = "2.0.9" }
18-
pulldown-cmark = { version = "0.12.2", default-features = false }
19-
http = { version = "1.2.0" }
20-
indexmap = { version = "2.7.0" }
21-
minisign-verify = { version = "0.2.3" }
22-
reqwest = { version = "0.12.12", default-features = false, features = [
16+
anyhow = { version = "1.0.99" }
17+
thiserror = { version = "2.0.16" }
18+
pulldown-cmark = { version = "0.13.0", default-features = false }
19+
http = { version = "1.3.1" }
20+
indexmap = { version = "2.11.1" }
21+
minisign-verify = { version = "0.2.4" }
22+
reqwest = { version = "0.12.23", default-features = false, features = [
2323
"rustls-tls",
2424
"http2",
2525
"hickory-dns",
@@ -28,7 +28,7 @@ futures = { version = "0.3.31", default-features = false, features = [
2828
"std",
2929
"async-await",
3030
] }
31-
tokio = { version = "1.42.0", features = [
31+
tokio = { version = "1.47.1", features = [
3232
"net",
3333
"rt-multi-thread",
3434
"time",

httpsig-wire-proto/Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ edition.workspace = true
1313
publish.workspace = true
1414

1515
[dependencies]
16-
anyhow = "1.0.95"
17-
thiserror = "2.0.9"
18-
rand = "0.8.5"
19-
hpke = "0.12.0"
20-
bytes = "1.9.0"
16+
anyhow = "1.0.99"
17+
thiserror = "2.0.16"
18+
rand = "0.9.2"
19+
hpke = "0.13.0"
20+
bytes = "1.10.1"
2121
byteorder = "1.5.0"
2222
p256 = { version = "0.13.2" }
2323
elliptic-curve = { version = "0.13.8", features = ["ecdh"] }
2424
ed25519-compact = { version = "2.1.1" }
2525
digest = "0.10.7"
26-
sha2 = "0.10.8"
26+
sha2 = "0.10.9"
2727
hkdf = "0.12.4"
28-
httpsig = "0.0.16"
28+
httpsig = "0.0.19"

httpsig-wire-proto/src/dh.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -246,12 +246,12 @@ pub fn derive_secret<M: MacKdf>(
246246
mod tests {
247247
use super::super::mac_kdf::DeriveSessionKey;
248248
use super::*;
249-
use rand::thread_rng;
249+
use rand::rng;
250250

251251
#[test]
252252
fn test_generate_key_pair() {
253-
let x25519 = HttpSigDhTypes::Hs256X25519HkdfSha256.generate_key_pair(&mut thread_rng());
254-
let dhp256 = HttpSigDhTypes::Hs256DhP256HkdfSha256.generate_key_pair(&mut thread_rng());
253+
let x25519 = HttpSigDhTypes::Hs256X25519HkdfSha256.generate_key_pair(&mut rng());
254+
let dhp256 = HttpSigDhTypes::Hs256DhP256HkdfSha256.generate_key_pair(&mut rng());
255255

256256
assert_eq!(x25519.private_key.len(), 32);
257257
assert_eq!(x25519.public_key.kem_id, X25519HkdfSha256::KEM_ID);
@@ -270,8 +270,8 @@ mod tests {
270270
fn test_derive_secret() {
271271
let dh_types = [HttpSigDhTypes::Hs256DhP256HkdfSha256, HttpSigDhTypes::Hs256X25519HkdfSha256];
272272
dh_types.iter().for_each(|t| {
273-
let alice_kp = t.generate_key_pair(&mut thread_rng());
274-
let bob_kp = t.generate_key_pair(&mut thread_rng());
273+
let alice_kp = t.generate_key_pair(&mut rng());
274+
let bob_kp = t.generate_key_pair(&mut rng());
275275

276276
let shared_1 = alice_kp.derive_secret(&bob_kp.public_key).unwrap();
277277
let shared_2 = bob_kp.derive_secret(&alice_kp.public_key).unwrap();
@@ -280,7 +280,7 @@ mod tests {
280280
let shared_1 = alice_kp.public_key.derive_secret(&bob_kp).unwrap();
281281
let shared_2 = bob_kp.public_key.derive_secret(&alice_kp).unwrap();
282282
assert_eq!(shared_1.secret, shared_2.secret);
283-
let session_key_1 = shared_1.derive_session_key_with_random_nonce(&mut thread_rng()).unwrap();
283+
let session_key_1 = shared_1.derive_session_key_with_random_nonce(&mut rng()).unwrap();
284284
let session_key_2 = shared_2.derive_session_key_with_nonce(session_key_1.nonce()).unwrap();
285285
assert_eq!(session_key_1.session_key(), session_key_2.session_key());
286286
assert_eq!(session_key_1.nonce(), session_key_2.nonce());
@@ -291,7 +291,7 @@ mod tests {
291291
fn test_serialize_dh_config() {
292292
let dh_types = [HttpSigDhTypes::Hs256DhP256HkdfSha256, HttpSigDhTypes::Hs256X25519HkdfSha256];
293293
dh_types.iter().for_each(|t| {
294-
let kp = t.generate_key_pair(&mut thread_rng());
294+
let kp = t.generate_key_pair(&mut rng());
295295
let mut serialized_config = Vec::new();
296296
kp.public_key.serialize(&mut serialized_config).unwrap();
297297

httpsig-wire-proto/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ impl HttpSigPublicKeys {
228228
let key_pairs = key_types
229229
.iter()
230230
.map(|t| {
231-
let mut rng = rand::thread_rng();
231+
let mut rng = rand::rng();
232232
match t {
233233
HttpSigKeyTypes::Hs256X25519HkdfSha256 => {
234234
HttpSigKeyPair::Dh(HttpSigDhTypes::Hs256X25519HkdfSha256.generate_key_pair(&mut rng))
@@ -408,7 +408,7 @@ mod tests {
408408
// derive session key and random nonce at alice side
409409
let alice_session_key_nonce = alice_secrets
410410
.iter()
411-
.map(|s| s.derive_session_key_with_random_nonce(&mut rand::thread_rng()))
411+
.map(|s| s.derive_session_key_with_random_nonce(&mut rand::rng()))
412412
.collect::<Result<Vec<_>, _>>()
413413
.unwrap();
414414
let nonces = alice_session_key_nonce.iter().map(|s| s.nonce().to_vec()).collect::<Vec<_>>();

httpsig-wire-proto/src/pk.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ mod tests {
151151
fn test_generate_key_pair() {
152152
let pk_types = vec![HttpSigPkTypes::Ed25519, HttpSigPkTypes::EcdsaP256Sha256];
153153
for pk_type in pk_types {
154-
let mut rng = rand::thread_rng();
154+
let mut rng = rand::rng();
155155
let key_pair = pk_type.generate_key_pair(&mut rng);
156156
assert_eq!(key_pair.public_key.alg_id, pk_type.alg_id());
157157
}
@@ -161,7 +161,7 @@ mod tests {
161161
fn test_serialize_ph_config() {
162162
let pk_types = vec![HttpSigPkTypes::Ed25519, HttpSigPkTypes::EcdsaP256Sha256];
163163
for pk_type in pk_types {
164-
let mut rng = rand::thread_rng();
164+
let mut rng = rand::rng();
165165
let key_pair = pk_type.generate_key_pair(&mut rng);
166166
let mut buf = BytesMut::new();
167167
key_pair.public_key.serialize(&mut buf).unwrap();

modoh-bin/Cargo.toml

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,45 +52,50 @@ modoh-server-lib = { path = "../modoh-lib", default-features = false, features =
5252
"rustls",
5353
] }
5454

55-
anyhow = "1.0.95"
55+
anyhow = "1.0.99"
5656
mimalloc = { version = "*", default-features = false }
57-
serde = { version = "1.0.217", default-features = false, features = ["derive"] }
57+
serde = { version = "1.0.219", default-features = false, features = ["derive"] }
5858
derive_builder = "0.20.2"
59-
tokio = { version = "1.42.0", default-features = false, features = [
59+
tokio = { version = "1.47.1", default-features = false, features = [
6060
"net",
6161
"rt-multi-thread",
6262
"time",
6363
"sync",
6464
"macros",
6565
] }
66-
async-trait = "0.1.84"
67-
url = "2.5.4"
66+
async-trait = "0.1.89"
67+
url = "2.5.7"
6868

6969
# config
70-
clap = { version = "4.5.23", features = ["std", "cargo", "wrap_help"] }
71-
toml = { version = "0.8.19", default-features = false, features = ["parse"] }
72-
hot_reload = "0.1.8"
70+
clap = { version = "4.5.47", features = ["std", "cargo", "wrap_help"] }
71+
toml = { version = "0.9.5", default-features = false, features = [
72+
"parse",
73+
"serde",
74+
] }
75+
hot_reload = "0.2.0"
7376

7477
# tracing and metrics
7578
tracing = { version = "0.1.41" }
76-
tracing-subscriber = { version = "0.3.19", features = ["fmt"] }
77-
tracing-opentelemetry = { version = "0.28.0", optional = true }
78-
opentelemetry = { version = "0.27.1", optional = true }
79-
opentelemetry_sdk = { version = "0.27.1", features = [
79+
tracing-subscriber = { version = "0.3.20", features = ["fmt"] }
80+
tracing-opentelemetry = { version = "0.31.0", optional = true }
81+
opentelemetry = { version = "0.30.0", optional = true }
82+
opentelemetry_sdk = { version = "0.30.0", features = [
8083
"rt-tokio",
8184
"spec_unstable_metrics_views",
8285
], optional = true }
83-
opentelemetry-stdout = { version = "0.27.0", optional = true }
84-
opentelemetry-otlp = { version = "0.27.0", optional = true }
85-
opentelemetry-semantic-conventions = { version = "0.27.0", optional = true, features = [
86+
opentelemetry-stdout = { version = "0.30.0", optional = true }
87+
opentelemetry-otlp = { version = "0.30.0", optional = true, features = [
88+
"grpc-tonic",
89+
] }
90+
opentelemetry-semantic-conventions = { version = "0.30.0", optional = true, features = [
8691
"semconv_experimental",
8792
] }
8893

8994
# add random otel service id whenever restarting
90-
uuid = { version = "1.11.0", default-features = false, features = [
95+
uuid = { version = "1.18.1", default-features = false, features = [
9196
"v4",
9297
"fast-rng",
9398
], optional = true }
9499

95100
# ip address
96-
ipnet = { version = "2.10.1" }
101+
ipnet = { version = "2.11.0" }

modoh-bin/src/main.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ mod trace;
1010
mod otel;
1111

1212
use crate::{
13-
config::{parse_opts, ConfigReloader, TargetConfig},
13+
config::{ConfigReloader, TargetConfig, parse_opts},
1414
constants::CONFIG_WATCH_DELAY_SECS,
1515
trace::*,
1616
};
1717
use hot_reload::{ReloaderReceiver, ReloaderService};
18-
use modoh_server_lib::{entrypoint, ServiceConfig};
18+
use modoh_server_lib::{ServiceConfig, entrypoint};
1919

2020
fn main() {
2121
let mut runtime_builder = tokio::runtime::Builder::new_multi_thread();
@@ -42,7 +42,7 @@ fn main() {
4242
}
4343
} else {
4444
let (config_service, config_rx) =
45-
ReloaderService::<ConfigReloader, TargetConfig>::new(&parsed_opts.config_file_path, CONFIG_WATCH_DELAY_SECS, false)
45+
ReloaderService::<ConfigReloader, TargetConfig>::with_delay(&parsed_opts.config_file_path, CONFIG_WATCH_DELAY_SECS)
4646
.await
4747
.unwrap();
4848

modoh-bin/src/otel.rs

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
use crate::{constants::OTEL_SERVICE_NAMESPACE, trace::OtelConfig};
22
use opentelemetry::KeyValue;
33
use opentelemetry_otlp::WithExportConfig;
4-
use opentelemetry_sdk::{runtime, Resource};
5-
use opentelemetry_semantic_conventions::{
6-
resource::{SERVICE_NAME, SERVICE_NAMESPACE, SERVICE_VERSION},
7-
SCHEMA_URL,
8-
};
4+
use opentelemetry_sdk::Resource;
5+
use opentelemetry_semantic_conventions::resource::{SERVICE_NAME, SERVICE_NAMESPACE, SERVICE_VERSION};
96

107
#[cfg(feature = "otel-trace")]
11-
use opentelemetry_sdk::trace::{BatchConfigBuilder, Builder as SdkBuilder, RandomIdGenerator, Sampler, Tracer};
8+
use opentelemetry_sdk::trace::{BatchConfigBuilder, RandomIdGenerator, Sampler, Tracer, TracerProviderBuilder as SdkBuilder};
129

1310
#[cfg(feature = "otel-trace")]
1411
use opentelemetry::trace::TracerProvider;
@@ -28,16 +25,25 @@ where
2825
T: Into<String> + Clone,
2926
opentelemetry::Value: From<T>,
3027
{
31-
Resource::from_schema_url(
32-
[
28+
Resource::builder()
29+
.with_attributes(vec![
3330
KeyValue::new(SERVICE_NAMESPACE, OTEL_SERVICE_NAMESPACE),
3431
KeyValue::new(SERVICE_NAME, env!("CARGO_PKG_NAME")),
3532
KeyValue::new(SERVICE_VERSION, env!("CARGO_PKG_VERSION")),
3633
#[cfg(feature = "otel-instance-id")]
3734
KeyValue::new(SERVICE_INSTANCE_ID, _otel_config.service_instance_id.clone().into()),
38-
],
39-
SCHEMA_URL,
40-
)
35+
])
36+
.build()
37+
// Resource::from_schema_url(
38+
// [
39+
// KeyValue::new(SERVICE_NAMESPACE, OTEL_SERVICE_NAMESPACE),
40+
// KeyValue::new(SERVICE_NAME, env!("CARGO_PKG_NAME")),
41+
// KeyValue::new(SERVICE_VERSION, env!("CARGO_PKG_VERSION")),
42+
// #[cfg(feature = "otel-instance-id")]
43+
// KeyValue::new(SERVICE_INSTANCE_ID, _otel_config.service_instance_id.clone().into()),
44+
// ],
45+
// SCHEMA_URL,
46+
// )
4147
}
4248

4349
#[cfg(feature = "otel-metrics")]
@@ -58,30 +64,32 @@ where
5864
.build()
5965
.unwrap();
6066

61-
let reader = PeriodicReader::builder(exporter, runtime::Tokio)
67+
let reader = PeriodicReader::builder(exporter)
6268
.with_interval(std::time::Duration::from_secs(30))
6369
.build();
6470

6571
// For debugging in development
6672
let stdout_exporter = opentelemetry_stdout::MetricExporter::default();
67-
let stdout_reader = PeriodicReader::builder(stdout_exporter, runtime::Tokio).build();
73+
let stdout_reader = PeriodicReader::builder(stdout_exporter).build();
6874

6975
// define view
7076
let view = |instrument: &Instrument| -> Option<Stream> {
7177
// add prefix to metrics names
72-
let stream = Stream::new()
73-
.name(format!("{}_{}", OTEL_SERVICE_NAMESPACE, instrument.name)) // add prefix to metrics names
74-
.description(instrument.description.clone())
75-
.unit(instrument.unit.clone());
78+
let instrument_name = instrument.name().to_string();
79+
let instrument_unit = instrument.unit().to_string();
80+
81+
let mut stream_builder = Stream::builder()
82+
.with_name(format!("{}_{}", OTEL_SERVICE_NAMESPACE, instrument_name)) // add prefix to metrics names
83+
// .with_description(instrument.description().clone())
84+
.with_unit(instrument_unit);
7685

77-
if instrument.name.contains("latency_") {
78-
Some(stream.aggregation(Aggregation::ExplicitBucketHistogram {
86+
if instrument_name.contains("latency_") {
87+
stream_builder = stream_builder.with_aggregation(Aggregation::ExplicitBucketHistogram {
7988
boundaries: vec![25.0, 50.0, 100.0, 200.0, 400.0, 800.0, 1600.0, 3200.0],
8089
record_min_max: true,
81-
}))
82-
} else {
83-
Some(stream)
90+
});
8491
}
92+
stream_builder.build().ok()
8593
};
8694

8795
let meter_provider = SdkMeterProvider::builder()
@@ -110,7 +118,7 @@ where
110118
.with_endpoint(otlp_endpoint)
111119
.build()
112120
.unwrap();
113-
let batch_processor = opentelemetry_sdk::trace::BatchSpanProcessor::builder(exporter, runtime::Tokio)
121+
let batch_processor = opentelemetry_sdk::trace::BatchSpanProcessor::builder(exporter)
114122
.with_batch_config(
115123
BatchConfigBuilder::default()
116124
.with_max_queue_size(crate::constants::OTEL_TRACE_BATCH_QUEUE_SIZE)

modoh-bin/src/trace.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,12 @@ impl Drop for MetricsGuard {
238238
if let Err(err) = mp.shutdown() {
239239
eprintln!("{err:?}");
240240
}
241-
opentelemetry::global::shutdown_tracer_provider();
241+
// opentelemetry::global::shutdown_tracer_provider();
242+
let tracer_provider = opentelemetry_sdk::trace::SdkTracerProvider::builder().build();
243+
// Clone and set the tracer provider globally. Retain the original to invoke shutdown later.
244+
opentelemetry::global::set_tracer_provider(tracer_provider.clone());
245+
// Shutdown the provider when application is exiting.
246+
let _ = tracer_provider.shutdown();
242247
}
243248
}
244249

0 commit comments

Comments
 (0)