use of org.apache.kafka.common.requests.WriteTxnMarkersResponse in project kafka by apache.
the class KafkaAdminClientTest method writeTxnMarkersResponse.
private WriteTxnMarkersResponse writeTxnMarkersResponse(AbortTransactionSpec abortSpec, Errors error) {
WriteTxnMarkersResponseData.WritableTxnMarkerPartitionResult partitionResponse = new WriteTxnMarkersResponseData.WritableTxnMarkerPartitionResult().setPartitionIndex(abortSpec.topicPartition().partition()).setErrorCode(error.code());
WriteTxnMarkersResponseData.WritableTxnMarkerTopicResult topicResponse = new WriteTxnMarkersResponseData.WritableTxnMarkerTopicResult().setName(abortSpec.topicPartition().topic());
topicResponse.partitions().add(partitionResponse);
WriteTxnMarkersResponseData.WritableTxnMarkerResult markerResponse = new WriteTxnMarkersResponseData.WritableTxnMarkerResult().setProducerId(abortSpec.producerId());
markerResponse.topics().add(topicResponse);
WriteTxnMarkersResponseData response = new WriteTxnMarkersResponseData();
response.markers().add(markerResponse);
return new WriteTxnMarkersResponse(response);
}
use of org.apache.kafka.common.requests.WriteTxnMarkersResponse in project kafka by apache.
the class AbortTransactionHandlerTest method testInvalidResponse.
@Test
public void testInvalidResponse() {
AbortTransactionHandler handler = new AbortTransactionHandler(abortSpec, logContext);
WriteTxnMarkersResponseData response = new WriteTxnMarkersResponseData();
assertFailed(KafkaException.class, topicPartition, handler.handleResponse(node, singleton(topicPartition), new WriteTxnMarkersResponse(response)));
WriteTxnMarkersResponseData.WritableTxnMarkerResult markerResponse = new WriteTxnMarkersResponseData.WritableTxnMarkerResult();
response.markers().add(markerResponse);
assertFailed(KafkaException.class, topicPartition, handler.handleResponse(node, singleton(topicPartition), new WriteTxnMarkersResponse(response)));
markerResponse.setProducerId(abortSpec.producerId());
assertFailed(KafkaException.class, topicPartition, handler.handleResponse(node, singleton(topicPartition), new WriteTxnMarkersResponse(response)));
WriteTxnMarkersResponseData.WritableTxnMarkerTopicResult topicResponse = new WriteTxnMarkersResponseData.WritableTxnMarkerTopicResult();
markerResponse.topics().add(topicResponse);
assertFailed(KafkaException.class, topicPartition, handler.handleResponse(node, singleton(topicPartition), new WriteTxnMarkersResponse(response)));
topicResponse.setName(abortSpec.topicPartition().topic());
assertFailed(KafkaException.class, topicPartition, handler.handleResponse(node, singleton(topicPartition), new WriteTxnMarkersResponse(response)));
WriteTxnMarkersResponseData.WritableTxnMarkerPartitionResult partitionResponse = new WriteTxnMarkersResponseData.WritableTxnMarkerPartitionResult();
topicResponse.partitions().add(partitionResponse);
assertFailed(KafkaException.class, topicPartition, handler.handleResponse(node, singleton(topicPartition), new WriteTxnMarkersResponse(response)));
partitionResponse.setPartitionIndex(abortSpec.topicPartition().partition());
topicResponse.setName(abortSpec.topicPartition().topic() + "random");
assertFailed(KafkaException.class, topicPartition, handler.handleResponse(node, singleton(topicPartition), new WriteTxnMarkersResponse(response)));
topicResponse.setName(abortSpec.topicPartition().topic());
markerResponse.setProducerId(abortSpec.producerId() + 1);
assertFailed(KafkaException.class, topicPartition, handler.handleResponse(node, singleton(topicPartition), new WriteTxnMarkersResponse(response)));
}
use of org.apache.kafka.common.requests.WriteTxnMarkersResponse in project kafka by apache.
the class AbortTransactionHandlerTest method testInvalidHandleResponseCall.
@Test
public void testInvalidHandleResponseCall() {
AbortTransactionHandler handler = new AbortTransactionHandler(abortSpec, logContext);
WriteTxnMarkersResponseData response = new WriteTxnMarkersResponseData();
assertThrows(IllegalArgumentException.class, () -> handler.handleResponse(node, emptySet(), new WriteTxnMarkersResponse(response)));
assertThrows(IllegalArgumentException.class, () -> handler.handleResponse(node, mkSet(new TopicPartition("foo", 1)), new WriteTxnMarkersResponse(response)));
assertThrows(IllegalArgumentException.class, () -> handler.handleResponse(node, mkSet(topicPartition, new TopicPartition("foo", 1)), new WriteTxnMarkersResponse(response)));
}
use of org.apache.kafka.common.requests.WriteTxnMarkersResponse in project kafka by apache.
the class KafkaAdminClientTest method testAbortTransactionFindLeaderAfterDisconnect.
@Test
public void testAbortTransactionFindLeaderAfterDisconnect() throws Exception {
MockTime time = new MockTime();
int retryBackoffMs = 100;
Cluster cluster = mockCluster(3, 0);
Map<String, Object> configOverride = newStrMap(AdminClientConfig.RETRY_BACKOFF_MS_CONFIG, "" + retryBackoffMs);
try (AdminClientUnitTestEnv env = new AdminClientUnitTestEnv(time, cluster, configOverride)) {
TopicPartition topicPartition = new TopicPartition("foo", 13);
AbortTransactionSpec abortSpec = new AbortTransactionSpec(topicPartition, 12345L, (short) 15, 200);
Iterator<Node> nodeIterator = env.cluster().nodes().iterator();
Node firstLeader = nodeIterator.next();
expectMetadataRequest(env, topicPartition, firstLeader);
WriteTxnMarkersResponse response = writeTxnMarkersResponse(abortSpec, Errors.NONE);
env.kafkaClient().prepareResponseFrom(request -> {
// We need a sleep here because the client will attempt to
// backoff after the disconnect
time.sleep(retryBackoffMs);
return request instanceof WriteTxnMarkersRequest;
}, response, firstLeader, true);
Node retryLeader = nodeIterator.next();
expectMetadataRequest(env, topicPartition, retryLeader);
env.kafkaClient().prepareResponseFrom(request -> request instanceof WriteTxnMarkersRequest, response, retryLeader);
AbortTransactionResult result = env.adminClient().abortTransaction(abortSpec);
assertNull(result.all().get());
}
}
use of org.apache.kafka.common.requests.WriteTxnMarkersResponse in project kafka by apache.
the class AbortTransactionHandlerTest method handleWithError.
private AdminApiHandler.ApiResult<TopicPartition, Void> handleWithError(AbortTransactionSpec abortSpec, Errors error) {
AbortTransactionHandler handler = new AbortTransactionHandler(abortSpec, logContext);
WriteTxnMarkersResponseData.WritableTxnMarkerPartitionResult partitionResponse = new WriteTxnMarkersResponseData.WritableTxnMarkerPartitionResult().setPartitionIndex(abortSpec.topicPartition().partition()).setErrorCode(error.code());
WriteTxnMarkersResponseData.WritableTxnMarkerTopicResult topicResponse = new WriteTxnMarkersResponseData.WritableTxnMarkerTopicResult().setName(abortSpec.topicPartition().topic());
topicResponse.partitions().add(partitionResponse);
WriteTxnMarkersResponseData.WritableTxnMarkerResult markerResponse = new WriteTxnMarkersResponseData.WritableTxnMarkerResult().setProducerId(abortSpec.producerId());
markerResponse.topics().add(topicResponse);
WriteTxnMarkersResponseData response = new WriteTxnMarkersResponseData();
response.markers().add(markerResponse);
return handler.handleResponse(node, singleton(abortSpec.topicPartition()), new WriteTxnMarkersResponse(response));
}
Aggregations