diff --git a/hypertrace-ingester/build.gradle.kts b/hypertrace-ingester/build.gradle.kts index e777d4b6b..4cd0feebc 100644 --- a/hypertrace-ingester/build.gradle.kts +++ b/hypertrace-ingester/build.gradle.kts @@ -28,7 +28,7 @@ dependencies { implementation("org.hypertrace.core.kafkastreams.framework:kafka-streams-framework:0.1.21") implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.26") implementation("org.hypertrace.core.serviceframework:platform-metrics:0.1.26") - implementation("org.hypertrace.core.datamodel:data-model:0.1.17") + implementation("org.hypertrace.core.datamodel:data-model:0.1.18") implementation("org.hypertrace.core.viewgenerator:view-generator-framework:0.3.1") implementation("com.typesafe:config:1.4.1") implementation("org.apache.commons:commons-lang3:3.12.0") diff --git a/hypertrace-trace-enricher/enriched-span-constants/build.gradle.kts b/hypertrace-trace-enricher/enriched-span-constants/build.gradle.kts index bb4b80adf..acdceed1f 100644 --- a/hypertrace-trace-enricher/enriched-span-constants/build.gradle.kts +++ b/hypertrace-trace-enricher/enriched-span-constants/build.gradle.kts @@ -65,7 +65,7 @@ sourceSets { dependencies { api("com.google.protobuf:protobuf-java-util:3.15.7") - implementation("org.hypertrace.core.datamodel:data-model:0.1.17") + implementation("org.hypertrace.core.datamodel:data-model:0.1.18") implementation(project(":span-normalizer:raw-span-constants")) implementation(project(":span-normalizer:span-normalizer-constants")) implementation(project(":semantic-convention-utils")) diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-api/build.gradle.kts b/hypertrace-trace-enricher/hypertrace-trace-enricher-api/build.gradle.kts index a2f911d79..e95f2ec23 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-api/build.gradle.kts +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-api/build.gradle.kts @@ -9,7 +9,7 @@ tasks.test { dependencies { implementation(project(":hypertrace-trace-enricher:enriched-span-constants")) - implementation("org.hypertrace.core.datamodel:data-model:0.1.17") + implementation("org.hypertrace.core.datamodel:data-model:0.1.18") implementation("org.slf4j:slf4j-api:1.7.30") implementation("org.apache.commons:commons-lang3:3.12.0") diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-api/src/main/java/org/hypertrace/traceenricher/trace/util/StructuredTraceGraphBuilder.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-api/src/main/java/org/hypertrace/traceenricher/trace/util/StructuredTraceGraphBuilder.java index 43d837469..8a054c27d 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-api/src/main/java/org/hypertrace/traceenricher/trace/util/StructuredTraceGraphBuilder.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-api/src/main/java/org/hypertrace/traceenricher/trace/util/StructuredTraceGraphBuilder.java @@ -16,19 +16,23 @@ public class StructuredTraceGraphBuilder { public static StructuredTraceGraph buildGraph(StructuredTrace trace) { StructuredTrace cachedTrace = cachedTraceThreadLocal.get(); + StructuredTraceGraph cachedGraph = cachedGraphThreadLocal.get(); boolean shouldRebuildTraceEventsGraph = GraphBuilderUtil.isTraceEventsChanged(cachedTrace, trace); boolean shouldRebuildTraceEntitiesGraph = GraphBuilderUtil.isTraceEntitiesChanged(cachedTrace, trace); - if (GraphBuilderUtil.isDifferentTrace(cachedTrace, trace) + if (null == cachedGraph + || GraphBuilderUtil.isDifferentTrace(cachedTrace, trace) || (shouldRebuildTraceEventsGraph && shouldRebuildTraceEntitiesGraph)) { Instant start = Instant.now(); - StructuredTraceGraph graph = StructuredTraceGraph.createGraph(trace); - LOG.debug( - "Time taken in building StructuredTraceGraph, duration_millis:{} for tenantId:{}", - Duration.between(start, Instant.now()).toMillis(), - trace.getCustomerId()); + StructuredTraceGraph graph = new StructuredTraceGraph(trace); + if (LOG.isDebugEnabled()) { + LOG.debug( + "Time taken in building StructuredTraceGraph, duration_millis:{} for tenantId:{}", + Duration.between(start, Instant.now()).toMillis(), + trace.getCustomerId()); + } cachedTraceThreadLocal.set(StructuredTrace.newBuilder(trace).build()); cachedGraphThreadLocal.set(graph); debugGraph("Case: Rebuilding the graph.", graph, trace); @@ -37,22 +41,25 @@ public static StructuredTraceGraph buildGraph(StructuredTrace trace) { if (shouldRebuildTraceEventsGraph || shouldRebuildTraceEntitiesGraph) { Instant start = Instant.now(); - StructuredTraceGraph graph = - shouldRebuildTraceEventsGraph - ? StructuredTraceGraph.reCreateTraceEventsGraph(trace) - : StructuredTraceGraph.reCreateTraceEntitiesGraph(trace); - LOG.debug( - "Time taken in building TraceEventsGraph, duration_millis:{} for tenantId:{}", - Duration.between(start, Instant.now()).toMillis(), - trace.getCustomerId()); + if (shouldRebuildTraceEventsGraph) { + cachedGraph.reCreateTraceEventsGraph(trace); + } else { + cachedGraph.reCreateTraceEntitiesGraph(trace); + } + if (LOG.isDebugEnabled()) { + LOG.debug( + "Time taken in building TraceEventsGraph, duration_millis:{} for tenantId:{}", + Duration.between(start, Instant.now()).toMillis(), + trace.getCustomerId()); + } cachedTraceThreadLocal.set(StructuredTrace.newBuilder(trace).build()); - cachedGraphThreadLocal.set(graph); - debugGraph("Case: Partially building the graph.", graph, trace); - return graph; + cachedGraphThreadLocal.set(cachedGraph); + debugGraph("Case: Partially building the graph.", cachedGraph, trace); + return cachedGraph; } debugGraph("Case: Not building the graph.", cachedGraphThreadLocal.get(), trace); - return cachedGraphThreadLocal.get(); + return cachedGraph; } private static void debugGraph( @@ -68,7 +75,7 @@ private static void debugGraph( (null != graph.getTraceEntitiesGraph())); // build the graph again and check - StructuredTraceGraph tempGraph = StructuredTraceGraph.createGraph(trace); + StructuredTraceGraph tempGraph = new StructuredTraceGraph(trace); LOG.info( logPrefix + "Recreating StructuredTraceGraph. Is events graph non-null: {}." @@ -76,7 +83,7 @@ private static void debugGraph( (null != tempGraph.getTraceEventsGraph()), (null != tempGraph.getTraceEntitiesGraph())); - tempGraph = StructuredTraceGraph.reCreateTraceEventsGraph(trace); + tempGraph.reCreateTraceEventsGraph(trace); LOG.info( logPrefix + "Recreating events graph. Is events graph non-null: {}." @@ -84,7 +91,7 @@ private static void debugGraph( (null != tempGraph.getTraceEventsGraph()), (null != tempGraph.getTraceEntitiesGraph())); - tempGraph = StructuredTraceGraph.reCreateTraceEntitiesGraph(trace); + tempGraph.reCreateTraceEntitiesGraph(trace); LOG.info( logPrefix + "Recreating entities graph. Is events graph non-null: {}." diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-api/src/test/java/org/hypertrace/traceenricher/trace/util/StructuredTraceGraphBuilderTest.java b/hypertrace-trace-enricher/hypertrace-trace-enricher-api/src/test/java/org/hypertrace/traceenricher/trace/util/StructuredTraceGraphBuilderTest.java index 172da26af..4041a94b6 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-api/src/test/java/org/hypertrace/traceenricher/trace/util/StructuredTraceGraphBuilderTest.java +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-api/src/test/java/org/hypertrace/traceenricher/trace/util/StructuredTraceGraphBuilderTest.java @@ -1,8 +1,8 @@ package org.hypertrace.traceenricher.trace.util; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockConstruction; import static org.mockito.Mockito.mockStatic; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.when; import java.nio.ByteBuffer; @@ -14,6 +14,7 @@ import org.hypertrace.core.datamodel.shared.StructuredTraceGraph; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.mockito.MockedConstruction; import org.mockito.MockedStatic; public class StructuredTraceGraphBuilderTest { @@ -44,33 +45,15 @@ void testBuildGraph() { .when(() -> StructuredTrace.newBuilder(underTestTrace)) .thenReturn(builder); - // make two calls, and check that first call create cache entries, and second call uses same - StructuredTraceGraph mockedStructuredTraceGraph = mock(StructuredTraceGraph.class); - try (MockedStatic structuredTraceGraphMockedStatic = - mockStatic(StructuredTraceGraph.class)) { - structuredTraceGraphMockedStatic - .when(() -> StructuredTraceGraph.createGraph(underTestTrace)) - .thenReturn(mockedStructuredTraceGraph); - structuredTraceGraphMockedStatic - .when(() -> StructuredTraceGraph.reCreateTraceEntitiesGraph(underTestTrace)) - .thenReturn(mockedStructuredTraceGraph); - structuredTraceGraphMockedStatic - .when(() -> StructuredTraceGraph.reCreateTraceEventsGraph(underTestTrace)) - .thenReturn(mockedStructuredTraceGraph); + try (MockedConstruction mocked = + mockConstruction(StructuredTraceGraph.class)) { + // calls first time StructuredTraceGraph actual = StructuredTraceGraphBuilder.buildGraph(underTestTrace); - Assertions.assertEquals(mockedStructuredTraceGraph, actual); - structuredTraceGraphMockedStatic.verify( - // todo change times to 1 when logging is changed to debug level in - // StructuredTraceGraphBuilder#buildGraph - () -> StructuredTraceGraph.createGraph(underTestTrace), times(2)); // calls second time, this time it returns from cache - StructuredTraceGraphBuilder.buildGraph(underTestTrace); - structuredTraceGraphMockedStatic.verify( - // todo change times to 1 when logging is changed to debug level in - // StructuredTraceGraphBuilder#buildGraph - () -> StructuredTraceGraph.createGraph(underTestTrace), times(3)); + StructuredTraceGraph cached = StructuredTraceGraphBuilder.buildGraph(underTestTrace); + Assertions.assertEquals(actual, cached); } } } diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/build.gradle.kts b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/build.gradle.kts index d0c145229..484b6ca0a 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/build.gradle.kts +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher-impl/build.gradle.kts @@ -16,7 +16,7 @@ dependencies { implementation(project(":semantic-convention-utils")) implementation(project(":hypertrace-trace-enricher:trace-reader")) - implementation("org.hypertrace.core.datamodel:data-model:0.1.17") + implementation("org.hypertrace.core.datamodel:data-model:0.1.18") implementation("org.hypertrace.entity.service:entity-service-client:0.6.10") implementation("org.hypertrace.core.serviceframework:platform-metrics:0.1.26") implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.5.2") diff --git a/hypertrace-trace-enricher/hypertrace-trace-enricher/build.gradle.kts b/hypertrace-trace-enricher/hypertrace-trace-enricher/build.gradle.kts index 59e45e9f6..c627cbc33 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-enricher/build.gradle.kts +++ b/hypertrace-trace-enricher/hypertrace-trace-enricher/build.gradle.kts @@ -35,7 +35,7 @@ tasks.test { dependencies { implementation(project(":hypertrace-trace-enricher:hypertrace-trace-enricher-impl")) - implementation("org.hypertrace.core.datamodel:data-model:0.1.17") + implementation("org.hypertrace.core.datamodel:data-model:0.1.18") implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.26") implementation("org.hypertrace.core.serviceframework:platform-metrics:0.1.26") implementation("org.hypertrace.entity.service:entity-service-client:0.6.10") diff --git a/hypertrace-trace-enricher/hypertrace-trace-visualizer/build.gradle.kts b/hypertrace-trace-enricher/hypertrace-trace-visualizer/build.gradle.kts index 7502024b5..3540856d5 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-visualizer/build.gradle.kts +++ b/hypertrace-trace-enricher/hypertrace-trace-visualizer/build.gradle.kts @@ -3,7 +3,7 @@ plugins { } dependencies { - implementation("org.hypertrace.core.datamodel:data-model:0.1.17") + implementation("org.hypertrace.core.datamodel:data-model:0.1.18") implementation("org.json:json:20210307") implementation("org.apache.commons:commons-lang3:3.12.0") diff --git a/hypertrace-trace-enricher/hypertrace-trace-visualizer/src/main/java/org/hypertrace/traceenricher/util/TraceUI.java b/hypertrace-trace-enricher/hypertrace-trace-visualizer/src/main/java/org/hypertrace/traceenricher/util/TraceUI.java index 542911dc6..f54134c93 100644 --- a/hypertrace-trace-enricher/hypertrace-trace-visualizer/src/main/java/org/hypertrace/traceenricher/util/TraceUI.java +++ b/hypertrace-trace-enricher/hypertrace-trace-visualizer/src/main/java/org/hypertrace/traceenricher/util/TraceUI.java @@ -35,7 +35,7 @@ private TraceUI(StructuredTrace trace, Set roots) { } public static TraceUI build(StructuredTrace trace) { - StructuredTraceGraph graph = StructuredTraceGraph.createGraph(trace); + StructuredTraceGraph graph = new StructuredTraceGraph(trace); Set roots = findRootEvents(trace); Set rootJsons = new HashSet<>(); for (Event root : roots) { diff --git a/hypertrace-view-generator/hypertrace-view-generator/build.gradle.kts b/hypertrace-view-generator/hypertrace-view-generator/build.gradle.kts index f0d19b45a..108de3c45 100644 --- a/hypertrace-view-generator/hypertrace-view-generator/build.gradle.kts +++ b/hypertrace-view-generator/hypertrace-view-generator/build.gradle.kts @@ -33,7 +33,7 @@ dependencies { // TODO: migrate in core implementation("org.hypertrace.core.viewgenerator:view-generator-framework:0.3.1") - implementation("org.hypertrace.core.datamodel:data-model:0.1.17") + implementation("org.hypertrace.core.datamodel:data-model:0.1.18") implementation("org.hypertrace.core.serviceframework:platform-metrics:0.1.26") implementation("org.hypertrace.entity.service:entity-service-api:0.6.10") diff --git a/raw-spans-grouper/raw-spans-grouper/build.gradle.kts b/raw-spans-grouper/raw-spans-grouper/build.gradle.kts index d4b8a3624..85b3c7431 100644 --- a/raw-spans-grouper/raw-spans-grouper/build.gradle.kts +++ b/raw-spans-grouper/raw-spans-grouper/build.gradle.kts @@ -38,7 +38,7 @@ dependencies { because("https://snyk.io/vuln/SNYK-JAVA-ORGGLASSFISHJERSEYCORE-1255637") } implementation(project(":span-normalizer:span-normalizer-api")) - implementation("org.hypertrace.core.datamodel:data-model:0.1.17") + implementation("org.hypertrace.core.datamodel:data-model:0.1.18") implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.26") implementation("org.hypertrace.core.serviceframework:platform-metrics:0.1.26") diff --git a/semantic-convention-utils/build.gradle.kts b/semantic-convention-utils/build.gradle.kts index 8b184fc46..860b157ef 100644 --- a/semantic-convention-utils/build.gradle.kts +++ b/semantic-convention-utils/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { implementation(project(":span-normalizer:raw-span-constants")) implementation(project(":span-normalizer:span-normalizer-constants")) - implementation("org.hypertrace.core.datamodel:data-model:0.1.17") + implementation("org.hypertrace.core.datamodel:data-model:0.1.18") implementation("org.hypertrace.entity.service:entity-service-client:0.6.10") implementation("org.apache.commons:commons-lang3:3.12.0") diff --git a/span-normalizer/span-normalizer/build.gradle.kts b/span-normalizer/span-normalizer/build.gradle.kts index 1237daad0..485bd4ba5 100644 --- a/span-normalizer/span-normalizer/build.gradle.kts +++ b/span-normalizer/span-normalizer/build.gradle.kts @@ -34,7 +34,7 @@ dependencies { implementation(project(":span-normalizer:span-normalizer-constants")) implementation(project(":semantic-convention-utils")) - implementation("org.hypertrace.core.datamodel:data-model:0.1.17") + implementation("org.hypertrace.core.datamodel:data-model:0.1.18") implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.26") implementation("org.hypertrace.core.serviceframework:platform-metrics:0.1.26") implementation("org.hypertrace.core.kafkastreams.framework:kafka-streams-framework:0.1.21")