Search in sources :

Example 1 with BrokerCapacity

use of io.strimzi.operator.cluster.model.cruisecontrol.BrokerCapacity in project strimzi-kafka-operator by strimzi.

the class CruiseControlTest method testBrokerCapacities.

@ParallelTest
public void testBrokerCapacities() throws JsonProcessingException {
    // Test user defined capacities
    io.strimzi.api.kafka.model.balancing.BrokerCapacity userDefinedBrokerCapacity = new io.strimzi.api.kafka.model.balancing.BrokerCapacity();
    userDefinedBrokerCapacity.setInboundNetwork("50000KB/s");
    userDefinedBrokerCapacity.setOutboundNetwork("50000KB/s");
    CruiseControlSpec cruiseControlSpec = new CruiseControlSpecBuilder().withImage(ccImage).withBrokerCapacity(userDefinedBrokerCapacity).build();
    Kafka resource = createKafka(cruiseControlSpec);
    Capacity capacity = new Capacity(resource.getSpec(), kafkaStorage);
    assertThat(getCapacityConfigurationFromEnvVar(resource, ENV_VAR_CRUISE_CONTROL_CAPACITY_CONFIGURATION), is(capacity.toString()));
    // Test generated disk capacity
    JbodStorage jbodStorage = new JbodStorage();
    List<SingleVolumeStorage> volumes = new ArrayList<>();
    PersistentClaimStorage p1 = new PersistentClaimStorage();
    p1.setId(0);
    p1.setSize("50Gi");
    volumes.add(p1);
    PersistentClaimStorage p2 = new PersistentClaimStorage();
    p2.setId(1);
    volumes.add(p2);
    jbodStorage.setVolumes(volumes);
    resource = new KafkaBuilder(ResourceUtils.createKafka(namespace, cluster, replicas, image, healthDelay, healthTimeout)).editSpec().editKafka().withVersion(KafkaVersionTestUtils.DEFAULT_KAFKA_VERSION).withStorage(jbodStorage).endKafka().withCruiseControl(cruiseControlSpec).endSpec().build();
    capacity = new Capacity(resource.getSpec(), jbodStorage);
    JsonArray brokerEntries = capacity.generateCapacityConfig().getJsonArray(Capacity.CAPACITIES_KEY);
    for (Object brokerEntry : brokerEntries) {
        Map<String, Object> brokerCapacity = ((JsonObject) brokerEntry).getJsonObject(Capacity.CAPACITY_KEY).getMap();
        assertThat(isJBOD(brokerCapacity), is(true));
    }
    assertThat(getCapacityConfigurationFromEnvVar(resource, ENV_VAR_CRUISE_CONTROL_CAPACITY_CONFIGURATION), is(capacity.toString()));
    // Test capacity overrides
    String inboundNetwork = "50000KB/s";
    String inboundNetworkOverride0 = "25000KB/s";
    String inboundNetworkOverride1 = "10000KiB/s";
    String outboundNetworkOverride1 = "15000KB/s";
    int broker0 = 0;
    int broker1 = 1;
    int broker2 = 2;
    List<Integer> overrideList0 = List.of(broker0, broker1, broker2, broker0);
    List<Integer> overrideList1 = List.of(broker1);
    cruiseControlSpec = new CruiseControlSpecBuilder().withImage(ccImage).withNewBrokerCapacity().withInboundNetwork(inboundNetwork).addNewOverride().withBrokers(overrideList0).withInboundNetwork(inboundNetworkOverride0).endOverride().addNewOverride().withBrokers(overrideList1).withInboundNetwork(inboundNetworkOverride1).withOutboundNetwork(outboundNetworkOverride1).endOverride().endBrokerCapacity().build();
    resource = createKafka(cruiseControlSpec);
    capacity = new Capacity(resource.getSpec(), kafkaStorage);
    brokerEntries = capacity.generateCapacityConfig().getJsonArray(Capacity.CAPACITIES_KEY);
    for (Object brokerEntry : brokerEntries) {
        Map<String, Object> brokerCapacity = ((JsonObject) brokerEntry).getJsonObject(Capacity.CAPACITY_KEY).getMap();
        assertThat(isJBOD(brokerCapacity), is(false));
    }
    TreeMap<Integer, BrokerCapacity> capacityEntries = capacity.getCapacityEntries();
    assertThat(capacityEntries.get(BrokerCapacity.DEFAULT_BROKER_ID).getInboundNetwork(), is(Capacity.getThroughputInKiB(inboundNetwork)));
    assertThat(capacityEntries.get(BrokerCapacity.DEFAULT_BROKER_ID).getOutboundNetwork(), is(BrokerCapacity.DEFAULT_OUTBOUND_NETWORK_CAPACITY_IN_KIB_PER_SECOND));
    assertThat(capacityEntries.get(broker0).getInboundNetwork(), is(Capacity.getThroughputInKiB(inboundNetworkOverride0)));
    assertThat(capacityEntries.get(broker0).getOutboundNetwork(), is(BrokerCapacity.DEFAULT_OUTBOUND_NETWORK_CAPACITY_IN_KIB_PER_SECOND));
    // When the same broker id is specified in brokers list of multiple overrides, use the value specified in the first override.
    assertThat(capacityEntries.get(broker1).getInboundNetwork(), is(Capacity.getThroughputInKiB(inboundNetworkOverride0)));
    assertThat(capacityEntries.get(broker1).getOutboundNetwork(), is(BrokerCapacity.DEFAULT_OUTBOUND_NETWORK_CAPACITY_IN_KIB_PER_SECOND));
    assertThat(capacityEntries.get(broker2).getInboundNetwork(), is(Capacity.getThroughputInKiB(inboundNetworkOverride0)));
    assertThat(getCapacityConfigurationFromEnvVar(resource, ENV_VAR_CRUISE_CONTROL_CAPACITY_CONFIGURATION), is(capacity.toString()));
}
Also used : CruiseControlSpec(io.strimzi.api.kafka.model.CruiseControlSpec) Kafka(io.strimzi.api.kafka.model.Kafka) ArrayList(java.util.ArrayList) CruiseControlSpecBuilder(io.strimzi.api.kafka.model.CruiseControlSpecBuilder) IntOrString(io.fabric8.kubernetes.api.model.IntOrString) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) JbodStorage(io.strimzi.api.kafka.model.storage.JbodStorage) Capacity(io.strimzi.operator.cluster.model.cruisecontrol.Capacity) BrokerCapacity(io.strimzi.operator.cluster.model.cruisecontrol.BrokerCapacity) PersistentClaimStorage(io.strimzi.api.kafka.model.storage.PersistentClaimStorage) KafkaBuilder(io.strimzi.api.kafka.model.KafkaBuilder) JsonArray(io.vertx.core.json.JsonArray) BrokerCapacity(io.strimzi.operator.cluster.model.cruisecontrol.BrokerCapacity) SingleVolumeStorage(io.strimzi.api.kafka.model.storage.SingleVolumeStorage) JsonObject(io.vertx.core.json.JsonObject) ParallelTest(io.strimzi.test.annotations.ParallelTest)

