You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by tl...@apache.org on 2021/03/04 11:46:29 UTC

[ignite] branch master updated: IGNITE-14008 SQL tracing: add tag sql.query.id (#8682)

This is an automated email from the ASF dual-hosted git repository.

tledkov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 5269c15  IGNITE-14008 SQL tracing: add tag sql.query.id (#8682)
5269c15 is described below

commit 5269c159aab312b9772b1e42798a6ff98d52c0a4
Author: tledkov <tl...@gridgain.com>
AuthorDate: Thu Mar 4 14:46:12 2021 +0300

    IGNITE-14008 SQL tracing: add tag sql.query.id (#8682)
---
 .../processors/query/RunningQueryManager.java      |  5 ++-
 .../internal/processors/tracing/SpanTags.java      |  3 ++
 .../monitoring/opencensus/AbstractTracingTest.java | 51 ++++++++++++++++++++--
 .../opencensus/OpenCensusSqlJdbcTracingTest.java   |  9 +++-
 .../opencensus/OpenCensusSqlNativeTracingTest.java | 11 ++++-
 5 files changed, 73 insertions(+), 6 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/RunningQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/RunningQueryManager.java
index 36159f0..98af2dd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/RunningQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/RunningQueryManager.java
@@ -44,6 +44,7 @@ import static org.apache.ignite.internal.processors.cache.query.GridCacheQueryTy
 import static org.apache.ignite.internal.processors.cache.query.GridCacheQueryType.SQL_FIELDS;
 import static org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
 import static org.apache.ignite.internal.processors.tracing.SpanTags.ERROR;
+import static org.apache.ignite.internal.processors.tracing.SpanTags.SQL_QRY_ID;
 
 /**
  * Keep information about all running queries.
@@ -147,7 +148,7 @@ public class RunningQueryManager {
         @Nullable GridQueryCancel cancel) {
         long qryId = qryIdGen.incrementAndGet();
 
-        GridRunningQueryInfo run = new GridRunningQueryInfo(
+        final GridRunningQueryInfo run = new GridRunningQueryInfo(
             qryId,
             localNodeId,
             qry,
@@ -166,6 +167,8 @@ public class RunningQueryManager {
 
         assert preRun == null : "Running query already registered [prev_qry=" + preRun + ", newQry=" + run + ']';
 
+        run.span().addTag(SQL_QRY_ID, run::globalQueryId);
+
         return qryId;
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanTags.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanTags.java
index 38327f4..76d8100 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanTags.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/tracing/SpanTags.java
@@ -111,6 +111,9 @@ public class SpanTags {
     /** Whether parsing of the SQL query was skipped due to the cached result. */
     public static final String SQL_PARSER_CACHE_HIT = "sql.parser.cache.hit";
 
+    /** Query identifier. */
+    public static final String SQL_QRY_ID = "sql.query.id";
+
     /** */
     private SpanTags() {}
 
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/AbstractTracingTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/AbstractTracingTest.java
index 450ed81..2760362 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/AbstractTracingTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/AbstractTracingTest.java
@@ -208,6 +208,25 @@ public abstract class AbstractTracingTest extends GridCommonAbstractTest {
         int expSpansCnt,
         /* tagName: tagValue*/ Map<String, String> expAttrs
     ) {
+        return checkSpan(spanType, parentSpanId, expSpansCnt, expAttrs, CheckAttributes.EQUALS);
+    }
+
+    /**
+     * Check span.
+     *
+     * @param spanType Span type.
+     * @param parentSpanId Parent span id.
+     * @param expSpansCnt expected spans count.
+     * @param expAttrs Attributes to check.
+     * @return List of founded span ids.
+     */
+    java.util.List<SpanId> checkSpan(
+        SpanType spanType,
+        SpanId parentSpanId,
+        int expSpansCnt,
+        /* tagName: tagValue*/ Map<String, String> expAttrs,
+        CheckAttributes attrCheckType
+    ) {
         java.util.List<SpanData> gotSpans = hnd.allSpans()
             .filter(
                 span -> parentSpanId != null ?
@@ -222,7 +241,7 @@ public abstract class AbstractTracingTest extends GridCommonAbstractTest {
         gotSpans.forEach(spanData -> {
             spanIds.add(spanData.getContext().getSpanId());
 
-            checkSpanAttributes(spanData, expAttrs);
+            checkSpanAttributes(spanData, expAttrs, attrCheckType);
         });
 
         return spanIds;
@@ -266,11 +285,28 @@ public abstract class AbstractTracingTest extends GridCommonAbstractTest {
      * @param spanData Span data to check.
      * @param expAttrs Attributes to check.
      */
-    private void checkSpanAttributes(SpanData spanData, /* tagName: tagValue*/ Map<String, String> expAttrs) {
+    private void checkSpanAttributes(
+        SpanData spanData,
+        /* tagName: tagValue*/ Map<String, String> expAttrs,
+        CheckAttributes attrCheckType
+    ) {
         Map<String, AttributeValue> attrs = spanData.getAttributes().getAttributeMap();
 
         if (expAttrs != null) {
-            assertEquals(expAttrs.size(), attrs.size());
+            switch (attrCheckType) {
+                case EQUALS:
+                    assertEquals(expAttrs.size(), attrs.size());
+
+                    break;
+
+                case CONTAINS:
+                    assertTrue(expAttrs.size() <= attrs.size());
+
+                    break;
+
+                default:
+                    fail("Unexpected attributes check: " + attrCheckType);
+            }
 
             for (Map.Entry<String, String> entry : expAttrs.entrySet())
                 assertEquals(entry.getValue(), attributeValueToString(attrs.get(entry.getKey())));
@@ -409,4 +445,13 @@ public abstract class AbstractTracingTest extends GridCommonAbstractTest {
             collectedSpansByParents.clear();
         }
     }
+
+    /** */
+    public enum CheckAttributes {
+        /** */
+        EQUALS,
+
+        /** */
+        CONTAINS
+    }
 }
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusSqlJdbcTracingTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusSqlJdbcTracingTest.java
index d8adcaa..e0fe030 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusSqlJdbcTracingTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusSqlJdbcTracingTest.java
@@ -23,6 +23,8 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.List;
 import java.util.Objects;
+import java.util.UUID;
+
 import io.opencensus.trace.SpanId;
 import org.apache.ignite.client.Config;
 import org.apache.ignite.internal.IgniteEx;
@@ -35,6 +37,7 @@ import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.internal.processors.query.QueryUtils.DFLT_SCHEMA;
 import static org.apache.ignite.internal.processors.tracing.SpanTags.SQL_PAGE_ROWS;
+import static org.apache.ignite.internal.processors.tracing.SpanTags.SQL_QRY_ID;
 import static org.apache.ignite.internal.processors.tracing.SpanType.SQL_BATCH_PROCESS;
 import static org.apache.ignite.internal.processors.tracing.SpanType.SQL_CMD_QRY_EXECUTE;
 import static org.apache.ignite.internal.processors.tracing.SpanType.SQL_CURSOR_CLOSE;
@@ -51,7 +54,7 @@ import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPL
 import static org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_NEVER;
 
 /**
- * Tests tracing of SQL quries execution via JDBC.
+ * Tests tracing of SQL queries execution via JDBC.
  */
 public class OpenCensusSqlJdbcTracingTest extends OpenCensusSqlNativeTracingTest {
     /** JDBC URL prefix. */
@@ -75,6 +78,10 @@ public class OpenCensusSqlJdbcTracingTest extends OpenCensusSqlNativeTracingTest
 
         SpanId rootSpan = executeAndCheckRootSpan("SELECT orgVal FROM " + orgTable, TEST_SCHEMA, false, false, true);
 
+        String qryId = getAttribute(rootSpan, SQL_QRY_ID);
+        assertTrue(Long.parseLong(qryId.substring(qryId.indexOf('_') + 1)) > 0);
+        UUID.fromString(qryId.substring(0, qryId.indexOf('_')));
+
         checkChildSpan(SQL_QRY_PARSE, rootSpan);
         checkChildSpan(SQL_CURSOR_OPEN, rootSpan);
         checkChildSpan(SQL_ITER_OPEN, rootSpan);
diff --git a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusSqlNativeTracingTest.java b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusSqlNativeTracingTest.java
index 309b6f7..b5feb66 100644
--- a/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusSqlNativeTracingTest.java
+++ b/modules/opencensus/src/test/java/org/apache/ignite/internal/processors/monitoring/opencensus/OpenCensusSqlNativeTracingTest.java
@@ -69,6 +69,7 @@ import static org.apache.ignite.internal.processors.tracing.SpanTags.SQL_CACHE_U
 import static org.apache.ignite.internal.processors.tracing.SpanTags.SQL_IDX_RANGE_ROWS;
 import static org.apache.ignite.internal.processors.tracing.SpanTags.SQL_PAGE_ROWS;
 import static org.apache.ignite.internal.processors.tracing.SpanTags.SQL_PARSER_CACHE_HIT;
+import static org.apache.ignite.internal.processors.tracing.SpanTags.SQL_QRY_ID;
 import static org.apache.ignite.internal.processors.tracing.SpanTags.SQL_QRY_TEXT;
 import static org.apache.ignite.internal.processors.tracing.SpanTags.SQL_SCHEMA;
 import static org.apache.ignite.internal.processors.tracing.SpanTags.tag;
@@ -285,6 +286,10 @@ public class OpenCensusSqlNativeTracingTest extends AbstractTracingTest {
             "SELECT * FROM " + prsnTable + " AS p JOIN " + orgTable + " AS o ON o.orgId = p.prsnId",
             TEST_SCHEMA, false, true, true);
 
+        String qryId = getAttribute(rootSpan, SQL_QRY_ID);
+        assertTrue(Long.parseLong(qryId.substring(qryId.indexOf('_') + 1)) > 0);
+        UUID.fromString(qryId.substring(0, qryId.indexOf('_')));
+
         checkChildSpan(SQL_QRY_PARSE, rootSpan);
         checkChildSpan(SQL_CURSOR_OPEN, rootSpan);
 
@@ -547,6 +552,9 @@ public class OpenCensusSqlNativeTracingTest extends AbstractTracingTest {
     protected void checkBasicSelectQuerySpanTree(SpanId rootSpan, int expRows) {
         int fetchedRows = 0;
 
+        String qryId = getAttribute(rootSpan, SQL_QRY_ID);
+        assertTrue(Long.parseLong(qryId.substring(qryId.indexOf('_') + 1)) > 0);
+
         SpanId iterSpan = checkChildSpan(SQL_ITER_OPEN, rootSpan);
 
         SpanId fetchSpan = checkChildSpan(SQL_PAGE_FETCH, iterSpan);
@@ -705,7 +713,8 @@ public class OpenCensusSqlNativeTracingTest extends AbstractTracingTest {
                 .put(tag(NODE, NAME), reducer().name())
                 .put(SQL_QRY_TEXT, sql)
                 .put(SQL_SCHEMA, schema)
-                .build()
+                .build(),
+            CheckAttributes.CONTAINS
         ).get(0);
     }