From 6ba808781bff5b2af7aa693074a16ae1059f1d90 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 30 May 2022 11:01:23 +0200 Subject: [PATCH] Removed execution task listener - it makes runner spans share the same trace id --- .../ObservationTaskAutoConfiguration.java | 7 -- .../ObservationTaskExecutionListener.java | 85 ------------------- .../TaskDocumentedObservation.java | 16 ---- .../ObservationIntegrationTests.java | 5 +- ...ObservationTaskExecutionListenerTests.java | 66 -------------- src/checkstyle/checkstyle-suppressions.xml | 7 ++ 6 files changed, 11 insertions(+), 175 deletions(-) delete mode 100644 spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/ObservationTaskExecutionListener.java delete mode 100644 spring-cloud-task-core/src/test/java/org/springframework/cloud/task/configuration/observation/ObservationTaskExecutionListenerTests.java create mode 100644 src/checkstyle/checkstyle-suppressions.xml diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/ObservationTaskAutoConfiguration.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/ObservationTaskAutoConfiguration.java index 1871c4e0..3d3eb2f5 100644 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/ObservationTaskAutoConfiguration.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/ObservationTaskAutoConfiguration.java @@ -19,7 +19,6 @@ package org.springframework.cloud.task.configuration.observation; import io.micrometer.observation.ObservationRegistry; import org.springframework.beans.factory.BeanFactory; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -42,12 +41,6 @@ import org.springframework.context.annotation.Configuration; @AutoConfigureAfter(ObservationAutoConfiguration.class) public class ObservationTaskAutoConfiguration { - @Bean - ObservationTaskExecutionListener traceTaskExecutionListener(ObservationRegistry registry, - @Value("${spring.application.name:default}") String appName) { - return new ObservationTaskExecutionListener(registry, appName); - } - @Bean static ObservationCommandLineRunnerBeanPostProcessor observedCommandLineRunnerBeanPostProcessor(BeanFactory beanFactory) { return new ObservationCommandLineRunnerBeanPostProcessor(beanFactory); diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/ObservationTaskExecutionListener.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/ObservationTaskExecutionListener.java deleted file mode 100644 index 04050146..00000000 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/ObservationTaskExecutionListener.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2018-2022 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.task.configuration.observation; - -import io.micrometer.observation.Observation; -import io.micrometer.observation.ObservationRegistry; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.cloud.task.listener.TaskExecutionListener; -import org.springframework.cloud.task.repository.TaskExecution; -import org.springframework.core.Ordered; - -/** - * Sets the span upon starting and closes it upon ending a task. - * - * @author Marcin Grzejszczak - * @since 3.1.0 - */ -class ObservationTaskExecutionListener implements TaskExecutionListener, Ordered { - - private static final Log log = LogFactory.getLog(ObservationTaskExecutionListener.class); - - private final ObservationRegistry registry; - - private final String projectName; - - ObservationTaskExecutionListener(ObservationRegistry registry, String projectName) { - this.registry = registry; - this.projectName = projectName; - } - - @Override - public void onTaskStartup(TaskExecution taskExecution) { - Observation observation = TaskDocumentedObservation.TASK_EXECUTION_LISTENER_OBSERVATION.observation(this.registry) - .contextualName(this.projectName) - .start(); - observation.openScope(); - if (log.isDebugEnabled()) { - log.debug("Put the observation [" + observation + "] in scope"); - } - } - - @Override - public void onTaskEnd(TaskExecution taskExecution) { - Observation.Scope scope = this.registry.getCurrentObservationScope(); - if (scope != null) { - scope.close(); - scope.getCurrentObservation().stop(); - if (log.isDebugEnabled()) { - log.debug("Removed the [" + scope.getCurrentObservation() + "] from thread local"); - } - } - } - - @Override - public void onTaskFailed(TaskExecution taskExecution, Throwable throwable) { - Observation.Scope scope = this.registry.getCurrentObservationScope(); - if (scope != null) { - Observation observation = scope.getCurrentObservation(); - observation.error(throwable); - onTaskEnd(taskExecution); - } - } - - @Override - public int getOrder() { - return Ordered.HIGHEST_PRECEDENCE; - } - -} diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/TaskDocumentedObservation.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/TaskDocumentedObservation.java index 03179ac3..80747bc6 100644 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/TaskDocumentedObservation.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/observation/TaskDocumentedObservation.java @@ -35,22 +35,6 @@ enum TaskDocumentedObservation implements DocumentedObservation { return TaskRunnerTags.values(); } - @Override - public String getPrefix() { - return "spring.cloud.task"; - } - }, - - /** - * Observation created within the lifecycle of a task. - */ - TASK_EXECUTION_LISTENER_OBSERVATION { - @Override - public String getName() { - return "spring.cloud.task.execution"; - } - - @Override public String getPrefix() { return "spring.cloud.task"; diff --git a/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/configuration/observation/ObservationIntegrationTests.java b/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/configuration/observation/ObservationIntegrationTests.java index 9d2cc6f3..b56ec25a 100644 --- a/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/configuration/observation/ObservationIntegrationTests.java +++ b/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/configuration/observation/ObservationIntegrationTests.java @@ -47,6 +47,8 @@ import org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingA import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.task.configuration.EnableTask; +import org.springframework.cloud.task.configuration.SimpleTaskAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -79,7 +81,8 @@ class ObservationIntegrationTests { } @Configuration - @ImportAutoConfiguration({ObservationAutoConfiguration.class, ObservationTaskAutoConfiguration.class, BraveAutoConfiguration.class, MicrometerTracingAutoConfiguration.class, MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class, ZipkinAutoConfiguration.class}) + @ImportAutoConfiguration({SimpleTaskAutoConfiguration.class, ObservationAutoConfiguration.class, ObservationTaskAutoConfiguration.class, BraveAutoConfiguration.class, MicrometerTracingAutoConfiguration.class, MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class, ZipkinAutoConfiguration.class}) + @EnableTask static class Config { private static final Logger log = LoggerFactory.getLogger(Config.class); diff --git a/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/configuration/observation/ObservationTaskExecutionListenerTests.java b/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/configuration/observation/ObservationTaskExecutionListenerTests.java deleted file mode 100644 index 881062e3..00000000 --- a/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/configuration/observation/ObservationTaskExecutionListenerTests.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2017-2022 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.task.configuration.observation; - -import java.util.Date; -import java.util.List; - -import io.micrometer.core.tck.TestObservationRegistry; -import org.junit.jupiter.api.Test; - -import org.springframework.cloud.task.repository.TaskExecution; - -import static io.micrometer.core.tck.TestObservationRegistryAssert.then; - -class ObservationTaskExecutionListenerTests { - - @Test - void testSuccessfulObservation() { - TestObservationRegistry registry = TestObservationRegistry.create(); - ObservationTaskExecutionListener listener = new ObservationTaskExecutionListener(registry, "my-project"); - TaskExecution taskExecution = taskExecution(); - - listener.onTaskStartup(taskExecution); - listener.onTaskEnd(taskExecution); - - then(registry) - .hasSingleObservationThat() - .hasNameEqualTo("spring.cloud.task.execution") - .hasContextualNameEqualTo("my-project"); - } - - @Test - void testErrorObservation() { - TestObservationRegistry registry = TestObservationRegistry.create(); - ObservationTaskExecutionListener listener = new ObservationTaskExecutionListener(registry, "my-project"); - TaskExecution taskExecution = taskExecution(); - - listener.onTaskStartup(taskExecution); - listener.onTaskFailed(taskExecution, new RuntimeException("error")); - - then(registry) - .hasSingleObservationThat() - .hasNameEqualTo("spring.cloud.task.execution") - .hasContextualNameEqualTo("my-project") - .thenThrowable() - .hasMessage("error"); - } - - private TaskExecution taskExecution() { - return new TaskExecution(1L, 1, "task", new Date(), new Date(), "bye", List.of("arg"), "boom", "id"); - } -} diff --git a/src/checkstyle/checkstyle-suppressions.xml b/src/checkstyle/checkstyle-suppressions.xml new file mode 100644 index 00000000..ab55cdec --- /dev/null +++ b/src/checkstyle/checkstyle-suppressions.xml @@ -0,0 +1,7 @@ + + + + +