Search in sources :

Example 16 with Query

use of com.datastax.oss.protocol.internal.request.Query in project java-driver by datastax.

the class ContinuousCqlRequestHandlerReprepareTest method should_abort_when_prepare_fails_with_unrecoverable_error.

@Test
@UseDataProvider(value = "allDseProtocolVersions", location = DseTestDataProviders.class)
public void should_abort_when_prepare_fails_with_unrecoverable_error(DseProtocolVersion version) {
    try (RequestHandlerTestHarness harness = continuousHarnessBuilder().withResponse(node1, defaultFrameOf(unprepared)).withProtocolVersion(version).build()) {
        when(harness.getSession().getRepreparePayloads()).thenReturn(repreparePayloads);
        when(harness.getChannel(node1).write(any(Prepare.class), anyBoolean(), anyMap(), any())).then(invocation -> {
            AdminRequestHandler<?> admin = invocation.getArgument(3);
            admin.onResponse(defaultFrameOf(unrecoverable));
            return future;
        });
        ContinuousCqlRequestHandler handler = new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT, harness.getSession(), harness.getContext(), "test");
        CompletionStage<ContinuousAsyncResultSet> page1Future = handler.handle();
        verify(harness.getChannel(node1)).write(any(Query.class), anyBoolean(), anyMap(), any());
        verify(harness.getChannel(node1)).write(any(Prepare.class), anyBoolean(), anyMap(), any());
        assertThat(handler.getState()).isEqualTo(-2);
        assertThat(page1Future).isCompletedExceptionally();
        Throwable t = catchThrowable(() -> page1Future.toCompletableFuture().get());
        assertThat(t).hasRootCauseInstanceOf(SyntaxError.class).hasMessageContaining("bad query");
    }
}
Also used : Query(com.datastax.oss.protocol.internal.request.Query) SyntaxError(com.datastax.oss.driver.api.core.servererrors.SyntaxError) RequestHandlerTestHarness(com.datastax.oss.driver.internal.core.cql.RequestHandlerTestHarness) Prepare(com.datastax.oss.protocol.internal.request.Prepare) ContinuousAsyncResultSet(com.datastax.dse.driver.api.core.cql.continuous.ContinuousAsyncResultSet) Assertions.catchThrowable(org.assertj.core.api.Assertions.catchThrowable) Test(org.junit.Test) UseDataProvider(com.tngtech.java.junit.dataprovider.UseDataProvider)

Example 17 with Query

use of com.datastax.oss.protocol.internal.request.Query in project java-driver by datastax.

the class ContinuousCqlRequestHandlerReprepareTest method should_prepare_and_retry_on_same_node.

@Test
@UseDataProvider(value = "allDseProtocolVersions", location = DseTestDataProviders.class)
public void should_prepare_and_retry_on_same_node(DseProtocolVersion version) {
    try (RequestHandlerTestHarness harness = continuousHarnessBuilder().withResponse(node1, defaultFrameOf(unprepared)).withProtocolVersion(version).build()) {
        when(harness.getSession().getRepreparePayloads()).thenReturn(repreparePayloads);
        when(harness.getChannel(node1).write(any(Prepare.class), anyBoolean(), anyMap(), any())).then(invocation -> {
            AdminRequestHandler<?> admin = invocation.getArgument(3);
            admin.onResponse(defaultFrameOf(prepared));
            return future;
        });
        new ContinuousCqlRequestHandler(UNDEFINED_IDEMPOTENCE_STATEMENT, harness.getSession(), harness.getContext(), "test").handle();
        verify(harness.getChannel(node1)).write(any(Prepare.class), anyBoolean(), anyMap(), any());
        // should have attempted to execute the query twice on the same node
        verify(harness.getChannel(node1), times(2)).write(any(Query.class), anyBoolean(), anyMap(), any());
    }
}
Also used : Query(com.datastax.oss.protocol.internal.request.Query) RequestHandlerTestHarness(com.datastax.oss.driver.internal.core.cql.RequestHandlerTestHarness) Prepare(com.datastax.oss.protocol.internal.request.Prepare) Test(org.junit.Test) UseDataProvider(com.tngtech.java.junit.dataprovider.UseDataProvider)

Example 18 with Query

use of com.datastax.oss.protocol.internal.request.Query in project java-driver by datastax.

the class ReprepareOnUpTest method should_limit_number_of_statements_to_reprepare.

@Test
public void should_limit_number_of_statements_to_reprepare() {
    when(defaultProfile.getInt(DefaultDriverOption.REPREPARE_MAX_STATEMENTS)).thenReturn(3);
    MockReprepareOnUp reprepareOnUp = new MockReprepareOnUp("test", pool, ImmediateEventExecutor.INSTANCE, getMockPayloads('a', 'b', 'c', 'd', 'e', 'f'), context, whenPrepared);
    reprepareOnUp.start();
    MockAdminQuery adminQuery = reprepareOnUp.queries.poll();
    assertThat(adminQuery).isNotNull();
    assertThat(adminQuery.request).isInstanceOf(Query.class);
    assertThat(((Query) adminQuery.request).query).isEqualTo("SELECT prepared_id FROM system.prepared_statements");
    // server knows no ids:
    adminQuery.resultFuture.complete(new AdminResult(preparedIdRows(), null, DefaultProtocolVersion.DEFAULT));
    for (char c = 'a'; c <= 'c'; c++) {
        adminQuery = reprepareOnUp.queries.poll();
        assertThat(adminQuery).isNotNull();
        assertThat(adminQuery.request).isInstanceOf(Prepare.class);
        assertThat(((Prepare) adminQuery.request).cqlQuery).isEqualTo("mock query " + c);
        adminQuery.resultFuture.complete(null);
    }
    assertThatStage(done).isSuccess(v -> assertThat(reprepareOnUp.queries).isEmpty());
}
Also used : Query(com.datastax.oss.protocol.internal.request.Query) Prepare(com.datastax.oss.protocol.internal.request.Prepare) AdminResult(com.datastax.oss.driver.internal.core.adminrequest.AdminResult) Test(org.junit.Test)

