{"id":"bcd6817707db52bc","repo":"apache/kafka","slug":"the-method-memberresult-is-not-applicable-in-rem","errorCode":null,"errorMessage":"The method: memberResult is not applicable in 'removeAll' mode","messagePattern":"The method: memberResult is not applicable in 'removeAll' mode","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"clients/src/main/java/org/apache/kafka/clients/admin/RemoveMembersFromConsumerGroupResult.java","lineNumber":85,"sourceCode":"                } else {\n                    for (MemberToRemove memberToRemove : memberInfos) {\n                        if (maybeCompleteExceptionally(memberErrors, memberToRemove.toMemberIdentity(), result)) {\n                            return;\n                        }\n                    }\n                }\n                result.complete(null);\n            }\n        });\n        return result;\n    }\n\n    /**\n     * Returns the selected member future.\n     */\n    public KafkaFuture<Void> memberResult(MemberToRemove member) {\n        if (removeAll()) {\n            throw new IllegalArgumentException(\"The method: memberResult is not applicable in 'removeAll' mode\");\n        }\n        if (!memberInfos.contains(member)) {\n            throw new IllegalArgumentException(\"Member \" + member + \" was not included in the original request\");\n        }\n\n        final KafkaFutureImpl<Void> result = new KafkaFutureImpl<>();\n        this.future.whenComplete((memberErrors, throwable) -> {\n            if (throwable != null) {\n                result.completeExceptionally(throwable);\n            } else if (!maybeCompleteExceptionally(memberErrors, member.toMemberIdentity(), result)) {\n                result.complete(null);\n            }\n        });\n        return result;\n    }\n\n    private boolean maybeCompleteExceptionally(Map<MemberIdentity, Errors> memberErrors,\n                                               MemberIdentity member,","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/apache/kafka/blob/c31c9215e131f8c17e79f8901b48c13ee6aa8e7a/clients/src/main/java/org/apache/kafka/clients/admin/RemoveMembersFromConsumerGroupResult.java#L67-L103","documentation":"Thrown by RemoveMembersFromConsumerGroupResult.memberResult(member) when the original request was in 'removeAll' mode (no-arg options). memberResult is only meaningful for per-member results of a targeted removal; in removeAll mode there is no specific member to look up, so the call is rejected.","triggerScenarios":"Calling result.memberResult(m) after the removal was issued with new RemoveMembersFromConsumerGroupOptions() (no members, i.e. removeAll). removeAll() returns true when memberInfos is empty, which is exactly the no-arg case.","commonSituations":"Reusing result-handling code between targeted and removeAll code paths; switching an operation from targeted removal to removeAll and forgetting to update the result accessors; generic code that always calls memberResult regardless of how the options were constructed.","solutions":["In removeAll mode, use all() to wait for overall completion instead of memberResult","Branch on options.removeAll(): targeted -> memberResult(member); removeAll -> all()","Refactor shared result handling to accept the mode and dispatch to the correct accessor"],"exampleFix":"// before\nRemoveMembersFromConsumerGroupResult r =\n    admin.removeMembersFromConsumerGroup(groupId,\n        new RemoveMembersFromConsumerGroupOptions());\nr.memberResult(member); // throws - removeAll mode\n\n// after\nKafkaFuture<Void> f = removeAll ? r.all() : r.memberResult(member);\nf.get();","handlingStrategy":"validation","validationCode":"RemoveMembersFromConsumerGroupResult result = admin.removeMembersFromConsumerGroup(groupId, options);\nMemberToRemove member = ...;\nif (options.removeAll()) {\n    // removeAll mode: use result.all(), NOT result.memberResult(member)\n    result.all().get();\n} else {\n    // Only valid in non-removeAll mode and for a member originally requested.\n    result.memberResult(member).get();\n}","typeGuard":"static boolean canQueryMemberResult(RemoveMembersFromConsumerGroupOptions options, MemberToRemove member) {\n    return !options.removeAll() && options.members().contains(member);\n}","tryCatchPattern":"try {\n    result.memberResult(member).get();\n} catch (IllegalArgumentException e) {\n    // Either removeAll mode was active (use result.all()) or member was not in the request.\n    // Fall back to the aggregate future.\n    result.all().get();\n}","preventionTips":["Always branch on options.removeAll(): use all() in removeAll mode and memberResult() only otherwise.","Only call memberResult() for MemberToRemove instances present in the options.members() set.","Treat this exception as a logic bug in the caller, not a transient broker failure."],"tags":["kafka","admin-client","consumer-group","group-removal","api-misuse"],"analyzedSha":"c31c9215e131f8c17e79f8901b48c13ee6aa8e7a","analyzedAt":"2026-08-03T12:34:05.770Z","schemaVersion":2}