@@ -53,16 +53,17 @@ impl Config {
5353 B :: Error : Into < Error > + Send + Sync ,
5454 I : Clone + tls:: client:: HasConfig + Send + ' static ,
5555 {
56+ let backoff = {
57+ let backoff = self . connect . backoff ;
58+ move |_| Ok ( backoff. stream ( ) )
59+ } ;
5660 svc:: connect ( self . connect . keepalive )
5761 . push ( tls:: ConnectLayer :: new ( identity) )
5862 . push_timeout ( self . connect . timeout )
5963 . push ( self :: client:: layer ( ) )
60- . push ( reconnect:: layer ( {
61- let backoff = self . connect . backoff ;
62- move |_| Ok ( backoff. stream ( ) )
63- } ) )
64+ . push ( reconnect:: layer ( backoff. clone ( ) ) )
6465 . push_spawn_ready ( )
65- . push ( self :: resolve:: layer ( dns) )
66+ . push ( self :: resolve:: layer ( dns, backoff ) )
6667 . push_on_response ( self :: control:: balance:: layer ( ) )
6768 . push ( metrics. into_layer :: < classify:: Response > ( ) )
6869 . push ( self :: add_origin:: Layer :: new ( ) )
@@ -209,26 +210,38 @@ mod resolve {
209210 use super :: client:: Target ;
210211 use crate :: {
211212 dns,
212- proxy:: { discover, dns_resolve:: DnsResolve , resolve:: map_endpoint} ,
213+ proxy:: {
214+ discover,
215+ dns_resolve:: DnsResolve ,
216+ resolve:: { map_endpoint, recover} ,
217+ } ,
213218 svc,
214219 } ;
220+ use linkerd2_error:: Recover ;
215221 use std:: net:: SocketAddr ;
216222
217- pub fn layer < M > (
223+ pub fn layer < M , R > (
218224 dns : dns:: Resolver ,
219- ) -> impl svc:: Layer <
220- M ,
221- Service = discover:: MakeEndpoint <
222- discover:: FromResolve < map_endpoint:: Resolve < IntoTarget , DnsResolve > , Target > ,
223- M ,
224- > ,
225- > {
225+ recover : R ,
226+ ) -> impl svc:: Layer < M , Service = Discover < M , R > >
227+ where
228+ R : Recover + Clone ,
229+ R :: Backoff : Unpin ,
230+ {
226231 discover:: resolve ( map_endpoint:: Resolve :: new (
227232 IntoTarget ( ( ) ) ,
228- DnsResolve :: new ( dns) ,
233+ recover :: Resolve :: new ( recover , DnsResolve :: new ( dns) ) ,
229234 ) )
230235 }
231236
237+ type Discover < M , R > = discover:: MakeEndpoint <
238+ discover:: FromResolve <
239+ map_endpoint:: Resolve < IntoTarget , recover:: Resolve < R , DnsResolve > > ,
240+ Target ,
241+ > ,
242+ M ,
243+ > ;
244+
232245 #[ derive( Copy , Clone , Debug ) ]
233246 pub struct IntoTarget ( ( ) ) ;
234247
0 commit comments