From fa26ae849f3ec465d450f8942f2a47d17617c12c Mon Sep 17 00:00:00 2001 From: Carlos Mendes Date: Wed, 19 Jun 2024 06:29:02 -0300 Subject: [PATCH] Removing config when there is no defined input --- .../execution/istio/steps/IstioFaultStep.java | 32 +++++------ .../execution/istio/steps/IstioRetryStep.java | 57 +++++++++---------- 2 files changed, 40 insertions(+), 49 deletions(-) diff --git a/resilience-bench/operator/src/main/java/io/resiliencebench/execution/istio/steps/IstioFaultStep.java b/resilience-bench/operator/src/main/java/io/resiliencebench/execution/istio/steps/IstioFaultStep.java index 86bcec3..599fac1 100644 --- a/resilience-bench/operator/src/main/java/io/resiliencebench/execution/istio/steps/IstioFaultStep.java +++ b/resilience-bench/operator/src/main/java/io/resiliencebench/execution/istio/steps/IstioFaultStep.java @@ -34,31 +34,25 @@ public Scenario execute(Scenario scenario, ExecutionQueue executionQueue) { } private void configureFaultOnTarget(String namespace, Target target) { - var fault = createFault(target.getFault()); - var targetService = findVirtualService(namespace, target.getServiceName()); - if (fault.isPresent()) { - var editedVirtualService = targetService - .edit() - .editSpec() - .editFirstHttp() - .withFault(fault.get()) - .endHttp() - .endSpec() - .build(); + var virtualService = targetService + .edit() + .editSpec() + .editFirstHttp(); + createFault(target.getFault()).ifPresent(virtualService::withFault); + var editedVirtualService = virtualService.endHttp().endSpec().build(); - istioClient() - .v1beta1() - .virtualServices() - .inNamespace(targetService.getMetadata().getNamespace()) - .resource(editedVirtualService) - .update(); - } + istioClient() + .v1beta1() + .virtualServices() + .inNamespace(targetService.getMetadata().getNamespace()) + .resource(editedVirtualService) + .update(); } public Optional createFault(ScenarioFaultTemplate faultTemplate) { if (faultTemplate == null || (faultTemplate.getAbort() == null && faultTemplate.getDelay() == null)) { - logger.error("Fault template is null. No fault was configured."); + logger.error("Fault template is null. No fault to configure."); return Optional.empty(); } diff --git a/resilience-bench/operator/src/main/java/io/resiliencebench/execution/istio/steps/IstioRetryStep.java b/resilience-bench/operator/src/main/java/io/resiliencebench/execution/istio/steps/IstioRetryStep.java index ae0ef8e..70fc157 100644 --- a/resilience-bench/operator/src/main/java/io/resiliencebench/execution/istio/steps/IstioRetryStep.java +++ b/resilience-bench/operator/src/main/java/io/resiliencebench/execution/istio/steps/IstioRetryStep.java @@ -1,21 +1,24 @@ package io.resiliencebench.execution.istio.steps; -import io.fabric8.istio.api.networking.v1beta1.*; +import io.fabric8.istio.api.networking.v1beta1.DestinationBuilder; +import io.fabric8.istio.api.networking.v1beta1.HTTPRetry; +import io.fabric8.istio.api.networking.v1beta1.HTTPRouteBuilder; +import io.fabric8.istio.api.networking.v1beta1.HTTPRouteDestinationBuilder; import io.fabric8.istio.client.IstioClient; import io.fabric8.kubernetes.client.KubernetesClient; import io.resiliencebench.resources.queue.ExecutionQueue; import io.resiliencebench.resources.scenario.Scenario; import io.resiliencebench.resources.scenario.Source; -import io.resiliencebench.resources.scenario.Target; import io.resiliencebench.resources.service.ResilientService; import io.resiliencebench.support.CustomResourceRepository; import org.slf4j.Logger; import org.springframework.stereotype.Service; -import java.util.Collections; import java.util.Map; import java.util.Optional; +import static java.util.Collections.singletonList; + @Service public class IstioRetryStep extends IstioExecutorStep { @@ -29,41 +32,35 @@ public IstioRetryStep(KubernetesClient kubernetesClient, IstioClient istioClient public Scenario execute(Scenario scenario, ExecutionQueue executionQueue) { for (var connector : scenario.getSpec().getConnectors()) { var source = connector.getSource(); - configureRetryOnSource(scenario.getMetadata().getNamespace(), source, connector.getTarget()); + configureRetryOnSource(scenario.getMetadata().getNamespace(), source); } return scenario; } - private void configureRetryOnSource(String namespace, Source source, Target target) { + private void configureRetryOnSource(String namespace, Source source) { var sourceVirtualService = findVirtualService(namespace, source.getServiceName()); - var retryPolicy = createRetryPolicy(source.getPatternConfig(), target); - if (retryPolicy.isPresent()) { - var destination = new DestinationBuilder().withHost(target.getServiceName()).build(); - - var httpRoute = new HTTPRouteBuilder() - .withRoute(Collections.singletonList(new HTTPRouteDestinationBuilder() - .withDestination(destination) - .build())) - .withRetries(retryPolicy.get()) - .build(); + var destination = new DestinationBuilder().withHost(source.getServiceName()).build(); + var httpRouteBuilder = new HTTPRouteBuilder() + .withRoute(singletonList( + new HTTPRouteDestinationBuilder().withDestination(destination).build()) + ); + createRetryPolicy(source.getPatternConfig()).ifPresent(httpRouteBuilder::withRetries); + var newVirtualService = sourceVirtualService + .edit() + .editSpec() + .withHttp(httpRouteBuilder.build()) + .endSpec() + .build(); - var newVirtualService = sourceVirtualService - .edit() - .editSpec() - .withHttp(httpRoute) - .endSpec() - .build(); - - istioClient() - .v1beta1() - .virtualServices() - .inNamespace(sourceVirtualService.getMetadata().getNamespace()) - .resource(newVirtualService) - .update(); - } + istioClient() + .v1beta1() + .virtualServices() + .inNamespace(sourceVirtualService.getMetadata().getNamespace()) + .resource(newVirtualService) + .update(); } - public Optional createRetryPolicy(Map patternConfig, Target target) { + public Optional createRetryPolicy(Map patternConfig) { var httpRetry = new HTTPRetry(); var attempts = (Integer) patternConfig.get("attempts"); var perTryTimeout = (Integer) patternConfig.get("perTryTimeout");