Skip to content

Commit b3cd902

Browse files
Merge pull request #9628 from shyamsundarb-arch/master
Fixed actix build error. Upgraded rust to 2024 edition
2 parents f6e9246 + 669a399 commit b3cd902

14 files changed

+1249
-790
lines changed

frameworks/Rust/actix/Cargo.lock

+1,184-725
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frameworks/Rust/actix/Cargo.toml

+24-25
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "tfb-actix"
3-
version = "3.0.0"
4-
edition = "2018"
3+
version = "4.0.0"
4+
edition = "2024"
55

66
[[bin]]
77
name = "tfb-web"
@@ -28,41 +28,40 @@ name = "tfb-web-pg-deadpool"
2828
path = "src/main_pg_deadpool.rs"
2929

3030
[dependencies]
31-
anyhow = "1"
32-
actix = "0.13"
33-
actix-web = "4.3.1"
34-
actix-http = "3.3.1"
35-
actix-rt = "2"
36-
actix-codec = "0.4"
31+
anyhow = "1.0.96"
32+
actix = "0.13.5"
33+
actix-web = "4.9.0"
34+
actix-http = "3.9.0"
35+
actix-rt = "2.10.0"
36+
actix-codec = "0.5"
3737
actix-server = "2"
3838
actix-service = "2"
3939

40-
askama = "0.11"
40+
askama = "0.12"
4141
bytes = "1"
42-
diesel = { version = "1.4", features = ["postgres"] }
43-
env_logger = "0.9"
44-
futures = "0.3.7"
45-
http = "0.2"
42+
diesel = { version = "2.2.7", features = ["postgres"] }
43+
env_logger = "0.11"
44+
futures = "0.3.31"
4645
log = { version = "0.4", features = ["release_max_level_debug"] }
4746
num_cpus = "1.13"
48-
rand = { version = "0.8", features = ["small_rng"] }
47+
rand = { version = "0.9", features = ["small_rng"] }
4948
serde = { version = "1", features = ["derive"] }
5049
serde_json = "1"
51-
simd-json = "0.4"
52-
simd-json-derive = "0.12"
53-
snmalloc-rs = "0.2.6"
50+
simd-json = "0.14"
51+
simd-json-derive = "0.15"
52+
snmalloc-rs = "0.3.8"
5453
tokio = { version = "1", features = ["full"] }
55-
tokio-util = "0.7.8"
56-
tokio-postgres = "0.7.5"
57-
deadpool-postgres = "0.10.1"
58-
mongodb = "2.2.0"
59-
url = "2.1"
60-
v_htmlescape = "0.14"
54+
tokio-util = "0.7.13"
55+
tokio-postgres = "0.7.13"
56+
deadpool-postgres = "0.14.1"
57+
mongodb = "3.2.1"
58+
url = "2.5"
59+
v_htmlescape = "0.15"
6160
yarte = { version = "0.15", features = ["bytes-buf"] }
6261

6362
[build-dependencies]
64-
askama = "0.11"
65-
bindgen = "0.59"
63+
askama = "0.12"
64+
bindgen = "0.71"
6665

6766
[profile.release]
6867
lto = true

frameworks/Rust/actix/actix-http.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.58
1+
FROM rust:1.85
22

33
RUN apt-get update -yqq && apt-get install -yqq cmake g++
44

frameworks/Rust/actix/actix-server.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.58
1+
FROM rust:1.85
22

33
RUN apt-get update -yqq && apt-get install -yqq cmake g++
44

frameworks/Rust/actix/actix-web-diesel.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.58
1+
FROM rust:1.85
22

33
RUN apt-get update -yqq && apt-get install -yqq cmake g++
44

frameworks/Rust/actix/actix-web-mongodb.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.57.0
1+
FROM rust:1.85
22

33
ENV ACTIX_TECHEMPOWER_MONGODB_URL=mongodb://tfb-database:27017
44

