@@ -754,11 +754,15 @@ void TViewerPipeClient::RequestDone(ui32 requests) {
754
754
if (!DelayedRequests.empty ()) {
755
755
SendDelayedRequests ();
756
756
}
757
- if (Requests == 0 ) {
757
+ if (Requests == 0 && !PassedAway ) {
758
758
ReplyAndPassAway ();
759
759
}
760
760
}
761
761
762
+ void TViewerPipeClient::CancelAllRequests () {
763
+ DelayedRequests.clear ();
764
+ }
765
+
762
766
void TViewerPipeClient::Handle (TEvTabletPipe::TEvClientConnected::TPtr& ev) {
763
767
if (ev->Get ()->Status != NKikimrProto::OK) {
764
768
ui32 requests = FailPipeConnect (ev->Get ()->TabletId );
@@ -777,12 +781,14 @@ void TViewerPipeClient::HandleResolveResource(TEvTxProxySchemeCache::TEvNavigate
777
781
Bootstrap (); // retry bootstrap without redirect this time
778
782
} else {
779
783
DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup (SharedDatabase);
784
+ --Requests; // don't count this request
780
785
}
781
786
} else {
782
- return ReplyAndPassAway (GetHTTPBADREQUEST (" text/plain" , " Failed to resolve database - shared database not found" ));
787
+ AddEvent (" Failed to resolve database - shared database not found" );
788
+ Direct = true ;
789
+ Bootstrap (); // retry bootstrap without redirect this time
783
790
}
784
791
}
785
- RequestDone ();
786
792
}
787
793
788
794
void TViewerPipeClient::HandleResolveDatabase (TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev) {
@@ -792,15 +798,18 @@ void TViewerPipeClient::HandleResolveDatabase(TEvTxProxySchemeCache::TEvNavigate
792
798
TSchemeCacheNavigate::TEntry& entry (DatabaseNavigateResponse->Get ()->Request ->ResultSet .front ());
793
799
if (entry.DomainInfo && entry.DomainInfo ->ResourcesDomainKey && entry.DomainInfo ->DomainKey != entry.DomainInfo ->ResourcesDomainKey ) {
794
800
ResourceNavigateResponse = MakeRequestSchemeCacheNavigate (TPathId (entry.DomainInfo ->ResourcesDomainKey ));
801
+ --Requests; // don't count this request
795
802
Become (&TViewerPipeClient::StateResolveResource);
796
803
} else {
797
804
DatabaseBoardInfoResponse = MakeRequestStateStorageEndpointsLookup (CanonizePath (entry.Path ));
805
+ --Requests; // don't count this request
798
806
}
799
807
} else {
800
- return ReplyAndPassAway (GetHTTPBADREQUEST (" text/plain" , " Failed to resolve database - not found" ));
808
+ AddEvent (" Failed to resolve database - not found" );
809
+ Direct = true ;
810
+ Bootstrap (); // retry bootstrap without redirect this time
801
811
}
802
812
}
803
- RequestDone ();
804
813
}
805
814
806
815
void TViewerPipeClient::HandleResolve (TEvStateStorage::TEvBoardInfo::TPtr& ev) {
@@ -809,11 +818,11 @@ void TViewerPipeClient::HandleResolve(TEvStateStorage::TEvBoardInfo::TPtr& ev) {
809
818
if (DatabaseBoardInfoResponse->IsOk ()) {
810
819
return ReplyAndPassAway (MakeForward (GetNodesFromBoardReply (DatabaseBoardInfoResponse->GetRef ())));
811
820
} else {
821
+ AddEvent (" Failed to resolve database nodes" );
812
822
Direct = true ;
813
823
Bootstrap (); // retry bootstrap without redirect this time
814
824
}
815
825
}
816
- RequestDone ();
817
826
}
818
827
819
828
void TViewerPipeClient::HandleTimeout () {
@@ -838,6 +847,7 @@ STATEFN(TViewerPipeClient::StateResolveResource) {
838
847
839
848
void TViewerPipeClient::RedirectToDatabase (const TString& database) {
840
849
DatabaseNavigateResponse = MakeRequestSchemeCacheNavigate (database);
850
+ --Requests; // don't count this request
841
851
Become (&TViewerPipeClient::StateResolveDatabase);
842
852
}
843
853
@@ -860,6 +870,8 @@ void TViewerPipeClient::PassAway() {
860
870
Send (TActivationContext::InterconnectProxy (nodeId), new TEvents::TEvUnsubscribe ());
861
871
}
862
872
ClosePipes ();
873
+ CancelAllRequests ();
874
+ PassedAway = true ;
863
875
TBase::PassAway ();
864
876
}
865
877
0 commit comments