From bf4eb15a2af2ac68da20e5266b8f8206a21400ec Mon Sep 17 00:00:00 2001 From: Paul Laffon Date: Mon, 1 Jul 2024 14:36:15 +0200 Subject: [PATCH] Use spark application name when service is set to spark (#7252) DD_SPARK_APP_NAME_AS_SERVICE also use spark.app.name as the default service if service is set to spark USM can auto-infer the service to spark, in this case we still want to use the spark app name as the service --- .../spark/AbstractDatadogSparkListener.java | 19 +++++++++++++++---- .../spark/AbstractSparkTest.groovy | 3 ++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java index 459ecfdaef4..f16d4cfb2c4 100644 --- a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java +++ b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractDatadogSparkListener.java @@ -1118,13 +1118,24 @@ private static String getDatabricksServiceName(SparkConf conf, String databricks } private static String getSparkServiceName(SparkConf conf, boolean isRunningOnDatabricks) { - if (Config.get().isServiceNameSetByUser() - || !Config.get().useSparkAppNameAsService() - || isRunningOnDatabricks) { + // If config is not set or running on databricks, not changing the service name + if (!Config.get().useSparkAppNameAsService() || isRunningOnDatabricks) { return null; } - return conf.get("spark.app.name", null); + // Keep service set by user, except if it is only "spark" that can be set by USM + String serviceName = Config.get().getServiceName(); + if (Config.get().isServiceNameSetByUser() && !"spark".equals(serviceName)) { + log.debug("Service '{}' explicitly set by user, not using the application name", serviceName); + return null; + } + + String sparkAppName = conf.get("spark.app.name", null); + if (sparkAppName != null) { + log.info("Using Spark application name '{}' as the Datadog service name", sparkAppName); + } + + return sparkAppName; } private static String getDatabricksRunName(SparkConf conf) { diff --git a/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkTest.groovy b/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkTest.groovy index 821b93fa9e5..23c706496e1 100644 --- a/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkTest.groovy +++ b/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkTest.groovy @@ -684,7 +684,8 @@ abstract class AbstractSparkTest extends AgentTestRunner { where: ddService | sparkAppNameAsService | appName | isRunningOnDatabricks | expectedService - "foobar" | true | "some_app" | true | "(?!.*some_app).*" + "foobar" | true | "some_app" | false | "(?!.*some_app).*" + "spark" | true | "some_app" | false | "some_app" null | true | "some_app" | true | "(?!.*some_app).*" null | true | "some_app" | false | "some_app" null | false | "some_app" | false | "(?!.*some_app).*"