Skip to content

Commit 6d6af5a

Browse files
committed
fix(api): fix query serialization for remote req
1 parent 2b1bc3d commit 6d6af5a

File tree

7 files changed

+27
-15
lines changed

7 files changed

+27
-15
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ rstest = "0.26.1"
5959
rustls-pemfile = "2.2.0"
6060
rustyline = "15.0.0"
6161
serde_bare = "0.5.0"
62+
serde_html_form = "0.2.7"
6263
serde_yaml = "0.9.34"
6364
sha2 = "0.10"
6465
slog = "2.7"

docker/template/src/docker-compose.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,6 @@ export function generateDockerCompose(context: TemplateContext) {
320320
restart: "unless-stopped",
321321
environment: [
322322
`RIVET_ENDPOINT=http://${context.getServiceHost("rivet-engine", datacenter.name, 0)}:6420`,
323-
`RUNNER_HOST=${context.getServiceHost("runner", datacenter.name, i)}`,
324323
],
325324
stop_grace_period: "4s",
326325
ports: isPrimary && i === 0 ? [`5050:5050`] : undefined,

packages/common/api-builder/src/error_response.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ impl IntoResponse for ApiError {
5454
internal: if error_response.group == rivet_error::INTERNAL_ERROR.group
5555
&& error_response.code == rivet_error::INTERNAL_ERROR.code
5656
{
57+
tracing::debug!(err=?self.0, "internal debug error");
5758
Some(format!("{}", self.0).into())
5859
} else {
5960
None

packages/common/api-client/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ rivet-config.workspace = true
1616
rivet-error.workspace = true
1717
rivet-pools.workspace = true
1818
rivet-util.workspace = true
19+
serde_html_form.workspace = true
1920
serde.workspace = true
2021
tokio.workspace = true
2122
tracing.workspace = true

packages/common/api-client/src/lib.rs

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,26 @@ pub async fn request_remote_datacenter_raw(
2525
.ok_or_else(|| errors::Datacenter::NotFound.build())?;
2626

2727
let client = rivet_pools::reqwest::client().await?;
28-
let url = dc.api_peer_url.join(endpoint)?;
29-
30-
let mut request = client.request(method, url).headers(headers);
28+
let mut url = dc.api_peer_url.join(endpoint)?;
3129

30+
// NOTE: We don't use reqwest's `.query` because it doesn't support list query parameters
3231
if let Some(q) = query {
33-
request = request.query(q);
32+
url.set_query(Some(&serde_html_form::to_string(q)?));
3433
}
3534

35+
let mut request = client.request(method, url).headers(headers);
36+
3637
if let Some(b) = body {
3738
request = request.json(b);
3839
}
3940

40-
let res = request.send().await?;
41-
rivet_api_util::reqwest_to_axum_response(res).await
41+
let res = request
42+
.send()
43+
.await
44+
.context("failed sending request to remote dc")?;
45+
rivet_api_util::reqwest_to_axum_response(res)
46+
.await
47+
.context("failed parsing response from remote dc")
4248
}
4349

4450
/// Generic function to make requests to a specific datacenter
@@ -59,20 +65,26 @@ where
5965
.ok_or_else(|| errors::Datacenter::NotFound.build())?;
6066

6167
let client = rivet_pools::reqwest::client().await?;
62-
let url = dc.api_peer_url.join(endpoint)?;
63-
64-
let mut request = client.request(method, url).headers(headers);
68+
let mut url = dc.api_peer_url.join(endpoint)?;
6569

70+
// NOTE: We don't use reqwest's `.query` because it doesn't support list query parameters
6671
if let Some(q) = query {
67-
request = request.query(q);
72+
url.set_query(Some(&serde_html_form::to_string(q)?));
6873
}
6974

75+
let mut request = client.request(method, url).headers(headers);
76+
7077
if let Some(b) = body {
7178
request = request.json(b);
7279
}
7380

74-
let res = request.send().await?;
75-
rivet_api_util::parse_response::<T>(res).await
81+
let res = request
82+
.send()
83+
.await
84+
.context("failed sending request to remote dc")?;
85+
rivet_api_util::parse_response::<T>(res)
86+
.await
87+
.context("failed parsing response from remote dc")
7688
}
7789

7890
/// Generic function to fanout requests to all datacenters and aggregate results

packages/common/types/src/datacenters.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,4 @@ use utoipa::ToSchema;
66
pub struct Datacenter {
77
pub datacenter_label: u16,
88
pub name: String,
9-
pub url: String,
109
}

packages/core/api-public/src/datacenters.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ pub async fn list(ctx: ApiCtx, _path: (), _query: ()) -> Result<ListResponse> {
2121
.map(|dc| Datacenter {
2222
datacenter_label: dc.datacenter_label,
2323
name: dc.name.clone(),
24-
url: dc.guard_url.to_string(),
2524
})
2625
.collect(),
2726
pagination: Pagination { cursor: None },

0 commit comments

Comments
 (0)