From 2357bd14dff78f80738e6d05dd89e36f3519e9b7 Mon Sep 17 00:00:00 2001 From: avinash Date: Sat, 31 Jul 2021 13:47:54 +0530 Subject: [PATCH] Optimization to avoid excessing reflection --- .../core/spannormalizer/util/JaegerHTTagsConverter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/span-normalizer/span-normalizer/src/main/java/org/hypertrace/core/spannormalizer/util/JaegerHTTagsConverter.java b/span-normalizer/span-normalizer/src/main/java/org/hypertrace/core/spannormalizer/util/JaegerHTTagsConverter.java index 8252a1d78..bd47db0f8 100644 --- a/span-normalizer/span-normalizer/src/main/java/org/hypertrace/core/spannormalizer/util/JaegerHTTagsConverter.java +++ b/span-normalizer/span-normalizer/src/main/java/org/hypertrace/core/spannormalizer/util/JaegerHTTagsConverter.java @@ -5,8 +5,15 @@ import org.hypertrace.core.datamodel.AttributeValue; public class JaegerHTTagsConverter { + private static final AttributeValue.Builder ATTRIBUTE_VALUE_BUILDER = AttributeValue.newBuilder(); + public static AttributeValue createFromJaegerKeyValue(JaegerSpanInternalModel.KeyValue keyValue) { - AttributeValue.Builder valueBuilder = AttributeValue.newBuilder(); + // newBuilder() in Avro classes uses SpecificData.getForSchema which uses + // reflection(Class.forName) for loading the class + // This may be too expensive when being done at a large scale(like in the case of + // AttributeValue). + // By using an existing empty builder to create a new builder we are bypassing the reflection + AttributeValue.Builder valueBuilder = AttributeValue.newBuilder(ATTRIBUTE_VALUE_BUILDER); switch (keyValue.getVType()) { case STRING: valueBuilder.setValue(keyValue.getVStr());