TestBasicQueryInfo.java

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.facebook.presto.server;

import com.facebook.presto.common.RuntimeStats;
import com.facebook.presto.common.resourceGroups.QueryType;
import com.facebook.presto.cost.StatsAndCosts;
import com.facebook.presto.execution.QueryInfo;
import com.facebook.presto.execution.QueryStats;
import com.facebook.presto.operator.BlockedReason;
import com.facebook.presto.spi.QueryId;
import com.facebook.presto.spi.StandardErrorCode;
import com.facebook.presto.spi.analyzer.UpdateInfo;
import com.facebook.presto.spi.eventlistener.StageGcStatistics;
import com.facebook.presto.spi.memory.MemoryPoolId;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import io.airlift.units.DataSize;
import io.airlift.units.Duration;
import org.joda.time.DateTime;
import org.testng.annotations.Test;

import java.net.URI;
import java.util.Optional;
import java.util.OptionalDouble;

import static com.facebook.presto.SessionTestUtils.TEST_SESSION;
import static com.facebook.presto.execution.QueryState.RUNNING;
import static org.testng.Assert.assertEquals;

public class TestBasicQueryInfo
{
    @Test
    public void testConstructor()
    {
        BasicQueryInfo basicInfo = new BasicQueryInfo(
                new QueryInfo(
                        new QueryId("0"),
                        TEST_SESSION.toSessionRepresentation(),
                        RUNNING,
                        new MemoryPoolId("reserved"),
                        false,
                        URI.create("1"),
                        ImmutableList.of("2", "3"),
                        "SELECT 4",
                        Optional.empty(),
                        Optional.empty(),
                        new QueryStats(
                                new DateTime("1991-09-06T05:00").getMillis(),
                                new DateTime("1991-09-06T05:01").getMillis(),
                                new DateTime("1991-09-06T05:02").getMillis(),
                                new DateTime("1991-09-06T06:00").getMillis(),
                                Duration.valueOf("8m"),
                                Duration.valueOf("5m"),
                                Duration.valueOf("7m"),
                                Duration.valueOf("34m"),
                                Duration.valueOf("5m"),
                                Duration.valueOf("6m"),
                                Duration.valueOf("35m"),
                                Duration.valueOf("44m"),
                                Duration.valueOf("9m"),
                                Duration.valueOf("10m"),
                                Duration.valueOf("11m"),
                                13,
                                14,
                                21,
                                15,
                                16,
                                17,
                                18,
                                34,
                                19,
                                16,
                                17,
                                18,
                                19,
                                16,
                                17,
                                18,
                                19,
                                20.0,
                                43.0,
                                DataSize.valueOf("21GB"),
                                DataSize.valueOf("22GB"),
                                DataSize.valueOf("23GB"),
                                DataSize.valueOf("24GB"),
                                DataSize.valueOf("25GB"),
                                DataSize.valueOf("26GB"),
                                DataSize.valueOf("42GB"),
                                true,
                                Duration.valueOf("23m"),
                                Duration.valueOf("24m"),
                                Duration.valueOf("0m"),
                                Duration.valueOf("26m"),
                                true,
                                ImmutableSet.of(BlockedReason.WAITING_FOR_MEMORY),
                                DataSize.valueOf("123MB"),
                                DataSize.valueOf("27GB"),
                                28,
                                DataSize.valueOf("29GB"),
                                30,
                                DataSize.valueOf("31GB"),
                                32,
                                DataSize.valueOf("32GB"),
                                40,
                                33,
                                DataSize.valueOf("34GB"),
                                DataSize.valueOf("35GB"),
                                DataSize.valueOf("36GB"),
                                ImmutableList.of(new StageGcStatistics(
                                        101,
                                        1002,
                                        102,
                                        103,
                                        104,
                                        105,
                                        106,
                                        107)),
                                ImmutableList.of(),
                                new RuntimeStats()),
                        Optional.empty(),
                        Optional.empty(),
                        ImmutableMap.of(),
                        ImmutableSet.of(),
                        ImmutableMap.of(),
                        ImmutableMap.of(),
                        ImmutableSet.of(),
                        Optional.empty(),
                        false,
                        new UpdateInfo("UPDATE TYPE", ""),
                        Optional.empty(),
                        null,
                        StandardErrorCode.ABANDONED_QUERY.toErrorCode(),
                        ImmutableList.of(),
                        ImmutableSet.of(),
                        Optional.empty(),
                        false,
                        Optional.empty(),
                        Optional.of(QueryType.INSERT),
                        Optional.empty(),
                        Optional.empty(),
                        ImmutableMap.of(),
                        ImmutableSet.of(),
                        StatsAndCosts.empty(),
                        ImmutableList.of(),
                        ImmutableList.of(),
                        ImmutableSet.of(),
                        ImmutableSet.of(),
                        ImmutableSet.of(),
                        ImmutableList.of(),
                        ImmutableMap.of(),
                        Optional.empty()));

        assertEquals(basicInfo.getQueryId().getId(), "0");
        assertEquals(basicInfo.getState(), RUNNING);
        assertEquals(basicInfo.getMemoryPool().getId(), "reserved");
        assertEquals(basicInfo.isScheduled(), false);
        assertEquals(basicInfo.getQuery(), "SELECT 4");
        assertEquals(basicInfo.getQueryHash(), "235ca215765cbfca");
        assertEquals(basicInfo.getQueryType(), Optional.of(QueryType.INSERT));

        assertEquals(basicInfo.getQueryStats().getCreateTime(), new DateTime("1991-09-06T05:00"));
        assertEquals(basicInfo.getQueryStats().getEndTime(), new DateTime("1991-09-06T06:00"));
        assertEquals(basicInfo.getQueryStats().getElapsedTime(), Duration.valueOf("8m"));
        assertEquals(basicInfo.getQueryStats().getExecutionTime(), Duration.valueOf("44m"));
        assertEquals(basicInfo.getQueryStats().getWaitingForPrerequisitesTime(), Duration.valueOf("5m"));

        assertEquals(basicInfo.getQueryStats().getTotalDrivers(), 16);
        assertEquals(basicInfo.getQueryStats().getQueuedDrivers(), 17);
        assertEquals(basicInfo.getQueryStats().getRunningDrivers(), 18);
        assertEquals(basicInfo.getQueryStats().getCompletedDrivers(), 19);

        assertEquals(basicInfo.getQueryStats().getCumulativeUserMemory(), 20.0);
        assertEquals(basicInfo.getQueryStats().getUserMemoryReservation(), DataSize.valueOf("21GB"));
        assertEquals(basicInfo.getQueryStats().getPeakUserMemoryReservation(), DataSize.valueOf("23GB"));
        assertEquals(basicInfo.getQueryStats().getPeakTotalMemoryReservation(), DataSize.valueOf("24GB"));
        assertEquals(basicInfo.getQueryStats().getPeakTaskTotalMemoryReservation(), DataSize.valueOf("26GB"));
        assertEquals(basicInfo.getQueryStats().getPeakNodeTotalMemoryReservation(), DataSize.valueOf("42GB"));

        assertEquals(basicInfo.getQueryStats().getTotalCpuTime(), Duration.valueOf("24m"));

        assertEquals(basicInfo.getQueryStats().isFullyBlocked(), true);
        assertEquals(basicInfo.getQueryStats().getBlockedReasons(), ImmutableSet.of(BlockedReason.WAITING_FOR_MEMORY));

        assertEquals(basicInfo.getQueryStats().getTotalAllocation(), DataSize.valueOf("123MB"));

        assertEquals(basicInfo.getQueryStats().getProgressPercentage(), OptionalDouble.of(100));

        assertEquals(basicInfo.getErrorCode(), StandardErrorCode.ABANDONED_QUERY.toErrorCode());
        assertEquals(basicInfo.getErrorType(), StandardErrorCode.ABANDONED_QUERY.toErrorCode().getType());
    }
}