@@ -296,12 +296,8 @@ pub enum SessionError {
296
296
SessionServiceTerminated ,
297
297
#[ error( "Invalid event id" ) ]
298
298
InvalidEventId ,
299
- #[ error( "Transport closed" ) ]
300
- TransportClosed ,
301
299
#[ error( "IO error: {0}" ) ]
302
300
Io ( #[ from] std:: io:: Error ) ,
303
- #[ error( "Tokio join error {0}" ) ]
304
- TokioJoinError ( #[ from] tokio:: task:: JoinError ) ,
305
301
}
306
302
307
303
impl From < SessionError > for std:: io:: Error {
@@ -696,24 +692,30 @@ impl LocalSessionHandle {
696
692
pub type SessionTransport = WorkerTransport < LocalSessionWorker > ;
697
693
698
694
#[ derive( Debug , Error ) ]
699
- pub enum LocalSessionError {
695
+ pub enum LocalSessionWorkerError {
700
696
#[ error( "transport terminated" ) ]
701
697
TransportTerminated ,
702
698
#[ error( "unexpected message: {0:?}" ) ]
703
699
UnexpectedEvent ( SessionEvent ) ,
704
700
#[ error( "fail to send initialize request {0}" ) ]
705
701
FailToSendInitializeRequest ( SessionError ) ,
706
- #[ error( "keep alive timeout" ) ]
707
- KeepAliveTimeout ,
702
+ #[ error( "fail to handle message: {0}" ) ]
703
+ FailToHandleMessage ( SessionError ) ,
704
+ #[ error( "keep alive timeout after {}ms" , _0. as_millis( ) ) ]
705
+ KeepAliveTimeout ( Duration ) ,
706
+ #[ error( "Transport closed" ) ]
707
+ TransportClosed ,
708
+ #[ error( "Tokio join error {0}" ) ]
709
+ TokioJoinError ( #[ from] tokio:: task:: JoinError ) ,
708
710
}
709
711
impl Worker for LocalSessionWorker {
710
- type Error = SessionError ;
712
+ type Error = LocalSessionWorkerError ;
711
713
type Role = RoleServer ;
712
714
fn err_closed ( ) -> Self :: Error {
713
- SessionError :: TransportClosed
715
+ LocalSessionWorkerError :: TransportClosed
714
716
}
715
717
fn err_join ( e : tokio:: task:: JoinError ) -> Self :: Error {
716
- SessionError :: TokioJoinError ( e)
718
+ LocalSessionWorkerError :: TokioJoinError ( e)
717
719
}
718
720
fn config ( & self ) -> crate :: transport:: worker:: WorkerConfig {
719
721
crate :: transport:: worker:: WorkerConfig {
@@ -722,21 +724,24 @@ impl Worker for LocalSessionWorker {
722
724
}
723
725
}
724
726
#[ instrument( name = "streamable_http_session" , skip_all, fields( id = self . id. as_ref( ) ) ) ]
725
- async fn run ( mut self , mut context : WorkerContext < Self > ) -> Result < ( ) , WorkerQuitReason > {
727
+ async fn run (
728
+ mut self ,
729
+ mut context : WorkerContext < Self > ,
730
+ ) -> Result < ( ) , WorkerQuitReason < Self :: Error > > {
726
731
enum InnerEvent {
727
732
FromHttpService ( SessionEvent ) ,
728
733
FromHandler ( WorkerSendRequest < LocalSessionWorker > ) ,
729
734
}
730
735
// waiting for initialize request
731
736
let evt = self . event_rx . recv ( ) . await . ok_or_else ( || {
732
737
WorkerQuitReason :: fatal (
733
- LocalSessionError :: TransportTerminated ,
738
+ LocalSessionWorkerError :: TransportTerminated ,
734
739
"get initialize request" ,
735
740
)
736
741
} ) ?;
737
742
let SessionEvent :: InitializeRequest { request, responder } = evt else {
738
743
return Err ( WorkerQuitReason :: fatal (
739
- LocalSessionError :: UnexpectedEvent ( evt) ,
744
+ LocalSessionWorkerError :: UnexpectedEvent ( evt) ,
740
745
"get initialize request" ,
741
746
) ) ;
742
747
} ;
@@ -746,7 +751,7 @@ impl Worker for LocalSessionWorker {
746
751
. send ( Ok ( send_initialize_response. message ) )
747
752
. map_err ( |_| {
748
753
WorkerQuitReason :: fatal (
749
- LocalSessionError :: FailToSendInitializeRequest (
754
+ LocalSessionWorkerError :: FailToSendInitializeRequest (
750
755
SessionError :: SessionServiceTerminated ,
751
756
) ,
752
757
"send initialize response" ,
@@ -765,7 +770,7 @@ impl Worker for LocalSessionWorker {
765
770
if let Some ( event) = event {
766
771
InnerEvent :: FromHttpService ( event)
767
772
} else {
768
- return Err ( WorkerQuitReason :: fatal( LocalSessionError :: TransportTerminated , "waiting next session event" ) )
773
+ return Err ( WorkerQuitReason :: fatal( LocalSessionWorkerError :: TransportTerminated , "waiting next session event" ) )
769
774
}
770
775
} ,
771
776
from_handler = context. recv_from_handler( ) => {
@@ -775,7 +780,7 @@ impl Worker for LocalSessionWorker {
775
780
return Err ( WorkerQuitReason :: Cancelled )
776
781
}
777
782
_ = keep_alive_timeout => {
778
- return Err ( WorkerQuitReason :: fatal( LocalSessionError :: KeepAliveTimeout , "poll next session event" ) )
783
+ return Err ( WorkerQuitReason :: fatal( LocalSessionWorkerError :: KeepAliveTimeout ( keep_alive ) , "poll next session event" ) )
779
784
}
780
785
} ;
781
786
match event {
@@ -795,7 +800,10 @@ impl Worker for LocalSessionWorker {
795
800
// no need to unregister resource
796
801
}
797
802
} ;
798
- let handle_result = self . handle_server_message ( message) . await ;
803
+ let handle_result = self
804
+ . handle_server_message ( message)
805
+ . await
806
+ . map_err ( LocalSessionWorkerError :: FailToHandleMessage ) ;
799
807
let _ = responder. send ( handle_result) . inspect_err ( |error| {
800
808
tracing:: warn!( ?error, "failed to send message to http service handler" ) ;
801
809
} ) ;
0 commit comments