Example 19 with Query

use of com.datastax.oss.protocol.internal.request.Query in project java-driver by datastax.

the class ReprepareOnUpTest method should_not_reprepare_already_known_statements.

@Test
public void should_not_reprepare_already_known_statements() {
    MockReprepareOnUp reprepareOnUp = new MockReprepareOnUp("test", pool, ImmediateEventExecutor.INSTANCE, getMockPayloads('a', 'b', 'c', 'd', 'e', 'f'), context, whenPrepared);
    reprepareOnUp.start();
    MockAdminQuery adminQuery = reprepareOnUp.queries.poll();
    assertThat(adminQuery).isNotNull();
    assertThat(adminQuery.request).isInstanceOf(Query.class);
    assertThat(((Query) adminQuery.request).query).isEqualTo("SELECT prepared_id FROM system.prepared_statements");
    // server knows d, e and f already:
    adminQuery.resultFuture.complete(new AdminResult(preparedIdRows('d', 'e', 'f'), null, DefaultProtocolVersion.DEFAULT));
    for (char c = 'a'; c <= 'c'; c++) {
        adminQuery = reprepareOnUp.queries.poll();
        assertThat(adminQuery).isNotNull();
        assertThat(adminQuery.request).isInstanceOf(Prepare.class);
        assertThat(((Prepare) adminQuery.request).cqlQuery).isEqualTo("mock query " + c);
        adminQuery.resultFuture.complete(null);
    }
    assertThatStage(done).isSuccess(v -> assertThat(reprepareOnUp.queries).isEmpty());
}
Also used : Query(com.datastax.oss.protocol.internal.request.Query) Prepare(com.datastax.oss.protocol.internal.request.Prepare) AdminResult(com.datastax.oss.driver.internal.core.adminrequest.AdminResult) Test(org.junit.Test)

Example 20 with Query

use of com.datastax.oss.protocol.internal.request.Query in project java-driver by datastax.

the class SimpleStatementSimulacronIT method should_use_consistencies.

@Test
public void should_use_consistencies() {
    SimpleStatement st = SimpleStatement.builder("SELECT * FROM test where k = ?").setConsistencyLevel(DefaultConsistencyLevel.TWO).setSerialConsistencyLevel(DefaultConsistencyLevel.LOCAL_SERIAL).build();
    SESSION_RULE.session().execute(st);
    List<QueryLog> logs = SIMULACRON_RULE.cluster().getLogs().getQueryLogs();
    assertThat(logs).hasSize(1);
    QueryLog log = logs.get(0);
    Message message = log.getFrame().message;
    assertThat(message).isInstanceOf(Query.class);
    Query query = (Query) message;
    assertThat(query.options.consistency).isEqualTo(DefaultConsistencyLevel.TWO.getProtocolCode());
    assertThat(query.options.serialConsistency).isEqualTo(DefaultConsistencyLevel.LOCAL_SERIAL.getProtocolCode());
}
Also used : Message(com.datastax.oss.protocol.internal.Message) Query(com.datastax.oss.protocol.internal.request.Query) SimpleStatement(com.datastax.oss.driver.api.core.cql.SimpleStatement) QueryLog(com.datastax.oss.simulacron.common.cluster.QueryLog) Test(org.junit.Test)

Aggregations

Query (com.datastax.oss.protocol.internal.request.Query)24 Test (org.junit.Test)17 Frame (com.datastax.oss.protocol.internal.Frame)7 Prepare (com.datastax.oss.protocol.internal.request.Prepare)6 RawBytesQuery (com.datastax.dse.protocol.internal.request.RawBytesQuery)5 ScriptGraphStatement (com.datastax.dse.driver.api.core.graph.ScriptGraphStatement)4 DseQueryOptions (com.datastax.dse.protocol.internal.request.query.DseQueryOptions)4 AdminResult (com.datastax.oss.driver.internal.core.adminrequest.AdminResult)4 Message (com.datastax.oss.protocol.internal.Message)4 Ready (com.datastax.oss.protocol.internal.response.Ready)4 UseDataProvider (com.tngtech.java.junit.dataprovider.UseDataProvider)4 ChannelFuture (io.netty.channel.ChannelFuture)4 InetSocketAddress (java.net.InetSocketAddress)4 ByteBuffer (java.nio.ByteBuffer)4 GraphTestUtils.createGraphBinaryModule (com.datastax.dse.driver.internal.core.graph.GraphTestUtils.createGraphBinaryModule)3 GraphBinaryModule (com.datastax.dse.driver.internal.core.graph.binary.GraphBinaryModule)3 ConsistencyLevel (com.datastax.oss.driver.api.core.ConsistencyLevel)3 DriverExecutionProfile (com.datastax.oss.driver.api.core.config.DriverExecutionProfile)3 SimpleStatement (com.datastax.oss.driver.api.core.cql.SimpleStatement)3 QueryOptions (com.datastax.oss.protocol.internal.request.query.QueryOptions)3