private void verifyAddPartitionsFailsWithPartitionLevelError(final Errors error) throws InterruptedException { final long pid = 1L; final short epoch = 1; doInitTransactions(pid, epoch); transactionManager.beginTransaction(); transactionManager.maybeAddPartitionToTransaction(tp0); Future<RecordMetadata> responseFuture = accumulator.append(tp0, time.milliseconds(), "key".getBytes(), "value".getBytes(), Record.EMPTY_HEADERS, null, MAX_BLOCK_TIMEOUT).future; assertFalse(responseFuture.isDone()); prepareAddPartitionsToTxn(tp0, error); sender.run(time.milliseconds()); // attempt send addPartitions. assertTrue(transactionManager.hasError()); assertFalse(transactionManager.transactionContainsPartition(tp0)); }
prepareAddPartitionsToTxnResponse(Errors.NONE, tp0, epoch, pid); assertFalse(transactionManager.transactionContainsPartition(tp0)); assertTrue(transactionManager.transactionContainsPartition(tp0)); prepareProduceResponse(Errors.NONE, pid, epoch); assertFalse(transactionManager.transactionContainsPartition(tp1)); assertTrue(transactionManager.transactionContainsPartition(tp1));
@Test public void testHandlingOfUnknownTopicPartitionErrorOnAddPartitions() throws InterruptedException { final long pid = 13131L; final short epoch = 1; doInitTransactions(pid, epoch); transactionManager.beginTransaction(); transactionManager.maybeAddPartitionToTransaction(tp0); Future<RecordMetadata> responseFuture = accumulator.append(tp0, time.milliseconds(), "key".getBytes(), "value".getBytes(), Record.EMPTY_HEADERS, null, MAX_BLOCK_TIMEOUT).future; assertFalse(responseFuture.isDone()); prepareAddPartitionsToTxnResponse(Errors.UNKNOWN_TOPIC_OR_PARTITION, tp0, epoch, pid); sender.run(time.milliseconds()); // Send AddPartitionsRequest assertFalse(transactionManager.transactionContainsPartition(tp0)); // The partition should not yet be added. prepareAddPartitionsToTxnResponse(Errors.NONE, tp0, epoch, pid); prepareProduceResponse(Errors.NONE, pid, epoch); sender.run(time.milliseconds()); // Send AddPartitionsRequest successfully. assertTrue(transactionManager.transactionContainsPartition(tp0)); sender.run(time.milliseconds()); // Send ProduceRequest. assertTrue(responseFuture.isDone()); }
prepareAddPartitionsToTxn(partitionErrors); assertFalse(transactionManager.transactionContainsPartition(tp0)); assertFalse(transactionManager.isSendToPartitionAllowed(tp0)); assertTrue(transactionManager.transactionContainsPartition(tp0)); assertTrue(transactionManager.transactionContainsPartition(tp1)); assertTrue(transactionManager.isSendToPartitionAllowed(tp1)); assertTrue(transactionManager.isSendToPartitionAllowed(tp1));
assertTrue(transactionManager.transactionContainsPartition(tp1));
assertFalse(transactionManager.transactionContainsPartition(tp0)); assertFalse(transactionManager.isSendToPartitionAllowed(tp0)); assertTrue(transactionManager.transactionContainsPartition(tp0)); assertTrue(transactionManager.isSendToPartitionAllowed(tp0)); assertFalse(responseFuture.isDone());
assertFalse(transactionManager.transactionContainsPartition(tp0)); prepareAddPartitionsToTxnResponse(Errors.NONE, tp0, epoch, pid); assertTrue(transactionManager.transactionContainsPartition(tp0)); assertFalse(responseFuture.isDone()); assertFalse(commitResult.isCompleted());
assertFalse(transactionManager.transactionContainsPartition(tp0)); assertFalse(transactionManager.isSendToPartitionAllowed(tp0)); assertTrue(transactionManager.transactionContainsPartition(tp0)); assertTrue(transactionManager.isSendToPartitionAllowed(tp0)); assertFalse(responseFuture.isDone()); assertTrue(transactionManager.hasOngoingTransaction()); assertFalse(transactionManager.isCompleting()); assertTrue(transactionManager.transactionContainsPartition(tp0)); assertTrue(abortResult.isSuccessful()); assertFalse(transactionManager.hasOngoingTransaction()); assertFalse(transactionManager.transactionContainsPartition(tp0));
assertFalse(transactionManager.transactionContainsPartition(tp0)); assertFalse(transactionManager.isSendToPartitionAllowed(tp0)); assertTrue(transactionManager.transactionContainsPartition(tp0)); assertTrue(transactionManager.isSendToPartitionAllowed(tp0));
assertFalse(transactionManager.transactionContainsPartition(tp0)); assertFalse(transactionManager.isSendToPartitionAllowed(tp0)); assertTrue(transactionManager.transactionContainsPartition(tp0)); assertTrue(transactionManager.isSendToPartitionAllowed(tp0)); assertFalse(responseFuture.isDone()); assertFalse(transactionManager.transactionContainsPartition(tp0));