@@ -2,17 +2,18 @@ use std::{future::Future, sync::Arc, time::Duration};
22
33use rand:: Rng ;
44use reqwest:: Client ;
5+ use rivet_api:: models:: { ProvisionDatacentersGetServersResponse , ProvisionServer } ;
56use tokio:: {
67 sync:: { Mutex , RwLock } ,
78 task:: JoinHandle ,
89} ;
910use url:: Url ;
10- use rivet_api:: models:: { ProvisionServer , ProvisionDatacentersGetServersResponse } ;
1111
1212pub struct ServiceDiscovery {
1313 fetch_endpoint : Url ,
1414 last : RwLock < Vec < ProvisionServer > > ,
1515 handle : Mutex < Option < JoinHandle < ( ) > > > ,
16+ client : Client ,
1617}
1718
1819impl ServiceDiscovery {
@@ -21,6 +22,7 @@ impl ServiceDiscovery {
2122 fetch_endpoint,
2223 last : RwLock :: new ( Vec :: new ( ) ) ,
2324 handle : Mutex :: new ( None ) ,
25+ client : Client :: new ( ) ,
2426 } )
2527 }
2628
@@ -36,10 +38,8 @@ impl ServiceDiscovery {
3638
3739 let self2 = self . clone ( ) ;
3840 * guard = Some ( tokio:: task:: spawn ( async move {
39- let client = Client :: new ( ) ;
40-
4141 loop {
42- let res = match self2. fetch_inner ( & client ) . await {
42+ let res = match self2. fetch_inner ( ) . await {
4343 Ok ( res) => res,
4444 Err ( err) => {
4545 tracing:: error!( ?err, "fetch service discovery failed" ) ;
@@ -70,12 +70,12 @@ impl ServiceDiscovery {
7070
7171 /// Manually fetches the endpoint.
7272 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 )
7574 }
7675
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
7979 . get ( self . fetch_endpoint . clone ( ) )
8080 . send ( )
8181 . await ?
0 commit comments