Bump tests to test Protocol V5

authored by Ekaterina Dimitrova; reviewed by Sam Tunnicliffe for CASSANDRA-16613
This commit is contained in:
Ekaterina Dimitrova 2021-04-22 20:43:18 -04:00
parent fb76baa608
commit 62e1d74701
11 changed files with 329 additions and 220 deletions

View File

@ -65,7 +65,7 @@ public class BurnTestUtil
return new SimpleStatement(Integer.toString(idx), (Object[]) values);
}
public static QueryMessage generateQueryMessage(int idx, SizeCaps sizeCaps)
public static QueryMessage generateQueryMessage(int idx, SizeCaps sizeCaps, ProtocolVersion version)
{
Random rnd = new Random(idx);
List<ByteBuffer> values = new ArrayList<>();
@ -78,7 +78,7 @@ public class BurnTestUtil
10,
null,
null,
ProtocolVersion.V4,
version,
"KEYSPACE");
return new QueryMessage(Integer.toString(idx), queryOptions);

View File

@ -33,7 +33,6 @@ import org.junit.Test;
import com.datastax.driver.core.*;
import io.netty.buffer.ByteBuf;
import org.apache.cassandra.config.EncryptionOptions;
import org.apache.cassandra.cql3.CQLTester;
import org.apache.cassandra.service.NativeTransportService;
import org.apache.cassandra.service.QueryState;
@ -185,13 +184,25 @@ public class DriverBurnTest extends CQLTester
}
@Test
public void measureSmallV5() throws Throwable
public void measureSmallV6() throws Throwable
{
perfTest(new SizeCaps(10, 20, 5, 10),
new SizeCaps(10, 20, 5, 10),
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.allowBetaProtocolVersion()
.withPort(nativePort));
.withPort(nativePort),
ProtocolVersion.V6);
}
@Test
public void measureSmallV5() throws Throwable
{
perfTest(new SizeCaps(10, 20, 5, 10),
new SizeCaps(10, 20, 5, 10),
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.withProtocolVersion(com.datastax.driver.core.ProtocolVersion.V5)
.withPort(nativePort),
ProtocolVersion.V5);
}
@Test
@ -201,7 +212,19 @@ public class DriverBurnTest extends CQLTester
new SizeCaps(10, 20, 5, 10),
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.withProtocolVersion(com.datastax.driver.core.ProtocolVersion.V4)
.withPort(nativePort));
.withPort(nativePort),
ProtocolVersion.V4);
}
@Test
public void measureLargeV6() throws Throwable
{
perfTest(new SizeCaps(1000, 2000, 5, 150),
new SizeCaps(1000, 2000, 5, 150),
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.allowBetaProtocolVersion()
.withPort(nativePort),
ProtocolVersion.V6);
}
@Test
@ -210,8 +233,9 @@ public class DriverBurnTest extends CQLTester
perfTest(new SizeCaps(1000, 2000, 5, 150),
new SizeCaps(1000, 2000, 5, 150),
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.allowBetaProtocolVersion()
.withPort(nativePort));
.withProtocolVersion(com.datastax.driver.core.ProtocolVersion.V5)
.withPort(nativePort),
ProtocolVersion.V5);
}
@Test
@ -221,18 +245,32 @@ public class DriverBurnTest extends CQLTester
new SizeCaps(1000, 2000, 5, 150),
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.withProtocolVersion(com.datastax.driver.core.ProtocolVersion.V4)
.withPort(nativePort));
.withPort(nativePort),
ProtocolVersion.V4);
}
@Test
public void measureSmallV5ithCompression() throws Throwable
public void measureSmallV6WithCompression() throws Throwable
{
perfTest(new SizeCaps(10, 20, 5, 10),
new SizeCaps(10, 20, 5, 10),
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.allowBetaProtocolVersion()
.withCompression(ProtocolOptions.Compression.LZ4)
.withPort(nativePort));
.withPort(nativePort),
ProtocolVersion.V6);
}
@Test
public void measureSmallV5WithCompression() throws Throwable
{
perfTest(new SizeCaps(10, 20, 5, 10),
new SizeCaps(10, 20, 5, 10),
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.withProtocolVersion(com.datastax.driver.core.ProtocolVersion.V5)
.withCompression(ProtocolOptions.Compression.LZ4)
.withPort(nativePort),
ProtocolVersion.V5);
}
@Test
@ -243,7 +281,20 @@ public class DriverBurnTest extends CQLTester
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.withProtocolVersion(com.datastax.driver.core.ProtocolVersion.V4)
.withCompression(ProtocolOptions.Compression.LZ4)
.withPort(nativePort));
.withPort(nativePort),
ProtocolVersion.V4);
}
@Test
public void measureLargeV6WithCompression() throws Throwable
{
perfTest(new SizeCaps(1000, 2000, 5, 150),
new SizeCaps(1000, 2000, 5, 150),
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.allowBetaProtocolVersion()
.withCompression(ProtocolOptions.Compression.LZ4)
.withPort(nativePort),
ProtocolVersion.V6);
}
@Test
@ -252,9 +303,10 @@ public class DriverBurnTest extends CQLTester
perfTest(new SizeCaps(1000, 2000, 5, 150),
new SizeCaps(1000, 2000, 5, 150),
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.allowBetaProtocolVersion()
.withProtocolVersion(com.datastax.driver.core.ProtocolVersion.V5)
.withCompression(ProtocolOptions.Compression.LZ4)
.withPort(nativePort));
.withPort(nativePort),
ProtocolVersion.V5);
}
@Test
@ -265,18 +317,19 @@ public class DriverBurnTest extends CQLTester
Cluster.builder().addContactPoint(nativeAddr.getHostAddress())
.withProtocolVersion(com.datastax.driver.core.ProtocolVersion.V4)
.withCompression(ProtocolOptions.Compression.LZ4)
.withPort(nativePort));
.withPort(nativePort),
ProtocolVersion.V4);
}
public void perfTest(SizeCaps requestCaps, SizeCaps responseCaps, Cluster.Builder builder) throws Throwable
public void perfTest(SizeCaps requestCaps, SizeCaps responseCaps, Cluster.Builder builder, ProtocolVersion version) throws Throwable
{
SimpleStatement request = generateQueryStatement(0, requestCaps);
ResultMessage.Rows response = generateRows(0, responseCaps);
QueryMessage requestMessage = generateQueryMessage(0, requestCaps);
Envelope message = requestMessage.encode(ProtocolVersion.V4);
QueryMessage requestMessage = generateQueryMessage(0, requestCaps, version);
Envelope message = requestMessage.encode(version);
int requestSize = message.body.readableBytes();
message.release();
message = response.encode(ProtocolVersion.V4);
message = response.encode(version);
int responseSize = message.body.readableBytes();
message.release();
Message.Type.QUERY.unsafeSetCodec(new Message.Codec<QueryMessage>() {

View File

@ -167,7 +167,7 @@ public class SimpleClientBurnTest
{
int descriptor = counter + j * 100 + threadId * 10000;
SizeCaps caps = descriptor % largeMessageFrequency == 0 ? largeMessageCap : smallMessageCap;
QueryMessage query = generateQueryMessage(descriptor, caps);
QueryMessage query = generateQueryMessage(descriptor, caps, client.connection.getVersion());
messages.add(query);
}

View File

@ -20,20 +20,20 @@ package org.apache.cassandra.transport;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.security.SecureRandom;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import io.netty.buffer.ByteBuf;
import org.apache.cassandra.auth.AllowAllAuthenticator;
@ -51,10 +51,19 @@ import static org.apache.cassandra.transport.BurnTestUtil.SizeCaps;
import static org.apache.cassandra.transport.BurnTestUtil.generateQueryMessage;
import static org.apache.cassandra.transport.BurnTestUtil.generateRows;
@RunWith(Parameterized.class)
public class SimpleClientPerfTest
{
@Parameterized.Parameter
public ProtocolVersion version;
private static final Logger logger = LoggerFactory.getLogger(CQLConnectionTest.class);
@Parameterized.Parameters()
public static Collection<Object[]> versions()
{
return ProtocolVersion.SUPPORTED.stream()
.map(v -> new Object[]{v})
.collect(Collectors.toList());
}
private InetAddress address;
private int port;
@ -82,102 +91,61 @@ public class SimpleClientPerfTest
}
@Test
public void measureSmallV5() throws Throwable
public void measureSmall() throws Throwable
{
perfTest(new SizeCaps(10, 20, 5, 10),
new SizeCaps(10, 20, 5, 10),
() -> new SimpleClient(address.getHostAddress(),
port, ProtocolVersion.V5, true,
port, version, true,
new EncryptionOptions())
.connect(false));
.connect(false),
version);
}
@Test
public void measureSmallV4() throws Throwable
public void measureSmallWithCompression() throws Throwable
{
perfTest(new SizeCaps(10, 20, 5, 10),
new SizeCaps(10, 20, 5, 10),
() -> new SimpleClient(address.getHostAddress(),
port, ProtocolVersion.V4, false,
new EncryptionOptions())
.connect(false));
}
@Test
public void measureSmallV5WithCompression() throws Throwable
{
perfTest(new SizeCaps(10, 20, 5, 10),
new SizeCaps(10, 20, 5, 10),
() -> new SimpleClient(address.getHostAddress(),
port, ProtocolVersion.V5, true,
port, version, true,
new EncryptionOptions())
.connect(true));
.connect(true),
version);
}
@Test
public void measureSmallV4WithCompression() throws Throwable
{
perfTest(new SizeCaps(10, 20, 5, 10),
new SizeCaps(10, 20, 5, 10),
() -> new SimpleClient(address.getHostAddress(),
port, ProtocolVersion.V4, false,
new EncryptionOptions())
.connect(true));
}
@Test
public void measureLargeV5() throws Throwable
public void measureLarge() throws Throwable
{
perfTest(new SizeCaps(1000, 2000, 5, 150),
new SizeCaps(1000, 2000, 5, 150),
() -> new SimpleClient(address.getHostAddress(),
port, ProtocolVersion.V5, true,
port, version, true,
new EncryptionOptions())
.connect(false));
.connect(false),
version);
}
@Test
public void measureLargeV4() throws Throwable
public void measureLargeWithCompression() throws Throwable
{
perfTest(new SizeCaps(1000, 2000, 5, 150),
new SizeCaps(1000, 2000, 5, 150),
() -> new SimpleClient(address.getHostAddress(),
port, ProtocolVersion.V4, false,
port, version, true,
new EncryptionOptions())
.connect(false));
.connect(true),
version);
}
@Test
public void measureLargeV5WithCompression() throws Throwable
{
perfTest(new SizeCaps(1000, 2000, 5, 150),
new SizeCaps(1000, 2000, 5, 150),
() -> new SimpleClient(address.getHostAddress(),
port, ProtocolVersion.V5, true,
new EncryptionOptions())
.connect(true));
}
@Test
public void measureLargeV4WithCompression() throws Throwable
{
perfTest(new SizeCaps(1000, 2000, 5, 150),
new SizeCaps(1000, 2000, 5, 150),
() -> new SimpleClient(address.getHostAddress(),
port, ProtocolVersion.V4, false,
new EncryptionOptions())
.connect(true));
}
public void perfTest(SizeCaps requestCaps, SizeCaps responseCaps, AssertUtil.ThrowingSupplier<SimpleClient> clientSupplier) throws Throwable
public void perfTest(SizeCaps requestCaps, SizeCaps responseCaps, AssertUtil.ThrowingSupplier<SimpleClient> clientSupplier, ProtocolVersion version) throws Throwable
{
ResultMessage.Rows response = generateRows(0, responseCaps);
QueryMessage requestMessage = generateQueryMessage(0, requestCaps);
Envelope message = requestMessage.encode(ProtocolVersion.V4);
QueryMessage requestMessage = generateQueryMessage(0, requestCaps, version);
Envelope message = requestMessage.encode(version);
int requestSize = message.body.readableBytes();
message.release();
message = response.encode(ProtocolVersion.V4);
message = response.encode(version);
int responseSize = message.body.readableBytes();
message.release();

View File

@ -107,7 +107,7 @@ public class Coordinator implements ICoordinator
Integer.MAX_VALUE,
null,
null,
ProtocolVersion.V4,
ProtocolVersion.CURRENT,
null),
System.nanoTime());

