Search in sources :

Example 6 with QueryContext

use of org.apache.drill.exec.ops.QueryContext in project drill by apache.

the class TestExceptionInjection method skipAndLimit.

@SuppressWarnings("static-method")
@Test
public void skipAndLimit() {
    final String passthroughDesc = "<<injected from descPassthrough>>";
    final int nSkip = 7;
    final int nFire = 3;
    final Class<? extends Throwable> exceptionClass = RuntimeException.class;
    final String controls = Controls.newBuilder().addException(DummyClass.class, passthroughDesc, exceptionClass, nSkip, nFire).build();
    ControlsInjectionUtil.setControls(session, controls);
    final QueryContext context = new QueryContext(session, bits[0].getContext(), QueryId.getDefaultInstance());
    final DummyClass dummyClass = new DummyClass(context);
    // these shouldn't throw
    for (int i = 0; i < nSkip; ++i) {
        dummyClass.descPassthroughMethod(passthroughDesc);
    }
    // these should throw
    for (int i = 0; i < nFire; ++i) {
        assertPassthroughThrows(dummyClass, exceptionClass.getName(), passthroughDesc);
    }
    // this shouldn't throw
    dummyClass.descPassthroughMethod(passthroughDesc);
    try {
        context.close();
    } catch (Exception e) {
        fail();
    }
}
Also used : QueryContext(org.apache.drill.exec.ops.QueryContext) DrillbitStartupException(org.apache.drill.exec.exception.DrillbitStartupException) IOException(java.io.IOException) Test(org.junit.Test)

Example 7 with QueryContext

use of org.apache.drill.exec.ops.QueryContext in project drill by apache.

the class TestExceptionInjection method injectionOnSpecificBit.

@SuppressWarnings("static-method")
@Test
public void injectionOnSpecificBit() {
    final RemoteServiceSet remoteServiceSet = RemoteServiceSet.getLocalServiceSet();
    final ZookeeperHelper zkHelper = new ZookeeperHelper();
    zkHelper.startZookeeper(1);
    // Creating two drillbits
    final Drillbit drillbit1, drillbit2;
    final DrillConfig drillConfig = zkHelper.getConfig();
    try {
        drillbit1 = Drillbit.start(drillConfig, remoteServiceSet);
        drillbit2 = Drillbit.start(drillConfig, remoteServiceSet);
    } catch (DrillbitStartupException e) {
        throw new RuntimeException("Failed to start drillbits.", e);
    }
    final DrillbitContext drillbitContext1 = drillbit1.getContext();
    final DrillbitContext drillbitContext2 = drillbit2.getContext();
    final UserSession session = UserSession.Builder.newBuilder().withCredentials(UserBitShared.UserCredentials.newBuilder().setUserName("foo").build()).withUserProperties(UserProperties.getDefaultInstance()).withOptionManager(drillbitContext1.getOptionManager()).build();
    final String passthroughDesc = "<<injected from descPassthrough>>";
    final int nSkip = 7;
    final int nFire = 3;
    final Class<? extends Throwable> exceptionClass = RuntimeException.class;
    // only drillbit1's (address, port)
    final String controls = Controls.newBuilder().addExceptionOnBit(DummyClass.class, passthroughDesc, exceptionClass, drillbitContext1.getEndpoint(), nSkip, nFire).build();
    ControlsInjectionUtil.setControls(session, controls);
    {
        final QueryContext queryContext1 = new QueryContext(session, drillbitContext1, QueryId.getDefaultInstance());
        final DummyClass class1 = new DummyClass(queryContext1);
        // these shouldn't throw
        for (int i = 0; i < nSkip; ++i) {
            class1.descPassthroughMethod(passthroughDesc);
        }
        // these should throw
        for (int i = 0; i < nFire; ++i) {
            assertPassthroughThrows(class1, exceptionClass.getName(), passthroughDesc);
        }
        // this shouldn't throw
        class1.descPassthroughMethod(passthroughDesc);
        try {
            queryContext1.close();
        } catch (Exception e) {
            fail();
        }
    }
    {
        final QueryContext queryContext2 = new QueryContext(session, drillbitContext2, QueryId.getDefaultInstance());
        final DummyClass class2 = new DummyClass(queryContext2);
        // these shouldn't throw
        for (int i = 0; i < nSkip; ++i) {
            class2.descPassthroughMethod(passthroughDesc);
        }
        // these shouldn't throw
        for (int i = 0; i < nFire; ++i) {
            class2.descPassthroughMethod(passthroughDesc);
        }
        // this shouldn't throw
        class2.descPassthroughMethod(passthroughDesc);
        try {
            queryContext2.close();
        } catch (Exception e) {
            fail();
        }
    }
}
Also used : DrillbitContext(org.apache.drill.exec.server.DrillbitContext) ZookeeperHelper(org.apache.drill.exec.ZookeeperHelper) QueryContext(org.apache.drill.exec.ops.QueryContext) DrillbitStartupException(org.apache.drill.exec.exception.DrillbitStartupException) IOException(java.io.IOException) DrillConfig(org.apache.drill.common.config.DrillConfig) DrillbitStartupException(org.apache.drill.exec.exception.DrillbitStartupException) Drillbit(org.apache.drill.exec.server.Drillbit) RemoteServiceSet(org.apache.drill.exec.server.RemoteServiceSet) UserSession(org.apache.drill.exec.rpc.user.UserSession) Test(org.junit.Test)