Example 2 with BrokerCapacity

use of io.strimzi.operator.cluster.model.cruisecontrol.BrokerCapacity in project strimzi by strimzi.

the class CruiseControlTest method testBrokerCapacities.

@ParallelTest
public void testBrokerCapacities() throws JsonProcessingException {
    // Test user defined capacities
    io.strimzi.api.kafka.model.balancing.BrokerCapacity userDefinedBrokerCapacity = new io.strimzi.api.kafka.model.balancing.BrokerCapacity();
    userDefinedBrokerCapacity.setInboundNetwork("50000KB/s");
    userDefinedBrokerCapacity.setOutboundNetwork("50000KB/s");
    CruiseControlSpec cruiseControlSpec = new CruiseControlSpecBuilder().withImage(ccImage).withBrokerCapacity(userDefinedBrokerCapacity).build();
    Kafka resource = createKafka(cruiseControlSpec);
    Capacity capacity = new Capacity(resource.getSpec(), kafkaStorage);
    assertThat(getCapacityConfigurationFromEnvVar(resource, ENV_VAR_CRUISE_CONTROL_CAPACITY_CONFIGURATION), is(capacity.toString()));
    // Test generated disk capacity
    JbodStorage jbodStorage = new JbodStorage();
    List<SingleVolumeStorage> volumes = new ArrayList<>();
    PersistentClaimStorage p1 = new PersistentClaimStorage();
    p1.setId(0);
    p1.setSize("50Gi");
    volumes.add(p1);
    PersistentClaimStorage p2 = new PersistentClaimStorage();
    p2.setId(1);
    volumes.add(p2);
    jbodStorage.setVolumes(volumes);
    resource = new KafkaBuilder(ResourceUtils.createKafka(namespace, cluster, replicas, image, healthDelay, healthTimeout)).editSpec().editKafka().withVersion(KafkaVersionTestUtils.DEFAULT_KAFKA_VERSION).withStorage(jbodStorage).endKafka().withCruiseControl(cruiseControlSpec).endSpec().build();
    capacity = new Capacity(resource.getSpec(), jbodStorage);
    JsonArray brokerEntries = capacity.generateCapacityConfig().getJsonArray(Capacity.CAPACITIES_KEY);
    for (Object brokerEntry : brokerEntries) {
        Map<String, Object> brokerCapacity = ((JsonObject) brokerEntry).getJsonObject(Capacity.CAPACITY_KEY).getMap();
        assertThat(isJBOD(brokerCapacity), is(true));
    }
    assertThat(getCapacityConfigurationFromEnvVar(resource, ENV_VAR_CRUISE_CONTROL_CAPACITY_CONFIGURATION), is(capacity.toString()));
    // Test capacity overrides
    String inboundNetwork = "50000KB/s";
    String inboundNetworkOverride0 = "25000KB/s";
    String inboundNetworkOverride1 = "10000KiB/s";
    String outboundNetworkOverride1 = "15000KB/s";
    int broker0 = 0;
    int broker1 = 1;
    int broker2 = 2;
    List<Integer> overrideList0 = List.of(broker0, broker1, broker2, broker0);
    List<Integer> overrideList1 = List.of(broker1);
    cruiseControlSpec = new CruiseControlSpecBuilder().withImage(ccImage).withNewBrokerCapacity().withInboundNetwork(inboundNetwork).addNewOverride().withBrokers(overrideList0).withInboundNetwork(inboundNetworkOverride0).endOverride().addNewOverride().withBrokers(overrideList1).withInboundNetwork(inboundNetworkOverride1).withOutboundNetwork(outboundNetworkOverride1).endOverride().endBrokerCapacity().build();
    resource = createKafka(cruiseControlSpec);
    capacity = new Capacity(resource.getSpec(), kafkaStorage);
    brokerEntries = capacity.generateCapacityConfig().getJsonArray(Capacity.CAPACITIES_KEY);
    for (Object brokerEntry : brokerEntries) {
        Map<String, Object> brokerCapacity = ((JsonObject) brokerEntry).getJsonObject(Capacity.CAPACITY_KEY).getMap();
        assertThat(isJBOD(brokerCapacity), is(false));
    }
    TreeMap<Integer, BrokerCapacity> capacityEntries = capacity.getCapacityEntries();
    assertThat(capacityEntries.get(BrokerCapacity.DEFAULT_BROKER_ID).getInboundNetwork(), is(Capacity.getThroughputInKiB(inboundNetwork)));
    assertThat(capacityEntries.get(BrokerCapacity.DEFAULT_BROKER_ID).getOutboundNetwork(), is(BrokerCapacity.DEFAULT_OUTBOUND_NETWORK_CAPACITY_IN_KIB_PER_SECOND));
    assertThat(capacityEntries.get(broker0).getInboundNetwork(), is(Capacity.getThroughputInKiB(inboundNetworkOverride0)));
    assertThat(capacityEntries.get(broker0).getOutboundNetwork(), is(BrokerCapacity.DEFAULT_OUTBOUND_NETWORK_CAPACITY_IN_KIB_PER_SECOND));
    // When the same broker id is specified in brokers list of multiple overrides, use the value specified in the first override.
    assertThat(capacityEntries.get(broker1).getInboundNetwork(), is(Capacity.getThroughputInKiB(inboundNetworkOverride0)));
    assertThat(capacityEntries.get(broker1).getOutboundNetwork(), is(BrokerCapacity.DEFAULT_OUTBOUND_NETWORK_CAPACITY_IN_KIB_PER_SECOND));
    assertThat(capacityEntries.get(broker2).getInboundNetwork(), is(Capacity.getThroughputInKiB(inboundNetworkOverride0)));
    assertThat(getCapacityConfigurationFromEnvVar(resource, ENV_VAR_CRUISE_CONTROL_CAPACITY_CONFIGURATION), is(capacity.toString()));
}
Also used : CruiseControlSpec(io.strimzi.api.kafka.model.CruiseControlSpec) Kafka(io.strimzi.api.kafka.model.Kafka) ArrayList(java.util.ArrayList) CruiseControlSpecBuilder(io.strimzi.api.kafka.model.CruiseControlSpecBuilder) IntOrString(io.fabric8.kubernetes.api.model.IntOrString) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) JbodStorage(io.strimzi.api.kafka.model.storage.JbodStorage) Capacity(io.strimzi.operator.cluster.model.cruisecontrol.Capacity) BrokerCapacity(io.strimzi.operator.cluster.model.cruisecontrol.BrokerCapacity) PersistentClaimStorage(io.strimzi.api.kafka.model.storage.PersistentClaimStorage) KafkaBuilder(io.strimzi.api.kafka.model.KafkaBuilder) JsonArray(io.vertx.core.json.JsonArray) BrokerCapacity(io.strimzi.operator.cluster.model.cruisecontrol.BrokerCapacity) SingleVolumeStorage(io.strimzi.api.kafka.model.storage.SingleVolumeStorage) JsonObject(io.vertx.core.json.JsonObject) ParallelTest(io.strimzi.test.annotations.ParallelTest)

Aggregations

IntOrString (io.fabric8.kubernetes.api.model.IntOrString)2 CruiseControlSpec (io.strimzi.api.kafka.model.CruiseControlSpec)2 CruiseControlSpecBuilder (io.strimzi.api.kafka.model.CruiseControlSpecBuilder)2 Kafka (io.strimzi.api.kafka.model.Kafka)2 KafkaBuilder (io.strimzi.api.kafka.model.KafkaBuilder)2 JbodStorage (io.strimzi.api.kafka.model.storage.JbodStorage)2 PersistentClaimStorage (io.strimzi.api.kafka.model.storage.PersistentClaimStorage)2 SingleVolumeStorage (io.strimzi.api.kafka.model.storage.SingleVolumeStorage)2 BrokerCapacity (io.strimzi.operator.cluster.model.cruisecontrol.BrokerCapacity)2 Capacity (io.strimzi.operator.cluster.model.cruisecontrol.Capacity)2 ParallelTest (io.strimzi.test.annotations.ParallelTest)2 JsonArray (io.vertx.core.json.JsonArray)2 JsonObject (io.vertx.core.json.JsonObject)2 ArrayList (java.util.ArrayList)2 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)2