@@ -2,17 +2,18 @@ use std::{future::Future, sync::Arc, time::Duration};
2
2
3
3
use rand:: Rng ;
4
4
use reqwest:: Client ;
5
+ use rivet_api:: models:: { ProvisionDatacentersGetServersResponse , ProvisionServer } ;
5
6
use tokio:: {
6
7
sync:: { Mutex , RwLock } ,
7
8
task:: JoinHandle ,
8
9
} ;
9
10
use url:: Url ;
10
- use rivet_api:: models:: { ProvisionServer , ProvisionDatacentersGetServersResponse } ;
11
11
12
12
pub struct ServiceDiscovery {
13
13
fetch_endpoint : Url ,
14
14
last : RwLock < Vec < ProvisionServer > > ,
15
15
handle : Mutex < Option < JoinHandle < ( ) > > > ,
16
+ client : Client ,
16
17
}
17
18
18
19
impl ServiceDiscovery {
@@ -21,6 +22,7 @@ impl ServiceDiscovery {
21
22
fetch_endpoint,
22
23
last : RwLock :: new ( Vec :: new ( ) ) ,
23
24
handle : Mutex :: new ( None ) ,
25
+ client : Client :: new ( ) ,
24
26
} )
25
27
}
26
28
@@ -36,10 +38,8 @@ impl ServiceDiscovery {
36
38
37
39
let self2 = self . clone ( ) ;
38
40
* guard = Some ( tokio:: task:: spawn ( async move {
39
- let client = Client :: new ( ) ;
40
-
41
41
loop {
42
- let res = match self2. fetch_inner ( & client ) . await {
42
+ let res = match self2. fetch_inner ( ) . await {
43
43
Ok ( res) => res,
44
44
Err ( err) => {
45
45
tracing:: error!( ?err, "fetch service discovery failed" ) ;
@@ -70,12 +70,12 @@ impl ServiceDiscovery {
70
70
71
71
/// Manually fetches the endpoint.
72
72
pub async fn fetch ( & self ) -> Result < Vec < ProvisionServer > , reqwest:: Error > {
73
- let client = Client :: new ( ) ;
74
- Ok ( self . fetch_inner ( & client) . await ?. servers )
73
+ Ok ( self . fetch_inner ( ) . await ?. servers )
75
74
}
76
75
77
- async fn fetch_inner ( & self , client : & Client ) -> Result < ProvisionDatacentersGetServersResponse , reqwest:: Error > {
78
- Ok ( client
76
+ async fn fetch_inner ( & self ) -> Result < ProvisionDatacentersGetServersResponse , reqwest:: Error > {
77
+ Ok ( self
78
+ . client
79
79
. get ( self . fetch_endpoint . clone ( ) )
80
80
. send ( )
81
81
. await ?
0 commit comments