Skip to content

Commit 7049027

Browse files
committed
fix(sdk): Use a short request retry for login/register/get_version methods
2 parents 48fff04 + 6bf7b21 commit 7049027

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

crates/matrix-sdk/src/client.rs

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -341,11 +341,7 @@ impl Client {
341341
/// # Result::<_, anyhow::Error>::Ok(()) });
342342
/// ```
343343
pub async fn get_supported_versions(&self) -> HttpResult<get_supported_versions::Response> {
344-
self.send(
345-
get_supported_versions::Request::new(),
346-
Some(RequestConfig::new().disable_retry()),
347-
)
348-
.await
344+
self.send(get_supported_versions::Request::new(), Some(RequestConfig::short_retry())).await
349345
}
350346

351347
/// Get the capabilities of the homeserver.
@@ -834,7 +830,7 @@ impl Client {
834830
initial_device_display_name,
835831
});
836832

837-
let response = self.send(request, None).await?;
833+
let response = self.send(request, Some(RequestConfig::short_retry())).await?;
838834
self.receive_login_response(&response).await?;
839835

840836
Ok(response)
@@ -1117,7 +1113,7 @@ impl Client {
11171113
}
11181114
);
11191115

1120-
let response = self.send(request, None).await?;
1116+
let response = self.send(request, Some(RequestConfig::short_retry())).await?;
11211117
self.receive_login_response(&response).await?;
11221118

11231119
Ok(response)
@@ -1249,7 +1245,7 @@ impl Client {
12491245
info!("Registering to {}", homeserver);
12501246

12511247
let config = if self.inner.appservice_mode {
1252-
Some(self.inner.http_client.request_config.force_auth())
1248+
Some(RequestConfig::short_retry().force_auth())
12531249
} else {
12541250
None
12551251
};
@@ -3631,13 +3627,12 @@ pub(crate) mod test {
36313627
}
36323628

36333629
#[async_test]
3634-
async fn no_retry_http_requests() {
3630+
async fn short_retry_initial_http_requests() {
36353631
let homeserver = Url::from_str(&mockito::server_url()).unwrap();
3636-
let config = ClientConfig::default().request_config(RequestConfig::new().disable_retry());
3637-
assert!(config.request_config.retry_limit.unwrap() == 0);
3638-
let client = Client::new_with_config(homeserver, config).await.unwrap();
3632+
let client = Client::new(homeserver).await.unwrap();
36393633

3640-
let m = mock("POST", "/_matrix/client/r0/login").with_status(501).create();
3634+
let m =
3635+
mock("POST", "/_matrix/client/r0/login").with_status(501).expect_at_least(3).create();
36413636

36423637
if client.login("example", "wordpass", None, None).await.is_err() {
36433638
m.assert();
@@ -3646,6 +3641,19 @@ pub(crate) mod test {
36463641
}
36473642
}
36483643

3644+
#[async_test]
3645+
async fn no_retry_http_requests() {
3646+
let client = logged_in_client().await;
3647+
3648+
let m = mock("GET", "/_matrix/client/r0/devices").with_status(501).create();
3649+
3650+
if client.devices().await.is_err() {
3651+
m.assert();
3652+
} else {
3653+
panic!("this request should return an `Err` variant")
3654+
}
3655+
}
3656+
36493657
#[async_test]
36503658
async fn get_media_content() {
36513659
let client = logged_in_client().await;

crates/matrix-sdk/src/config/request.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,13 @@ impl RequestConfig {
7777
Default::default()
7878
}
7979

80+
/// Create a new `RequestConfig` with default values, except the retry limit
81+
/// which is set to 3.
82+
#[must_use]
83+
pub fn short_retry() -> Self {
84+
Self::default().retry_limit(3)
85+
}
86+
8087
/// This is a convince method to disable the retries of a request. Setting
8188
/// the `retry_limit` to `0` has the same effect.
8289
#[must_use]

0 commit comments

Comments
 (0)