@@ -13,7 +13,6 @@ use hyper_util::client::legacy::connect::{Connect, HttpConnector};
13
13
use hyper_util:: client:: legacy:: Client ;
14
14
use hyper_util:: rt:: TokioExecutor ;
15
15
use pin_project:: pin_project;
16
- use smol_str:: { SmolStr , ToSmolStr } ;
17
16
use tokio:: net:: TcpStream ;
18
17
use tower_service:: Service ;
19
18
use tracing:: { debug, trace, warn} ;
@@ -24,7 +23,7 @@ use reactor::gcore::fastedge::{
24
23
http_client:: Host ,
25
24
} ;
26
25
27
- type HeaderNameList = Vec < SmolStr > ;
26
+ type HeaderNameList = Vec < HeaderName > ;
28
27
29
28
#[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
30
29
pub enum BackendStrategy {
@@ -112,8 +111,8 @@ impl<C> Backend<C> {
112
111
self . uri . to_owned ( )
113
112
}
114
113
115
- pub fn propagate_header_names ( & self ) -> Vec < SmolStr > {
116
- self . propagate_header_names . to_owned ( )
114
+ pub fn propagate_header_names ( & self ) -> HeaderNameList {
115
+ self . propagate_header_names . clone ( )
117
116
}
118
117
119
118
/// Propagate filtered headers from original requests
@@ -132,7 +131,7 @@ impl<C> Backend<C> {
132
131
}
133
132
let headers = headers. into_iter ( ) . filter ( |( k, _) | {
134
133
if let Some ( name) = k {
135
- self . propagate_header_names . contains ( & name. to_smolstr ( ) )
134
+ self . propagate_header_names . contains ( name)
136
135
} else {
137
136
false
138
137
}
@@ -227,7 +226,7 @@ impl<C> Backend<C> {
227
226
!self
228
227
. propagate_header_names
229
228
. iter ( )
230
- . any ( |name| name. eq_ignore_ascii_case ( k ) )
229
+ . any ( |name| name. eq ( k . as_str ( ) ) )
231
230
} )
232
231
. collect :: < Vec < ( String , String ) > > ( ) ;
233
232
@@ -279,14 +278,14 @@ where
279
278
self . max_sub_requests -= 1 ;
280
279
}
281
280
282
- let request = self
283
- . make_request ( req )
284
- . map_err ( |_| HttpError :: RequestError ) ? ;
285
- let res = self
286
- . client
287
- . request ( request)
288
- . await
289
- . map_err ( |_| HttpError :: RequestError ) ?;
281
+ let request = self . make_request ( req ) . map_err ( |error| {
282
+ warn ! ( cause=?error , "making request to backend" ) ;
283
+ HttpError :: RequestError
284
+ } ) ? ;
285
+ let res = self . client . request ( request ) . await . map_err ( |error| {
286
+ warn ! ( cause=?error , "sending request to backend" ) ;
287
+ HttpError :: RequestError
288
+ } ) ?;
290
289
291
290
let status = res. status ( ) . as_u16 ( ) ;
292
291
let ( parts, body) = res. into_parts ( ) ;
@@ -311,7 +310,10 @@ where
311
310
let body_bytes = body
312
311
. collect ( )
313
312
. await
314
- . map_err ( |_| HttpError :: RequestError ) ?
313
+ . map_err ( |error| {
314
+ warn ! ( cause=?error, "receiving body from backend" ) ;
315
+ HttpError :: RequestError
316
+ } ) ?
315
317
. to_bytes ( ) ;
316
318
let body = Some ( body_bytes. to_vec ( ) ) ;
317
319
@@ -494,15 +496,14 @@ mod tests {
494
496
. build ( connector) ;
495
497
let mut headers = HeaderMap :: new ( ) ;
496
498
headers. insert ( "Server_name" , claims:: assert_ok!( "server" . try_into( ) ) ) ;
497
- claims:: assert_ok!( backend. propagate_headers( & headers) ) ;
499
+ claims:: assert_ok!( backend. propagate_headers( headers) ) ;
498
500
let req = Request {
499
501
method : Method :: Get ,
500
502
uri : "http://example.com/path" . to_string ( ) ,
501
503
headers : vec ! [ ( "header01" . to_string( ) , "01" . to_string( ) ) ] ,
502
504
body : None ,
503
505
} ;
504
506
let res = claims:: assert_ok!( backend. send_request( req) . await ) ;
505
- let res = claims:: assert_ok!( res) ;
506
507
assert_eq ! ( http:: StatusCode :: OK , res. status) ;
507
508
}
508
509
@@ -527,15 +528,14 @@ mod tests {
527
528
. build ( connector) ;
528
529
let mut headers = HeaderMap :: new ( ) ;
529
530
headers. insert ( "Server_name" , claims:: assert_ok!( "server" . try_into( ) ) ) ;
530
- claims:: assert_ok!( backend. propagate_headers( & headers) ) ;
531
+ claims:: assert_ok!( backend. propagate_headers( headers) ) ;
531
532
let req = Request {
532
533
method : Method :: Get ,
533
534
uri : "http://example.com/path" . to_string ( ) ,
534
535
headers : vec ! [ ( "header01" . to_string( ) , "01" . to_string( ) ) ] ,
535
536
body : None ,
536
537
} ;
537
538
let res = claims:: assert_ok!( backend. send_request( req) . await ) ;
538
- let res = claims:: assert_ok!( res) ;
539
539
assert_eq ! ( http:: StatusCode :: REQUEST_TIMEOUT , res. status) ;
540
540
}
541
541
@@ -560,7 +560,7 @@ mod tests {
560
560
. build ( connector) ;
561
561
let mut headers = HeaderMap :: new ( ) ;
562
562
headers. insert ( "Server_name" , claims:: assert_ok!( "server" . try_into( ) ) ) ;
563
- claims:: assert_ok!( backend. propagate_headers( & headers) ) ;
563
+ claims:: assert_ok!( backend. propagate_headers( headers) ) ;
564
564
let req = Request {
565
565
method : Method :: Get ,
566
566
uri : "/path" . to_string ( ) ,
@@ -571,7 +571,6 @@ mod tests {
571
571
body : None ,
572
572
} ;
573
573
let res = claims:: assert_ok!( backend. send_request( req) . await ) ;
574
- let res = claims:: assert_ok!( res) ;
575
574
assert_eq ! ( http:: StatusCode :: OK , res. status) ;
576
575
}
577
576
@@ -599,7 +598,6 @@ mod tests {
599
598
body : None ,
600
599
} ;
601
600
let res = claims:: assert_ok!( backend. send_request( req) . await ) ;
602
- let res = claims:: assert_ok!( res) ;
603
601
assert_eq ! ( http:: StatusCode :: OK , res. status) ;
604
602
}
605
603
@@ -623,7 +621,7 @@ mod tests {
623
621
. build ( connector) ;
624
622
let mut headers = HeaderMap :: new ( ) ;
625
623
headers. insert ( "Server_name" , claims:: assert_ok!( "server" . try_into( ) ) ) ;
626
- claims:: assert_ok!( backend. propagate_headers( & headers) ) ;
624
+ claims:: assert_ok!( backend. propagate_headers( headers) ) ;
627
625
let req = Request {
628
626
method : Method :: Get ,
629
627
uri : "http://rust-lang.org" . to_string ( ) ,
@@ -638,7 +636,6 @@ mod tests {
638
636
body : None ,
639
637
} ;
640
638
let res = claims:: assert_ok!( backend. send_request( req) . await ) ;
641
- let res = claims:: assert_ok!( res) ;
642
639
assert_eq ! ( http:: StatusCode :: OK , res. status) ;
643
640
}
644
641
@@ -661,7 +658,7 @@ mod tests {
661
658
let connector = builder. build ( ) ;
662
659
let mut backend =
663
660
Backend :: < mock_http_connector:: Connector > :: builder ( BackendStrategy :: FastEdge )
664
- . propagate_headers_names ( vec ! [ "Propagate-Header" . to_string ( ) ] )
661
+ . propagate_headers_names ( vec ! [ "Propagate-Header" . parse ( ) . unwrap ( ) ] )
665
662
. build ( connector) ;
666
663
let mut headers = HeaderMap :: new ( ) ;
667
664
headers. insert ( "Server_name" , claims:: assert_ok!( "server" . try_into( ) ) ) ;
@@ -670,15 +667,14 @@ mod tests {
670
667
claims:: assert_ok!( "VALUE" . try_into( ) ) ,
671
668
) ;
672
669
headers. insert ( "Propagate-Header" , claims:: assert_ok!( "VALUE" . try_into( ) ) ) ;
673
- claims:: assert_ok!( backend. propagate_headers( & headers) ) ;
670
+ claims:: assert_ok!( backend. propagate_headers( headers) ) ;
674
671
let req = Request {
675
672
method : Method :: Get ,
676
673
uri : "http://example.com" . to_string ( ) ,
677
674
headers : vec ! [ ( "header01" . to_string( ) , "01" . to_string( ) ) ] ,
678
675
body : None ,
679
676
} ;
680
677
let res = claims:: assert_ok!( backend. send_request( req) . await ) ;
681
- let res = claims:: assert_ok!( res) ;
682
678
assert_eq ! ( http:: StatusCode :: OK , res. status) ;
683
679
}
684
680
@@ -700,21 +696,20 @@ mod tests {
700
696
let connector = builder. build ( ) ;
701
697
let mut backend =
702
698
Backend :: < mock_http_connector:: Connector > :: builder ( BackendStrategy :: FastEdge )
703
- . propagate_headers_names ( vec ! [ "Propagate-Header" . to_string ( ) ] )
699
+ . propagate_headers_names ( vec ! [ "Propagate-Header" . parse ( ) . unwrap ( ) ] )
704
700
. uri ( assert_ok ! ( "http://be.server/backend_path/" . parse( ) ) )
705
701
. build ( connector) ;
706
702
let mut headers = HeaderMap :: new ( ) ;
707
703
headers. insert ( "Server_name" , claims:: assert_ok!( "server" . try_into( ) ) ) ;
708
704
709
- claims:: assert_ok!( backend. propagate_headers( & headers) ) ;
705
+ claims:: assert_ok!( backend. propagate_headers( headers) ) ;
710
706
let req = Request {
711
707
method : Method :: Get ,
712
708
uri : "http://example.com/path/" . to_string ( ) ,
713
709
headers : vec ! [ ( "header01" . to_string( ) , "01" . to_string( ) ) ] ,
714
710
body : None ,
715
711
} ;
716
712
let res = claims:: assert_ok!( backend. send_request( req) . await ) ;
717
- let res = claims:: assert_ok!( res) ;
718
713
assert_eq ! ( http:: StatusCode :: OK , res. status) ;
719
714
}
720
715
@@ -736,29 +731,26 @@ mod tests {
736
731
let connector = builder. build ( ) ;
737
732
let mut backend =
738
733
Backend :: < mock_http_connector:: Connector > :: builder ( BackendStrategy :: FastEdge )
739
- . propagate_headers_names ( vec ! [ "Propagate-Header" . to_string ( ) ] )
734
+ . propagate_headers_names ( vec ! [ "Propagate-Header" . parse ( ) . unwrap ( ) ] )
740
735
. max_sub_requests ( 2 )
741
736
. build ( connector) ;
742
737
let mut headers = HeaderMap :: new ( ) ;
743
738
headers. insert ( "Server_name" , claims:: assert_ok!( "server" . try_into( ) ) ) ;
744
739
745
- claims:: assert_ok!( backend. propagate_headers( & headers) ) ;
740
+ claims:: assert_ok!( backend. propagate_headers( headers) ) ;
746
741
let req = Request {
747
742
method : Method :: Get ,
748
743
uri : "http://example.com/" . to_string ( ) ,
749
744
headers : vec ! [ ( "header01" . to_string( ) , "01" . to_string( ) ) ] ,
750
745
body : None ,
751
746
} ;
752
747
let res = claims:: assert_ok!( backend. send_request( req. clone( ) ) . await ) ;
753
- let res = claims:: assert_ok!( res) ;
754
748
assert_eq ! ( http:: StatusCode :: OK , res. status) ;
755
749
756
750
let res = claims:: assert_ok!( backend. send_request( req. clone( ) ) . await ) ;
757
- let res = claims:: assert_ok!( res) ;
758
751
assert_eq ! ( http:: StatusCode :: OK , res. status) ;
759
752
760
- let res = claims:: assert_ok!( backend. send_request( req) . await ) ;
761
- let res = claims:: assert_err!( res) ;
762
- assert_eq ! ( "too-many-requests" , res. name( ) ) ;
753
+ let error = claims:: assert_err!( backend. send_request( req) . await ) ;
754
+ assert_eq ! ( "too-many-requests" , error. name( ) ) ;
763
755
}
764
756
}
0 commit comments