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)