@@ -289,6 +289,7 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> {
289
289
bool Connected = false ;
290
290
TInstant DisconnectTime;
291
291
ui64 OfflineAllocationCookie = 0 ;
292
+ ui64 KesusReconnectCount = 0 ;
292
293
293
294
TMap<TString, THolder<TResourceState>> Resources; // Map because iterators are needed to remain valid during insertions.
294
295
THashMap<ui64, decltype (Resources)::iterator> ResIndex;
@@ -803,7 +804,11 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> {
803
804
SendToService (CreateUpdateEvent (TEvQuota::EUpdateState::Broken));
804
805
} else {
805
806
KESUS_PROXY_LOG_WARN (" Failed to connect to tablet. Status: " << ev->Get ()->Status );
806
- ConnectToKesus (true );
807
+ if (!ConnectToKesus (true )) {
808
+ KESUS_PROXY_LOG_WARN (" Too many reconnect attempts, assuming kesus dead" );
809
+ SendToService (CreateUpdateEvent (TEvQuota::EUpdateState::Broken));
810
+ KesusReconnectCount = 0 ;
811
+ }
807
812
}
808
813
}
809
814
}
@@ -1133,9 +1138,13 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> {
1133
1138
CookieToResourcePath.clear (); // we will resend all requests with new cookies
1134
1139
}
1135
1140
1136
- void ConnectToKesus (bool reconnection) {
1141
+ bool ConnectToKesus (bool reconnection) {
1137
1142
if (reconnection) {
1138
1143
KESUS_PROXY_LOG_INFO (" Reconnecting to kesus" );
1144
+ ++KesusReconnectCount;
1145
+ if (KesusReconnectCount > 5 ) {
1146
+ return false ;
1147
+ }
1139
1148
} else {
1140
1149
KESUS_PROXY_LOG_DEBUG (" Connecting to kesus" );
1141
1150
}
@@ -1148,6 +1157,7 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> {
1148
1157
GetKesusTabletId (),
1149
1158
GetPipeConnectionOptions (reconnection)));
1150
1159
Connected = false ;
1160
+ return true ;
1151
1161
}
1152
1162
1153
1163
void PassAway () override {
0 commit comments