@@ -52,9 +52,9 @@ pub use crate::protocol::mux::{
52
52
#[ macro_export]
53
53
macro_rules! println_ {
54
54
( $( $t: expr) ,* ) => {
55
- print!( "{}:{} " , file!( ) , line!( ) ) ;
56
- println!( $( $t) ,* )
57
- // $(let _ = &$t;)*
55
+ // print!("{}:{} ", file!(), line!());
56
+ // println!($($t),*)
57
+ $( let _ = & $t; ) *
58
58
} ;
59
59
}
60
60
fn debug_kawa ( _kawa : & GenericHttpStream ) {
@@ -737,7 +737,7 @@ impl Stream {
737
737
tags,
738
738
client_rtt: None , //socket_rtt(self.front_socket()),
739
739
server_rtt: None , //self.backend_socket.as_ref().and_then(socket_rtt),
740
- service_time: Duration :: from_secs( 0 ) , // self.metrics.service_time(),
740
+ service_time: self . metrics . backend_connection_time ( ) . unwrap_or ( Duration :: from_secs( 0 ) ) , // self.metrics.service_time(),
741
741
response_time: self . metrics. response_time( ) ,
742
742
bytes_in: self . metrics. bin,
743
743
bytes_out: self . metrics. bout,
@@ -770,6 +770,13 @@ impl<L: ListenerHandler + L7ListenerHandler> Context<L> {
770
770
}
771
771
}
772
772
773
+ pub fn active_len ( & self ) -> usize {
774
+ self . streams
775
+ . iter ( )
776
+ . filter ( |s| !matches ! ( s. state, StreamState :: Recycle ) )
777
+ . count ( )
778
+ }
779
+
773
780
pub fn create_stream ( & mut self , request_id : Ulid , window : u32 ) -> Option < GlobalStreamId > {
774
781
let listener = self . listener . borrow ( ) ;
775
782
let http_context = HttpContext :: new (
@@ -784,12 +791,15 @@ impl<L: ListenerHandler + L7ListenerHandler> Context<L> {
784
791
println_ ! ( "Reuse stream: {stream_id}" ) ;
785
792
stream. state = StreamState :: Idle ;
786
793
stream. attempts = 0 ;
794
+ stream. received_end_of_stream = false ;
787
795
stream. window = window as i32 ;
788
796
stream. context = http_context;
789
797
stream. back . clear ( ) ;
790
798
stream. back . storage . clear ( ) ;
791
799
stream. front . clear ( ) ;
792
800
stream. front . storage . clear ( ) ;
801
+ stream. metrics . reset ( ) ;
802
+ stream. metrics . start = Some ( Instant :: now ( ) ) ;
793
803
return Some ( stream_id) ;
794
804
}
795
805
}
@@ -919,8 +929,8 @@ impl Router {
919
929
920
930
let token = if let Some ( token) = reuse_token {
921
931
println_ ! ( "reused backend: {:#?}" , self . backends. get( & token) . unwrap( ) ) ;
922
- stream. metrics . backend_start ( ) ;
923
- stream. metrics . backend_connected ( ) ;
932
+ // stream.metrics.backend_start();
933
+ // stream.metrics.backend_connected();
924
934
token
925
935
} else {
926
936
let ( mut socket, backend) = self . backend_from_request (
@@ -995,7 +1005,7 @@ impl Router {
995
1005
Err ( cluster_error) => {
996
1006
// we are past kawa parsing if it succeeded this can't fail
997
1007
// if the request was malformed it was caught by kawa and we sent a 400
998
- panic ! ( "{cluster_error}" ) ;
1008
+ unreachable ! ( "{cluster_error}" ) ;
999
1009
}
1000
1010
} ;
1001
1011
@@ -1004,7 +1014,7 @@ impl Router {
1004
1014
let route = match route_result {
1005
1015
Ok ( route) => route,
1006
1016
Err ( frontend_error) => {
1007
- println ! ( "{}" , frontend_error) ;
1017
+ println_ ! ( "{}" , frontend_error) ;
1008
1018
// self.set_answer(DefaultAnswerStatus::Answer404, None);
1009
1019
return Err ( RetrieveClusterError :: RetrieveFrontend ( frontend_error) ) ;
1010
1020
}
@@ -1013,7 +1023,7 @@ impl Router {
1013
1023
let cluster_id = match route {
1014
1024
Route :: Cluster ( id) => id,
1015
1025
Route :: Deny => {
1016
- println ! ( "Route::Deny" ) ;
1026
+ println_ ! ( "Route::Deny" ) ;
1017
1027
// self.set_answer(DefaultAnswerStatus::Answer401, None);
1018
1028
return Err ( RetrieveClusterError :: UnauthorizedRoute ) ;
1019
1029
}
@@ -1038,7 +1048,7 @@ impl Router {
1038
1048
proxy,
1039
1049
)
1040
1050
. map_err ( |backend_error| {
1041
- println ! ( "{backend_error}" ) ;
1051
+ println_ ! ( "{backend_error}" ) ;
1042
1052
// self.set_answer(DefaultAnswerStatus::Answer503, None);
1043
1053
BackendConnectionError :: Backend ( backend_error)
1044
1054
} ) ?;
@@ -1135,7 +1145,6 @@ impl<Front: SocketHandler + std::fmt::Debug, L: ListenerHandler + L7ListenerHand
1135
1145
let mut dead_backends = Vec :: new ( ) ;
1136
1146
for ( token, client) in self . router . backends . iter_mut ( ) {
1137
1147
let readiness = client. readiness_mut ( ) ;
1138
- // println!("{token:?} -> {readiness:?}");
1139
1148
let dead = readiness. filter_interest ( ) . is_hup ( )
1140
1149
|| readiness. filter_interest ( ) . is_error ( ) ;
1141
1150
if dead {
@@ -1292,8 +1301,6 @@ impl<Front: SocketHandler + std::fmt::Debug, L: ListenerHandler + L7ListenerHand
1292
1301
}
1293
1302
if !proxy_borrow. remove_session ( * token) {
1294
1303
error ! ( "session {:?} was already removed!" , token) ;
1295
- } else {
1296
- // println!("SUCCESS: session {token:?} was removed!");
1297
1304
}
1298
1305
}
1299
1306
println_ ! ( "FRONTEND: {:#?}" , self . frontend) ;
@@ -1384,7 +1391,7 @@ impl<Front: SocketHandler + std::fmt::Debug, L: ListenerHandler + L7ListenerHand
1384
1391
}
1385
1392
1386
1393
fn update_readiness ( & mut self , token : Token , events : Ready ) {
1387
- println ! ( "EVENTS: {events:?} on {token:?}" ) ;
1394
+ println_ ! ( "EVENTS: {events:?} on {token:?}" ) ;
1388
1395
if token == self . frontend_token {
1389
1396
self . frontend . readiness_mut ( ) . event |= events;
1390
1397
} else if let Some ( c) = self . router . backends . get_mut ( & token) {
@@ -1451,7 +1458,7 @@ impl<Front: SocketHandler + std::fmt::Debug, L: ListenerHandler + L7ListenerHand
1451
1458
if token == back_token {
1452
1459
// This stream is linked to the backend that timedout
1453
1460
if stream. back . is_terminated ( ) || stream. back . is_error ( ) {
1454
- println ! (
1461
+ println_ ! (
1455
1462
"Stream terminated or in error, do nothing, just wait a bit more"
1456
1463
) ;
1457
1464
// Nothing to do, simply wait for the remaining bytes to be proxied
@@ -1460,11 +1467,13 @@ impl<Front: SocketHandler + std::fmt::Debug, L: ListenerHandler + L7ListenerHand
1460
1467
}
1461
1468
} else if !stream. back . consumed {
1462
1469
// The response has not started yet
1463
- println ! ( "Stream still waiting for response, send 504" ) ;
1470
+ println_ ! ( "Stream still waiting for response, send 504" ) ;
1464
1471
set_default_answer ( stream, front_readiness, 504 ) ;
1465
1472
should_write = true ;
1466
1473
} else {
1467
- println ! ( "Stream waiting for end of response, forcefully terminate it" ) ;
1474
+ println_ ! (
1475
+ "Stream waiting for end of response, forcefully terminate it"
1476
+ ) ;
1468
1477
forcefully_terminate_answer (
1469
1478
stream,
1470
1479
front_readiness,
@@ -1527,6 +1536,7 @@ impl<Front: SocketHandler + std::fmt::Debug, L: ListenerHandler + L7ListenerHand
1527
1536
}
1528
1537
1529
1538
fn close < P : L7Proxy > ( & mut self , proxy : Rc < RefCell < P > > , _metrics : & mut SessionMetrics ) {
1539
+ println ! ( "MUX CLOSE" ) ;
1530
1540
println_ ! ( "FRONTEND: {:#?}" , self . frontend) ;
1531
1541
println_ ! ( "BACKENDS: {:#?}" , self . router. backends) ;
1532
1542
@@ -1544,8 +1554,6 @@ impl<Front: SocketHandler + std::fmt::Debug, L: ListenerHandler + L7ListenerHand
1544
1554
}
1545
1555
if !proxy_borrow. remove_session ( * token) {
1546
1556
error ! ( "session {:?} was already removed!" , token) ;
1547
- } else {
1548
- // println!("SUCCESS: session {token:?} was removed!");
1549
1557
}
1550
1558
1551
1559
match client. position ( ) {
@@ -1573,6 +1581,7 @@ impl<Front: SocketHandler + std::fmt::Debug, L: ListenerHandler + L7ListenerHand
1573
1581
Position :: Server => unreachable ! ( ) ,
1574
1582
}
1575
1583
}
1584
+ return ;
1576
1585
let s = match & mut self . frontend {
1577
1586
Connection :: H1 ( c) => & mut c. socket ,
1578
1587
Connection :: H2 ( c) => & mut c. socket ,
0 commit comments