Example 8 with QueryContext

use of org.apache.drill.exec.ops.QueryContext in project drill by apache.

the class TestPauseInjection method pauseOnSpecificBit.

@Test
public void pauseOnSpecificBit() {
    final RemoteServiceSet remoteServiceSet = RemoteServiceSet.getLocalServiceSet();
    final ZookeeperHelper zkHelper = new ZookeeperHelper();
    zkHelper.startZookeeper(1);
    // Creating two drillbits
    final Drillbit drillbit1, drillbit2;
    final DrillConfig drillConfig = zkHelper.getConfig();
    try {
        drillbit1 = Drillbit.start(drillConfig, remoteServiceSet);
        drillbit2 = Drillbit.start(drillConfig, remoteServiceSet);
    } catch (final DrillbitStartupException e) {
        throw new RuntimeException("Failed to start two drillbits.", e);
    }
    final DrillbitContext drillbitContext1 = drillbit1.getContext();
    final DrillbitContext drillbitContext2 = drillbit2.getContext();
    final UserSession session = UserSession.Builder.newBuilder().withCredentials(UserCredentials.newBuilder().setUserName("foo").build()).withUserProperties(UserProperties.getDefaultInstance()).withOptionManager(drillbitContext1.getOptionManager()).build();
    final DrillbitEndpoint drillbitEndpoint1 = drillbitContext1.getEndpoint();
    final String controls = Controls.newBuilder().addPauseOnBit(DummyClass.class, DummyClass.PAUSES, drillbitEndpoint1).build();
    ControlsInjectionUtil.setControls(session, controls);
    {
        final long expectedDuration = 1000L;
        final ExtendedLatch trigger = new ExtendedLatch(1);
        final Pointer<Exception> ex = new Pointer<>();
        final QueryContext queryContext = new QueryContext(session, drillbitContext1, QueryId.getDefaultInstance());
        (new ResumingThread(queryContext, trigger, ex, expectedDuration)).start();
        // test that the pause happens
        final DummyClass dummyClass = new DummyClass(queryContext, trigger);
        final long actualDuration = dummyClass.pauses();
        assertTrue(String.format("Test should stop for at least %d milliseconds.", expectedDuration), expectedDuration <= actualDuration);
        assertTrue("No exception should be thrown.", ex.value == null);
        try {
            queryContext.close();
        } catch (final Exception e) {
            fail("Failed to close query context: " + e);
        }
    }
    {
        final ExtendedLatch trigger = new ExtendedLatch(1);
        final QueryContext queryContext = new QueryContext(session, drillbitContext2, QueryId.getDefaultInstance());
        // if the resume did not happen, the test would hang
        final DummyClass dummyClass = new DummyClass(queryContext, trigger);
        dummyClass.pauses();
        try {
            queryContext.close();
        } catch (final Exception e) {
            fail("Failed to close query context: " + e);
        }
    }
}
Also used : DrillbitContext(org.apache.drill.exec.server.DrillbitContext) ZookeeperHelper(org.apache.drill.exec.ZookeeperHelper) Pointer(org.apache.drill.exec.util.Pointer) QueryContext(org.apache.drill.exec.ops.QueryContext) DrillbitStartupException(org.apache.drill.exec.exception.DrillbitStartupException) ExtendedLatch(org.apache.drill.common.concurrent.ExtendedLatch) DrillbitEndpoint(org.apache.drill.exec.proto.CoordinationProtos.DrillbitEndpoint) DrillConfig(org.apache.drill.common.config.DrillConfig) DrillbitStartupException(org.apache.drill.exec.exception.DrillbitStartupException) Drillbit(org.apache.drill.exec.server.Drillbit) RemoteServiceSet(org.apache.drill.exec.server.RemoteServiceSet) UserSession(org.apache.drill.exec.rpc.user.UserSession) Test(org.junit.Test)

