use of io.strimzi.api.kafka.model.KafkaTopicBuilder in project strimzi-kafka-operator by strimzi.
the class TopicSerialization method toTopicResource.
/**
* Create a resource to reflect the given Topic.
*/
public static KafkaTopic toTopicResource(Topic topic, Labels labels) {
ResourceName resourceName = topic.getOrAsKubeName();
ObjectMeta om = topic.getMetadata();
Map<String, String> lbls = new HashMap<>(labels.labels());
if (om != null) {
om.setName(resourceName.toString());
if (topic.getMetadata().getLabels() != null)
lbls.putAll(topic.getMetadata().getLabels());
om.setLabels(lbls);
om.setOwnerReferences(topic.getMetadata().getOwnerReferences());
om.setAnnotations(topic.getMetadata().getAnnotations());
} else {
om = new ObjectMetaBuilder().withName(resourceName.toString()).withLabels(lbls).build();
}
KafkaTopic kt = new KafkaTopicBuilder().withMetadata(om).withNewSpec().withTopicName(topic.getTopicName().toString()).withPartitions(topic.getNumPartitions()).withReplicas((int) topic.getNumReplicas()).withConfig(new LinkedHashMap<>(topic.getConfig())).endSpec().build();
// topic is created with annotations={} (empty map but should be null as well)
if (topic.getMetadata() != null)
kt.getMetadata().setAnnotations(topic.getMetadata().getAnnotations());
return kt;
}
use of io.strimzi.api.kafka.model.KafkaTopicBuilder in project strimzi by strimzi.
the class TopicSerialization method toTopicResource.
/**
* Create a resource to reflect the given Topic.
*/
public static KafkaTopic toTopicResource(Topic topic, Labels labels) {
ResourceName resourceName = topic.getOrAsKubeName();
ObjectMeta om = topic.getMetadata();
Map<String, String> lbls = new HashMap<>(labels.labels());
if (om != null) {
om.setName(resourceName.toString());
if (topic.getMetadata().getLabels() != null)
lbls.putAll(topic.getMetadata().getLabels());
om.setLabels(lbls);
om.setOwnerReferences(topic.getMetadata().getOwnerReferences());
om.setAnnotations(topic.getMetadata().getAnnotations());
} else {
om = new ObjectMetaBuilder().withName(resourceName.toString()).withLabels(lbls).build();
}
KafkaTopic kt = new KafkaTopicBuilder().withMetadata(om).withNewSpec().withTopicName(topic.getTopicName().toString()).withPartitions(topic.getNumPartitions()).withReplicas((int) topic.getNumReplicas()).withConfig(new LinkedHashMap<>(topic.getConfig())).endSpec().build();
// topic is created with annotations={} (empty map but should be null as well)
if (topic.getMetadata() != null)
kt.getMetadata().setAnnotations(topic.getMetadata().getAnnotations());
return kt;
}
use of io.strimzi.api.kafka.model.KafkaTopicBuilder in project strimzi by strimzi.
the class TopicOperatorIT method testTopicNumPartitionsDecreased.
@Test
public void testTopicNumPartitionsDecreased() throws Exception {
String topicName = "topic-partitions-decreased-in-kube";
String resourceName = createTopic(topicName, new NewTopic(topicName, 2, (short) 1));
KafkaTopic changedTopic = new KafkaTopicBuilder(operation().inNamespace(NAMESPACE).withName(resourceName).get()).editOrNewSpec().withPartitions(1).endSpec().build();
KafkaTopic replaced = operation().inNamespace(NAMESPACE).withName(resourceName).replace(changedTopic);
assertStatusNotReady(topicName, PartitionDecreaseException.class, "Number of partitions cannot be decreased");
Long generation = operation().inNamespace(NAMESPACE).withName(resourceName).get().getMetadata().getGeneration();
// Now modify Kafka-side to cause another reconciliation: We want the same status.
alterTopicConfigInKafka(topicName, "compression.type", value -> "snappy".equals(value) ? "lz4" : "snappy");
// Wait for a periodic reconciliation
Thread.sleep(RECONCILIATION_INTERVAL + 10_000);
assertStatusNotReady(topicName, PartitionDecreaseException.class, "Number of partitions cannot be decreased");
}
use of io.strimzi.api.kafka.model.KafkaTopicBuilder in project strimzi by strimzi.
the class TopicOperatorIT method testKafkaTopicModifiedWithBadData.
@Test
public void testKafkaTopicModifiedWithBadData() throws Exception {
// create the topicResource
String topicName = "test-kafkatopic-modified-with-bad-data";
KafkaTopic topicResource = createKafkaTopicResource(topicName);
// now change the topicResource
KafkaTopic changedTopic = new KafkaTopicBuilder(operation().inNamespace(NAMESPACE).withName(topicResource.getMetadata().getName()).get()).editOrNewSpec().withPartitions(-1).endSpec().build();
try {
operation().inNamespace(NAMESPACE).withName(topicResource.getMetadata().getName()).replace(changedTopic);
} catch (KubernetesClientException e) {
assertThat(e.getMessage().contains("spec.partitions in body should be greater than or equal to 1"), is(true));
}
}
use of io.strimzi.api.kafka.model.KafkaTopicBuilder in project strimzi by strimzi.
the class TopicOperatorIT method testCreateTwoResourcesManagingOneTopic.
@Test
public void testCreateTwoResourcesManagingOneTopic() throws InterruptedException, ExecutionException, TimeoutException {
String topicName = "two-resources-one-topic";
Topic topic = new Topic.Builder(topicName, 1, (short) 1, emptyMap()).build();
KafkaTopic topicResource = TopicSerialization.toTopicResource(topic, labels);
KafkaTopic topicResource2 = new KafkaTopicBuilder(topicResource).withMetadata(new ObjectMetaBuilder(topicResource.getMetadata()).withName(topicName + "-1").build()).build();
// create one
createKafkaTopicResource(topicResource2);
// create another
operation().inNamespace(NAMESPACE).create(topicResource);
waitForEvent(topicResource, "Failure processing KafkaTopic watch event ADDED on resource two-resources-one-topic with labels \\{.*\\}: " + "Topic 'two-resources-one-topic' is already managed via KafkaTopic 'two-resources-one-topic-1' it cannot also be managed via the KafkaTopic 'two-resources-one-topic'", TopicOperator.EventType.WARNING);
}
Aggregations