@@ -602,11 +602,16 @@ void TKafkaBalancerActor::JoinStepWaitMembersAndChooseProtocol(NKqp::TEvKqp::TEv
602
602
603
603
// check all clients have joined or their timeout has expired
604
604
for (auto prevGenerationMembersAndTimeoutsIt = WaitedMemberIdsAndTimeouts.begin (); prevGenerationMembersAndTimeoutsIt != WaitedMemberIdsAndTimeouts.end ();) {
605
+ ui32 memberRebalanceTimeoutMs = prevGenerationMembersAndTimeoutsIt->second .RebalanceTimeoutMs ;
606
+ const TInstant& memberHeartbeatDeadline = prevGenerationMembersAndTimeoutsIt->second .HeartbeatDeadline ;
605
607
if (AllWorkerStates.count (prevGenerationMembersAndTimeoutsIt->first ) == 1 ) {
606
608
KAFKA_LOG_D (TStringBuilder () << " Waited member connected: " << prevGenerationMembersAndTimeoutsIt->first );
607
609
prevGenerationMembersAndTimeoutsIt = WaitedMemberIdsAndTimeouts.erase (prevGenerationMembersAndTimeoutsIt);
608
- } else if ((RebalanceStartTime + TDuration::MilliSeconds (prevGenerationMembersAndTimeoutsIt->second )) < now) {
609
- KAFKA_LOG_D (TStringBuilder () << " Waited member connect deadline: " << prevGenerationMembersAndTimeoutsIt->first );
610
+ } else if ((RebalanceStartTime + TDuration::MilliSeconds (memberRebalanceTimeoutMs)) < now) {
611
+ KAFKA_LOG_D (TStringBuilder () << " Rebalance deadline: " << prevGenerationMembersAndTimeoutsIt->first );
612
+ prevGenerationMembersAndTimeoutsIt = WaitedMemberIdsAndTimeouts.erase (prevGenerationMembersAndTimeoutsIt);
613
+ } else if (memberHeartbeatDeadline < now) {
614
+ KAFKA_LOG_D (TStringBuilder () << " Waited member connect session deadline: " << prevGenerationMembersAndTimeoutsIt->first );
610
615
prevGenerationMembersAndTimeoutsIt = WaitedMemberIdsAndTimeouts.erase (prevGenerationMembersAndTimeoutsIt);
611
616
} else {
612
617
++prevGenerationMembersAndTimeoutsIt;
@@ -938,7 +943,7 @@ bool TKafkaBalancerActor::ParseAssignments(
938
943
939
944
bool TKafkaBalancerActor::ParseMembersAndRebalanceTimeouts (
940
945
NKqp::TEvKqp::TEvQueryResponse::TPtr ev,
941
- std::unordered_map<TString, ui32 >& membersAndRebalanceTimeouts ,
946
+ std::unordered_map<TString, MemberTimeoutsMs >& membersAndTimeouts ,
942
947
TString& lastMemberId)
943
948
{
944
949
if (!ev) {
@@ -956,7 +961,9 @@ bool TKafkaBalancerActor::ParseMembersAndRebalanceTimeouts(
956
961
TString memberId = TString (parser.ColumnParser (" member_id" ).GetUtf8 ());
957
962
TString instanceId = parser.ColumnParser (" instance_id" ).GetOptionalUtf8 ().value_or (" " );
958
963
ui32 rebalanceTimeoutMs = parser.ColumnParser (" rebalance_timeout_ms" ).GetOptionalUint32 ().value_or (DEFAULT_REBALANCE_TIMEOUT_MS);
959
- membersAndRebalanceTimeouts[memberId] = rebalanceTimeoutMs;
964
+ ui32 sessionTimeoutMs = parser.ColumnParser (" session_timeout_ms" ).GetOptionalUint32 ().value_or (DEFAULT_SESSION_TIMEOUT_MS);
965
+ TInstant heartbeatDeadline = parser.ColumnParser (" heartbeat_deadline" ).GetOptionalDatetime ().value_or (TInstant::Now () + TDuration::MilliSeconds (sessionTimeoutMs));
966
+ membersAndTimeouts[memberId] = {rebalanceTimeoutMs, heartbeatDeadline};
960
967
961
968
lastMemberId = memberId;
962
969
}
@@ -1224,7 +1231,7 @@ NYdb::TParamsBuilder TKafkaBalancerActor::BuildInsertMemberParams() {
1224
1231
params.AddParam (" $MemberId" ).Utf8 (MemberId).Build ();
1225
1232
params.AddParam (" $InstanceId" ).Utf8 (InstanceId).Build ();
1226
1233
params.AddParam (" $Database" ).Utf8 (Kqp->DataBase ).Build ();
1227
- params.AddParam (" $HeartbeatDeadline" ).Datetime (TInstant::Now () + TDuration::MilliSeconds (RebalanceTimeoutMs + SessionTimeoutMs)).Build ();
1234
+ params.AddParam (" $HeartbeatDeadline" ).Datetime (TInstant::Now () + TDuration::MilliSeconds (SessionTimeoutMs)).Build ();
1228
1235
params.AddParam (" $SessionTimeoutMs" ).Uint32 (SessionTimeoutMs).Build ();
1229
1236
params.AddParam (" $RebalanceTimeoutMs" ).Uint32 (RebalanceTimeoutMs).Build ();
1230
1237
0 commit comments