@@ -37,16 +37,15 @@ class GroupAdminMixin:
3737
3838 # -- Describe groups ----------------------------------------------
3939
40- def _describe_groups_request (self , group_id ):
40+ def _describe_groups_request (self , group_ids ):
4141 request = DescribeGroupsRequest (
42- groups = [ group_id ] ,
42+ groups = list ( group_ids ) ,
4343 include_authorized_operations = True
4444 )
4545 return request
4646
4747 def _describe_groups_process_response (self , response ):
4848 """Process a DescribeGroupsResponse into a group description."""
49- assert len (response .groups ) == 1
5049 for group in response .groups :
5150 for member in group .members :
5251 if member .member_metadata :
@@ -73,13 +72,20 @@ def _describe_groups_process_response(self, response):
7372 return results
7473
7574 async def _async_describe_groups (self , group_ids , group_coordinator_id = None ):
75+ # Bucket groups by coordinator. One DescribeGroups per coordinator.
76+ coordinators_groups = defaultdict (list )
77+ if group_coordinator_id is not None :
78+ coordinators_groups [group_coordinator_id ] = list (group_ids )
79+ else :
80+ coordinator_ids = await self ._find_coordinator_ids (group_ids )
81+ for group_id , coordinator_id in coordinator_ids .items ():
82+ coordinators_groups [coordinator_id ].append (group_id )
83+
7684 results = {}
77- for group_id in group_ids :
78- coordinator_id = group_coordinator_id or await self ._find_coordinator_id (group_id )
79- request = self ._describe_groups_request (group_id )
85+ for coordinator_id , coordinator_group_ids in coordinators_groups .items ():
86+ request = self ._describe_groups_request (coordinator_group_ids )
8087 response = await self ._manager .send (request , node_id = coordinator_id )
8188 results .update (self ._describe_groups_process_response (response ))
82- # Combine key/vals from multiple requests into single dict
8389 return results
8490
8591 def describe_groups (self , group_ids , group_coordinator_id = None , include_authorized_operations = False ):
@@ -252,8 +258,8 @@ def _list_group_offsets_process_response(self, response, group_id=None):
252258 async def _async_list_group_offsets (self , group_specs ):
253259 # Bucket groups by coordinator. One OffsetFetch per coordinator.
254260 coordinators_groups = defaultdict (list )
255- for group_id in group_specs :
256- coordinator_id = await self . _find_coordinator_id ( group_id )
261+ coordinator_ids = await self . _find_coordinator_ids ( list ( group_specs ))
262+ for group_id , coordinator_id in coordinator_ids . items ():
257263 coordinators_groups [coordinator_id ].append (group_id )
258264
259265 results = {}
@@ -318,8 +324,8 @@ async def _async_delete_groups(self, group_ids, group_coordinator_id=None):
318324 if group_coordinator_id is not None :
319325 coordinators_groups [group_coordinator_id ] = group_ids
320326 else :
321- for group_id in group_ids :
322- coordinator_id = await self . _find_coordinator_id ( group_id )
327+ coordinator_ids = await self . _find_coordinator_ids ( group_ids )
328+ for group_id , coordinator_id in coordinator_ids . items ():
323329 coordinators_groups [coordinator_id ].append (group_id )
324330
325331 results = []
@@ -458,7 +464,6 @@ async def _async_reset_group_offsets(self, group_id, offset_specs, group_coordin
458464 if group_coordinator_id is None :
459465 group_coordinator_id = await self ._find_coordinator_id (group_id )
460466
461- #import pdb; pdb.set_trace()
462467 current = (await self ._async_list_group_offsets ({group_id : list (all_tps )}))[group_id ]
463468 earliest = await self ._async_list_partition_offsets ({tp : OffsetSpec .EARLIEST for tp in all_tps })
464469 latest = await self ._async_list_partition_offsets ({tp : OffsetSpec .LATEST for tp in all_tps })
0 commit comments