@@ -803,11 +803,15 @@ void TViewerPipeClient::RequestDone(ui32 requests) {
803
803
if (!DelayedRequests.empty ()) {
804
804
SendDelayedRequests ();
805
805
}
806
- if (Requests == 0 ) {
806
+ if (Requests == 0 && !PassedAway ) {
807
807
ReplyAndPassAway ();
808
808
}
809
809
}
810
810
811
+ void TViewerPipeClient::CancelAllRequests () {
812
+ DelayedRequests.clear ();
813
+ }
814
+
811
815
void TViewerPipeClient::Handle (TEvTabletPipe::TEvClientConnected::TPtr& ev) {
812
816
if (ev->Get ()->Status != NKikimrProto::OK) {
813
817
ui32 requests = FailPipeConnect (ev->Get ()->TabletId );
@@ -826,12 +830,14 @@ void TViewerPipeClient::HandleResolveResource(TEvTxProxySchemeCache::TEvNavigate
826
830
Bootstrap (); // retry bootstrap without redirect this time
827
831
} else {
828
832
DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup (SharedDatabase);
833
+ --Requests; // don't count this request
829
834
}
830
835
} else {
831
- return ReplyAndPassAway (GetHTTPBADREQUEST (" text/plain" , " Failed to resolve database - shared database not found" ));
836
+ AddEvent (" Failed to resolve database - shared database not found" );
837
+ Direct = true ;
838
+ Bootstrap (); // retry bootstrap without redirect this time
832
839
}
833
840
}
834
- RequestDone ();
835
841
}
836
842
837
843
void TViewerPipeClient::HandleResolveDatabase (TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev) {
@@ -841,15 +847,18 @@ void TViewerPipeClient::HandleResolveDatabase(TEvTxProxySchemeCache::TEvNavigate
841
847
TSchemeCacheNavigate::TEntry& entry (DatabaseNavigateResponse->Get ()->Request ->ResultSet .front ());
842
848
if (entry.DomainInfo && entry.DomainInfo ->ResourcesDomainKey && entry.DomainInfo ->DomainKey != entry.DomainInfo ->ResourcesDomainKey ) {
843
849
ResourceNavigateResponse = MakeRequestSchemeCacheNavigate (TPathId (entry.DomainInfo ->ResourcesDomainKey ));
850
+ --Requests; // don't count this request
844
851
Become (&TViewerPipeClient::StateResolveResource);
845
852
} else {
846
853
DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup (CanonizePath (entry.Path ));
854
+ --Requests; // don't count this request
847
855
}
848
856
} else {
849
- return ReplyAndPassAway (GetHTTPBADREQUEST (" text/plain" , " Failed to resolve database - not found" ));
857
+ AddEvent (" Failed to resolve database - not found" );
858
+ Direct = true ;
859
+ Bootstrap (); // retry bootstrap without redirect this time
850
860
}
851
861
}
852
- RequestDone ();
853
862
}
854
863
855
864
void TViewerPipeClient::HandleResolve (TEvStateStorage::TEvBoardInfo::TPtr& ev) {
@@ -858,11 +867,11 @@ void TViewerPipeClient::HandleResolve(TEvStateStorage::TEvBoardInfo::TPtr& ev) {
858
867
if (DatabaseBoardInfoResponse->IsOk ()) {
859
868
return ReplyAndPassAway (MakeForward (GetNodesFromBoardReply (DatabaseBoardInfoResponse->GetRef ())));
860
869
} else {
870
+ AddEvent (" Failed to resolve database nodes" );
861
871
Direct = true ;
862
872
Bootstrap (); // retry bootstrap without redirect this time
863
873
}
864
874
}
865
- RequestDone ();
866
875
}
867
876
868
877
void TViewerPipeClient::HandleTimeout () {
@@ -887,6 +896,7 @@ STATEFN(TViewerPipeClient::StateResolveResource) {
887
896
888
897
void TViewerPipeClient::RedirectToDatabase (const TString& database) {
889
898
DatabaseNavigateResponse = MakeRequestSchemeCacheNavigate (database);
899
+ --Requests; // don't count this request
890
900
Become (&TViewerPipeClient::StateResolveDatabase);
891
901
}
892
902
@@ -913,6 +923,8 @@ void TViewerPipeClient::PassAway() {
913
923
Send (TActivationContext::InterconnectProxy (nodeId), new TEvents::TEvUnsubscribe ());
914
924
}
915
925
ClosePipes ();
926
+ CancelAllRequests ();
927
+ PassedAway = true ;
916
928
TBase::PassAway ();
917
929
}
918
930
0 commit comments