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 <tled...@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); }