public class org.apache.kafkaesque.clients.producer.internals.TransactionManager extends java.lang.Object
{
private static final int NO_INFLIGHT_REQUEST_CORRELATION_ID;
private static final int NO_LAST_ACKED_SEQUENCE_NUMBER;
private final org.slf4j.Logger log;
private final java.lang.String transactionalId;
private final int transactionTimeoutMs;
private final org.apache.kafkaesque.clients.ApiVersions apiVersions;
private final org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper;
private final java.util.Map pendingTxnOffsetCommits;
private final java.util.Map partitionsWithUnresolvedSequences;
private final java.util.Set partitionsToRewriteSequences;
private final java.util.PriorityQueue pendingRequests;
private final java.util.Set newPartitionsInTransaction;
private final java.util.Set pendingPartitionsInTransaction;
private final java.util.Set partitionsInTransaction;
private org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult pendingResult;
private final long retryBackoffMs;
private static final long ADD_PARTITIONS_RETRY_BACKOFF_MS;
private int inFlightRequestCorrelationId;
private org.apache.kafkaesque.common.Node transactionCoordinator;
private org.apache.kafkaesque.common.Node consumerGroupCoordinator;
private boolean coordinatorSupportsBumpingEpoch;
private volatile org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState;
private volatile java.lang.RuntimeException lastError;
private volatile org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch;
private volatile boolean transactionStarted;
private volatile boolean epochBumpRequired;
public void <init>(org.apache.kafkaesque.common.utils.LogContext, java.lang.String, int, long, org.apache.kafkaesque.clients.ApiVersions)
{
org.apache.kafkaesque.common.utils.LogContext v;
java.util.PriorityQueue v;
java.util.HashMap v, v;
long v;
java.util.HashSet v, v, v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
int v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v;
java.lang.String v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v;
org.slf4j.Logger v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.function.ToIntFunction v;
java.util.Comparator v;
org.apache.kafkaesque.clients.ApiVersions v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.utils.LogContext;
v := @parameter: java.lang.String;
v := @parameter: int;
v := @parameter: long;
v := @parameter: org.apache.kafkaesque.clients.ApiVersions;
specialinvoke v.<java.lang.Object: void <init>()>();
v = (int) -1;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: int inFlightRequestCorrelationId> = v;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State UNINITIALIZED>;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState> = v;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError> = null;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean transactionStarted> = 0;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean epochBumpRequired> = 0;
v = <org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch NONE>;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch> = v;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.String transactionalId> = v;
v = virtualinvoke v.<org.apache.kafkaesque.common.utils.LogContext: org.slf4j.Logger logger(java.lang.Class)>(class "Lorg/apache/kafkaesque/clients/producer/internals/TransactionManager;");
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log> = v;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: int transactionTimeoutMs> = v;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.Node transactionCoordinator> = null;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.Node consumerGroupCoordinator> = null;
v = new java.util.HashSet;
specialinvoke v.<java.util.HashSet: void <init>()>();
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set newPartitionsInTransaction> = v;
v = new java.util.HashSet;
specialinvoke v.<java.util.HashSet: void <init>()>();
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set pendingPartitionsInTransaction> = v;
v = new java.util.HashSet;
specialinvoke v.<java.util.HashSet: void <init>()>();
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set partitionsInTransaction> = v;
v = new java.util.PriorityQueue;
v = staticinvoke <org.apache.kafkaesque.clients.producer.internals.TransactionManager$lambda_new_0__87: java.util.function.ToIntFunction bootstrap$()>();
v = staticinvoke <java.util.Comparator: java.util.Comparator comparingInt(java.util.function.ToIntFunction)>(v);
specialinvoke v.<java.util.PriorityQueue: void <init>(int,java.util.Comparator)>(10, v);
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.PriorityQueue pendingRequests> = v;
v = new java.util.HashMap;
specialinvoke v.<java.util.HashMap: void <init>()>();
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map pendingTxnOffsetCommits> = v;
v = new java.util.HashMap;
specialinvoke v.<java.util.HashMap: void <init>()>();
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map partitionsWithUnresolvedSequences> = v;
v = new java.util.HashSet;
specialinvoke v.<java.util.HashSet: void <init>()>();
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set partitionsToRewriteSequences> = v;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: long retryBackoffMs> = v;
v = new org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: void <init>()>();
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper> = v;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.ApiVersions apiVersions> = v;
return;
}
public synchronized org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult initializeTransactions()
{
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = <org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch NONE>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult initializeTransactions(org.apache.kafkaesque.common.utils.ProducerIdAndEpoch)>(v);
return v;
}
synchronized org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult initializeTransactions(org.apache.kafkaesque.common.utils.ProducerIdAndEpoch)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v;
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v;
java.util.function.Supplier v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v, v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch;
v = <org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch NONE>;
if v == v goto label;
v = 1;
goto label;
label:
v = 0;
label:
v = staticinvoke <org.apache.kafkaesque.clients.producer.internals.TransactionManager$lambda_initializeTransactions_1__88: java.util.function.Supplier bootstrap$(org.apache.kafkaesque.clients.producer.internals.TransactionManager,boolean,org.apache.kafkaesque.common.utils.ProducerIdAndEpoch)>(v, v, v);
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State INITIALIZING>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult handleCachedTransactionRequestResult(java.util.function.Supplier,org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v, v);
return v;
}
public synchronized void beginTransaction()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void ensureTransactional()>();
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void maybeFailWithError()>();
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State IN_TRANSACTION>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionTo(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v);
return;
}
public synchronized org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult beginCommit()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v;
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v;
java.util.function.Supplier v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = staticinvoke <org.apache.kafkaesque.clients.producer.internals.TransactionManager$lambda_beginCommit_2__89: java.util.function.Supplier bootstrap$(org.apache.kafkaesque.clients.producer.internals.TransactionManager)>(v);
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State COMMITTING_TRANSACTION>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult handleCachedTransactionRequestResult(java.util.function.Supplier,org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v, v);
return v;
}
public synchronized org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult beginAbort()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v;
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v;
java.util.function.Supplier v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = staticinvoke <org.apache.kafkaesque.clients.producer.internals.TransactionManager$lambda_beginAbort_3__90: java.util.function.Supplier bootstrap$(org.apache.kafkaesque.clients.producer.internals.TransactionManager)>(v);
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State ABORTING_TRANSACTION>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult handleCachedTransactionRequestResult(java.util.function.Supplier,org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v, v);
return v;
}
private org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult beginCompletingTransaction(org.apache.kafkaesque.common.requests.TransactionResult)
{
org.apache.kafkaesque.common.requests.EndTxnRequest$Builder v;
long v;
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$EndTxnHandler v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler v;
short v;
java.lang.String v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v, v, v;
boolean v, v, v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.Set v;
org.apache.kafkaesque.common.message.EndTxnRequestData v, v, v, v, v;
java.lang.RuntimeException v;
org.apache.kafkaesque.common.requests.TransactionResult v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.requests.TransactionResult;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set newPartitionsInTransaction>;
v = interfaceinvoke v.<java.util.Set: boolean isEmpty()>();
if v != 0 goto label;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler addPartitionsToTransactionHandler()>();
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void enqueueRequest(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)>(v);
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError>;
v = v instanceof org.apache.kafkaesque.common.errors.InvalidPidMappingException;
if v != 0 goto label;
v = new org.apache.kafkaesque.common.requests.EndTxnRequest$Builder;
v = new org.apache.kafkaesque.common.message.EndTxnRequestData;
specialinvoke v.<org.apache.kafkaesque.common.message.EndTxnRequestData: void <init>()>();
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.String transactionalId>;
v = virtualinvoke v.<org.apache.kafkaesque.common.message.EndTxnRequestData: org.apache.kafkaesque.common.message.EndTxnRequestData setTransactionalId(java.lang.String)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: long producerId>;
v = virtualinvoke v.<org.apache.kafkaesque.common.message.EndTxnRequestData: org.apache.kafkaesque.common.message.EndTxnRequestData setProducerId(long)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: short epoch>;
v = virtualinvoke v.<org.apache.kafkaesque.common.message.EndTxnRequestData: org.apache.kafkaesque.common.message.EndTxnRequestData setProducerEpoch(short)>(v);
v = v.<org.apache.kafkaesque.common.requests.TransactionResult: boolean id>;
v = virtualinvoke v.<org.apache.kafkaesque.common.message.EndTxnRequestData: org.apache.kafkaesque.common.message.EndTxnRequestData setCommitted(boolean)>(v);
specialinvoke v.<org.apache.kafkaesque.common.requests.EndTxnRequest$Builder: void <init>(org.apache.kafkaesque.common.message.EndTxnRequestData)>(v);
v = new org.apache.kafkaesque.clients.producer.internals.TransactionManager$EndTxnHandler;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$EndTxnHandler: void <init>(org.apache.kafkaesque.clients.producer.internals.TransactionManager,org.apache.kafkaesque.common.requests.EndTxnRequest$Builder)>(v, v);
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void enqueueRequest(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)>(v);
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean shouldBumpEpoch()>();
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$EndTxnHandler: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult result>;
return v;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult initializeTransactions(org.apache.kafkaesque.common.utils.ProducerIdAndEpoch)>(v);
return v;
}
public synchronized org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult sendOffsetsToTransaction(java.util.Map, org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata)
{
long v;
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v;
short v;
java.util.Map v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v;
org.apache.kafkaesque.common.KafkaException v;
java.lang.String v, v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v, v;
org.slf4j.Logger v;
org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.requests.AddOffsetsToTxnRequest$Builder v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$AddOffsetsToTxnHandler v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: java.util.Map;
v := @parameter: org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void ensureTransactional()>();
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void maybeFailWithError()>();
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State IN_TRANSACTION>;
if v == v goto label;
v = new org.apache.kafkaesque.common.KafkaException;
specialinvoke v.<org.apache.kafkaesque.common.KafkaException: void <init>(java.lang.String)>("Cannot send offsets to transaction either because the producer is not in an active transaction");
throw v;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object,java.lang.Object)>("Begin adding offsets {} for consumer group {} to transaction", v, v);
v = new org.apache.kafkaesque.common.requests.AddOffsetsToTxnRequest$Builder;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.String transactionalId>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: long producerId>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: short epoch>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata: java.lang.String groupId()>();
specialinvoke v.<org.apache.kafkaesque.common.requests.AddOffsetsToTxnRequest$Builder: void <init>(java.lang.String,long,short,java.lang.String)>(v, v, v, v);
v = new org.apache.kafkaesque.clients.producer.internals.TransactionManager$AddOffsetsToTxnHandler;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$AddOffsetsToTxnHandler: void <init>(org.apache.kafkaesque.clients.producer.internals.TransactionManager,org.apache.kafkaesque.common.requests.AddOffsetsToTxnRequest$Builder,java.util.Map,org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata)>(v, v, v, v);
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void enqueueRequest(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$AddOffsetsToTxnHandler: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult result>;
return v;
}
public synchronized void maybeAddPartitionToTransaction(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.slf4j.Logger v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.Set v;
boolean v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isPartitionAdded(org.apache.kafkaesque.common.TopicPartition)>(v);
if v != 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isPartitionPendingAdd(org.apache.kafkaesque.common.TopicPartition)>(v);
if v == 0 goto label;
label:
return;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object)>("Begin adding new partition {} to transaction", v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: void addPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set newPartitionsInTransaction>;
interfaceinvoke v.<java.util.Set: boolean add(java.lang.Object)>(v);
return;
}
java.lang.RuntimeException lastError()
{
java.lang.RuntimeException v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError>;
return v;
}
public synchronized void failIfNotReadyForSend()
{
java.lang.IllegalStateException v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.lang.RuntimeException v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v, v;
org.apache.kafkaesque.common.KafkaException v;
java.lang.String v;
boolean v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasError()>();
if v == 0 goto label;
v = new org.apache.kafkaesque.common.KafkaException;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError>;
specialinvoke v.<org.apache.kafkaesque.common.KafkaException: void <init>(java.lang.String,java.lang.Throwable)>("Cannot perform send because at least one previous transactional or idempotent request has failed with errors.", v);
throw v;
label:
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v == 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasProducerId()>();
if v != 0 goto label;
v = new java.lang.IllegalStateException;
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>("Cannot perform a \'send\' before completing a call to initTransactions when transactions are enabled.");
throw v;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State IN_TRANSACTION>;
if v == v goto label;
v = new java.lang.IllegalStateException;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Cannot call send in state \u0001");
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>(v);
throw v;
label:
return;
}
synchronized boolean isSendToPartitionAllowed(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.Set v;
boolean v, v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasFatalError()>();
if v == 0 goto label;
return 0;
label:
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set partitionsInTransaction>;
v = interfaceinvoke v.<java.util.Set: boolean contains(java.lang.Object)>(v);
if v == 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public java.lang.String transactionalId()
{
java.lang.String v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.String transactionalId>;
return v;
}
public boolean hasProducerId()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = virtualinvoke v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: boolean isValid()>();
return v;
}
public boolean isTransactional()
{
java.lang.String v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.String transactionalId>;
if v == null goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized boolean hasPartitionsToAdd()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.Set v, v;
boolean v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set newPartitionsInTransaction>;
v = interfaceinvoke v.<java.util.Set: boolean isEmpty()>();
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set pendingPartitionsInTransaction>;
v = interfaceinvoke v.<java.util.Set: boolean isEmpty()>();
if v != 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized boolean isCompleting()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v, v, v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State COMMITTING_TRANSACTION>;
if v == v goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State ABORTING_TRANSACTION>;
if v != v goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized boolean hasError()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v, v, v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State ABORTABLE_ERROR>;
if v == v goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State FATAL_ERROR>;
if v != v goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized boolean isAborting()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State ABORTING_TRANSACTION>;
if v != v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized void transitionToAbortableError(java.lang.RuntimeException)
{
org.slf4j.Logger v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v, v;
java.lang.RuntimeException v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: java.lang.RuntimeException;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State ABORTING_TRANSACTION>;
if v != v goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Throwable)>("Skipping transition to abortable error state since the transaction is already being aborted. Underlying exception: ", v);
return;
label:
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State ABORTABLE_ERROR>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionTo(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State,java.lang.RuntimeException)>(v, v);
return;
}
synchronized void transitionToFatalError(java.lang.RuntimeException)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v;
java.lang.RuntimeException v;
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: java.lang.RuntimeException;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State FATAL_ERROR>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionTo(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State,java.lang.RuntimeException)>(v, v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult pendingResult>;
if v == null goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult pendingResult>;
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult: void fail(java.lang.RuntimeException)>(v);
label:
return;
}
synchronized boolean isPartitionAdded(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.Set v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set partitionsInTransaction>;
v = interfaceinvoke v.<java.util.Set: boolean contains(java.lang.Object)>(v);
return v;
}
synchronized boolean isPartitionPendingAdd(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.Set v, v;
boolean v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set newPartitionsInTransaction>;
v = interfaceinvoke v.<java.util.Set: boolean contains(java.lang.Object)>(v);
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set pendingPartitionsInTransaction>;
v = interfaceinvoke v.<java.util.Set: boolean contains(java.lang.Object)>(v);
if v == 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
return v;
}
boolean hasProducerId(long)
{
byte v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
long v, v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: long;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: long producerId>;
v = v cmp v;
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
boolean matchesProducerIdAndEpoch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
long v, v;
org.apache.kafkaesque.clients.producer.internals.ProducerBatch v;
short v, v;
byte v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.ProducerBatch;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: long producerId>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: long producerId()>();
v = v cmp v;
if v != 0 goto label;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: short epoch>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: short producerEpoch()>();
if v != v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
private void setProducerIdAndEpoch(org.apache.kafkaesque.common.utils.ProducerIdAndEpoch)
{
short v;
org.slf4j.Logger v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.lang.Long v;
java.lang.Short v;
long v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: long producerId>;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: short epoch>;
v = staticinvoke <java.lang.Short: java.lang.Short valueOf(short)>(v);
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String,java.lang.Object,java.lang.Object)>("ProducerId set to {} with epoch {}", v, v);
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch> = v;
return;
}
private void resetIdempotentProducerId()
{
java.lang.IllegalStateException v;
org.slf4j.Logger v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v, v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v == 0 goto label;
v = new java.lang.IllegalStateException;
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>("Cannot reset producer state for a transactional producer. You must either abort the ongoing transaction or reinitialize the transactional producer instead");
throw v;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object)>("Resetting idempotent producer ID. ID and epoch before reset are {}", v);
v = <org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch NONE>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void setProducerIdAndEpoch(org.apache.kafkaesque.common.utils.ProducerIdAndEpoch)>(v);
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State UNINITIALIZED>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionTo(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v);
return;
}
private void resetSequenceForPartition(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.Map v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: java.util.Map topicPartitions>;
interfaceinvoke v.<java.util.Map: java.lang.Object remove(java.lang.Object)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map partitionsWithUnresolvedSequences>;
interfaceinvoke v.<java.util.Map: java.lang.Object remove(java.lang.Object)>(v);
return;
}
private void resetSequenceNumbers()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.Map v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: void reset()>();
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map partitionsWithUnresolvedSequences>;
interfaceinvoke v.<java.util.Map: void clear()>();
return;
}
synchronized void requestEpochBumpForPartition(org.apache.kafkaesque.common.TopicPartition)
{
java.util.Set v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean epochBumpRequired> = 1;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set partitionsToRewriteSequences>;
interfaceinvoke v.<java.util.Set: boolean add(java.lang.Object)>(v);
return;
}
private boolean shouldBumpEpoch()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean epochBumpRequired>;
return v;
}
private void bumpIdempotentProducerEpoch()
{
long v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
short v, v;
java.util.Map v;
int v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v, v, v, v, v, v;
boolean v;
org.slf4j.Logger v;
java.util.Iterator v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.Set v, v;
java.lang.Object v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: short epoch>;
if v != 32767 goto label;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void resetIdempotentProducerId()>();
goto label;
label:
v = new org.apache.kafkaesque.common.utils.ProducerIdAndEpoch;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: long producerId>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: short epoch>;
v = v + 1;
specialinvoke v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: void <init>(long,short)>(v, v);
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void setProducerIdAndEpoch(org.apache.kafkaesque.common.utils.ProducerIdAndEpoch)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object)>("Incremented producer epoch, current producer ID and epoch are now {}", v);
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set partitionsToRewriteSequences>;
v = interfaceinvoke v.<java.util.Set: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: void startSequencesAtBeginning(org.apache.kafkaesque.common.TopicPartition,org.apache.kafkaesque.common.utils.ProducerIdAndEpoch)>(v, v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map partitionsWithUnresolvedSequences>;
interfaceinvoke v.<java.util.Map: java.lang.Object remove(java.lang.Object)>(v);
goto label;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set partitionsToRewriteSequences>;
interfaceinvoke v.<java.util.Set: void clear()>();
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean epochBumpRequired> = 0;
return;
}
synchronized void bumpIdempotentEpochAndResetIdIfNeeded()
{
org.apache.kafkaesque.common.requests.InitProducerIdRequest$Builder v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$InitProducerIdHandler v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v, v;
org.apache.kafkaesque.common.message.InitProducerIdRequestData v, v, v;
boolean v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v != 0 goto label;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean shouldBumpEpoch()>();
if v == 0 goto label;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void bumpIdempotentProducerEpoch()>();
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State INITIALIZING>;
if v == v goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasProducerId()>();
if v != 0 goto label;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State INITIALIZING>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionTo(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v);
v = new org.apache.kafkaesque.common.message.InitProducerIdRequestData;
specialinvoke v.<org.apache.kafkaesque.common.message.InitProducerIdRequestData: void <init>()>();
v = virtualinvoke v.<org.apache.kafkaesque.common.message.InitProducerIdRequestData: org.apache.kafkaesque.common.message.InitProducerIdRequestData setTransactionalId(java.lang.String)>(null);
v = virtualinvoke v.<org.apache.kafkaesque.common.message.InitProducerIdRequestData: org.apache.kafkaesque.common.message.InitProducerIdRequestData setTransactionTimeoutMs(int)>(2147483647);
v = new org.apache.kafkaesque.clients.producer.internals.TransactionManager$InitProducerIdHandler;
v = new org.apache.kafkaesque.common.requests.InitProducerIdRequest$Builder;
specialinvoke v.<org.apache.kafkaesque.common.requests.InitProducerIdRequest$Builder: void <init>(org.apache.kafkaesque.common.message.InitProducerIdRequestData)>(v);
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$InitProducerIdHandler: void <init>(org.apache.kafkaesque.clients.producer.internals.TransactionManager,org.apache.kafkaesque.common.requests.InitProducerIdRequest$Builder,boolean)>(v, v, 0);
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void enqueueRequest(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)>(v);
label:
return;
}
synchronized java.lang.Integer sequenceNumber(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.lang.Integer v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
int v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: void addPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: int nextSequence>;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
return v;
}
synchronized void incrementSequenceNumber(org.apache.kafkaesque.common.TopicPartition, int)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.lang.Integer v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
int v, v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v := @parameter: int;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.Integer sequenceNumber(org.apache.kafkaesque.common.TopicPartition)>(v);
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v = staticinvoke <org.apache.kafkaesque.common.record.DefaultRecordBatch: int incrementSequence(int,int)>(v, v);
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: int nextSequence> = v;
return;
}
synchronized void addInFlightBatch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch)
{
java.lang.IllegalStateException v;
java.util.SortedSet v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v, v;
org.apache.kafkaesque.clients.producer.internals.ProducerBatch v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
java.lang.String v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.ProducerBatch;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: boolean hasSequence()>();
if v != 0 goto label;
v = new java.lang.IllegalStateException;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (org.apache.kafkaesque.common.TopicPartition)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Can\'t track batch for partition \u when sequence is not set.");
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>(v);
throw v;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: java.util.SortedSet inflightBatchesBySequence>;
interfaceinvoke v.<java.util.SortedSet: boolean add(java.lang.Object)>(v);
return;
}
synchronized int firstInFlightSequence(org.apache.kafkaesque.common.TopicPartition)
{
java.util.SortedSet v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
int v, v, v;
java.lang.Object v;
boolean v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasInflightBatches(org.apache.kafkaesque.common.TopicPartition)>(v);
if v != 0 goto label;
v = (int) -1;
return v;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: java.util.SortedSet inflightBatchesBySequence>;
v = interfaceinvoke v.<java.util.SortedSet: boolean isEmpty()>();
if v == 0 goto label;
v = (int) -1;
return v;
label:
v = interfaceinvoke v.<java.util.SortedSet: java.lang.Object first()>();
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: int baseSequence()>();
return v;
}
synchronized org.apache.kafkaesque.clients.producer.internals.ProducerBatch nextBatchBySequence(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
java.util.SortedSet v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.lang.Object v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: java.util.SortedSet inflightBatchesBySequence>;
v = interfaceinvoke v.<java.util.SortedSet: boolean isEmpty()>();
if v != 0 goto label;
v = interfaceinvoke v.<java.util.SortedSet: java.lang.Object first()>();
label:
return v;
}
synchronized void removeInFlightBatch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch)
{
java.util.SortedSet v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v, v;
org.apache.kafkaesque.clients.producer.internals.ProducerBatch v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.ProducerBatch;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasInflightBatches(org.apache.kafkaesque.common.TopicPartition)>(v);
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: java.util.SortedSet inflightBatchesBySequence>;
interfaceinvoke v.<java.util.SortedSet: boolean remove(java.lang.Object)>(v);
label:
return;
}
private int maybeUpdateLastAckedSequence(org.apache.kafkaesque.common.TopicPartition, int)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.OptionalInt v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
int v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v := @parameter: int;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.OptionalInt lastAckedSequence(org.apache.kafkaesque.common.TopicPartition)>(v);
v = (int) -1;
v = virtualinvoke v.<java.util.OptionalInt: int orElse(int)>(v);
if v <= v goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: int lastAckedSequence> = v;
return v;
label:
return v;
}
synchronized java.util.OptionalInt lastAckedSequence(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.OptionalInt v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: java.util.OptionalInt lastAckedSequence(org.apache.kafkaesque.common.TopicPartition)>(v);
return v;
}
synchronized java.util.OptionalLong lastAckedOffset(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
java.util.OptionalLong v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: java.util.OptionalLong lastAckedOffset(org.apache.kafkaesque.common.TopicPartition)>(v);
return v;
}
private void updateLastAckedOffset(org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse, org.apache.kafkaesque.clients.producer.internals.ProducerBatch)
{
org.apache.kafkaesque.common.TopicPartition v, v, v, v;
long v, v, v, v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v, v;
java.util.OptionalLong v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
byte v, v;
java.lang.Long v;
org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse v;
int v;
boolean v, v;
org.slf4j.Logger v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.ProducerBatch v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.ProducerBatch;
v = v.<org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse: long baseOffset>;
v = v cmp -1L;
if v != 0 goto label;
return;
label:
v = v.<org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse: long baseOffset>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: int recordCount>;
v = v + v;
v = v - 1L;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.OptionalLong lastAckedOffset(org.apache.kafkaesque.common.TopicPartition)>(v);
v = virtualinvoke v.<java.util.OptionalLong: boolean isPresent()>();
if v != 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: void addPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
label:
v = virtualinvoke v.<java.util.OptionalLong: long orElse(long)>(-1L);
v = v cmp v;
if v <= 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: long lastAckedOffset> = v;
goto label;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
interfaceinvoke v.<org.slf4j.Logger: void trace(java.lang.String,java.lang.Object,java.lang.Object)>("Partition {} keeps lastOffset at {}", v, v);
label:
return;
}
public synchronized void handleCompletedBatch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch, org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse)
{
java.lang.Object[] v;
org.apache.kafkaesque.common.TopicPartition v, v, v, v;
long v;
java.lang.Integer v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
java.lang.Long v;
org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse v;
int v, v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v;
boolean v, v;
org.slf4j.Logger v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.ProducerBatch v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.ProducerBatch;
v := @parameter: org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: int lastSequence()>();
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: int maybeUpdateLastAckedSequence(org.apache.kafkaesque.common.TopicPartition,int)>(v, v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = newarray (java.lang.Object)[3];
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: long producerId()>();
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v[0] = v;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v[1] = v;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v[2] = v;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object[])>("ProducerId: {}; Set last ack\'d sequence number for topic-partition {} to {}", v);
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void updateLastAckedOffset(org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse,org.apache.kafkaesque.clients.producer.internals.ProducerBatch)>(v, v);
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void removeInFlightBatch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch)>(v);
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean matchesProducerIdAndEpoch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch)>(v);
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasInflightBatches(org.apache.kafkaesque.common.TopicPartition)>(v);
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: void startSequencesAtBeginning(org.apache.kafkaesque.common.TopicPartition,org.apache.kafkaesque.common.utils.ProducerIdAndEpoch)>(v, v);
label:
return;
}
private void maybeTransitionToErrorState(java.lang.RuntimeException)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.lang.RuntimeException v;
boolean v, v, v, v, v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: java.lang.RuntimeException;
v = v instanceof org.apache.kafkaesque.common.errors.ClusterAuthorizationException;
if v != 0 goto label;
v = v instanceof org.apache.kafkaesque.common.errors.TransactionalIdAuthorizationException;
if v != 0 goto label;
v = v instanceof org.apache.kafkaesque.common.errors.ProducerFencedException;
if v != 0 goto label;
v = v instanceof org.apache.kafkaesque.common.errors.UnsupportedVersionException;
if v == 0 goto label;
label:
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionToFatalError(java.lang.RuntimeException)>(v);
goto label;
label:
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v == 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean canBumpEpoch()>();
if v == 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isCompleting()>();
if v != 0 goto label;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean epochBumpRequired> = 1;
label:
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionToAbortableError(java.lang.RuntimeException)>(v);
label:
return;
}
synchronized void handleFailedBatch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch, java.lang.RuntimeException, boolean)
{
java.lang.Object[] v, v;
org.apache.kafkaesque.common.TopicPartition v, v, v, v;
long v, v;
java.lang.Integer v, v;
short v, v;
java.lang.Long v, v;
java.lang.Short v, v;
int v, v;
boolean v, v, v, v, v, v;
org.slf4j.Logger v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.lang.RuntimeException v;
org.apache.kafkaesque.clients.producer.internals.ProducerBatch v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.ProducerBatch;
v := @parameter: java.lang.RuntimeException;
v := @parameter: boolean;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void maybeTransitionToErrorState(java.lang.RuntimeException)>(v);
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void removeInFlightBatch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch)>(v);
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean matchesProducerIdAndEpoch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch)>(v);
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = newarray (java.lang.Object)[5];
v[0] = v;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: long producerId()>();
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v[1] = v;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: short producerEpoch()>();
v = staticinvoke <java.lang.Short: java.lang.Short valueOf(short)>(v);
v[2] = v;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: int baseSequence()>();
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v[3] = v;
v[4] = v;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object[])>("Ignoring failed batch {} with producer id {}, epoch {}, and sequence number {} since the producerId has been reset internally", v);
return;
label:
v = v instanceof org.apache.kafkaesque.common.errors.OutOfOrderSequenceException;
if v == 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = newarray (java.lang.Object)[5];
v[0] = v;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v[1] = v;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: long producerId()>();
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v[2] = v;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: short producerEpoch()>();
v = staticinvoke <java.lang.Short: java.lang.Short valueOf(short)>(v);
v[3] = v;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: int baseSequence()>();
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v[4] = v;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Object[])>("The broker returned {} for topic-partition {} with producerId {}, epoch {}, and sequence number {}", v);
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void requestEpochBumpForPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
goto label;
label:
v = v instanceof org.apache.kafkaesque.common.errors.UnknownProducerIdException;
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void resetSequenceForPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
goto label;
label:
if v == 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void requestEpochBumpForPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
goto label;
label:
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void adjustSequencesDueToFailedBatch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch)>(v);
label:
return;
}
private void adjustSequencesDueToFailedBatch(org.apache.kafkaesque.clients.producer.internals.ProducerBatch)
{
java.lang.IllegalStateException v;
java.lang.Object[] v;
org.apache.kafkaesque.common.TopicPartition v, v, v, v, v, v;
long v;
java.lang.Integer v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
java.lang.Long v;
int v, v, v, v;
java.lang.String v;
boolean v;
org.slf4j.Logger v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.ProducerBatch v;
java.util.function.Consumer v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.ProducerBatch;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: boolean contains(org.apache.kafkaesque.common.TopicPartition)>(v);
if v != 0 goto label;
return;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = newarray (java.lang.Object)[3];
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: long producerId()>();
v = staticinvoke <java.lang.Long: java.lang.Long valueOf(long)>(v);
v[0] = v;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v[1] = v;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: int recordCount>;
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v[2] = v;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object[])>("producerId: {}, send to partition {} failed fatally. Reducing future sequence numbers by {}", v);
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.Integer sequenceNumber(org.apache.kafkaesque.common.TopicPartition)>(v);
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: int recordCount>;
v = v - v;
if v >= 0 goto label;
v = new java.lang.IllegalStateException;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (org.apache.kafkaesque.common.TopicPartition,int)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Sequence number for partition \u is going to become negative: \u0001");
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>(v);
throw v;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void setNextSequence(org.apache.kafkaesque.common.TopicPartition,int)>(v, v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v = staticinvoke <org.apache.kafkaesque.clients.producer.internals.TransactionManager$lambda_adjustSequencesDueToFailedBatch_4__91: java.util.function.Consumer bootstrap$(org.apache.kafkaesque.clients.producer.internals.TransactionManager,org.apache.kafkaesque.clients.producer.internals.ProducerBatch)>(v, v);
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: void resetSequenceNumbers(java.util.function.Consumer)>(v);
return;
}
synchronized boolean hasInflightBatches(org.apache.kafkaesque.common.TopicPartition)
{
java.util.SortedSet v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
boolean v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: boolean contains(org.apache.kafkaesque.common.TopicPartition)>(v);
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: java.util.SortedSet inflightBatchesBySequence>;
v = interfaceinvoke v.<java.util.SortedSet: boolean isEmpty()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized boolean hasUnresolvedSequences()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.Map v;
boolean v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map partitionsWithUnresolvedSequences>;
v = interfaceinvoke v.<java.util.Map: boolean isEmpty()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized boolean hasUnresolvedSequence(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.Map v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map partitionsWithUnresolvedSequences>;
v = interfaceinvoke v.<java.util.Map: boolean containsKey(java.lang.Object)>(v);
return v;
}
synchronized void markSequenceUnresolved(org.apache.kafkaesque.clients.producer.internals.ProducerBatch)
{
org.slf4j.Logger v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v, v, v;
java.util.function.BiFunction v;
org.apache.kafkaesque.clients.producer.internals.ProducerBatch v;
java.util.Map v, v;
int v, v;
java.lang.Object v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.ProducerBatch;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: int lastSequence()>();
v = v + 1;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map partitionsWithUnresolvedSequences>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = staticinvoke <org.apache.kafkaesque.clients.producer.internals.TransactionManager$lambda_markSequenceUnresolved_5__92: java.util.function.BiFunction bootstrap$(int)>(v);
interfaceinvoke v.<java.util.Map: java.lang.Object compute(java.lang.Object,java.util.function.BiFunction)>(v, v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map partitionsWithUnresolvedSequences>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = interfaceinvoke v.<java.util.Map: java.lang.Object get(java.lang.Object)>(v);
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object,java.lang.Object)>("Marking partition {} unresolved with next sequence number {}", v, v);
return;
}
synchronized void maybeResolveSequences()
{
java.lang.Object[] v;
java.lang.Integer v, v, v;
java.util.OptionalInt v;
java.util.Map v;
int v, v, v;
org.apache.kafkaesque.common.KafkaException v, v;
java.lang.String v, v;
boolean v, v, v, v, v;
org.slf4j.Logger v;
java.util.Iterator v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.Set v;
java.lang.Object v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map partitionsWithUnresolvedSequences>;
v = interfaceinvoke v.<java.util.Map: java.util.Set keySet()>();
v = interfaceinvoke v.<java.util.Set: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasInflightBatches(org.apache.kafkaesque.common.TopicPartition)>(v);
if v != 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.Integer sequenceNumber(org.apache.kafkaesque.common.TopicPartition)>(v);
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isNextSequence(org.apache.kafkaesque.common.TopicPartition,int)>(v, v);
if v == 0 goto label;
interfaceinvoke v.<java.util.Iterator: void remove()>();
goto label;
label:
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v == 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean canBumpEpoch()>();
if v == 0 goto label;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean epochBumpRequired> = 1;
v = new org.apache.kafkaesque.common.KafkaException;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>("The client hasn\'t received acknowledgment for some previously sent messages and can no longer retry them. ") <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\u0001It is safe to abort the transaction and continue.");
specialinvoke v.<org.apache.kafkaesque.common.KafkaException: void <init>(java.lang.String)>(v);
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionToAbortableError(java.lang.RuntimeException)>(v);
goto label;
label:
v = new org.apache.kafkaesque.common.KafkaException;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>("The client hasn\'t received acknowledgment for some previously sent messages and can no longer retry them. ") <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\u0001It isn\'t safe to continue.");
specialinvoke v.<org.apache.kafkaesque.common.KafkaException: void <init>(java.lang.String)>(v);
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionToFatalError(java.lang.RuntimeException)>(v);
goto label;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = newarray (java.lang.Object)[3];
v[0] = v;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.OptionalInt lastAckedSequence(org.apache.kafkaesque.common.TopicPartition)>(v);
v = (int) -1;
v = virtualinvoke v.<java.util.OptionalInt: int orElse(int)>(v);
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v[1] = v;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.Integer sequenceNumber(org.apache.kafkaesque.common.TopicPartition)>(v);
v[2] = v;
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String,java.lang.Object[])>("No inflight batches remaining for {}, last ack\'d sequence for partition is {}, next sequence is {}. Going to bump epoch and reset sequence numbers.", v);
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void requestEpochBumpForPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
label:
interfaceinvoke v.<java.util.Iterator: void remove()>();
goto label;
label:
return;
}
private boolean isNextSequence(org.apache.kafkaesque.common.TopicPartition, int)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.OptionalInt v;
int v, v, v, v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v := @parameter: int;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.OptionalInt lastAckedSequence(org.apache.kafkaesque.common.TopicPartition)>(v);
v = (int) -1;
v = virtualinvoke v.<java.util.OptionalInt: int orElse(int)>(v);
v = v - v;
if v != 1 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
private void setNextSequence(org.apache.kafkaesque.common.TopicPartition, int)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
int v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v := @parameter: int;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry getPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionEntry: int nextSequence> = v;
return;
}
private boolean isNextSequenceForUnresolvedPartition(org.apache.kafkaesque.common.TopicPartition, int)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.Map v;
int v, v;
java.lang.Object v;
boolean v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v := @parameter: int;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasUnresolvedSequence(org.apache.kafkaesque.common.TopicPartition)>(v);
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map partitionsWithUnresolvedSequences>;
v = interfaceinvoke v.<java.util.Map: java.lang.Object get(java.lang.Object)>(v);
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
if v != v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler nextRequest(boolean)
{
java.util.PriorityQueue v, v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v;
boolean v, v, v, v, v, v;
org.slf4j.Logger v, v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.Set v;
org.apache.kafkaesque.common.requests.AbstractRequest$Builder v, v;
java.lang.Object v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: boolean;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set newPartitionsInTransaction>;
v = interfaceinvoke v.<java.util.Set: boolean isEmpty()>();
if v != 0 goto label;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler addPartitionsToTransactionHandler()>();
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void enqueueRequest(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)>(v);
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.PriorityQueue pendingRequests>;
v = virtualinvoke v.<java.util.PriorityQueue: java.lang.Object peek()>();
if v != null goto label;
return null;
label:
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: boolean isEndTxn()>();
if v == 0 goto label;
if v == 0 goto label;
return null;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.PriorityQueue pendingRequests>;
virtualinvoke v.<java.util.PriorityQueue: java.lang.Object poll()>();
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean maybeTerminateRequestWithError(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)>(v);
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: org.apache.kafkaesque.common.requests.AbstractRequest$Builder requestBuilder()>();
interfaceinvoke v.<org.slf4j.Logger: void trace(java.lang.String,java.lang.Object)>("Not sending transactional request {} because we are in an error state", v);
return null;
label:
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: boolean isEndTxn()>();
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean transactionStarted>;
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult result>;
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult: void done()>();
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State FATAL_ERROR>;
if v == v goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String)>("Not sending EndTxn for completed transaction since no partitions or offsets were successfully added");
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void completeTransaction()>();
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.PriorityQueue pendingRequests>;
virtualinvoke v.<java.util.PriorityQueue: java.lang.Object poll()>();
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: org.apache.kafkaesque.common.requests.AbstractRequest$Builder requestBuilder()>();
interfaceinvoke v.<org.slf4j.Logger: void trace(java.lang.String,java.lang.Object)>("Request {} dequeued for sending", v);
return v;
}
synchronized void retry(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler;
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: void setRetry()>();
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void enqueueRequest(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)>(v);
return;
}
synchronized void authenticationFailed(org.apache.kafkaesque.common.errors.AuthenticationException)
{
java.util.Iterator v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.PriorityQueue v;
org.apache.kafkaesque.common.errors.AuthenticationException v;
java.lang.Object v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.errors.AuthenticationException;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.PriorityQueue pendingRequests>;
v = virtualinvoke v.<java.util.PriorityQueue: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: void fatalError(java.lang.RuntimeException)>(v);
goto label;
label:
return;
}
synchronized void close()
{
java.util.function.Consumer v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.PriorityQueue v;
org.apache.kafkaesque.common.KafkaException v;
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = new org.apache.kafkaesque.common.KafkaException;
specialinvoke v.<org.apache.kafkaesque.common.KafkaException: void <init>(java.lang.String)>("The producer closed forcefully");
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.PriorityQueue pendingRequests>;
v = staticinvoke <org.apache.kafkaesque.clients.producer.internals.TransactionManager$lambda_close_6__93: java.util.function.Consumer bootstrap$(org.apache.kafkaesque.common.KafkaException)>(v);
virtualinvoke v.<java.util.PriorityQueue: void forEach(java.util.function.Consumer)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult pendingResult>;
if v == null goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult pendingResult>;
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult: void fail(java.lang.RuntimeException)>(v);
label:
return;
}
org.apache.kafkaesque.common.Node coordinator(org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType)
{
java.lang.IllegalStateException v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
int[] v;
org.apache.kafkaesque.common.Node v, v;
int v, v;
org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType v;
java.lang.String v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$1: int[] $SwitchMap$org$apache$kafka$common$requests$FindCoordinatorRequest$CoordinatorType>;
v = virtualinvoke v.<org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType: int ordinal()>();
v = v[v];
lookupswitch(v)
{
case 1: goto label;
case 2: goto label;
default: goto label;
};
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.Node consumerGroupCoordinator>;
return v;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.Node transactionCoordinator>;
return v;
label:
v = new java.lang.IllegalStateException;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Received an invalid coordinator type: \u0001");
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>(v);
throw v;
}
void lookupCoordinator(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType v;
java.lang.String v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType coordinatorType()>();
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: java.lang.String coordinatorKey()>();
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void lookupCoordinator(org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType,java.lang.String)>(v, v);
return;
}
void setInFlightCorrelationId(int)
{
int v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: int;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: int inFlightRequestCorrelationId> = v;
return;
}
private void clearInFlightCorrelationId()
{
int v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = (int) -1;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: int inFlightRequestCorrelationId> = v;
return;
}
boolean hasInFlightRequest()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
int v, v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: int inFlightRequestCorrelationId>;
v = (int) -1;
if v == v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
boolean hasFatalError()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State FATAL_ERROR>;
if v != v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
boolean hasAbortableError()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State ABORTABLE_ERROR>;
if v != v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized boolean transactionContainsPartition(org.apache.kafkaesque.common.TopicPartition)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.TopicPartition v;
java.util.Set v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.TopicPartition;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set partitionsInTransaction>;
v = interfaceinvoke v.<java.util.Set: boolean contains(java.lang.Object)>(v);
return v;
}
synchronized boolean hasPendingOffsetCommits()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.Map v;
boolean v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map pendingTxnOffsetCommits>;
v = interfaceinvoke v.<java.util.Map: boolean isEmpty()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized boolean hasPendingRequests()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.PriorityQueue v;
boolean v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.PriorityQueue pendingRequests>;
v = virtualinvoke v.<java.util.PriorityQueue: boolean isEmpty()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized boolean hasOngoingTransaction()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v;
boolean v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State IN_TRANSACTION>;
if v == v goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isCompleting()>();
if v != 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasAbortableError()>();
if v == 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
synchronized boolean canRetry(org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse, org.apache.kafkaesque.clients.producer.internals.ProducerBatch)
{
org.apache.kafkaesque.common.protocol.Errors v, v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper v;
byte v, v;
org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse v;
boolean v, v, v, v, v, v, v, v, v, v;
org.apache.kafkaesque.clients.producer.internals.ProducerBatch v;
org.apache.kafkaesque.common.TopicPartition v, v, v, v, v, v, v, v, v;
long v, v, v;
java.util.OptionalLong v;
int v, v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.errors.ApiException v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.ProducerBatch;
v = v.<org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse: org.apache.kafkaesque.common.protocol.Errors error>;
v = <org.apache.kafkaesque.common.protocol.Errors: org.apache.kafkaesque.common.protocol.Errors UNKNOWN_PRODUCER_ID>;
if v != v goto label;
v = v.<org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse: long logStartOffset>;
v = v cmp -1L;
if v != 0 goto label;
return 1;
label:
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: boolean sequenceHasBeenReset()>();
if v == 0 goto label;
return 1;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.OptionalLong lastAckedOffset(org.apache.kafkaesque.common.TopicPartition)>(v);
v = virtualinvoke v.<java.util.OptionalLong: long orElse(long)>(-1L);
v = v.<org.apache.kafkaesque.common.requests.ProduceResponse$PartitionResponse: long logStartOffset>;
v = v cmp v;
if v >= 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper topicPartitionBookkeeper>;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TopicPartitionBookkeeper: void startSequencesAtBeginning(org.apache.kafkaesque.common.TopicPartition,org.apache.kafkaesque.common.utils.ProducerIdAndEpoch)>(v, v);
goto label;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void requestEpochBumpForPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
label:
return 1;
label:
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void requestEpochBumpForPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
return 1;
label:
v = <org.apache.kafkaesque.common.protocol.Errors: org.apache.kafkaesque.common.protocol.Errors OUT_OF_ORDER_SEQUENCE_NUMBER>;
if v != v goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasUnresolvedSequence(org.apache.kafkaesque.common.TopicPartition)>(v);
if v != 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: boolean sequenceHasBeenReset()>();
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: int baseSequence()>();
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isNextSequence(org.apache.kafkaesque.common.TopicPartition,int)>(v, v);
if v != 0 goto label;
label:
return 1;
label:
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasUnresolvedSequence(org.apache.kafkaesque.common.TopicPartition)>(v);
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: int baseSequence()>();
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isNextSequenceForUnresolvedPartition(org.apache.kafkaesque.common.TopicPartition,int)>(v, v);
if v == 0 goto label;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.ProducerBatch: org.apache.kafkaesque.common.TopicPartition topicPartition>;
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void requestEpochBumpForPartition(org.apache.kafkaesque.common.TopicPartition)>(v);
label:
return 1;
label:
v = virtualinvoke v.<org.apache.kafkaesque.common.protocol.Errors: org.apache.kafkaesque.common.errors.ApiException exception()>();
v = v instanceof org.apache.kafkaesque.common.errors.RetriableException;
return v;
}
synchronized boolean isReady()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v;
boolean v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State READY>;
if v != v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
void handleCoordinatorReady()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.protocol.ApiKeys v;
org.apache.kafkaesque.clients.ApiVersion v;
short v;
org.apache.kafkaesque.common.Node v, v;
java.lang.String v;
org.apache.kafkaesque.clients.NodeApiVersions v;
org.apache.kafkaesque.clients.ApiVersions v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.Node transactionCoordinator>;
if v == null goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.ApiVersions apiVersions>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.Node transactionCoordinator>;
v = virtualinvoke v.<org.apache.kafkaesque.common.Node: java.lang.String idString()>();
v = virtualinvoke v.<org.apache.kafkaesque.clients.ApiVersions: org.apache.kafkaesque.clients.NodeApiVersions get(java.lang.String)>(v);
goto label;
label:
v = null;
label:
if v == null goto label;
v = <org.apache.kafkaesque.common.protocol.ApiKeys: org.apache.kafkaesque.common.protocol.ApiKeys INIT_PRODUCER_ID>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.NodeApiVersions: org.apache.kafkaesque.clients.ApiVersion apiVersion(org.apache.kafkaesque.common.protocol.ApiKeys)>(v);
goto label;
label:
v = null;
label:
if v == null goto label;
v = v.<org.apache.kafkaesque.clients.ApiVersion: short maxVersion>;
if v < 3 goto label;
v = 1;
goto label;
label:
v = 0;
label:
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean coordinatorSupportsBumpingEpoch> = v;
return;
}
private void transitionTo(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionTo(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State,java.lang.RuntimeException)>(v, null);
return;
}
private void transitionTo(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State, java.lang.RuntimeException)
{
java.lang.Object[] v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v, v, v, v, v, v, v;
org.apache.kafkaesque.common.KafkaException v;
java.lang.String v, v, v, v, v, v, v;
boolean v;
org.slf4j.Logger v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.lang.RuntimeException v, v, v;
java.lang.IllegalArgumentException v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State;
v := @parameter: java.lang.RuntimeException;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: boolean isTransitionValid(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State,org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v, v);
if v != 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.String transactionalId>;
if v != null goto label;
v = "";
goto label;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.String transactionalId>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("TransactionalId \u0001: ");
label:
v = new org.apache.kafkaesque.common.KafkaException;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: java.lang.String name()>();
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: java.lang.String name()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,java.lang.String,java.lang.String)>(v, v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\u0001Invalid transition attempted from state \u to state \u0001");
specialinvoke v.<org.apache.kafkaesque.common.KafkaException: void <init>(java.lang.String)>(v);
throw v;
label:
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State FATAL_ERROR>;
if v == v goto label;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State ABORTABLE_ERROR>;
if v != v goto label;
label:
if v != null goto label;
v = new java.lang.IllegalArgumentException;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Cannot transition to \u with a null exception");
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>(v);
throw v;
label:
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError> = v;
goto label;
label:
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError> = null;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError>;
if v == null goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = newarray (java.lang.Object)[3];
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
v[0] = v;
v[1] = v;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError>;
v[2] = v;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object[])>("Transition from state {} to error state {}", v);
goto label;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object,java.lang.Object)>("Transition from state {} to {}", v, v);
label:
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState> = v;
return;
}
private void ensureTransactional()
{
java.lang.IllegalStateException v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v != 0 goto label;
v = new java.lang.IllegalStateException;
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>("Transactional method invoked on a non-transactional producer.");
throw v;
label:
return;
}
private void maybeFailWithError()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.errors.ProducerFencedException v;
org.apache.kafkaesque.common.KafkaException v;
java.lang.RuntimeException v, v;
boolean v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasError()>();
if v == 0 goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError>;
v = v instanceof org.apache.kafkaesque.common.errors.ProducerFencedException;
if v == 0 goto label;
v = new org.apache.kafkaesque.common.errors.ProducerFencedException;
specialinvoke v.<org.apache.kafkaesque.common.errors.ProducerFencedException: void <init>(java.lang.String)>("The producer has been rejected from the broker because it tried to use an old epoch with the transactionalId");
throw v;
label:
v = new org.apache.kafkaesque.common.KafkaException;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError>;
specialinvoke v.<org.apache.kafkaesque.common.KafkaException: void <init>(java.lang.String,java.lang.Throwable)>("Cannot execute transactional method because we are in an error state", v);
throw v;
label:
return;
}
private boolean maybeTerminateRequestWithError(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.lang.RuntimeException v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler v;
boolean v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasError()>();
if v == 0 goto label;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean hasAbortableError()>();
if v == 0 goto label;
v = v instanceof org.apache.kafkaesque.clients.producer.internals.TransactionManager$FindCoordinatorHandler;
if v == 0 goto label;
return 0;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError>;
virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: void fail(java.lang.RuntimeException)>(v);
return 1;
label:
return 0;
}
private void enqueueRequest(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)
{
org.slf4j.Logger v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.PriorityQueue v;
org.apache.kafkaesque.common.requests.AbstractRequest$Builder v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.slf4j.Logger log>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler: org.apache.kafkaesque.common.requests.AbstractRequest$Builder requestBuilder()>();
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object)>("Enqueuing transactional request {}", v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.PriorityQueue pendingRequests>;
virtualinvoke v.<java.util.PriorityQueue: boolean add(java.lang.Object)>(v);
return;
}
private void lookupCoordinator(org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType, java.lang.String)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager$FindCoordinatorHandler v;
java.lang.IllegalStateException v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.message.FindCoordinatorRequestData v, v, v;
byte v;
int[] v;
org.apache.kafkaesque.common.requests.FindCoordinatorRequest$Builder v;
int v, v;
org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType v;
java.lang.String v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType;
v := @parameter: java.lang.String;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$1: int[] $SwitchMap$org$apache$kafka$common$requests$FindCoordinatorRequest$CoordinatorType>;
v = virtualinvoke v.<org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType: int ordinal()>();
v = v[v];
lookupswitch(v)
{
case 1: goto label;
case 2: goto label;
default: goto label;
};
label:
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.Node consumerGroupCoordinator> = null;
goto label;
label:
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.Node transactionCoordinator> = null;
goto label;
label:
v = new java.lang.IllegalStateException;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Invalid coordinator type: \u0001");
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String)>(v);
throw v;
label:
v = new org.apache.kafkaesque.common.requests.FindCoordinatorRequest$Builder;
v = new org.apache.kafkaesque.common.message.FindCoordinatorRequestData;
specialinvoke v.<org.apache.kafkaesque.common.message.FindCoordinatorRequestData: void <init>()>();
v = virtualinvoke v.<org.apache.kafkaesque.common.requests.FindCoordinatorRequest$CoordinatorType: byte id()>();
v = virtualinvoke v.<org.apache.kafkaesque.common.message.FindCoordinatorRequestData: org.apache.kafkaesque.common.message.FindCoordinatorRequestData setKeyType(byte)>(v);
v = virtualinvoke v.<org.apache.kafkaesque.common.message.FindCoordinatorRequestData: org.apache.kafkaesque.common.message.FindCoordinatorRequestData setKey(java.lang.String)>(v);
specialinvoke v.<org.apache.kafkaesque.common.requests.FindCoordinatorRequest$Builder: void <init>(org.apache.kafkaesque.common.message.FindCoordinatorRequestData)>(v);
v = new org.apache.kafkaesque.clients.producer.internals.TransactionManager$FindCoordinatorHandler;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$FindCoordinatorHandler: void <init>(org.apache.kafkaesque.clients.producer.internals.TransactionManager,org.apache.kafkaesque.common.requests.FindCoordinatorRequest$Builder)>(v, v);
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void enqueueRequest(org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler)>(v);
return;
}
private org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnRequestHandler addPartitionsToTransactionHandler()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.common.requests.AddPartitionsToTxnRequest$Builder v;
java.util.Set v, v, v, v;
long v;
java.util.ArrayList v;
short v;
java.lang.String v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$AddPartitionsToTxnHandler v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set pendingPartitionsInTransaction>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set newPartitionsInTransaction>;
interfaceinvoke v.<java.util.Set: boolean addAll(java.util.Collection)>(v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set newPartitionsInTransaction>;
interfaceinvoke v.<java.util.Set: void clear()>();
v = new org.apache.kafkaesque.common.requests.AddPartitionsToTxnRequest$Builder;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.String transactionalId>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: long producerId>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: short epoch>;
v = new java.util.ArrayList;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set pendingPartitionsInTransaction>;
specialinvoke v.<java.util.ArrayList: void <init>(java.util.Collection)>(v);
specialinvoke v.<org.apache.kafkaesque.common.requests.AddPartitionsToTxnRequest$Builder: void <init>(java.lang.String,long,short,java.util.List)>(v, v, v, v);
v = new org.apache.kafkaesque.clients.producer.internals.TransactionManager$AddPartitionsToTxnHandler;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$AddPartitionsToTxnHandler: void <init>(org.apache.kafkaesque.clients.producer.internals.TransactionManager,org.apache.kafkaesque.common.requests.AddPartitionsToTxnRequest$Builder)>(v, v);
return v;
}
private org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnOffsetCommitHandler txnOffsetCommitHandler(org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult, java.util.Map, org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata)
{
org.apache.kafkaesque.common.requests.TxnOffsetCommitRequest$Builder v;
long v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnOffsetCommitHandler v;
short v;
java.util.Map v, v, v;
int v;
java.lang.String v, v, v, v;
org.apache.kafkaesque.common.utils.ProducerIdAndEpoch v, v;
boolean v;
java.util.Iterator v;
org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
java.util.Set v;
org.apache.kafkaesque.common.requests.TxnOffsetCommitRequest$CommittedOffset v;
java.util.Optional v, v;
java.lang.Object v, v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult;
v := @parameter: java.util.Map;
v := @parameter: org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata;
v = interfaceinvoke v.<java.util.Map: java.util.Set entrySet()>();
v = interfaceinvoke v.<java.util.Set: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = interfaceinvoke v.<java.util.Map$Entry: java.lang.Object getValue()>();
v = new org.apache.kafkaesque.common.requests.TxnOffsetCommitRequest$CommittedOffset;
v = virtualinvoke v.<org.apache.kafkaesque.clients.consumer.OffsetAndMetadata: long offset()>();
v = virtualinvoke v.<org.apache.kafkaesque.clients.consumer.OffsetAndMetadata: java.lang.String metadata()>();
v = virtualinvoke v.<org.apache.kafkaesque.clients.consumer.OffsetAndMetadata: java.util.Optional leaderEpoch()>();
specialinvoke v.<org.apache.kafkaesque.common.requests.TxnOffsetCommitRequest$CommittedOffset: void <init>(long,java.lang.String,java.util.Optional)>(v, v, v);
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map pendingTxnOffsetCommits>;
v = interfaceinvoke v.<java.util.Map$Entry: java.lang.Object getKey()>();
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
goto label;
label:
v = new org.apache.kafkaesque.common.requests.TxnOffsetCommitRequest$Builder;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.String transactionalId>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata: java.lang.String groupId()>();
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: long producerId>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.common.utils.ProducerIdAndEpoch producerIdAndEpoch>;
v = v.<org.apache.kafkaesque.common.utils.ProducerIdAndEpoch: short epoch>;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Map pendingTxnOffsetCommits>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata: java.lang.String memberId()>();
v = virtualinvoke v.<org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata: int generationId()>();
v = virtualinvoke v.<org.apache.kafkaesque.clients.consumer.ConsumerGroupMetadata: java.util.Optional groupInstanceId()>();
specialinvoke v.<org.apache.kafkaesque.common.requests.TxnOffsetCommitRequest$Builder: void <init>(java.lang.String,java.lang.String,long,short,java.util.Map,java.lang.String,int,java.util.Optional)>(v, v, v, v, v, v, v, v);
v = new org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnOffsetCommitHandler;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager$TxnOffsetCommitHandler: void <init>(org.apache.kafkaesque.clients.producer.internals.TransactionManager,org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult,org.apache.kafkaesque.common.requests.TxnOffsetCommitRequest$Builder)>(v, v, v);
return v;
}
private org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult handleCachedTransactionRequestResult(java.util.function.Supplier, org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult v, v, v;
java.util.function.Supplier v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v;
java.lang.Object v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: java.util.function.Supplier;
v := @parameter: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void ensureTransactional()>();
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult pendingResult>;
if v == null goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State currentState>;
if v != v goto label;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult pendingResult>;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult: boolean isCompleted()>();
if v == 0 goto label;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult pendingResult> = null;
label:
return v;
label:
v = interfaceinvoke v.<java.util.function.Supplier: java.lang.Object get()>();
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult pendingResult> = v;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: org.apache.kafkaesque.clients.producer.internals.TransactionalRequestResult pendingResult>;
return v;
}
boolean canBumpEpoch()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
boolean v, v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = virtualinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean isTransactional()>();
if v != 0 goto label;
return 1;
label:
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean coordinatorSupportsBumpingEpoch>;
return v;
}
private void completeTransaction()
{
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager$State v, v;
java.util.Set v, v, v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean epochBumpRequired>;
if v == 0 goto label;
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State INITIALIZING>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionTo(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v);
goto label;
label:
v = <org.apache.kafkaesque.clients.producer.internals.TransactionManager$State: org.apache.kafkaesque.clients.producer.internals.TransactionManager$State READY>;
specialinvoke v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: void transitionTo(org.apache.kafkaesque.clients.producer.internals.TransactionManager$State)>(v);
label:
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.lang.RuntimeException lastError> = null;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean epochBumpRequired> = 0;
v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: boolean transactionStarted> = 0;
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set newPartitionsInTransaction>;
interfaceinvoke v.<java.util.Set: void clear()>();
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set pendingPartitionsInTransaction>;
interfaceinvoke v.<java.util.Set: void clear()>();
v = v.<org.apache.kafkaesque.clients.producer.internals.TransactionManager: java.util.Set partitionsInTransaction>;
interfaceinvoke v.<java.util.Set: void clear()>();
return;
}
private boolean isFatalException(org.apache.kafkaesque.common.protocol.Errors)
{
org.apache.kafkaesque.common.protocol.Errors v, v, v, v;
org.apache.kafkaesque.clients.producer.internals.TransactionManager v;
boolean v;
v := @this: org.apache.kafkaesque.clients.producer.internals.TransactionManager;
v := @parameter: org.apache.kafkaesque.common.protocol.Errors;
v = <org.apache.kafkaesque.common.protocol.Errors: org.apache.kafkaesque.common.protocol.Errors TRANSACTIONAL_ID_AUTHORIZATION_FAILED>;
if v == v goto label;
v = <org.apache.kafkaesque.common.protocol.Errors: org.apache.kafkaesque.common.protocol.Errors INVALID_PRODUCER_EPOCH>;
if v == v goto label;
v = <org.apache.kafkaesque.common.protocol.Errors: org.apache.kafkaesque.common.protocol.Errors UNSUPPORTED_FOR_MESSAGE_FORMAT>;
if v != v goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
}