frameworks/Rust/actix/actix-web-pg-deadpool.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.57.0
1+
FROM rust:1.85
22

33
RUN apt-get update -yqq && apt-get install -yqq cmake g++
44

frameworks/Rust/actix/actix.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.58
1+
FROM rust:1.85.0
22

33
RUN apt-get update -yqq && apt-get install -yqq cmake g++
44

frameworks/Rust/actix/benchmark_config.json

100755100644
File mode changed.

frameworks/Rust/actix/src/db.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use bytes::{Bytes, BytesMut};
66
use futures::{
77
stream::futures_unordered::FuturesUnordered, FutureExt, StreamExt, TryStreamExt,
88
};
9-
use rand::{rngs::SmallRng, thread_rng, Rng, SeedableRng};
9+
use rand::{rngs::SmallRng, Rng, SeedableRng};
1010
use tokio_postgres::{connect, types::ToSql, Client, NoTls, Statement};
1111

1212
use crate::{
@@ -101,9 +101,9 @@ impl PgConnection {
101101
}
102102

103103
pub async fn get_world(&self) -> Result<Bytes, PgError> {
104-
let mut rng = SmallRng::from_rng(&mut thread_rng()).unwrap();
104+
let mut rng = SmallRng::from_rng(&mut rand::rng());
105105

106-
let random_id = (rng.gen::<u32>() % 10_000 + 1) as i32;
106+
let random_id = (rng.random::<u32>() % 10_000 + 1) as i32;
107107

108108
let world = self.query_one_world(random_id).await?;
109109
let mut body = BytesMut::with_capacity(40);
@@ -113,26 +113,26 @@ impl PgConnection {
113113
}
114114

115115
pub async fn get_worlds(&self, num: usize) -> Result<Vec<World>, PgError> {
116-
let mut rng = SmallRng::from_rng(&mut thread_rng()).unwrap();
116+
let mut rng = SmallRng::from_rng(&mut rand::rng());
117117

118118
let worlds = FuturesUnordered::new();
119119

120120
for _ in 0..num {
121-
let w_id = (rng.gen::<u32>() % 10_000 + 1) as i32;
121+
let w_id = (rng.random::<u32>() % 10_000 + 1) as i32;
122122
worlds.push(self.query_one_world(w_id));
123123
}
124124

125125
worlds.try_collect().await
126126
}
127127

128128
pub async fn update(&self, num: u16) -> Result<Vec<World>, PgError> {
129-
let mut rng = SmallRng::from_rng(&mut thread_rng()).unwrap();
129+
let mut rng = SmallRng::from_rng(&mut rand::rng());
130130

131131
let worlds = FuturesUnordered::new();
132132

133133
for _ in 0..num {
134-
let id = (rng.gen::<u32>() % 10_000 + 1) as i32;
135-
let w_id = (rng.gen::<u32>() % 10_000 + 1) as i32;
134+
let id = (rng.random::<u32>() % 10_000 + 1) as i32;
135+
let w_id = (rng.random::<u32>() % 10_000 + 1) as i32;
136136

137137
worlds.push(self.query_one_world(w_id).map(move |res| match res {
138138
Ok(mut world) => {

frameworks/Rust/actix/src/db_diesel.rs

+15-14
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use std::io;
44

55
use actix::prelude::*;
6-
use diesel::{prelude::*, result::Error};
6+
use diesel::prelude::*;
77
use rand::{rngs::SmallRng, Rng, SeedableRng};
88

99
use crate::models;
@@ -18,7 +18,7 @@ impl DbExecutor {
1818
DbExecutor {
1919
conn: PgConnection::establish(db_url)
2020
.unwrap_or_else(|_| panic!("Error connecting to {}", db_url)),
21-
rng: SmallRng::from_entropy(),
21+
rng: SmallRng::from_os_rng(),
2222
}
2323
}
2424
}
@@ -39,10 +39,10 @@ impl Handler<RandomWorld> for DbExecutor {
3939
fn handle(&mut self, _: RandomWorld, _: &mut Self::Context) -> Self::Result {
4040
use crate::schema::world::dsl::*;
4141

42-
let random_id = self.rng.gen_range(1..10_001);
42+
let random_id = self.rng.random_range(1..10_001);
4343
match world
4444
.filter(id.eq(random_id))
45-
.load::<models::World>(&self.conn)
45+
.load::<models::World>(&mut self.conn)
4646
{
4747
Ok(mut items) => Ok(items.pop().unwrap()),
4848
Err(_) => Err(io::Error::new(io::ErrorKind::Other, "Database error")),
@@ -64,8 +64,8 @@ impl Handler<RandomWorlds> for DbExecutor {
6464

6565
let mut worlds = Vec::with_capacity(msg.0 as usize);
6666
for _ in 0..msg.0 {
67-
let w_id = self.rng.gen_range(1..10_001);
68-
let w = match world.filter(id.eq(w_id)).load::<models::World>(&self.conn) {
67+
let w_id = self.rng.random_range(1..10_001);
68+
let w = match world.filter(id.eq(w_id)).load::<models::World>(&mut self.conn) {
6969
Ok(mut items) => items.pop().unwrap(),
7070
Err(_) => {
7171
return Err(io::Error::new(io::ErrorKind::Other, "Database error"));
@@ -91,27 +91,28 @@ impl Handler<UpdateWorld> for DbExecutor {
9191

9292
let mut worlds = Vec::with_capacity(msg.0 as usize);
9393
for _ in 0..msg.0 {
94-
let w_id: i32 = self.rng.gen_range(1..10_001);
95-
let mut w = match world.filter(id.eq(w_id)).load::<models::World>(&self.conn) {
94+
let w_id: i32 = self.rng.random_range(1..10_001);
95+
let mut w = match world.filter(id.eq(w_id)).load::<models::World>(&mut self.conn) {
9696
Ok(mut items) => items.pop().unwrap(),
9797
Err(_) => {
9898
return Err(io::Error::new(io::ErrorKind::Other, "Database error"));
9999
}
100100
};
101-
w.randomnumber = self.rng.gen_range(1..10_001);
101+
w.randomnumber = self.rng.random_range(1..10_001);
102102
worlds.push(w);
103103
}
104104
worlds.sort_by_key(|w| w.id);
105105

106-
let _ = self.conn.transaction::<(), Error, _>(|| {
106+
self.conn.transaction(|conn| {
107107
for w in &worlds {
108-
let _ = diesel::update(world)
108+
diesel::update(world)
109109
.filter(id.eq(w.id))
110110
.set(randomnumber.eq(w.randomnumber))
111-
.execute(&self.conn);
111+
.execute(conn)?;
112112
}
113113
Ok(())
114-
});
114+
})
115+
.map_err(|e: diesel::result::Error| io::Error::new(io::ErrorKind::Other, e))?;
115116

116117
Ok(worlds)
117118
}
@@ -129,7 +130,7 @@ impl Handler<TellFortune> for DbExecutor {
129130
fn handle(&mut self, _: TellFortune, _: &mut Self::Context) -> Self::Result {
130131
use crate::schema::fortune::dsl::*;
131132

132-
match fortune.load::<models::Fortune>(&self.conn) {
133+
match fortune.load::<models::Fortune>(&mut self.conn) {
133134
Ok(mut items) => {
134135
items.push(models::Fortune {
135136
id: 0,

frameworks/Rust/actix/src/main_http.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use crate::{
2323
utils::Writer,
2424
};
2525

26+
#[allow(dead_code)]
2627
#[derive(Debug)]
2728
enum Error {
2829
Pg(PgError),
@@ -134,7 +135,7 @@ impl Service<Request> for App {
134135
}
135136

136137
_ => Box::pin(ok(Response::with_body(
137-
http::StatusCode::NOT_FOUND,
138+
StatusCode::NOT_FOUND,
138139
Bytes::new(),
139140
))),
140141
}

frameworks/Rust/actix/src/main_mongodb.rs

+6-7
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ async fn find_random_world(data: web::Data<Data>) -> Result<World> {
2828
let runtime = data.tokio_runtime.clone();
2929
runtime
3030
.spawn(async move {
31-
let mut rng = SmallRng::from_entropy();
32-
let id = (rng.gen::<u32>() % 10_000 + 1) as i32;
31+
let mut rng = SmallRng::from_os_rng();
32+
let id = (rng.random::<u32>() % 10_000 + 1) as i32;
3333

3434
let coll = data.client.database("hello_world").collection("world");
3535
let world = coll
36-
.find_one(doc! { "id": id as f32 }, None)
36+
.find_one(doc! { "id": id as f32 })
3737
.await?
3838
.expect("should find world");
3939
Ok(world)
@@ -101,10 +101,10 @@ async fn updates(
101101

102102
let mut worlds = find_random_worlds(data, query.q).await?;
103103

104-
let mut rng = SmallRng::from_entropy();
104+
let mut rng = SmallRng::from_os_rng();
105105
let mut updates = Vec::new();
106106
for world in worlds.iter_mut() {
107-
let new_random_number = (rng.gen::<u32>() % 10_000 + 1) as i32;
107+
let new_random_number = (rng.random::<u32>() % 10_000 + 1) as i32;
108108
updates.push(doc! {
109109
"q": { "id": world.id }, "u": { "$set": { "randomNumber": new_random_number }}
110110
});
@@ -121,7 +121,6 @@ async fn updates(
121121
"updates": updates,
122122
"ordered": false,
123123
},
124-
None,
125124
)
126125
.await
127126
})
@@ -145,7 +144,7 @@ async fn fortune(data: web::Data<Data>) -> Result<HttpResponse<Vec<u8>>> {
145144
let fortunes_cursor = client
146145
.database("hello_world")
147146
.collection::<Fortune>("fortune")
148-
.find(None, None)
147+
.find(doc! {})
149148
.await?;
150149

151150
let mut fortunes: Vec<Fortune> = fortunes_cursor.try_collect().await?;

frameworks/Rust/actix/src/main_pg_deadpool.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ async fn find_random_world(pool: &Pool) -> Result<World> {
2727
.await
2828
.unwrap();
2929

30-
let mut rng = SmallRng::from_entropy();
31-
let id = (rng.gen::<u32>() % 10_000 + 1) as i32;
30+
let mut rng = SmallRng::from_os_rng();
31+
let id = (rng.random::<u32>() % 10_000 + 1) as i32;
3232

3333
let row = conn.query_one(&world, &[&id]).await?;
3434

@@ -95,14 +95,14 @@ async fn updates(
9595
) -> Result<HttpResponse<Vec<u8>>> {
9696
let mut worlds = find_random_worlds(&data, query.q).await?;
9797

98-
let mut rng = SmallRng::from_entropy();
98+
let mut rng = SmallRng::from_os_rng();
9999

100100
let mut updates = "UPDATE world SET randomnumber = CASE id ".to_string();
101101
let mut params: Vec<&(dyn ToSql + Sync)> = Vec::with_capacity(query.q as usize * 3);
102102

103103
let mut n_params = 1;
104104
for world in worlds.iter_mut() {
105-
let new_random_number = (rng.gen::<u32>() % 10_000 + 1) as i32;
105+
let new_random_number = (rng.random::<u32>() % 10_000 + 1) as i32;
106106
write!(&mut updates, "when ${} then ${} ", n_params, n_params + 1).unwrap();
107107
world.randomnumber = new_random_number;
108108
n_params += 2;

0 commit comments

Comments
 (0)