Example 9 with QueryContext

use of org.apache.drill.exec.ops.QueryContext in project drill by apache.

the class TestPauseInjection method pauseInjected.

@Test
public void pauseInjected() {
    final long expectedDuration = 1000L;
    final ExtendedLatch trigger = new ExtendedLatch(1);
    final Pointer<Exception> ex = new Pointer<>();
    final String controls = Controls.newBuilder().addPause(DummyClass.class, DummyClass.PAUSES).build();
    ControlsInjectionUtil.setControls(session, controls);
    final QueryContext queryContext = new QueryContext(session, bits[0].getContext(), QueryId.getDefaultInstance());
    (new ResumingThread(queryContext, trigger, ex, expectedDuration)).start();
    // test that the pause happens
    final DummyClass dummyClass = new DummyClass(queryContext, trigger);
    final long actualDuration = dummyClass.pauses();
    assertTrue(String.format("Test should stop for at least %d milliseconds.", expectedDuration), expectedDuration <= actualDuration);
    assertTrue("No exception should be thrown.", ex.value == null);
    try {
        queryContext.close();
    } catch (final Exception e) {
        fail("Failed to close query context: " + e);
    }
}
Also used : Pointer(org.apache.drill.exec.util.Pointer) QueryContext(org.apache.drill.exec.ops.QueryContext) DrillbitStartupException(org.apache.drill.exec.exception.DrillbitStartupException) ExtendedLatch(org.apache.drill.common.concurrent.ExtendedLatch) Test(org.junit.Test)

Aggregations

QueryContext (org.apache.drill.exec.ops.QueryContext)9 Test (org.junit.Test)7 DrillbitStartupException (org.apache.drill.exec.exception.DrillbitStartupException)6 IOException (java.io.IOException)4 ExtendedLatch (org.apache.drill.common.concurrent.ExtendedLatch)3 DrillbitContext (org.apache.drill.exec.server.DrillbitContext)3 RemoteServiceSet (org.apache.drill.exec.server.RemoteServiceSet)3 Pointer (org.apache.drill.exec.util.Pointer)3 DrillConfig (org.apache.drill.common.config.DrillConfig)2 ZookeeperHelper (org.apache.drill.exec.ZookeeperHelper)2 UserSession (org.apache.drill.exec.rpc.user.UserSession)2 Drillbit (org.apache.drill.exec.server.Drillbit)2 MetricRegistry (com.codahale.metrics.MetricRegistry)1 NonStrictExpectations (mockit.NonStrictExpectations)1 LogicalPlan (org.apache.drill.common.logical.LogicalPlan)1 FunctionImplementationRegistry (org.apache.drill.exec.expr.fn.FunctionImplementationRegistry)1 FragmentContext (org.apache.drill.exec.ops.FragmentContext)1 BasicOptimizer (org.apache.drill.exec.opt.BasicOptimizer)1 PhysicalPlan (org.apache.drill.exec.physical.PhysicalPlan)1 FragmentRoot (org.apache.drill.exec.physical.base.FragmentRoot)1