You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "John Thomas (Jira)" <ji...@apache.org> on 2020/08/01 07:03:00 UTC
[jira] [Comment Edited] (KAFKA-10186) Aborting transaction with
pending data should throw non-fatal exception
[ https://issues.apache.org/jira/browse/KAFKA-10186?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17169052#comment-17169052 ]
John Thomas edited comment on KAFKA-10186 at 8/1/20, 7:02 AM:
--------------------------------------------------------------
[~ableegoldman] For my understanding, If we abort a transaction with any non-flushed data, we want to throw a different exception, since we know its non-fatal ?
{color:#172b4d}In Sender#maybeSendAndPollTransactionalRequest : transactionManaer.hasAbortableError() -> This is fatal, {color}
{color:#172b4d}transactionManager.isAborting() - > This is something we know that its aborted, and is recoverable.
{color}
{color:#172b4d}You are suggesting we should put in a new exception message ? or a whole new exception class ? {color}
{code:java}
if (transactionManager.hasAbortableError() || transactionManager.isAborting()) {
if (accumulator.hasIncomplete()) {
RuntimeException exception = transactionManager.lastError();
if (exception == null) {
exception = new KafkaException("Failing batch since transaction was aborted");
}
accumulator.abortUndrainedBatches(exception);
}
}{code}
PS : #newbie !
was (Author: johnthotekat):
[~ableegoldman] If we abort a transaction with any non-flushed data, we want to throw a different exception, since we know its non-fatal ?
{color:#172b4d}If my understanding is correct, In Sender#maybeSendAndPollTransactionalRequest : transactionManaer.hasAbortableError() -> This is fatal, {color}
{color:#172b4d}transactionManager.isAborting() - > This is something we know that its aborted, and is recoverable. --
{color}
{code:java}
if (transactionManager.hasAbortableError() || transactionManager.isAborting()) {
if (accumulator.hasIncomplete()) {
RuntimeException exception = transactionManager.lastError();
if (exception == null) {
exception = new KafkaException("Failing batch since transaction was aborted");
}
accumulator.abortUndrainedBatches(exception);
}
}{code}
PS : #newbie !
> Aborting transaction with pending data should throw non-fatal exception
> -----------------------------------------------------------------------
>
> Key: KAFKA-10186
> URL: https://issues.apache.org/jira/browse/KAFKA-10186
> Project: Kafka
> Issue Type: Improvement
> Components: producer
> Reporter: Sophie Blee-Goldman
> Priority: Major
> Labels: needs-kip, newbie, newbie++
>
> Currently if you try to abort a transaction with any pending (non-flushed) data, the send exception is set to
> {code:java}
> KafkaException("Failing batch since transaction was aborted"){code}
> This exception type is generally considered fatal, but this is a valid state to be in -- the point of throwing the exception is to alert that the records will not be sent, not that you are in an unrecoverable error state.
> We should throw a different (possibly new) type of exception here to distinguish from fatal and recoverable errors.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)