View File

@ -25,6 +25,7 @@ import static org.junit.Assert.fail;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
@ -45,13 +46,28 @@ import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.Timeout;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import com.google.common.base.Objects;
@RunWith(Parameterized.class)
public class ViewComplexTest extends CQLTester
{
ProtocolVersion protocolVersion = ProtocolVersion.V4;
@Parameterized.Parameter
public ProtocolVersion version;
@Parameterized.Parameters()
public static Collection<Object[]> versions()
{
return ProtocolVersion.SUPPORTED.stream()
.map(v -> new Object[]{v})
.collect(Collectors.toList());
}
private final List<String> views = new ArrayList<>();
@BeforeClass
@ -70,14 +86,14 @@ public class ViewComplexTest extends CQLTester
public void end() throws Throwable
{
for (String viewName : views)
executeNet(protocolVersion, "DROP MATERIALIZED VIEW " + viewName);
executeNet(version, "DROP MATERIALIZED VIEW " + viewName);
}
private void createView(String name, String query) throws Throwable
{
try
{
executeNet(protocolVersion, String.format(query, name));
executeNet(version, String.format(query, name));
// If exception is thrown, the view will not be added to the list; since it shouldn't have been created, this is
// the desired behavior
views.add(name);
@ -97,7 +113,7 @@ public class ViewComplexTest extends CQLTester
private void updateViewWithFlush(String query, boolean flush, Object... params) throws Throwable
{
executeNet(protocolVersion, query, params);
executeNet(version, query, params);
while (!(((SEPExecutor) Stage.VIEW_MUTATION.executor()).getPendingTaskCount() == 0
&& ((SEPExecutor) Stage.VIEW_MUTATION.executor()).getActiveTaskCount() == 0))
{
@ -114,7 +130,7 @@ public class ViewComplexTest extends CQLTester
{
boolean flush = true;
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createTable("CREATE TABLE %s (k int, c int, a int, b int, PRIMARY KEY (k, c))");
createView("mv",
"CREATE MATERIALIZED VIEW %s AS SELECT k,c FROM %%s WHERE k IS NOT NULL AND c IS NOT NULL PRIMARY KEY (k,c)");
@ -168,7 +184,7 @@ public class ViewComplexTest extends CQLTester
private void testPartialDeleteSelectedColumn(boolean flush) throws Throwable
{
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createTable("CREATE TABLE %s (k int, c int, a int, b int, e int, f int, PRIMARY KEY (k, c))");
createView("mv",
"CREATE MATERIALIZED VIEW %s AS SELECT a, b, c, k FROM %%s WHERE k IS NOT NULL AND c IS NOT NULL PRIMARY KEY (k,c)");
@ -261,7 +277,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (k int primary key, a int, b int)");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -351,7 +367,7 @@ public class ViewComplexTest extends CQLTester
String baseTable = createTable("create table %s (p int, c int, v1 int, v2 int, primary key(p, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -452,7 +468,7 @@ public class ViewComplexTest extends CQLTester
public void testPartialUpdateWithUnselectedCollections(boolean flush) throws Throwable
{
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
String baseTable = createTable("CREATE TABLE %s (k int, c int, a int, b int, l list<int>, s set<int>, m map<int,int>, PRIMARY KEY (k, c))");
createView("mv",
"CREATE MATERIALIZED VIEW %s AS SELECT a, b, c, k FROM %%s WHERE k IS NOT NULL AND c IS NOT NULL PRIMARY KEY (c, k)");
@ -490,7 +506,7 @@ public class ViewComplexTest extends CQLTester
assertRowsIgnoringOrder(execute("SELECT * from mv"), row(1, 1, null, null));
assertInvalidMessage(String.format("Cannot drop column m on base table %s with materialized views", baseTable), "ALTER TABLE %s DROP m");
// executeNet(protocolVersion, "ALTER TABLE %s DROP m");
// executeNet(version, "ALTER TABLE %s DROP m");
// ks.getColumnFamilyStore("mv").forceMajorCompaction();
// assertRowsIgnoringOrder(execute("SELECT k,c,a,b from %s WHERE k = 1 AND c = 1"));
// assertRowsIgnoringOrder(execute("SELECT * from mv WHERE k = 1 AND c = 1"));
@ -518,7 +534,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (p int, c int, v int, primary key(p, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -580,7 +596,7 @@ public class ViewComplexTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createView("mv_test1",
"CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL PRIMARY KEY (a, b)");
@ -622,7 +638,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (p int, c int, v int, primary key(p, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
updateView("INSERT INTO %s (p, c, v) VALUES (0, 0, 0) using timestamp 1;");
@ -674,7 +690,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (p int primary key, v1 int, v2 int)");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -741,7 +757,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (k int, c int, a int, b int, PRIMARY KEY(k, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -803,7 +819,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (p int primary key, v1 int, v2 int)");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -852,7 +868,7 @@ public class ViewComplexTest extends CQLTester
createTable("CREATE TABLE %s (k int PRIMARY KEY, a int, b int);");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv1", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE k IS NOT NULL AND a IS NOT NULL PRIMARY KEY (k, a);");
@ -878,10 +894,10 @@ public class ViewComplexTest extends CQLTester
for (String view : Arrays.asList("mv1", "mv2"))
{
// paging
assertEquals(1, executeNetWithPaging(protocolVersion, String.format("SELECT k,a,b FROM %s limit 1", view), 1).all().size());
assertEquals(2, executeNetWithPaging(protocolVersion, String.format("SELECT k,a,b FROM %s limit 2", view), 1).all().size());
assertEquals(2, executeNetWithPaging(protocolVersion, String.format("SELECT k,a,b FROM %s", view), 1).all().size());
assertRowsNet(protocolVersion, executeNetWithPaging(protocolVersion, String.format("SELECT k,a,b FROM %s ", view), 1),
assertEquals(1, executeNetWithPaging(version, String.format("SELECT k,a,b FROM %s limit 1", view), 1).all().size());
assertEquals(2, executeNetWithPaging(version, String.format("SELECT k,a,b FROM %s limit 2", view), 1).all().size());
assertEquals(2, executeNetWithPaging(version, String.format("SELECT k,a,b FROM %s", view), 1).all().size());
assertRowsNet(version, executeNetWithPaging(version, String.format("SELECT k,a,b FROM %s ", view), 1),
row(50, 50, 50),
row(100, 100, 100));
// limit
@ -912,7 +928,7 @@ public class ViewComplexTest extends CQLTester
String baseTable = createTable("CREATE TABLE %s (k int PRIMARY KEY, a int, b int);");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -978,7 +994,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (p1 int, p2 int, v1 int, v2 int, primary key (p1,p2))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -1030,7 +1046,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (p int primary key, v1 int, v2 int)");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -1092,7 +1108,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (p int primary key, v1 int, v2 int)");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -1165,7 +1181,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (p1 int, p2 int, v1 int, v2 int, primary key(p1, p2))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv2",
@ -1226,7 +1242,7 @@ public class ViewComplexTest extends CQLTester
createTable("create table %s (p int primary key, v1 int, v2 int)");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv",
@ -1265,7 +1281,7 @@ public class ViewComplexTest extends CQLTester
assertRowsIgnoringOrder(execute("SELECT * from mv limit 1"), row(1, 3, null));
// insert values TS=2, it should be considered dead due to previous tombstone
executeNet(protocolVersion, "UPDATE %s USING TIMESTAMP 3 SET v2 = ? WHERE p = ?", 4, 3);
executeNet(version, "UPDATE %s USING TIMESTAMP 3 SET v2 = ? WHERE p = ?", 4, 3);
if (flush)
FBUtilities.waitOnFutures(ks.flush());
@ -1294,7 +1310,7 @@ public class ViewComplexTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, e int, f int, PRIMARY KEY(a, b))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
List<String> viewNames = new ArrayList<>();
List<String> mvStatements = Arrays.asList(
// all selected

View File

@ -19,6 +19,7 @@
package org.apache.cassandra.cql3;
import java.util.*;
import java.util.stream.Collectors;
import org.junit.After;
import org.junit.AfterClass;
@ -29,6 +30,8 @@ import org.junit.Test;
import com.datastax.driver.core.exceptions.InvalidQueryException;
import org.junit.Assert;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import com.datastax.driver.core.exceptions.OperationTimedOutException;
import org.apache.cassandra.concurrent.SEPExecutor;
@ -38,9 +41,20 @@ import org.apache.cassandra.db.SystemKeyspace;
import org.apache.cassandra.transport.ProtocolVersion;
import org.apache.cassandra.utils.FBUtilities;
@RunWith(Parameterized.class)
public class ViewFilteringTest extends CQLTester
{
ProtocolVersion protocolVersion = ProtocolVersion.V4;
@Parameterized.Parameter
public ProtocolVersion version;
@Parameterized.Parameters()
public static Collection<Object[]> versions()
{
return ProtocolVersion.SUPPORTED.stream()
.map(v -> new Object[]{v})
.collect(Collectors.toList());
}
private final List<String> views = new ArrayList<>();
@BeforeClass
@ -66,14 +80,14 @@ public class ViewFilteringTest extends CQLTester
public void end() throws Throwable
{
for (String viewName : views)
executeNet(protocolVersion, "DROP MATERIALIZED VIEW " + viewName);
executeNet(version, "DROP MATERIALIZED VIEW " + viewName);
}
private void createView(String name, String query) throws Throwable
{
try
{
executeNet(protocolVersion, String.format(query, name));
executeNet(version, String.format(query, name));
// If exception is thrown, the view will not be added to the list; since it shouldn't have been created, this is
// the desired behavior
views.add(name);
@ -88,7 +102,7 @@ public class ViewFilteringTest extends CQLTester
private void updateView(String query, Object... params) throws Throwable
{
executeNet(protocolVersion, query, params);
executeNet(version, query, params);
while (!(((SEPExecutor) Stage.VIEW_MUTATION.executor()).getPendingTaskCount() == 0
&& ((SEPExecutor) Stage.VIEW_MUTATION.executor()).getActiveTaskCount() == 0))
{
@ -98,7 +112,7 @@ public class ViewFilteringTest extends CQLTester
private void dropView(String name) throws Throwable
{
executeNet(protocolVersion, "DROP MATERIALIZED VIEW " + name);
executeNet(version, "DROP MATERIALIZED VIEW " + name);
views.remove(name);
}
@ -124,7 +138,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createView("mv_test1",
"CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL and c = 1 PRIMARY KEY (a, b)");
@ -334,7 +348,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, l list<int>, s set<int>, m map<int,int>, PRIMARY KEY (a, b))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createView("mv_test1",
"CREATE MATERIALIZED VIEW %s AS SELECT a,b,c FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL AND c IS NOT NULL "
@ -420,7 +434,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, e int, PRIMARY KEY((a, b), c, d))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
// IS NOT NULL is required on all PK statements that are not otherwise restricted
List<String> badStatements = Arrays.asList(
@ -470,7 +484,7 @@ public class ViewFilteringTest extends CQLTester
try
{
executeNet(protocolVersion, "ALTER MATERIALIZED VIEW mv" + i + "_test WITH compaction = { 'class' : 'LeveledCompactionStrategy' }");
executeNet(version, "ALTER MATERIALIZED VIEW mv" + i + "_test WITH compaction = { 'class' : 'LeveledCompactionStrategy' }");
}
catch (Exception e)
{
@ -485,7 +499,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (\"theKey\" int, \"theClustering\" int, \"the\"\"Value\" int, PRIMARY KEY (\"theKey\", \"theClustering\"))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (\"theKey\", \"theClustering\", \"the\"\"Value\") VALUES (?, ?, ?)", 0, 0, 0);
execute("INSERT INTO %s (\"theKey\", \"theClustering\", \"the\"\"Value\") VALUES (?, ?, ?)", 0, 1, 0);
@ -511,7 +525,7 @@ public class ViewFilteringTest extends CQLTester
);
}
executeNet(protocolVersion, "ALTER TABLE %s RENAME \"theClustering\" TO \"Col\"");
executeNet(version, "ALTER TABLE %s RENAME \"theClustering\" TO \"Col\"");
for (String mvname : Arrays.asList("mv_test", "mv_test2"))
{
@ -527,7 +541,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, PRIMARY KEY (a, b))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", 0, 0, 0);
execute("INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", 0, 1, 1);
@ -546,7 +560,7 @@ public class ViewFilteringTest extends CQLTester
row(1, 1, 3)
);
executeNet(protocolVersion, "ALTER TABLE %s RENAME a TO foo");
executeNet(version, "ALTER TABLE %s RENAME a TO foo");
assertRows(execute("SELECT foo, b, c FROM mv_test"),
row(1, 0, 2),
@ -560,7 +574,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, PRIMARY KEY (a, b))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", 0, 0, 0);
execute("INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", 0, 1, 1);
@ -579,7 +593,7 @@ public class ViewFilteringTest extends CQLTester
row(1, 1, 3)
);
executeNet(protocolVersion, "ALTER TABLE %s RENAME a TO foo");
executeNet(version, "ALTER TABLE %s RENAME a TO foo");
assertRows(execute("SELECT foo, b, c FROM mv_test"),
row(1, 0, 2),
@ -596,7 +610,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY ((a, b), c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 1, 0, 0);
@ -701,7 +715,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY ((a, b), c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, 1);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 10, 1, 2);
@ -800,7 +814,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 1, 0, 0);
@ -901,7 +915,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY ((a, b), c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, 0);
@ -989,7 +1003,7 @@ public class ViewFilteringTest extends CQLTester
{
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY ((a, b), c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, 0);
@ -1078,7 +1092,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, 0);
@ -1187,7 +1201,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, 0);
@ -1295,7 +1309,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, 0);
@ -1412,7 +1426,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, 0);
@ -1525,7 +1539,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, 0);
@ -1650,7 +1664,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, 0);
@ -1788,7 +1802,7 @@ public class ViewFilteringTest extends CQLTester
"PRIMARY KEY (" + columnNames + "))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createView(
@ -1844,7 +1858,7 @@ public class ViewFilteringTest extends CQLTester
assert !execute("SELECT * FROM mv_test").isEmpty();
executeNet(protocolVersion, "ALTER TABLE %s RENAME inetval TO foo");
executeNet(version, "ALTER TABLE %s RENAME inetval TO foo");
assert !execute("SELECT * FROM mv_test").isEmpty();
}
@ -1854,7 +1868,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
try {
createView("mv_test", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL AND c IS NOT NULL AND d = 1 PRIMARY KEY (a, b, c)");
@ -1872,7 +1886,7 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0);
execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, 0);
@ -1984,28 +1998,28 @@ public class ViewFilteringTest extends CQLTester
createTable("CREATE TABLE %s (a int, b int, c int, d int, e int, PRIMARY KEY (a, b))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
Keyspace ks = Keyspace.open(keyspace());
createView("mv", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL AND c IS NOT NULL AND c = 1 PRIMARY KEY (c, a, b)");
ks.getColumnFamilyStore("mv").disableAutoCompaction();
//Set initial values TS=0, matching the restriction and verify view
executeNet(protocolVersion, "INSERT INTO %s (a, b, c, d) VALUES (0, 0, 1, 0) USING TIMESTAMP 0");
executeNet(version, "INSERT INTO %s (a, b, c, d) VALUES (0, 0, 1, 0) USING TIMESTAMP 0");
assertRows(execute("SELECT d from mv WHERE c = ? and a = ? and b = ?", 1, 0, 0), row(0));
if (flush)
FBUtilities.waitOnFutures(ks.flush());
//update c's timestamp TS=2
executeNet(protocolVersion, "UPDATE %s USING TIMESTAMP 2 SET c = ? WHERE a = ? and b = ? ", 1, 0, 0);
executeNet(version, "UPDATE %s USING TIMESTAMP 2 SET c = ? WHERE a = ? and b = ? ", 1, 0, 0);
assertRows(execute("SELECT d from mv WHERE c = ? and a = ? and b = ?", 1, 0, 0), row(0));
if (flush)
FBUtilities.waitOnFutures(ks.flush());
//change c's value and TS=3, tombstones c=1 and adds c=0 record
executeNet(protocolVersion, "UPDATE %s USING TIMESTAMP 3 SET c = ? WHERE a = ? and b = ? ", 0, 0, 0);
executeNet(version, "UPDATE %s USING TIMESTAMP 3 SET c = ? WHERE a = ? and b = ? ", 0, 0, 0);
assertRows(execute("SELECT d from mv WHERE c = ? and a = ? and b = ?", 0, 0, 0));
if(flush)
@ -2015,7 +2029,7 @@ public class ViewFilteringTest extends CQLTester
}
//change c's value back to 1 with TS=4, check we can see d
executeNet(protocolVersion, "UPDATE %s USING TIMESTAMP 4 SET c = ? WHERE a = ? and b = ? ", 1, 0, 0);
executeNet(version, "UPDATE %s USING TIMESTAMP 4 SET c = ? WHERE a = ? and b = ? ", 1, 0, 0);
if (flush)
{
ks.getColumnFamilyStore("mv").forceMajorCompaction();
@ -2026,7 +2040,7 @@ public class ViewFilteringTest extends CQLTester
//Add e value @ TS=1
executeNet(protocolVersion, "UPDATE %s USING TIMESTAMP 1 SET e = ? WHERE a = ? and b = ? ", 1, 0, 0);
executeNet(version, "UPDATE %s USING TIMESTAMP 1 SET e = ? WHERE a = ? and b = ? ", 1, 0, 0);
assertRows(execute("SELECT d, e from mv WHERE c = ? and a = ? and b = ?", 1, 0, 0), row(0, 1));
if (flush)
@ -2034,7 +2048,7 @@ public class ViewFilteringTest extends CQLTester
//Change d value @ TS=2
executeNet(protocolVersion, "UPDATE %s USING TIMESTAMP 2 SET d = ? WHERE a = ? and b = ? ", 2, 0, 0);
executeNet(version, "UPDATE %s USING TIMESTAMP 2 SET d = ? WHERE a = ? and b = ? ", 2, 0, 0);
assertRows(execute("SELECT d from mv WHERE c = ? and a = ? and b = ?", 1, 0, 0), row(2));
if (flush)
@ -2042,17 +2056,17 @@ public class ViewFilteringTest extends CQLTester
//Change d value @ TS=3
executeNet(protocolVersion, "UPDATE %s USING TIMESTAMP 3 SET d = ? WHERE a = ? and b = ? ", 1, 0, 0);
executeNet(version, "UPDATE %s USING TIMESTAMP 3 SET d = ? WHERE a = ? and b = ? ", 1, 0, 0);
assertRows(execute("SELECT d from mv WHERE c = ? and a = ? and b = ?", 1, 0, 0), row(1));
//Tombstone c
executeNet(protocolVersion, "DELETE FROM %s WHERE a = ? and b = ?", 0, 0);
executeNet(version, "DELETE FROM %s WHERE a = ? and b = ?", 0, 0);
assertRowsIgnoringOrder(execute("SELECT d from mv"));
assertRows(execute("SELECT d from mv"));
//Add back without D
executeNet(protocolVersion, "INSERT INTO %s (a, b, c) VALUES (0, 0, 1)");
executeNet(version, "INSERT INTO %s (a, b, c) VALUES (0, 0, 1)");
//Make sure D doesn't pop back in.
assertRows(execute("SELECT d from mv WHERE c = ? and a = ? and b = ?", 1, 0, 0), row((Object) null));
@ -2060,24 +2074,24 @@ public class ViewFilteringTest extends CQLTester
//New partition
// insert a row with timestamp 0
executeNet(protocolVersion, "INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?) USING TIMESTAMP 0", 1, 0, 1, 0, 0);
executeNet(version, "INSERT INTO %s (a, b, c, d, e) VALUES (?, ?, ?, ?, ?) USING TIMESTAMP 0", 1, 0, 1, 0, 0);
// overwrite pk and e with timestamp 1, but don't overwrite d
executeNet(protocolVersion, "INSERT INTO %s (a, b, c, e) VALUES (?, ?, ?, ?) USING TIMESTAMP 1", 1, 0, 1, 0);
executeNet(version, "INSERT INTO %s (a, b, c, e) VALUES (?, ?, ?, ?) USING TIMESTAMP 1", 1, 0, 1, 0);
// delete with timestamp 0 (which should only delete d)
executeNet(protocolVersion, "DELETE FROM %s USING TIMESTAMP 0 WHERE a = ? AND b = ?", 1, 0);
executeNet(version, "DELETE FROM %s USING TIMESTAMP 0 WHERE a = ? AND b = ?", 1, 0);
assertRows(execute("SELECT a, b, c, d, e from mv WHERE c = ? and a = ? and b = ?", 1, 1, 0),
row(1, 0, 1, null, 0)
);
executeNet(protocolVersion, "UPDATE %s USING TIMESTAMP 2 SET c = ? WHERE a = ? AND b = ?", 1, 1, 1);
executeNet(protocolVersion, "UPDATE %s USING TIMESTAMP 3 SET c = ? WHERE a = ? AND b = ?", 1, 1, 0);
executeNet(version, "UPDATE %s USING TIMESTAMP 2 SET c = ? WHERE a = ? AND b = ?", 1, 1, 1);
executeNet(version, "UPDATE %s USING TIMESTAMP 3 SET c = ? WHERE a = ? AND b = ?", 1, 1, 0);
assertRows(execute("SELECT a, b, c, d, e from mv WHERE c = ? and a = ? and b = ?", 1, 1, 0),
row(1, 0, 1, null, 0)
);
executeNet(protocolVersion, "UPDATE %s USING TIMESTAMP 3 SET d = ? WHERE a = ? AND b = ?", 0, 1, 0);
executeNet(version, "UPDATE %s USING TIMESTAMP 3 SET d = ? WHERE a = ? AND b = ?", 0, 1, 0);
assertRows(execute("SELECT a, b, c, d, e from mv WHERE c = ? and a = ? and b = ?", 1, 1, 0),
row(1, 0, 1, 0, 0)
);
@ -2094,7 +2108,7 @@ public class ViewFilteringTest extends CQLTester
"val int)");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createView("mv_rctstest", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE k IS NOT NULL AND c IS NOT NULL AND c = 1 PRIMARY KEY (k,c)");
@ -2123,7 +2137,7 @@ public class ViewFilteringTest extends CQLTester
"PRIMARY KEY(k, c))");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createView("mv_tstest", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE val IS NOT NULL AND k IS NOT NULL AND c IS NOT NULL AND val = 'baz' PRIMARY KEY (val,k,c)");

View File

@ -20,15 +20,19 @@ package org.apache.cassandra.cql3;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CyclicBarrier;
import java.util.stream.Collectors;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.exceptions.NoHostAvailableException;
@ -43,9 +47,20 @@ import org.apache.cassandra.db.Keyspace;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.WrappedRunnable;
@RunWith(Parameterized.class)
public class ViewLongTest extends CQLTester
{
ProtocolVersion protocolVersion = ProtocolVersion.V4;
@Parameterized.Parameter
public ProtocolVersion version;
@Parameterized.Parameters()
public static Collection<Object[]> versions()
{
return ProtocolVersion.SUPPORTED.stream()
.map(v -> new Object[]{v})
.collect(Collectors.toList());
}
private final List<String> views = new ArrayList<>();
@BeforeClass
@ -63,14 +78,14 @@ public class ViewLongTest extends CQLTester
public void end() throws Throwable
{
for (String viewName : views)
executeNet(protocolVersion, "DROP MATERIALIZED VIEW " + viewName);
executeNet(version, "DROP MATERIALIZED VIEW " + viewName);
}
private void createView(String name, String query) throws Throwable
{
try
{
executeNet(protocolVersion, String.format(query, name));
executeNet(version, String.format(query, name));
// If exception is thrown, the view will not be added to the list; since it shouldn't have been created, this is
// the desired behavior
views.add(name);
@ -96,7 +111,7 @@ public class ViewLongTest extends CQLTester
"c int," +
"PRIMARY KEY (a, b))");
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createView("mv", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE c IS NOT NULL AND a IS NOT NULL AND b IS NOT NULL PRIMARY KEY (c, a, b)");
@ -118,7 +133,7 @@ public class ViewLongTest extends CQLTester
{
try
{
executeNet(protocolVersion, "INSERT INTO %s (a, b, c) VALUES (?, ?, ?) USING TIMESTAMP 1",
executeNet(version, "INSERT INTO %s (a, b, c) VALUES (?, ?, ?) USING TIMESTAMP 1",
1,
1,
i + writerOffset);
@ -144,7 +159,7 @@ public class ViewLongTest extends CQLTester
for (int i = 0; i < writers * insertsPerWriter; i++)
{
if (executeNet(protocolVersion, "SELECT COUNT(*) FROM system.batches").one().getLong(0) == 0)
if (executeNet(version, "SELECT COUNT(*) FROM system.batches").one().getLong(0) == 0)
break;
try
{
@ -158,9 +173,9 @@ public class ViewLongTest extends CQLTester
}
}
int value = executeNet(protocolVersion, "SELECT c FROM %s WHERE a = 1 AND b = 1").one().getInt("c");
int value = executeNet(version, "SELECT c FROM %s WHERE a = 1 AND b = 1").one().getInt("c");
List<Row> rows = executeNet(protocolVersion, "SELECT c FROM " + keyspace() + ".mv").all();
List<Row> rows = executeNet(version, "SELECT c FROM " + keyspace() + ".mv").all();
boolean containsC = false;
StringBuilder others = new StringBuilder();
@ -217,7 +232,7 @@ public class ViewLongTest extends CQLTester
createTable("CREATE TABLE %s (field1 int,field2 int,date int,PRIMARY KEY ((field1), field2)) WITH default_time_to_live = 5;");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createView("mv",
"CREATE MATERIALIZED VIEW mv AS SELECT * FROM %%s WHERE field1 IS NOT NULL AND field2 IS NOT NULL AND date IS NOT NULL PRIMARY KEY ((field1), date, field2) WITH CLUSTERING ORDER BY (date desc, field2 asc);");
@ -334,7 +349,7 @@ public class ViewLongTest extends CQLTester
createTable("CREATE TABLE %s (k int,c int,a int, b int, PRIMARY KEY ((k), c)) WITH default_time_to_live = 1000;");
execute("USE " + keyspace());
executeNet(protocolVersion, "USE " + keyspace());
executeNet(version, "USE " + keyspace());
createView("mv",
"CREATE MATERIALIZED VIEW mv AS SELECT k,c,a FROM %%s WHERE k IS NOT NULL AND c IS NOT NULL "
@ -415,7 +430,7 @@ public class ViewLongTest extends CQLTester
private void updateViewWithFlush(String query, boolean flush, Object... params) throws Throwable
{
executeNet(protocolVersion, query, params);
executeNet(version, query, params);
while (!(((SEPExecutor) Stage.VIEW_MUTATION.executor()).getPendingTaskCount() == 0
&& ((SEPExecutor) Stage.VIEW_MUTATION.executor()).getActiveTaskCount() == 0))
{

View File

@ -17,12 +17,18 @@
*/
package org.apache.cassandra.service;
import java.util.Collection;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.EncryptionOptions;
import org.apache.cassandra.cql3.CQLTester;
import org.apache.cassandra.cql3.QueryOptions;
import org.apache.cassandra.db.ColumnFamilyStore;
@ -35,8 +41,21 @@ import org.apache.cassandra.transport.messages.QueryMessage;
import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@RunWith(Parameterized.class)
public class ClientWarningsTest extends CQLTester
{
@Parameterized.Parameter
public ProtocolVersion version;
@Parameterized.Parameters()
public static Collection<Object[]> versions()
{
return ProtocolVersion.SUPPORTED.stream()
.skip(1)
.map(v -> new Object[]{v})
.collect(Collectors.toList());
}
@BeforeClass
public static void setUp()
{
@ -45,11 +64,12 @@ public class ClientWarningsTest extends CQLTester
}
@Test
public void testUnloggedBatchWithProtoV4() throws Exception
public void testUnloggedBatch() throws Exception
{
createTable("CREATE TABLE %s (pk int PRIMARY KEY, v text)");
try (SimpleClient client = new SimpleClient(nativeAddr.getHostAddress(), nativePort, ProtocolVersion.V4))
// v4 and higher
try (SimpleClient client = new SimpleClient(nativeAddr.getHostAddress(), nativePort, version, true, new EncryptionOptions()))
{
client.connect(false);
@ -64,11 +84,12 @@ public class ClientWarningsTest extends CQLTester
}
@Test
public void testLargeBatchWithProtoV4() throws Exception
public void testLargeBatch() throws Exception
{
createTable("CREATE TABLE %s (pk int PRIMARY KEY, v text)");
try (SimpleClient client = new SimpleClient(nativeAddr.getHostAddress(), nativePort, ProtocolVersion.V4))
// v4 and higher
try (SimpleClient client = new SimpleClient(nativeAddr.getHostAddress(), nativePort, version, true, new EncryptionOptions()))
{
client.connect(false);
@ -88,7 +109,7 @@ public class ClientWarningsTest extends CQLTester
final int iterations = 10000;
createTable("CREATE TABLE %s (pk int, ck int, v int, PRIMARY KEY (pk, ck))");
try (SimpleClient client = new SimpleClient(nativeAddr.getHostAddress(), nativePort, ProtocolVersion.V4))
try (SimpleClient client = new SimpleClient(nativeAddr.getHostAddress(), nativePort, version, true, new EncryptionOptions()))
{
client.connect(false);

View File

@ -25,6 +25,7 @@ import java.util.*;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.apache.cassandra.*;
import org.apache.cassandra.cql3.statements.schema.CreateTableStatement;
@ -231,9 +232,15 @@ public class QueryPagerTest
}
@Test
public void namesQueryTest() throws Exception
public void namesQueryTest()
{
QueryPager pager = namesQuery("k0", "c1", "c5", "c7", "c8").getPager(null, ProtocolVersion.CURRENT);
for(ProtocolVersion protocolVersion : ProtocolVersion.SUPPORTED)
namesQueryTest(protocolVersion);
}
public void namesQueryTest(ProtocolVersion protocolVersion)
{
QueryPager pager = namesQuery("k0", "c1", "c5", "c7", "c8").getPager(null, protocolVersion);
assertFalse(pager.isExhausted());
List<FilteredPartition> partition = query(pager, 5, 4);
@ -243,16 +250,16 @@ public class QueryPagerTest
}
@Test
public void sliceQueryTest() throws Exception
public void sliceQueryTest()
{
sliceQueryTest(false, ProtocolVersion.V3);
sliceQueryTest(true, ProtocolVersion.V3);
sliceQueryTest(false, ProtocolVersion.V4);
sliceQueryTest(true, ProtocolVersion.V4);
for(ProtocolVersion protocolVersion : ProtocolVersion.SUPPORTED)
{
sliceQueryTest(false, protocolVersion);
sliceQueryTest(true, protocolVersion);
}
}
public void sliceQueryTest(boolean testPagingState, ProtocolVersion protocolVersion) throws Exception
public void sliceQueryTest(boolean testPagingState, ProtocolVersion protocolVersion)
{
ReadCommand command = sliceQuery("k0", "c1", "c8", 10);
QueryPager pager = command.getPager(null, protocolVersion);
@ -277,16 +284,16 @@ public class QueryPagerTest
}
@Test
public void reversedSliceQueryTest() throws Exception
public void reversedSliceQueryTest()
{
reversedSliceQueryTest(false, ProtocolVersion.V3);
reversedSliceQueryTest(true, ProtocolVersion.V3);
reversedSliceQueryTest(false, ProtocolVersion.V4);
reversedSliceQueryTest(true, ProtocolVersion.V4);
for(ProtocolVersion protocolVersion : ProtocolVersion.SUPPORTED)
{
reversedSliceQueryTest(false, protocolVersion);
reversedSliceQueryTest(true, protocolVersion);
}
}
public void reversedSliceQueryTest(boolean testPagingState, ProtocolVersion protocolVersion) throws Exception
public void reversedSliceQueryTest(boolean testPagingState, ProtocolVersion protocolVersion)
{
ReadCommand command = sliceQuery("k0", "c1", "c8", true, 10);
QueryPager pager = command.getPager(null, protocolVersion);
@ -311,16 +318,16 @@ public class QueryPagerTest
}
@Test
public void multiQueryTest() throws Exception
public void multiQueryTest()
{
multiQueryTest(false, ProtocolVersion.V3);
multiQueryTest(true, ProtocolVersion.V3);
multiQueryTest(false, ProtocolVersion.V4);
multiQueryTest(true, ProtocolVersion.V4);
for(ProtocolVersion protocolVersion : ProtocolVersion.SUPPORTED)
{
multiQueryTest(false, protocolVersion);
multiQueryTest(true, protocolVersion);
}
}
public void multiQueryTest(boolean testPagingState, ProtocolVersion protocolVersion) throws Exception
public void multiQueryTest(boolean testPagingState, ProtocolVersion protocolVersion)
{
ReadQuery command = new SinglePartitionReadCommand.Group(new ArrayList<SinglePartitionReadCommand>()
{{
@ -350,16 +357,16 @@ public class QueryPagerTest
}
@Test
public void rangeNamesQueryTest() throws Exception
public void rangeNamesQueryTest()
{
rangeNamesQueryTest(false, ProtocolVersion.V3);
rangeNamesQueryTest(true, ProtocolVersion.V3);
rangeNamesQueryTest(false, ProtocolVersion.V4);
rangeNamesQueryTest(true, ProtocolVersion.V4);
for(ProtocolVersion protocolVersion : ProtocolVersion.SUPPORTED)
{
rangeNamesQueryTest(false, protocolVersion);
rangeNamesQueryTest(true, protocolVersion);
}
}
public void rangeNamesQueryTest(boolean testPagingState, ProtocolVersion protocolVersion) throws Exception
public void rangeNamesQueryTest(boolean testPagingState, ProtocolVersion protocolVersion)
{
ReadCommand command = rangeNamesQuery("k0", "k5", 100, "c1", "c4", "c8");
QueryPager pager = command.getPager(null, protocolVersion);
@ -380,16 +387,16 @@ public class QueryPagerTest
}
@Test
public void rangeSliceQueryTest() throws Exception
public void rangeSliceQueryTest()
{
rangeSliceQueryTest(false, ProtocolVersion.V3);
rangeSliceQueryTest(true, ProtocolVersion.V3);
rangeSliceQueryTest(false, ProtocolVersion.V4);
rangeSliceQueryTest(true, ProtocolVersion.V4);
for(ProtocolVersion protocolVersion : ProtocolVersion.SUPPORTED)
{
rangeSliceQueryTest(false, protocolVersion);
rangeSliceQueryTest(true, protocolVersion);
}
}
public void rangeSliceQueryTest(boolean testPagingState, ProtocolVersion protocolVersion) throws Exception
public void rangeSliceQueryTest(boolean testPagingState, ProtocolVersion protocolVersion)
{
ReadCommand command = rangeSliceQuery("k1", "k5", 100, "c1", "c7");
QueryPager pager = command.getPager(null, protocolVersion);
@ -435,7 +442,13 @@ public class QueryPagerTest
}
@Test
public void SliceQueryWithTombstoneTest() throws Exception
public void SliceQueryWithTombstoneTest()
{
for(ProtocolVersion version : ProtocolVersion.SUPPORTED)
SliceQueryWithTombstoneTest(version);
}
public void SliceQueryWithTombstoneTest(ProtocolVersion protocolVersion)
{
// Testing for the bug of #6748
String keyspace = "cql_keyspace";
@ -448,7 +461,7 @@ public class QueryPagerTest
ReadCommand command = SinglePartitionReadCommand.create(cfs.metadata(), nowInSec, Util.dk("k0"), Slice.ALL);
QueryPager pager = command.getPager(null, ProtocolVersion.CURRENT);
QueryPager pager = command.getPager(null, protocolVersion);
for (int i = 0; i < 5; i++)
{
@ -459,7 +472,7 @@ public class QueryPagerTest
}
@Test
public void pagingReversedQueriesWithStaticColumnsTest() throws Exception
public void pagingReversedQueriesWithStaticColumnsTest()
{
// There was a bug in paging for reverse queries when the schema includes static columns in
// 2.1 & 2.2. This was never a problem in 3.0, so this test just guards against regressions
@ -475,7 +488,7 @@ public class QueryPagerTest
queryAndVerifyCells(table, true, "k0");
}
private void queryAndVerifyCells(TableMetadata table, boolean reversed, String key) throws Exception
private void queryAndVerifyCells(TableMetadata table, boolean reversed, String key)
{
ClusteringIndexFilter rowfilter = new ClusteringIndexSliceFilter(Slices.ALL, reversed);
ReadCommand command = SinglePartitionReadCommand.create(table, nowInSec, Util.dk(key), ColumnFilter.all(table), rowfilter);

View File

@ -82,6 +82,15 @@ public class PagingStateTest
assertEquals(state, PagingState.deserialize(serialized, ProtocolVersion.V4));
}
@Test
public void testSerializeV5DeserializeV5()
{
PagingState state = Util.makeSomePagingState(ProtocolVersion.V5);
ByteBuffer serialized = state.serialize(ProtocolVersion.V5);
assertEquals(serialized.remaining(), state.serializedSize(ProtocolVersion.V5));
assertEquals(state, PagingState.deserialize(serialized, ProtocolVersion.V5));
}
@Test
public void testSerializeV3DeserializeV4()
{