@@ -26,9 +26,9 @@ import org.apache.kafka.common.message.LeaveGroupRequestData.MemberIdentity
26
26
import org .apache .kafka .common .message .LeaveGroupResponseData .MemberResponse
27
27
import org .apache .kafka .common .message .SyncGroupRequestData .SyncGroupRequestAssignment
28
28
import org .apache .kafka .common .message .WriteTxnMarkersRequestData .{WritableTxnMarker , WritableTxnMarkerTopic }
29
- import org .apache .kafka .common .message .{AddOffsetsToTxnRequestData , AddOffsetsToTxnResponseData , ConsumerGroupDescribeRequestData , ConsumerGroupDescribeResponseData , ConsumerGroupHeartbeatRequestData , ConsumerGroupHeartbeatResponseData , DeleteGroupsRequestData , DeleteGroupsResponseData , DescribeGroupsRequestData , DescribeGroupsResponseData , EndTxnRequestData , HeartbeatRequestData , HeartbeatResponseData , InitProducerIdRequestData , JoinGroupRequestData , JoinGroupResponseData , LeaveGroupResponseData , ListGroupsRequestData , ListGroupsResponseData , OffsetCommitRequestData , OffsetCommitResponseData , OffsetDeleteRequestData , OffsetDeleteResponseData , OffsetFetchRequestData , OffsetFetchResponseData , ShareGroupDescribeRequestData , ShareGroupDescribeResponseData , ShareGroupHeartbeatRequestData , ShareGroupHeartbeatResponseData , SyncGroupRequestData , SyncGroupResponseData , TxnOffsetCommitRequestData , TxnOffsetCommitResponseData , WriteTxnMarkersRequestData }
29
+ import org.apache.kafka.common.message.{AddOffsetsToTxnRequestData, AddOffsetsToTxnResponseData, ConsumerGroupDescribeRequestData, ConsumerGroupDescribeResponseData, ConsumerGroupHeartbeatRequestData, ConsumerGroupHeartbeatResponseData, DeleteGroupsRequestData, DeleteGroupsResponseData, DescribeGroupsRequestData, DescribeGroupsResponseData, EndTxnRequestData, HeartbeatRequestData, HeartbeatResponseData, InitProducerIdRequestData, JoinGroupRequestData, JoinGroupResponseData, LeaveGroupResponseData, ListGroupsRequestData, ListGroupsResponseData, OffsetCommitRequestData, OffsetCommitResponseData, OffsetDeleteRequestData, OffsetDeleteResponseData, OffsetFetchRequestData, OffsetFetchResponseData, ShareGroupDescribeRequestData, ShareGroupDescribeResponseData, ShareGroupHeartbeatRequestData, ShareGroupHeartbeatResponseData, StreamsGroupDescribeRequestData, StreamsGroupDescribeResponseData, StreamsGroupHeartbeatRequestData, StreamsGroupHeartbeatResponseData, SyncGroupRequestData, SyncGroupResponseData, TxnOffsetCommitRequestData, TxnOffsetCommitResponseData, WriteTxnMarkersRequestData}
30
30
import org .apache .kafka .common .protocol .{ApiKeys , Errors }
31
- import org .apache .kafka .common .requests .{AbstractRequest , AbstractResponse , AddOffsetsToTxnRequest , AddOffsetsToTxnResponse , ConsumerGroupDescribeRequest , ConsumerGroupDescribeResponse , ConsumerGroupHeartbeatRequest , ConsumerGroupHeartbeatResponse , DeleteGroupsRequest , DeleteGroupsResponse , DescribeGroupsRequest , DescribeGroupsResponse , EndTxnRequest , EndTxnResponse , HeartbeatRequest , HeartbeatResponse , InitProducerIdRequest , InitProducerIdResponse , JoinGroupRequest , JoinGroupResponse , LeaveGroupRequest , LeaveGroupResponse , ListGroupsRequest , ListGroupsResponse , OffsetCommitRequest , OffsetCommitResponse , OffsetDeleteRequest , OffsetDeleteResponse , OffsetFetchRequest , OffsetFetchResponse , ShareGroupDescribeRequest , ShareGroupDescribeResponse , ShareGroupHeartbeatRequest , ShareGroupHeartbeatResponse , SyncGroupRequest , SyncGroupResponse , TxnOffsetCommitRequest , TxnOffsetCommitResponse , WriteTxnMarkersRequest , WriteTxnMarkersResponse }
31
+ import org.apache.kafka.common.requests.{AbstractRequest, AbstractResponse, AddOffsetsToTxnRequest, AddOffsetsToTxnResponse, ConsumerGroupDescribeRequest, ConsumerGroupDescribeResponse, ConsumerGroupHeartbeatRequest, ConsumerGroupHeartbeatResponse, DeleteGroupsRequest, DeleteGroupsResponse, DescribeGroupsRequest, DescribeGroupsResponse, EndTxnRequest, EndTxnResponse, HeartbeatRequest, HeartbeatResponse, InitProducerIdRequest, InitProducerIdResponse, JoinGroupRequest, JoinGroupResponse, LeaveGroupRequest, LeaveGroupResponse, ListGroupsRequest, ListGroupsResponse, OffsetCommitRequest, OffsetCommitResponse, OffsetDeleteRequest, OffsetDeleteResponse, OffsetFetchRequest, OffsetFetchResponse, ShareGroupDescribeRequest, ShareGroupDescribeResponse, ShareGroupHeartbeatRequest, ShareGroupHeartbeatResponse, StreamsGroupDescribeRequest, StreamsGroupDescribeResponse, StreamsGroupHeartbeatRequest, StreamsGroupHeartbeatResponse, SyncGroupRequest, SyncGroupResponse, TxnOffsetCommitRequest, TxnOffsetCommitResponse, WriteTxnMarkersRequest, WriteTxnMarkersResponse}
32
32
import org .apache .kafka .common .serialization .StringSerializer
33
33
import org .apache .kafka .common .test .ClusterInstance
34
34
import org .apache .kafka .common .utils .ProducerIdAndEpoch
@@ -768,6 +768,21 @@ class GroupCoordinatorBaseRequestTest(cluster: ClusterInstance) {
768
768
shareGroupDescribeResponse.data.groups.asScala.toList
769
769
}
770
770
771
+ protected def streamsGroupDescribe (
772
+ groupIds : List [String ],
773
+ includeAuthorizedOperations : Boolean = false ,
774
+ version : Short = ApiKeys .STREAMS_GROUP_DESCRIBE .latestVersion(isUnstableApiEnabled)
775
+ ): List [StreamsGroupDescribeResponseData .DescribedGroup ] = {
776
+ val streamsGroupDescribeRequest = new StreamsGroupDescribeRequest .Builder (
777
+ new StreamsGroupDescribeRequestData ()
778
+ .setGroupIds(groupIds.asJava)
779
+ .setIncludeAuthorizedOperations(includeAuthorizedOperations)
780
+ ).build(version)
781
+
782
+ val streamsGroupDescribeResponse = connectAndReceive[StreamsGroupDescribeResponse ](streamsGroupDescribeRequest)
783
+ streamsGroupDescribeResponse.data.groups.asScala.toList
784
+ }
785
+
771
786
protected def heartbeat (
772
787
groupId : String ,
773
788
generationId : Int ,
@@ -855,6 +870,41 @@ class GroupCoordinatorBaseRequestTest(cluster: ClusterInstance) {
855
870
shareGroupHeartbeatResponse.data
856
871
}
857
872
873
+ protected def streamsGroupHeartbeat (
874
+ groupId : String ,
875
+ memberId : String = " " ,
876
+ memberEpoch : Int = 0 ,
877
+ rebalanceTimeoutMs : Int = - 1 ,
878
+ activeTasks : List [StreamsGroupHeartbeatRequestData .TaskIds ] = null ,
879
+ standbyTasks : List [StreamsGroupHeartbeatRequestData .TaskIds ] = null ,
880
+ warmupTasks : List [StreamsGroupHeartbeatRequestData .TaskIds ] = null ,
881
+ topology : StreamsGroupHeartbeatRequestData .Topology = null ,
882
+ expectedError : Errors = Errors .NONE ,
883
+ version : Short = ApiKeys .STREAMS_GROUP_HEARTBEAT .latestVersion(isUnstableApiEnabled)
884
+ ): StreamsGroupHeartbeatResponseData = {
885
+ val streamsGroupHeartbeatRequest = new StreamsGroupHeartbeatRequest .Builder (
886
+ new StreamsGroupHeartbeatRequestData ()
887
+ .setGroupId(groupId)
888
+ .setMemberId(memberId)
889
+ .setMemberEpoch(memberEpoch)
890
+ .setRebalanceTimeoutMs(rebalanceTimeoutMs)
891
+ .setActiveTasks(activeTasks.asJava)
892
+ .setStandbyTasks(standbyTasks.asJava)
893
+ .setWarmupTasks(warmupTasks.asJava)
894
+ .setTopology(topology)
895
+ ).build(version)
896
+
897
+ // Send the request until receiving a successful response. There is a delay
898
+ // here because the group coordinator is loaded in the background.
899
+ var streamsGroupHeartbeatResponse : StreamsGroupHeartbeatResponse = null
900
+ TestUtils .waitUntilTrue(() => {
901
+ streamsGroupHeartbeatResponse = connectAndReceive[StreamsGroupHeartbeatResponse ](streamsGroupHeartbeatRequest)
902
+ streamsGroupHeartbeatResponse.data.errorCode == expectedError.code
903
+ }, msg = s " Could not heartbeat successfully. Last response $streamsGroupHeartbeatResponse. " )
904
+
905
+ streamsGroupHeartbeatResponse.data
906
+ }
907
+
858
908
protected def leaveGroupWithNewProtocol (
859
909
groupId : String ,
860
910
memberId : String
0 commit comments