Skip to content

Commit a6d89db

Browse files
committed
Simplify methodhandle initialization
1 parent 02ce8d8 commit a6d89db

File tree

1 file changed

+6
-36
lines changed

1 file changed

+6
-36
lines changed

dd-java-agent/instrumentation/spark-executor/src/main/java/datadog/trace/instrumentation/spark/SparkExecutorDecorator.java

+6-36
Original file line numberDiff line numberDiff line change
@@ -4,61 +4,31 @@
44
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
55
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
66
import datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator;
7+
import datadog.trace.util.MethodHandles;
78
import java.lang.invoke.MethodHandle;
8-
import java.lang.invoke.MethodHandles;
9-
import java.lang.reflect.Field;
109
import java.util.Properties;
1110
import org.apache.spark.executor.Executor;
1211
import org.apache.spark.executor.TaskMetrics;
13-
import org.slf4j.Logger;
14-
import org.slf4j.LoggerFactory;
1512

1613
public class SparkExecutorDecorator extends BaseDecorator {
17-
private static final Logger log = LoggerFactory.getLogger(SparkExecutorDecorator.class);
18-
1914
public static final CharSequence SPARK_TASK = UTF8BytesString.create("spark.task");
2015
public static final CharSequence SPARK = UTF8BytesString.create("spark");
2116
public static SparkExecutorDecorator DECORATE = new SparkExecutorDecorator();
2217
private final String propSparkAppName = "spark.app.name";
2318
private static final String TASK_DESCRIPTION_CLASSNAME =
2419
"org.apache.spark.scheduler.TaskDescription";
25-
private static final MethodHandles.Lookup lookup = MethodHandles.lookup();
26-
private static final MethodHandle propertiesField_mh;
27-
28-
private static Class<?> initClass() {
29-
try {
30-
return Class.forName(
31-
SparkExecutorDecorator.TASK_DESCRIPTION_CLASSNAME,
32-
false,
33-
SparkExecutorDecorator.class.getClassLoader());
34-
} catch (ClassNotFoundException e) {
35-
log.debug("Can't find class '{}'", TASK_DESCRIPTION_CLASSNAME, e);
36-
}
37-
return null;
38-
}
20+
private static final MethodHandle propertiesField_mh = getFieldGetter();
3921

4022
private static MethodHandle getFieldGetter() {
41-
Class<?> cls = initClass();
42-
4323
try {
44-
if (cls != null) {
45-
Field field = cls.getDeclaredField("properties");
46-
field.setAccessible(true);
47-
48-
return lookup.unreflectGetter(field);
49-
}
50-
51-
} catch (NoSuchFieldException | IllegalAccessException e) {
52-
log.debug("Can't find and unreflect declared field for '{}'", TASK_DESCRIPTION_CLASSNAME);
24+
return new MethodHandles(Executor.class.getClassLoader())
25+
.privateFieldGetter(TASK_DESCRIPTION_CLASSNAME, "properties");
26+
} catch (Throwable ignored) {
27+
// should be already logged
5328
}
54-
5529
return null;
5630
}
5731

58-
static {
59-
propertiesField_mh = getFieldGetter();
60-
}
61-
6232
@Override
6333
protected String[] instrumentationNames() {
6434
return new String[] {"spark-executor"};

0 commit comments

Comments
 (0)