Skip to content

Commit 6ff7a0c

Browse files
authored
[xitca-web] dep update. (#8781)
* [xitca-web] dep update. * add auto reconnect to db client. * fix build.
1 parent ff3d110 commit 6ff7a0c

11 files changed

+123
-160
lines changed

frameworks/Rust/xitca-web/Cargo.lock

+80-83
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frameworks/Rust/xitca-web/Cargo.toml

+6-6
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,18 @@ io-uring = ["xitca-http/io-uring", "xitca-server/io-uring"]
5151
axum = ["dep:axum", "http-body", "tower", "tower-http", "xitca-web/tower-http-compat" ]
5252

5353
[dependencies]
54-
xitca-http = "0.2"
55-
xitca-io = "0.1"
56-
xitca-server = "0.1"
54+
xitca-http = "0.4"
55+
xitca-io = "0.2"
56+
xitca-server = "0.2"
5757
xitca-service = "0.1"
58-
xitca-unsafe-collection = "0.1"
58+
xitca-unsafe-collection = "0.1.1"
5959

6060
atoi = "2"
6161
serde = { version = "1" }
6262
serde_json = { version = "1" }
6363

6464
# web optional
65-
xitca-web = { version = "0.2", features = ["json"], optional = true }
65+
xitca-web = { version = "0.4", features = ["json"], optional = true }
6666

6767
# raw-pg optional
6868
xitca-postgres = { version = "0.1", optional = true }
@@ -92,5 +92,5 @@ codegen-units = 1
9292
panic = "abort"
9393

9494
[patch.crates-io]
95-
xitca-postgres = { git = "https://github.com/HFQR/xitca-web.git", rev = "d79f510197e0f36534fe22b7a467c55dbd683681" }
95+
xitca-postgres = { git = "https://github.com/HFQR/xitca-web.git", rev = "13a28c51a2f6e23e4e6b96e508a8af1e5e79d0b6" }
9696
mio = { git = "https://github.com/fakeshadow/mio.git", rev = "52b72d372bfe5807755b7f5e3e1edf282954d6ba" }

frameworks/Rust/xitca-web/src/db.rs

+15-26
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
use std::{collections::HashMap, fmt::Write, future::IntoFuture};
1+
use std::{collections::HashMap, fmt::Write};
22

3-
use xitca_postgres::{statement::Statement, AsyncLendingIterator, Postgres};
3+
use xitca_postgres::{
4+
pipeline::Pipeline, statement::Statement, AsyncLendingIterator, SharedClient,
5+
};
46
use xitca_unsafe_collection::no_hash::NoHashBuilder;
57

68
use super::{
@@ -9,7 +11,7 @@ use super::{
911
};
1012

1113
pub struct Client {
12-
client: xitca_postgres::Client,
14+
client: SharedClient,
1315
#[cfg(not(feature = "pg-sync"))]
1416
rng: std::cell::RefCell<Rand>,
1517
#[cfg(feature = "pg-sync")]
@@ -19,27 +21,14 @@ pub struct Client {
1921
updates: HashMap<u16, Statement, NoHashBuilder>,
2022
}
2123

22-
impl Drop for Client {
23-
fn drop(&mut self) {
24-
drop(self.fortune.clone().into_guarded(&self.client));
25-
drop(self.world.clone().into_guarded(&self.client));
26-
for (_, stmt) in std::mem::take(&mut self.updates) {
27-
drop(stmt.into_guarded(&self.client))
28-
}
29-
}
30-
}
31-
3224
pub async fn create() -> HandleResult<Client> {
33-
let (client, driver) = Postgres::new(DB_URL.to_string()).connect().await?;
34-
35-
tokio::spawn(tokio::task::unconstrained(driver.into_future()));
25+
let mut client = SharedClient::new(DB_URL.to_string()).await?;
3626

37-
let fortune = client.prepare("SELECT * FROM fortune", &[]).await?.leak();
27+
let fortune = client.prepare_cached("SELECT * FROM fortune", &[]).await?;
3828

3929
let world = client
40-
.prepare("SELECT * FROM world WHERE id=$1", &[])
41-
.await?
42-
.leak();
30+
.prepare_cached("SELECT * FROM world WHERE id=$1", &[])
31+
.await?;
4332

4433
let mut updates = HashMap::default();
4534

@@ -59,7 +48,7 @@ pub async fn create() -> HandleResult<Client> {
5948
q.pop();
6049
q.push(')');
6150

62-
let st = client.prepare(&q, &[]).await?.leak();
51+
let st = client.prepare_cached(&q, &[]).await?;
6352
updates.insert(num, st);
6453
}
6554

@@ -94,11 +83,11 @@ impl Client {
9483
.try_next()
9584
.await?
9685
.map(|row| World::new(row.get_raw(0), row.get_raw(1)))
97-
.ok_or_else(|| format!("World does not exist").into())
86+
.ok_or_else(|| "World does not exist".into())
9887
}
9988

10089
pub async fn get_worlds(&self, num: u16) -> HandleResult<Vec<World>> {
101-
let mut pipe = self.client.pipeline();
90+
let mut pipe = Pipeline::new();
10291

10392
{
10493
let mut rng = self.borrow_rng_mut();
@@ -108,7 +97,7 @@ impl Client {
10897
let mut worlds = Vec::new();
10998
worlds.reserve(num as usize);
11099

111-
let mut res = pipe.run().await?;
100+
let mut res = self.client.pipeline(pipe).await?;
112101
while let Some(mut item) = res.try_next().await? {
113102
while let Some(row) = item.try_next().await? {
114103
worlds.push(World::new(row.get_raw(0), row.get_raw(1)))
@@ -124,7 +113,7 @@ impl Client {
124113
let mut params = Vec::new();
125114
params.reserve(len * 3);
126115

127-
let mut pipe = self.client.pipeline();
116+
let mut pipe = Pipeline::new();
128117

129118
{
130119
let mut rng = self.borrow_rng_mut();
@@ -144,7 +133,7 @@ impl Client {
144133
worlds.reserve(len);
145134
let mut r_ids = params.into_iter().skip(1).step_by(2);
146135

147-
let mut res = pipe.run().await?;
136+
let mut res = self.client.pipeline(pipe).await?;
148137
while let Some(mut item) = res.try_next().await? {
149138
while let Some(row) = item.try_next().await? {
150139
let r_id = r_ids.next().unwrap();

frameworks/Rust/xitca-web/src/main_sync.rs

+4-13
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ mod util;
66
use serde::Serialize;
77
use xitca_web::{
88
codegen::route,
9-
handler::{html::Html, json::Json, query::Query, state::StateOwn},
9+
handler::{html::Html, json::Json, query::Query, state::StateOwn, text::Text},
1010
http::{header::SERVER, WebResponse},
11+
route::get,
1112
App,
1213
};
1314

@@ -18,8 +19,8 @@ use util::{HandleResult, SERVER_HEADER_VALUE};
1819
fn main() -> std::io::Result<()> {
1920
App::new()
2021
.with_state(db_diesel::create()?)
21-
.at_typed(plaintext)
22-
.at_typed(json)
22+
.at("/plaintext", get(Text("Hello, World!")))
23+
.at("/json", get(Json(ser::Message::new())))
2324
.at_typed(db)
2425
.at_typed(fortunes)
2526
.at_typed(queries)
@@ -36,16 +37,6 @@ fn header(mut res: WebResponse) -> WebResponse {
3637
res
3738
}
3839

39-
#[route("/plaintext", method = get)]
40-
fn plaintext() -> &'static str {
41-
"Hello, World!"
42-
}
43-
44-
#[route("/json", method = get)]
45-
fn json() -> Json<ser::Message> {
46-
Json(ser::Message::new())
47-
}
48-
4940
#[route("/db", method = get)]
5041
fn db(StateOwn(pool): StateOwn<Pool>) -> HandleResult<Json<impl Serialize>> {
5142
pool.get_world().map(Json)
+12-27
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,31 @@
11
mod ser;
22
mod util;
33

4-
use std::{env, io, net::TcpListener, os::wasi::io::FromRawFd};
5-
64
use xitca_web::{
7-
handler::{handler_service, json::Json},
5+
handler::{json::Json, text::Text},
86
http::{header::SERVER, WebResponse},
97
route::get,
10-
service::Service,
11-
App, WebContext,
8+
App,
129
};
1310

14-
fn main() -> io::Result<()> {
15-
let fd = env::var("FD_COUNT")
11+
fn main() -> std::io::Result<()> {
12+
let listener = std::env::var("FD_COUNT")
1613
.ok()
17-
.and_then(|var| var.parse().ok())
14+
.and_then(|v| v.parse().ok())
15+
.map(|fd| unsafe { std::os::wasi::io::FromRawFd::from_raw_fd(fd) })
1816
.expect("failed to parse FD_COUNT env");
1917

20-
let listener = unsafe { TcpListener::from_raw_fd(fd) };
21-
2218
App::new()
23-
.at(
24-
"/json",
25-
get(handler_service(|| async { Json(ser::Message::new()) })),
26-
)
27-
.at(
28-
"/plaintext",
29-
get(handler_service(|| async { "Hello, World!" })),
30-
)
31-
.enclosed_fn(middleware_fn)
19+
.at("/json", get(Json(ser::Message::new())))
20+
.at("/plaintext", get(Text("Hello, World!")))
21+
.map(header)
3222
.serve()
3323
.listen(listener)?
3424
.run()
3525
.wait()
3626
}
3727

38-
async fn middleware_fn<S, E>(service: &S, ctx: WebContext<'_>) -> Result<WebResponse, E>
39-
where
40-
S: for<'r> Service<WebContext<'r>, Response = WebResponse, Error = E>,
41-
{
42-
service.call(ctx).await.map(|mut res| {
43-
res.headers_mut().append(SERVER, util::SERVER_HEADER_VALUE);
44-
res
45-
})
28+
fn header(mut res: WebResponse) -> WebResponse {
29+
res.headers_mut().append(SERVER, util::SERVER_HEADER_VALUE);
30+
res
4631
}

frameworks/Rust/xitca-web/src/ser.rs

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use xitca_http::{
1111

1212
use crate::util::Error;
1313

14+
#[derive(Clone)]
1415
pub struct Message {
1516
message: &'static str,
1617
}

frameworks/Rust/xitca-web/xitca-web-axum.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.75
1+
FROM rust:1.76
22

33
ADD ./ /xitca-web
44
WORKDIR /xitca-web

frameworks/Rust/xitca-web/xitca-web-iou.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.75
1+
FROM rust:1.76
22

33
ADD ./ /xitca-web
44
WORKDIR /xitca-web

frameworks/Rust/xitca-web/xitca-web-sync.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.75
1+
FROM rust:1.76
22

33
ADD ./ /xitca-web
44
WORKDIR /xitca-web

frameworks/Rust/xitca-web/xitca-web-wasm.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
ARG WASMTIME_VERSION=15.0.0
22
ARG WASM_TARGET=wasm32-wasi-preview1-threads
33

4-
FROM rust:1.75 AS compile
4+
FROM rust:1.76 AS compile
55

66
ARG WASMTIME_VERSION
77
ARG WASM_TARGET

frameworks/Rust/xitca-web/xitca-web.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM rust:1.75
1+
FROM rust:1.76
22

33
ADD ./ /xitca-web
44
WORKDIR /xitca-web

0 commit comments

Comments
 (0)