Search in sources :

Example 1 with NODE_ID

use of org.apache.ignite.internal.processors.tracing.SpanTags.NODE_ID in project ignite by apache.

the class OpenCensusSqlNativeTracingTest method testDistributedJoin.

/**
 * Tests tracing of distributed join query which includes all communications between reducer and mapped nodes and
 * index range requests.
 *
 * @throws Exception If failed.
 */
@Test
public void testDistributedJoin() throws Exception {
    String prsnTable = createTableAndPopulate(Person.class, PARTITIONED, 1);
    String orgTable = createTableAndPopulate(Organization.class, PARTITIONED, 1);
    SpanId rootSpan = executeAndCheckRootSpan("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);
    SpanId iterSpan = checkChildSpan(SQL_ITER_OPEN, rootSpan);
    List<SpanId> execReqSpans = checkSpan(SQL_QRY_EXEC_REQ, iterSpan, GRID_CNT, null);
    int idxRangeReqRows = 0;
    int preparedRows = 0;
    int fetchedRows = 0;
    for (int i = 0; i < GRID_CNT; i++) {
        SpanId execReqSpan = execReqSpans.get(i);
        Ignite ignite = Ignition.ignite(UUID.fromString(getAttribute(execReqSpan, NODE_ID)));
        SpanId partsReserveSpan = checkChildSpan(SQL_PARTITIONS_RESERVE, execReqSpan);
        List<String> partsReserveLogs = handler().spanById(partsReserveSpan).getAnnotations().getEvents().stream().map(e -> e.getEvent().getDescription()).collect(Collectors.toList());
        assertEquals(2, partsReserveLogs.size());
        Pattern ptrn = compile("Cache partitions were reserved \\[cache=(.+), partitions=\\[(.+)], topology=(.+)]");
        partsReserveLogs.forEach(l -> {
            Matcher matcher = ptrn.matcher(l);
            assertTrue(matcher.matches());
            Set<Integer> expParts = Arrays.stream(ignite.affinity(matcher.group(1)).primaryPartitions(ignite.cluster().localNode())).boxed().collect(Collectors.toSet());
            Set<Integer> parts = Arrays.stream(matcher.group(2).split(",")).map(s -> parseInt(s.trim())).collect(Collectors.toSet());
            assertEquals(expParts, parts);
        });
        SpanId execSpan = checkChildSpan(SQL_QRY_EXECUTE, execReqSpan);
        List<SpanId> distrLookupReqSpans = findChildSpans(SQL_IDX_RANGE_REQ, execSpan);
        for (SpanId span : distrLookupReqSpans) {
            idxRangeReqRows += parseInt(getAttribute(span, SQL_IDX_RANGE_ROWS));
            checkChildSpan(SQL_IDX_RANGE_RESP, span);
        }
        preparedRows += parseInt(getAttribute(checkChildSpan(SQL_PAGE_PREPARE, execReqSpan), SQL_PAGE_ROWS));
        checkChildSpan(SQL_PAGE_RESP, execReqSpan);
    }
    SpanId pageFetchSpan = checkChildSpan(SQL_PAGE_FETCH, iterSpan);
    fetchedRows += parseInt(getAttribute(pageFetchSpan, SQL_PAGE_ROWS));
    checkChildSpan(SQL_PAGE_WAIT, pageFetchSpan);
    SpanId nexPageSpan = checkChildSpan(SQL_NEXT_PAGE_REQ, pageFetchSpan);
    preparedRows += parseInt(getAttribute(checkChildSpan(SQL_PAGE_PREPARE, nexPageSpan), SQL_PAGE_ROWS));
    checkChildSpan(SQL_PAGE_RESP, nexPageSpan);
    List<SpanId> pageFetchSpans = findChildSpans(SQL_PAGE_FETCH, rootSpan);
    for (SpanId span : pageFetchSpans) {
        fetchedRows += parseInt(getAttribute(span, SQL_PAGE_ROWS));
        checkChildSpan(SQL_PAGE_WAIT, span);
        List<SpanId> nextPageSpans = findChildSpans(SQL_NEXT_PAGE_REQ, span);
        if (!nextPageSpans.isEmpty()) {
            assertEquals(1, nextPageSpans.size());
            SpanId nextPageSpan = nextPageSpans.get(0);
            preparedRows += parseInt(getAttribute(checkChildSpan(SQL_PAGE_PREPARE, nextPageSpan), SQL_PAGE_ROWS));
            checkChildSpan(SQL_PAGE_RESP, nextPageSpan);
        }
    }
    assertEquals(TEST_TABLE_POPULATION, fetchedRows);
    assertEquals(TEST_TABLE_POPULATION, preparedRows);
    assertEquals(TEST_TABLE_POPULATION, idxRangeReqRows);
    checkSpan(SQL_QRY_CANCEL_REQ, rootSpan, mapNodesCount(), null);
    assertFalse(findChildSpans(SQL_CURSOR_CLOSE, rootSpan).isEmpty());
}
Also used : IgniteInternalFuture(org.apache.ignite.internal.IgniteInternalFuture) SQL_DML_QRY_RESP(org.apache.ignite.internal.processors.tracing.SpanType.SQL_DML_QRY_RESP) SQL_NEXT_PAGE_REQ(org.apache.ignite.internal.processors.tracing.SpanType.SQL_NEXT_PAGE_REQ) TestRecordingCommunicationSpi.spi(org.apache.ignite.internal.TestRecordingCommunicationSpi.spi) Arrays(java.util.Arrays) SQL_IDX_RANGE_ROWS(org.apache.ignite.internal.processors.tracing.SpanTags.SQL_IDX_RANGE_ROWS) SpanType(org.apache.ignite.internal.processors.tracing.SpanType) SQL_PAGE_ROWS(org.apache.ignite.internal.processors.tracing.SpanTags.SQL_PAGE_ROWS) SqlFieldsQuery(org.apache.ignite.cache.query.SqlFieldsQuery) SQL_QRY_ID(org.apache.ignite.internal.processors.tracing.SpanTags.SQL_QRY_ID) SQL_CMD_QRY_EXECUTE(org.apache.ignite.internal.processors.tracing.SpanType.SQL_CMD_QRY_EXECUTE) IgniteEx(org.apache.ignite.internal.IgniteEx) SQL_FAIL_RESP(org.apache.ignite.internal.processors.tracing.SpanType.SQL_FAIL_RESP) GridTestUtils.runAsync(org.apache.ignite.testframework.GridTestUtils.runAsync) NoopSpan(org.apache.ignite.internal.processors.tracing.NoopSpan) Matcher(java.util.regex.Matcher) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) SQL_PAGE_WAIT(org.apache.ignite.internal.processors.tracing.SpanType.SQL_PAGE_WAIT) SpanId(io.opencensus.trace.SpanId) PARTITIONED(org.apache.ignite.cache.CacheMode.PARTITIONED) NODE(org.apache.ignite.internal.processors.tracing.SpanTags.NODE) Tracing(io.opencensus.trace.Tracing) TracingConfigurationCoordinates(org.apache.ignite.spi.tracing.TracingConfigurationCoordinates) QuerySqlField(org.apache.ignite.cache.query.annotations.QuerySqlField) ImmutableMap(com.google.common.collect.ImmutableMap) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) Set(java.util.Set) SQL_IDX_RANGE_RESP(org.apache.ignite.internal.processors.tracing.SpanType.SQL_IDX_RANGE_RESP) SQL_ITER_CLOSE(org.apache.ignite.internal.processors.tracing.SpanType.SQL_ITER_CLOSE) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) IgniteCache(org.apache.ignite.IgniteCache) GridTestUtils(org.apache.ignite.testframework.GridTestUtils) List(java.util.List) IgniteConfiguration(org.apache.ignite.configuration.IgniteConfiguration) DFLT_SCHEMA(org.apache.ignite.internal.processors.query.QueryUtils.DFLT_SCHEMA) SQL_CURSOR_CANCEL(org.apache.ignite.internal.processors.tracing.SpanType.SQL_CURSOR_CANCEL) SAMPLING_RATE_ALWAYS(org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS) MTC(org.apache.ignite.internal.processors.tracing.MTC) TracingSpi(org.apache.ignite.spi.tracing.TracingSpi) SQL_IDX_RANGE_REQ(org.apache.ignite.internal.processors.tracing.SpanType.SQL_IDX_RANGE_REQ) SQL_CURSOR_OPEN(org.apache.ignite.internal.processors.tracing.SpanType.SQL_CURSOR_OPEN) SQL(org.apache.ignite.spi.tracing.Scope.SQL) Pattern(java.util.regex.Pattern) TestRecordingCommunicationSpi(org.apache.ignite.internal.TestRecordingCommunicationSpi) GridQueryNextPageRequest(org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryNextPageRequest) SQL_QRY_EXEC_REQ(org.apache.ignite.internal.processors.tracing.SpanType.SQL_QRY_EXEC_REQ) FieldsQueryCursor(org.apache.ignite.cache.query.FieldsQueryCursor) SQL_CACHE_UPDATE(org.apache.ignite.internal.processors.tracing.SpanType.SQL_CACHE_UPDATE) SQL_SCHEMA(org.apache.ignite.internal.processors.tracing.SpanTags.SQL_SCHEMA) U(org.apache.ignite.internal.util.typedef.internal.U) SQL_PARTITIONS_RESERVE(org.apache.ignite.internal.processors.tracing.SpanType.SQL_PARTITIONS_RESERVE) SQL_QRY_CANCEL_REQ(org.apache.ignite.internal.processors.tracing.SpanType.SQL_QRY_CANCEL_REQ) SQL_DML_QRY_EXECUTE(org.apache.ignite.internal.processors.tracing.SpanType.SQL_DML_QRY_EXECUTE) OpenCensusTracingSpi(org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi) SQL_PAGE_RESP(org.apache.ignite.internal.processors.tracing.SpanType.SQL_PAGE_RESP) SQL_QRY_TEXT(org.apache.ignite.internal.processors.tracing.SpanTags.SQL_QRY_TEXT) SQL_CACHE_UPDATES(org.apache.ignite.internal.processors.tracing.SpanTags.SQL_CACHE_UPDATES) SpanTags.tag(org.apache.ignite.internal.processors.tracing.SpanTags.tag) SQL_ITER_OPEN(org.apache.ignite.internal.processors.tracing.SpanType.SQL_ITER_OPEN) Iterator(java.util.Iterator) Pattern.compile(java.util.regex.Pattern.compile) SQL_CURSOR_CLOSE(org.apache.ignite.internal.processors.tracing.SpanType.SQL_CURSOR_CLOSE) SqlFieldsQueryEx(org.apache.ignite.internal.processors.cache.query.SqlFieldsQueryEx) Test(org.junit.Test) SQL_PAGE_FETCH(org.apache.ignite.internal.processors.tracing.SpanType.SQL_PAGE_FETCH) Ignite(org.apache.ignite.Ignite) SQL_PARSER_CACHE_HIT(org.apache.ignite.internal.processors.tracing.SpanTags.SQL_PARSER_CACHE_HIT) SQL_DML_QRY_EXEC_REQ(org.apache.ignite.internal.processors.tracing.SpanType.SQL_DML_QRY_EXEC_REQ) NAME(org.apache.ignite.internal.processors.tracing.SpanTags.NAME) Integer.parseInt(java.lang.Integer.parseInt) SQL_QRY(org.apache.ignite.internal.processors.tracing.SpanType.SQL_QRY) SQL_PAGE_PREPARE(org.apache.ignite.internal.processors.tracing.SpanType.SQL_PAGE_PREPARE) CONSISTENT_ID(org.apache.ignite.internal.processors.tracing.SpanTags.CONSISTENT_ID) NODE_ID(org.apache.ignite.internal.processors.tracing.SpanTags.NODE_ID) Ignition(org.apache.ignite.Ignition) Boolean.parseBoolean(java.lang.Boolean.parseBoolean) CacheConfiguration(org.apache.ignite.configuration.CacheConfiguration) TracingConfigurationParameters(org.apache.ignite.spi.tracing.TracingConfigurationParameters) SQL_QRY_PARSE(org.apache.ignite.internal.processors.tracing.SpanType.SQL_QRY_PARSE) SQL_QRY_EXECUTE(org.apache.ignite.internal.processors.tracing.SpanType.SQL_QRY_EXECUTE) CacheMode(org.apache.ignite.cache.CacheMode) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Pattern(java.util.regex.Pattern) Matcher(java.util.regex.Matcher) Ignite(org.apache.ignite.Ignite) SpanId(io.opencensus.trace.SpanId) Test(org.junit.Test)

Aggregations

ImmutableMap (com.google.common.collect.ImmutableMap)1 SpanId (io.opencensus.trace.SpanId)1 Tracing (io.opencensus.trace.Tracing)1 Boolean.parseBoolean (java.lang.Boolean.parseBoolean)1 Integer.parseInt (java.lang.Integer.parseInt)1 Arrays (java.util.Arrays)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Set (java.util.Set)1 UUID (java.util.UUID)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 Matcher (java.util.regex.Matcher)1 Pattern (java.util.regex.Pattern)1 Pattern.compile (java.util.regex.Pattern.compile)1 Collectors (java.util.stream.Collectors)1 Ignite (org.apache.ignite.Ignite)1 IgniteCache (org.apache.ignite.IgniteCache)1 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)1 Ignition (org.apache.ignite.Ignition)1 CacheMode (org.apache.ignite.cache.CacheMode)1