diff --git a/clients/src/main/java/org/apache/kafka/common/InvalidRecordException.java b/clients/src/main/java/org/apache/kafka/common/InvalidRecordException.java index 4c2815bb3bd..aa13ffd9936 100644 --- a/clients/src/main/java/org/apache/kafka/common/InvalidRecordException.java +++ b/clients/src/main/java/org/apache/kafka/common/InvalidRecordException.java @@ -16,9 +16,9 @@ */ package org.apache.kafka.common; -import org.apache.kafka.common.errors.ApiException; +import org.apache.kafka.common.errors.InvalidConfigurationException; -public class InvalidRecordException extends ApiException { +public class InvalidRecordException extends InvalidConfigurationException { private static final long serialVersionUID = 1; diff --git a/clients/src/main/java/org/apache/kafka/common/errors/AuthenticationException.java b/clients/src/main/java/org/apache/kafka/common/errors/AuthenticationException.java index 7a05eba03f2..5d1d5070173 100644 --- a/clients/src/main/java/org/apache/kafka/common/errors/AuthenticationException.java +++ b/clients/src/main/java/org/apache/kafka/common/errors/AuthenticationException.java @@ -32,7 +32,7 @@ import javax.net.ssl.SSLException; *
  • {@link SslAuthenticationException} if SSL handshake failed due to any {@link SSLException}. * */ -public class AuthenticationException extends ApiException { +public class AuthenticationException extends InvalidConfigurationException { private static final long serialVersionUID = 1L; diff --git a/clients/src/main/java/org/apache/kafka/common/errors/AuthorizationException.java b/clients/src/main/java/org/apache/kafka/common/errors/AuthorizationException.java index 0471fe643d9..8ff29af9597 100644 --- a/clients/src/main/java/org/apache/kafka/common/errors/AuthorizationException.java +++ b/clients/src/main/java/org/apache/kafka/common/errors/AuthorizationException.java @@ -16,7 +16,7 @@ */ package org.apache.kafka.common.errors; -public class AuthorizationException extends ApiException { +public class AuthorizationException extends InvalidConfigurationException { public AuthorizationException(String message) { super(message); diff --git a/clients/src/main/java/org/apache/kafka/common/errors/InvalidConfigurationException.java b/clients/src/main/java/org/apache/kafka/common/errors/InvalidConfigurationException.java index 333566a64ba..85e63c42ec3 100644 --- a/clients/src/main/java/org/apache/kafka/common/errors/InvalidConfigurationException.java +++ b/clients/src/main/java/org/apache/kafka/common/errors/InvalidConfigurationException.java @@ -20,12 +20,20 @@ public class InvalidConfigurationException extends ApiException { private static final long serialVersionUID = 1L; - public InvalidConfigurationException(String message) { - super(message); - } - public InvalidConfigurationException(String message, Throwable cause) { super(message, cause); } + public InvalidConfigurationException(String message) { + super(message); + } + + public InvalidConfigurationException(Throwable cause) { + super(cause); + } + + public InvalidConfigurationException() { + super(); + } + } diff --git a/clients/src/main/java/org/apache/kafka/common/errors/InvalidReplicationFactorException.java b/clients/src/main/java/org/apache/kafka/common/errors/InvalidReplicationFactorException.java index 699d5a83a43..508d73a793f 100644 --- a/clients/src/main/java/org/apache/kafka/common/errors/InvalidReplicationFactorException.java +++ b/clients/src/main/java/org/apache/kafka/common/errors/InvalidReplicationFactorException.java @@ -16,7 +16,7 @@ */ package org.apache.kafka.common.errors; -public class InvalidReplicationFactorException extends ApiException { +public class InvalidReplicationFactorException extends InvalidConfigurationException { private static final long serialVersionUID = 1L; diff --git a/clients/src/main/java/org/apache/kafka/common/errors/InvalidRequiredAcksException.java b/clients/src/main/java/org/apache/kafka/common/errors/InvalidRequiredAcksException.java index 423c09166b7..f861dbfee18 100644 --- a/clients/src/main/java/org/apache/kafka/common/errors/InvalidRequiredAcksException.java +++ b/clients/src/main/java/org/apache/kafka/common/errors/InvalidRequiredAcksException.java @@ -16,7 +16,7 @@ */ package org.apache.kafka.common.errors; -public class InvalidRequiredAcksException extends ApiException { +public class InvalidRequiredAcksException extends InvalidConfigurationException { private static final long serialVersionUID = 1L; public InvalidRequiredAcksException(String message) { diff --git a/clients/src/main/java/org/apache/kafka/common/errors/InvalidTopicException.java b/clients/src/main/java/org/apache/kafka/common/errors/InvalidTopicException.java index 344d231ce9e..cf0ed5ed5cc 100644 --- a/clients/src/main/java/org/apache/kafka/common/errors/InvalidTopicException.java +++ b/clients/src/main/java/org/apache/kafka/common/errors/InvalidTopicException.java @@ -27,7 +27,7 @@ import java.util.Set; * * @see UnknownTopicOrPartitionException */ -public class InvalidTopicException extends ApiException { +public class InvalidTopicException extends InvalidConfigurationException { private static final long serialVersionUID = 1L; private final Set invalidTopics; diff --git a/clients/src/main/java/org/apache/kafka/common/errors/RecordBatchTooLargeException.java b/clients/src/main/java/org/apache/kafka/common/errors/RecordBatchTooLargeException.java index d1ba8ff7160..24f563e1c27 100644 --- a/clients/src/main/java/org/apache/kafka/common/errors/RecordBatchTooLargeException.java +++ b/clients/src/main/java/org/apache/kafka/common/errors/RecordBatchTooLargeException.java @@ -19,7 +19,7 @@ package org.apache.kafka.common.errors; /** * This record batch is larger than the maximum allowable size */ -public class RecordBatchTooLargeException extends ApiException { +public class RecordBatchTooLargeException extends InvalidConfigurationException { private static final long serialVersionUID = 1L; diff --git a/clients/src/main/java/org/apache/kafka/common/errors/UnsupportedForMessageFormatException.java b/clients/src/main/java/org/apache/kafka/common/errors/UnsupportedForMessageFormatException.java index f66298e99c3..03add5c4ffc 100644 --- a/clients/src/main/java/org/apache/kafka/common/errors/UnsupportedForMessageFormatException.java +++ b/clients/src/main/java/org/apache/kafka/common/errors/UnsupportedForMessageFormatException.java @@ -20,7 +20,7 @@ package org.apache.kafka.common.errors; * The message format version does not support the requested function. For example, if idempotence is * requested and the topic is using a message format older than 0.11.0.0, then this error will be returned. */ -public class UnsupportedForMessageFormatException extends ApiException { +public class UnsupportedForMessageFormatException extends InvalidConfigurationException { private static final long serialVersionUID = 1L; public UnsupportedForMessageFormatException(String message) { diff --git a/clients/src/main/java/org/apache/kafka/common/errors/UnsupportedVersionException.java b/clients/src/main/java/org/apache/kafka/common/errors/UnsupportedVersionException.java index 484947b0ae2..00da3a1b2b8 100644 --- a/clients/src/main/java/org/apache/kafka/common/errors/UnsupportedVersionException.java +++ b/clients/src/main/java/org/apache/kafka/common/errors/UnsupportedVersionException.java @@ -28,7 +28,7 @@ import java.util.Map; * is raised from {@link org.apache.kafka.clients.consumer.KafkaConsumer#offsetsForTimes(Map)}, it would * be possible to revert to alternative logic to set the consumer's position. */ -public class UnsupportedVersionException extends ApiException { +public class UnsupportedVersionException extends InvalidConfigurationException { private static final long serialVersionUID = 1L; public UnsupportedVersionException(String message, Throwable cause) { diff --git a/clients/src/test/java/org/apache/kafka/common/errors/TransactionExceptionHierarchyTest.java b/clients/src/test/java/org/apache/kafka/common/errors/TransactionExceptionHierarchyTest.java index 1d6d47abc33..9738ccd6c81 100644 --- a/clients/src/test/java/org/apache/kafka/common/errors/TransactionExceptionHierarchyTest.java +++ b/clients/src/test/java/org/apache/kafka/common/errors/TransactionExceptionHierarchyTest.java @@ -16,6 +16,8 @@ */ package org.apache.kafka.common.errors; +import org.apache.kafka.common.InvalidRecordException; + import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -94,4 +96,29 @@ public class TransactionExceptionHierarchyTest { assertTrue(ApplicationRecoverableException.class.isAssignableFrom(exceptionClass), exceptionClass.getSimpleName() + " should extend ApplicationRecoverableException"); } + + /** + * Verifies that the given exception class extends `InvalidConfigurationException` + * + * @param exceptionClass the exception class to check + */ + @ParameterizedTest + @ValueSource(classes = { + AuthenticationException.class, + AuthorizationException.class, + ClusterAuthorizationException.class, + TransactionalIdAuthorizationException.class, + UnsupportedVersionException.class, + UnsupportedForMessageFormatException.class, + InvalidRecordException.class, + InvalidRequiredAcksException.class, + RecordBatchTooLargeException.class, + InvalidTopicException.class, + TopicAuthorizationException.class, + GroupAuthorizationException.class + }) + void testInvalidConfigurationExceptionHierarchy(Class exceptionClass) { + assertTrue(InvalidConfigurationException.class.isAssignableFrom(exceptionClass), + exceptionClass.getSimpleName() + " should extend InvalidConfigurationException"); + } } diff --git a/core/src/main/scala/kafka/admin/ConfigCommand.scala b/core/src/main/scala/kafka/admin/ConfigCommand.scala index ee1fbbca2da..b23b770558f 100644 --- a/core/src/main/scala/kafka/admin/ConfigCommand.scala +++ b/core/src/main/scala/kafka/admin/ConfigCommand.scala @@ -86,13 +86,13 @@ object ConfigCommand extends Logging { opts.checkArgs() processCommand(opts) } catch { - case e @ (_: IllegalArgumentException | _: InvalidConfigurationException | _: OptionException) => - logger.debug(s"Failed config command with args '${args.mkString(" ")}'", e) + case e: UnsupportedVersionException => + logger.debug(s"Unsupported API encountered in server when executing config command with args '${args.mkString(" ")}'") System.err.println(e.getMessage) Exit.exit(1) - case e: UnsupportedVersionException => - logger.debug(s"Unsupported API encountered in server when executing config command with args '${args.mkString(" ")}'") + case e @ (_: IllegalArgumentException | _: InvalidConfigurationException | _: OptionException) => + logger.debug(s"Failed config command with args '${args.mkString(" ")}'", e) System.err.println(e.getMessage) Exit.exit(1)