This is an automated email from the ASF dual-hosted git repository.

blerer pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 2aa22ba99dcc1dacb07b7af31b2664e7db839063
Merge: 78b13cd e3902bc
Author: Benjamin Lerer <[email protected]>
AuthorDate: Mon Mar 8 11:31:12 2021 +0100

    Merge branch cassandra-3.11 into trunk

 .../apache/cassandra/index/sasi/SASIIndexTest.java | 545 +++++++++++----------
 1 file changed, 277 insertions(+), 268 deletions(-)

diff --cc test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java
index 7619bd2,afc2e7b..3396e3d
--- a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java
+++ b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java
@@@ -32,19 -32,17 +32,20 @@@ import java.util.concurrent.ThreadLocal
  import java.util.concurrent.TimeUnit;
  import java.util.concurrent.atomic.AtomicInteger;
  import java.util.stream.Collectors;
++import java.util.stream.Stream;
  
  import org.apache.cassandra.SchemaLoader;
 -import org.apache.cassandra.config.CFMetaData;
 -import org.apache.cassandra.config.ColumnDefinition;
 -import org.apache.cassandra.config.Schema;
 +import org.apache.cassandra.cql3.CQLTester;
 +import org.apache.cassandra.cql3.Operator;
 +import org.apache.cassandra.cql3.QueryProcessor;
 +import org.apache.cassandra.cql3.UntypedResultSet;
  import org.apache.cassandra.index.Index;
 +import org.apache.cassandra.schema.ColumnMetadata;
 +import org.apache.cassandra.schema.Schema;
 +import org.apache.cassandra.schema.TableMetadata;
  import org.apache.cassandra.config.DatabaseDescriptor;
 -import org.apache.cassandra.cql3.*;
  import org.apache.cassandra.cql3.Term;
 -import org.apache.cassandra.cql3.statements.IndexTarget;
 -import org.apache.cassandra.cql3.statements.SelectStatement;
 +import org.apache.cassandra.cql3.statements.schema.IndexTarget;
  import org.apache.cassandra.db.*;
  import org.apache.cassandra.db.filter.ColumnFilter;
  import org.apache.cassandra.db.filter.DataLimits;
@@@ -80,16 -87,11 +83,14 @@@ import org.apache.cassandra.utils.ByteB
  import org.apache.cassandra.utils.FBUtilities;
  import org.apache.cassandra.utils.Pair;
  
- import com.google.common.collect.Lists;
+ import com.google.common.collect.Iterables;
 +import com.google.common.collect.Sets;
  import com.google.common.util.concurrent.Uninterruptibles;
  
- import org.junit.Assert;
- 
  import org.junit.*;
  
 +import static java.util.concurrent.TimeUnit.MILLISECONDS;
 +
  public class SASIIndexTest
  {
      private static final IPartitioner PARTITIONER;
@@@ -110,13 -114,18 +113,14 @@@
      public static void loadSchema() throws ConfigurationException
      {
          SchemaLoader.loadSchema();
 -        MigrationManager.announceNewKeyspace(KeyspaceMetadata.create(KS_NAME,
 -                                                                     
KeyspaceParams.simpleTransient(1),
 -                                                                     
Tables.of(SchemaLoader.sasiCFMD(KS_NAME, CF_NAME),
 -                                                                              
 SchemaLoader.clusteringSASICFMD(KS_NAME, CLUSTERING_CF_NAME_1),
 -                                                                              
 SchemaLoader.clusteringSASICFMD(KS_NAME, CLUSTERING_CF_NAME_2, "location"),
 -                                                                              
 SchemaLoader.staticSASICFMD(KS_NAME, STATIC_CF_NAME),
 -                                                                              
 SchemaLoader.fullTextSearchSASICFMD(KS_NAME, FTS_CF_NAME))));
 -        Keyspace ks = Keyspace.open(KS_NAME);
 -        for (ColumnFamilyStore store : ks.getColumnFamilyStores())
 -        {
 -            store.disableAutoCompaction();
 -        }
 +        SchemaLoader.createKeyspace(KS_NAME,
 +                                    KeyspaceParams.simpleTransient(1),
 +                                    SchemaLoader.sasiCFMD(KS_NAME, CF_NAME),
 +                                    SchemaLoader.clusteringSASICFMD(KS_NAME, 
CLUSTERING_CF_NAME_1),
 +                                    SchemaLoader.clusteringSASICFMD(KS_NAME, 
CLUSTERING_CF_NAME_2, "location"),
 +                                    SchemaLoader.staticSASICFMD(KS_NAME, 
STATIC_CF_NAME),
 +                                    
SchemaLoader.fullTextSearchSASICFMD(KS_NAME, FTS_CF_NAME));
++        stores().forEach(ColumnFamilyStore::disableAutoCompaction);
      }
  
      @Before
@@@ -778,33 -784,33 +779,33 @@@
      {
          ColumnFamilyStore store = 
Keyspace.open(KS_NAME).getColumnFamilyStore(CF_NAME);
  
 -        Mutation rm1 = new Mutation(KS_NAME, 
decoratedKey(AsciiType.instance.decompose("key1")));
 -        rm1.add(PartitionUpdate.singleRowUpdate(store.metadata,
 +        Mutation.PartitionUpdateCollector rm1 = new 
Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey(AsciiType.instance.decompose("key1")));
 +        rm1.add(PartitionUpdate.singleRowUpdate(store.metadata(),
                                                  rm1.key(),
 -                                                
buildRow(buildCell(store.metadata,
 +                                                
buildRow(buildCell(store.metadata(),
                                                                     
UTF8Type.instance.decompose("/data/output/id"),
                                                                     
AsciiType.instance.decompose("jason"),
-                                                                    
System.currentTimeMillis()))));
+                                                                    1000))));
  
 -        Mutation rm2 = new Mutation(KS_NAME, 
decoratedKey(AsciiType.instance.decompose("key2")));
 -        rm2.add(PartitionUpdate.singleRowUpdate(store.metadata,
 +        Mutation.PartitionUpdateCollector rm2 = new 
Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey(AsciiType.instance.decompose("key2")));
 +        rm2.add(PartitionUpdate.singleRowUpdate(store.metadata(),
                                                  rm2.key(),
 -                                                
buildRow(buildCell(store.metadata,
 +                                                
buildRow(buildCell(store.metadata(),
                                                                     
UTF8Type.instance.decompose("/data/output/id"),
                                                                     
AsciiType.instance.decompose("pavel"),
-                                                                    
System.currentTimeMillis()))));
+                                                                    2000))));
  
 -        Mutation rm3 = new Mutation(KS_NAME, 
decoratedKey(AsciiType.instance.decompose("key3")));
 -        rm3.add(PartitionUpdate.singleRowUpdate(store.metadata,
 +        Mutation.PartitionUpdateCollector rm3 = new 
Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey(AsciiType.instance.decompose("key3")));
 +        rm3.add(PartitionUpdate.singleRowUpdate(store.metadata(),
                                                  rm3.key(),
 -                                                
buildRow(buildCell(store.metadata,
 +                                                
buildRow(buildCell(store.metadata(),
                                                                     
UTF8Type.instance.decompose("/data/output/id"),
                                                                     
AsciiType.instance.decompose("Aleksey"),
-                                                                    
System.currentTimeMillis()))));
+                                                                    3000))));
  
 -        rm1.apply();
 -        rm2.apply();
 -        rm3.apply();
 +        rm1.build().apply();
 +        rm2.build().apply();
 +        rm3.build().apply();
  
          if (forceFlush)
              store.forceBlockingFlush();
@@@ -830,20 -836,20 +831,20 @@@
          Assert.assertTrue(rows.toString(), rows.isEmpty());
  
          // now let's trigger index rebuild and check if we got the data back
 -        
store.indexManager.buildIndexBlocking(store.indexManager.getIndexByName("data_output_id"));
 +        store.indexManager.rebuildIndexesBlocking(Sets.newHashSet(store.name 
+ "_data_output_id"));
  
          rows = getIndexed(store, 10, buildExpression(dataOutputId, 
Operator.LIKE_CONTAINS, UTF8Type.instance.decompose("a")));
-         Assert.assertTrue(rows.toString(), Arrays.equals(new String[] { 
"key1", "key2" }, rows.toArray(new String[rows.size()])));
+         assertRows(rows, "key1", "key2");
  
          // also let's try to build an index for column which has no data to 
make sure that doesn't fail
 -        
store.indexManager.buildIndexBlocking(store.indexManager.getIndexByName("first_name"));
 -        
store.indexManager.buildIndexBlocking(store.indexManager.getIndexByName("data_output_id"));
 +        store.indexManager.rebuildIndexesBlocking(Sets.newHashSet(store.name 
+ "_first_name"));
 +        store.indexManager.rebuildIndexesBlocking(Sets.newHashSet(store.name 
+ "_data_output_id"));
  
          rows = getIndexed(store, 10, buildExpression(dataOutputId, 
Operator.LIKE_CONTAINS, UTF8Type.instance.decompose("a")));
-         Assert.assertTrue(rows.toString(), Arrays.equals(new String[] { 
"key1", "key2" }, rows.toArray(new String[rows.size()])));
+         assertRows(rows, "key1", "key2");
  
          rows = getIndexed(store, 10, buildExpression(dataOutputId, 
Operator.LIKE_SUFFIX, UTF8Type.instance.decompose("el")));
-         Assert.assertTrue(rows.toString(), Arrays.equals(new String[] { 
"key2" }, rows.toArray(new String[rows.size()])));
+         assertRows(rows, "key2");
      }
  
      @Test
@@@ -1058,15 -1060,14 +1059,14 @@@
                  put("key41", Pair.create("Dennis", 32));
          }};
  
-         loadData(part4, 4000, true);
+         loadData(part4, true, 8);
  
          rows = getIndexed(store, 100, buildExpression(firstName, 
Operator.LIKE_CONTAINS, UTF8Type.instance.decompose("a")));
-         Assert.assertEquals(rows.toString(), 1, rows.size());
+         assertRowsSize(rows, 1);
      }
  
- 
      @Test
 -    public void testConcurrentMemtableReadsAndWrites()
 +    public void testConcurrentMemtableReadsAndWrites() throws Exception
      {
          final ColumnFamilyStore store = 
Keyspace.open(KS_NAME).getColumnFamilyStore(CF_NAME);
  
@@@ -1080,12 -1081,13 +1080,13 @@@
              final String key = "key" + i;
              final String firstName = "first_name#" + i;
              final String lastName = "last_name#" + i;
+             final long timestamp = 1000 + i;
  
-             scheduler.submit((Runnable) () -> {
+             scheduler.submit(() -> {
                  try
                  {
-                     newMutation(key, firstName, lastName, 26, 
System.currentTimeMillis()).apply();
-                     Uninterruptibles.sleepUninterruptibly(5, 
TimeUnit.MILLISECONDS); // back up a bit to do more reads
+                     newMutation(key, firstName, lastName, 26, 
timestamp).apply();
 -                    Uninterruptibles.sleepUninterruptibly(5, 
TimeUnit.MILLISECONDS); // back up a bit to do more reads
++                    Uninterruptibles.sleepUninterruptibly(5, MILLISECONDS); 
// back up a bit to do more reads
                  }
                  finally
                  {
@@@ -1218,25 -1189,25 +1193,25 @@@
  
          final ByteBuffer comment = UTF8Type.instance.decompose("comment");
  
 -        Mutation rm = new Mutation(KS_NAME, decoratedKey("key1"));
 +        Mutation.PartitionUpdateCollector rm = new 
Mutation.PartitionUpdateCollector(KS_NAME, decoratedKey("key1"));
-         update(rm, comment, UTF8Type.instance.decompose("ⓈⓅⒺⒸⒾⒶⓁ ⒞⒣⒜⒭⒮ and 
normal ones"), System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("ⓈⓅⒺⒸⒾⒶⓁ ⒞⒣⒜⒭⒮ and 
normal ones"), 1000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key2"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key2"));
-         update(rm, comment, UTF8Type.instance.decompose("龍馭鬱"), 
System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("龍馭鬱"), 2000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key3"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key3"));
-         update(rm, comment, UTF8Type.instance.decompose("インディアナ"), 
System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("インディアナ"), 3000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key4"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key4"));
-         update(rm, comment, UTF8Type.instance.decompose("レストラン"), 
System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("レストラン"), 4000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key5"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key5"));
-         update(rm, comment, UTF8Type.instance.decompose("ベンジャミン ウエスト"), 
System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("ベンジャミン ウエスト"), 5000);
 -        rm.apply();
 +        rm.build().apply();
  
          if (forceFlush)
              store.forceBlockingFlush();
@@@ -1294,21 -1265,21 +1269,21 @@@
  
          final ByteBuffer comment = 
UTF8Type.instance.decompose("comment_suffix_split");
  
 -        Mutation rm = new Mutation(KS_NAME, decoratedKey("key1"));
 +        Mutation.PartitionUpdateCollector rm = new 
Mutation.PartitionUpdateCollector(KS_NAME, decoratedKey("key1"));
-         update(rm, comment, UTF8Type.instance.decompose("龍馭鬱"), 
System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("龍馭鬱"), 1000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key2"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key2"));
-         update(rm, comment, UTF8Type.instance.decompose("インディアナ"), 
System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("インディアナ"), 2000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key3"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key3"));
-         update(rm, comment, UTF8Type.instance.decompose("レストラン"), 
System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("レストラン"), 3000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key4"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key4"));
-         update(rm, comment, UTF8Type.instance.decompose("ベンジャミン ウエスト"), 
System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("ベンジャミン ウエスト"), 4000);
 -        rm.apply();
 +        rm.build().apply();
  
          if (forceFlush)
              store.forceBlockingFlush();
@@@ -1363,9 -1334,9 +1338,9 @@@
  
              final ByteBuffer bigValue = UTF8Type.instance.decompose(new 
String(randomBytes));
  
 -            Mutation rm = new Mutation(KS_NAME, decoratedKey("key1"));
 +            Mutation.PartitionUpdateCollector rm = new 
Mutation.PartitionUpdateCollector(KS_NAME, decoratedKey("key1"));
-             update(rm, comment, bigValue, System.currentTimeMillis());
+             update(rm, comment, bigValue, 1000 + i);
 -            rm.apply();
 +            rm.build().apply();
  
              Set<String> rows;
  
@@@ -1423,8 -1395,8 +1398,8 @@@
  
          try (ReadExecutionController controller = 
command.executionController())
          {
 -            Set<String> rows = getKeys(new QueryPlan(store, command, 
DatabaseDescriptor.getRangeRpcTimeout()).execute(controller));
 +            Set<String> rows = getKeys(new QueryPlan(store, command, 
DatabaseDescriptor.getRangeRpcTimeout(MILLISECONDS)).execute(controller));
-             Assert.assertTrue(rows.toString(), Arrays.equals(new String[] { 
"key1", "key2", "key3", "key4" }, rows.toArray(new String[rows.size()])));
+             assertRows(rows, "key1", "key2", "key3", "key4");
          }
      }
  
@@@ -1443,37 -1415,37 +1418,37 @@@
  
          final ByteBuffer fullName = 
UTF8Type.instance.decompose("/output/full-name/");
  
 -        Mutation rm = new Mutation(KS_NAME, decoratedKey("key1"));
 +        Mutation.PartitionUpdateCollector rm = new 
Mutation.PartitionUpdateCollector(KS_NAME, decoratedKey("key1"));
-         update(rm, fullName, UTF8Type.instance.decompose("美加 八田"), 
System.currentTimeMillis());
+         update(rm, fullName, UTF8Type.instance.decompose("美加 八田"), 1000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key2"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key2"));
-         update(rm, fullName, UTF8Type.instance.decompose("仁美 瀧澤"), 
System.currentTimeMillis());
+         update(rm, fullName, UTF8Type.instance.decompose("仁美 瀧澤"), 2000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key3"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key3"));
-         update(rm, fullName, UTF8Type.instance.decompose("晃宏 高須"), 
System.currentTimeMillis());
+         update(rm, fullName, UTF8Type.instance.decompose("晃宏 高須"), 3000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key4"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key4"));
-         update(rm, fullName, UTF8Type.instance.decompose("弘孝 大竹"), 
System.currentTimeMillis());
+         update(rm, fullName, UTF8Type.instance.decompose("弘孝 大竹"), 4000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key5"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key5"));
-         update(rm, fullName, UTF8Type.instance.decompose("満枝 榎本"), 
System.currentTimeMillis());
+         update(rm, fullName, UTF8Type.instance.decompose("満枝 榎本"), 5000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key6"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key6"));
-         update(rm, fullName, UTF8Type.instance.decompose("飛鳥 上原"), 
System.currentTimeMillis());
+         update(rm, fullName, UTF8Type.instance.decompose("飛鳥 上原"), 6000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key7"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key7"));
-         update(rm, fullName, UTF8Type.instance.decompose("大輝 鎌田"), 
System.currentTimeMillis());
+         update(rm, fullName, UTF8Type.instance.decompose("大輝 鎌田"), 7000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key8"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key8"));
-         update(rm, fullName, UTF8Type.instance.decompose("利久 寺地"), 
System.currentTimeMillis());
+         update(rm, fullName, UTF8Type.instance.decompose("利久 寺地"), 8000);
 -        rm.apply();
 +        rm.build().apply();
  
          store.forceBlockingFlush();
  
@@@ -1499,17 -1471,17 +1474,17 @@@
  
          final ByteBuffer comment = UTF8Type.instance.decompose("address");
  
 -        Mutation rm = new Mutation(KS_NAME, decoratedKey("key1"));
 +        Mutation.PartitionUpdateCollector rm = new 
Mutation.PartitionUpdateCollector(KS_NAME, decoratedKey("key1"));
-         update(rm, comment, UTF8Type.instance.decompose("577 Rogahn Valleys 
Apt. 178"), System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("577 Rogahn Valleys 
Apt. 178"), 1000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key2"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key2"));
-         update(rm, comment, UTF8Type.instance.decompose("89809 Beverly Course 
Suite 089"), System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("89809 Beverly Course 
Suite 089"), 2000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key3"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key3"));
-         update(rm, comment, UTF8Type.instance.decompose("165 clydie oval apt. 
399"), System.currentTimeMillis());
+         update(rm, comment, UTF8Type.instance.decompose("165 clydie oval apt. 
399"), 3000);
 -        rm.apply();
 +        rm.build().apply();
  
          if (forceFlush)
              store.forceBlockingFlush();
@@@ -1574,42 -1546,42 +1549,42 @@@
  
          final ByteBuffer name = 
UTF8Type.instance.decompose("first_name_prefix");
  
 -        Mutation rm;
 +        Mutation.PartitionUpdateCollector rm;
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key1"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key1"));
-         update(rm, name, UTF8Type.instance.decompose("Pavel"), 
System.currentTimeMillis());
+         update(rm, name, UTF8Type.instance.decompose("Pavel"), 1000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key2"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key2"));
-         update(rm, name, UTF8Type.instance.decompose("Jordan"), 
System.currentTimeMillis());
+         update(rm, name, UTF8Type.instance.decompose("Jordan"), 2000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key3"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key3"));
-         update(rm, name, UTF8Type.instance.decompose("Mikhail"), 
System.currentTimeMillis());
+         update(rm, name, UTF8Type.instance.decompose("Mikhail"), 3000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key4"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key4"));
-         update(rm, name, UTF8Type.instance.decompose("Michael"), 
System.currentTimeMillis());
+         update(rm, name, UTF8Type.instance.decompose("Michael"), 4000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key5"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key5"));
-         update(rm, name, UTF8Type.instance.decompose("Johnny"), 
System.currentTimeMillis());
+         update(rm, name, UTF8Type.instance.decompose("Johnny"), 5000);
 -        rm.apply();
 +        rm.build().apply();
  
          // first flush would make interval for name - 'johnny' -> 'pavel'
          store.forceBlockingFlush();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key6"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key6"));
-         update(rm, name, UTF8Type.instance.decompose("Jason"), 
System.currentTimeMillis());
+         update(rm, name, UTF8Type.instance.decompose("Jason"), 6000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key7"));
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key7"));
-         update(rm, name, UTF8Type.instance.decompose("Vijay"), 
System.currentTimeMillis());
+         update(rm, name, UTF8Type.instance.decompose("Vijay"), 7000);
 -        rm.apply();
 +        rm.build().apply();
  
 -        rm = new Mutation(KS_NAME, decoratedKey("key8")); // this name is 
going to be tokenized
 +        rm = new Mutation.PartitionUpdateCollector(KS_NAME, 
decoratedKey("key8")); // this name is going to be tokenized
-         update(rm, name, UTF8Type.instance.decompose("Jean-Claude"), 
System.currentTimeMillis());
+         update(rm, name, UTF8Type.instance.decompose("Jean-Claude"), 8000);
 -        rm.apply();
 +        rm.build().apply();
  
          // this flush is going to produce range - 'jason' -> 'vijay'
          store.forceBlockingFlush();
@@@ -1696,11 -1668,11 +1671,11 @@@
              put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, 
SASIIndex.class.getName());
          }}));
  
-         Assert.assertEquals(true,  indexA.isIndexed());
-         Assert.assertEquals(false, indexA.isLiteral());
+         Assert.assertTrue(indexA.isIndexed());
+         Assert.assertFalse(indexA.isLiteral());
  
          // now let's double-check that we do get 'true' when we set it
 -        ColumnDefinition columnB = ColumnDefinition.regularDef(KS_NAME, 
CF_NAME, "special-B", stringType);
 +        ColumnMetadata columnB = ColumnMetadata.regularColumn(KS_NAME, 
CF_NAME, "special-B", stringType);
  
          ColumnIndex indexB = new ColumnIndex(UTF8Type.instance, columnB, 
IndexMetadata.fromSchemaMetadata("special-index-B", IndexMetadata.Kind.CUSTOM, 
new HashMap<String, String>()
          {{
@@@ -1708,32 -1680,32 +1683,32 @@@
              put("is_literal", "true");
          }}));
  
-         Assert.assertEquals(true, indexB.isIndexed());
-         Assert.assertEquals(true, indexB.isLiteral());
+         Assert.assertTrue(indexB.isIndexed());
+         Assert.assertTrue(indexB.isLiteral());
  
          // and finally we should also get a 'true' if it's built-in 
UTF-8/ASCII comparator
 -        ColumnDefinition columnC = ColumnDefinition.regularDef(KS_NAME, 
CF_NAME, "special-C", UTF8Type.instance);
 +        ColumnMetadata columnC = ColumnMetadata.regularColumn(KS_NAME, 
CF_NAME, "special-C", UTF8Type.instance);
  
          ColumnIndex indexC = new ColumnIndex(UTF8Type.instance, columnC, 
IndexMetadata.fromSchemaMetadata("special-index-C", IndexMetadata.Kind.CUSTOM, 
new HashMap<String, String>()
          {{
              put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, 
SASIIndex.class.getName());
          }}));
  
-         Assert.assertEquals(true, indexC.isIndexed());
-         Assert.assertEquals(true, indexC.isLiteral());
+         Assert.assertTrue(indexC.isIndexed());
+         Assert.assertTrue(indexC.isLiteral());
  
 -        ColumnDefinition columnD = ColumnDefinition.regularDef(KS_NAME, 
CF_NAME, "special-D", AsciiType.instance);
 +        ColumnMetadata columnD = ColumnMetadata.regularColumn(KS_NAME, 
CF_NAME, "special-D", AsciiType.instance);
  
          ColumnIndex indexD = new ColumnIndex(UTF8Type.instance, columnD, 
IndexMetadata.fromSchemaMetadata("special-index-D", IndexMetadata.Kind.CUSTOM, 
new HashMap<String, String>()
          {{
              put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, 
SASIIndex.class.getName());
          }}));
  
-         Assert.assertEquals(true, indexD.isIndexed());
-         Assert.assertEquals(true, indexD.isLiteral());
+         Assert.assertTrue(indexD.isIndexed());
+         Assert.assertTrue(indexD.isLiteral());
  
          // and option should supersedes the comparator type
 -        ColumnDefinition columnE = ColumnDefinition.regularDef(KS_NAME, 
CF_NAME, "special-E", UTF8Type.instance);
 +        ColumnMetadata columnE = ColumnMetadata.regularColumn(KS_NAME, 
CF_NAME, "special-E", UTF8Type.instance);
  
          ColumnIndex indexE = new ColumnIndex(UTF8Type.instance, columnE, 
IndexMetadata.fromSchemaMetadata("special-index-E", IndexMetadata.Kind.CUSTOM, 
new HashMap<String, String>()
          {{
@@@ -1741,14 -1713,14 +1716,14 @@@
              put("is_literal", "false");
          }}));
  
-         Assert.assertEquals(true,  indexE.isIndexed());
-         Assert.assertEquals(false, indexE.isLiteral());
+         Assert.assertTrue(indexE.isIndexed());
+         Assert.assertFalse(indexE.isLiteral());
  
          // test frozen-collection
 -        ColumnDefinition columnF = ColumnDefinition.regularDef(KS_NAME,
 -                                                               CF_NAME,
 -                                                               "special-F",
 -                                                               
ListType.getInstance(UTF8Type.instance, false));
 +        ColumnMetadata columnF = ColumnMetadata.regularColumn(KS_NAME,
 +                                                              CF_NAME,
 +                                                              "special-F",
 +                                                              
ListType.getInstance(UTF8Type.instance, false));
  
          ColumnIndex indexF = new ColumnIndex(UTF8Type.instance, columnF, 
IndexMetadata.fromSchemaMetadata("special-index-F", IndexMetadata.Kind.CUSTOM, 
new HashMap<String, String>()
          {{
@@@ -1981,12 -1953,14 +1956,14 @@@
          store.forceBlockingFlush();
  
          SSTable ssTable = 
store.getSSTables(SSTableSet.LIVE).iterator().next();
 -        Path path = 
FileSystems.getDefault().getPath(ssTable.getFilename().replace("-Data", 
"-SI_age"));
 +        Path path = 
FileSystems.getDefault().getPath(ssTable.getFilename().replace("-Data", "-SI_" 
+ CLUSTERING_CF_NAME_1 + "_age"));
  
          // Overwrite index file with garbage
-         Writer writer = new FileWriter(path.toFile(), false);
-         writer.write("garbage");
-         writer.close();
+         try (Writer writer = new FileWriter(path.toFile(), false))
+         {
+             writer.write("garbage");
+         }
+ 
          long size1 = Files.readAttributes(path, 
BasicFileAttributes.class).size();
  
          // Trying to query the corrupted index file yields no results
@@@ -2511,11 -2502,13 +2504,15 @@@
          return store;
      }
  
-     private void cleanupData()
+     private static void cleanupData()
+     {
++        stores().forEach(ColumnFamilyStore::truncateBlocking);
++    }
++
++    private static Stream<ColumnFamilyStore> stores()
 +    {
          Keyspace ks = Keyspace.open(KS_NAME);
-         ks.getColumnFamilyStore(CF_NAME).truncateBlocking();
-         ks.getColumnFamilyStore(CLUSTERING_CF_NAME_1).truncateBlocking();
 -        for (ColumnFamilyStore store : ks.getColumnFamilyStores())
 -        {
 -            store.truncateBlocking();
 -        }
++        return ks.getMetadata().tables.stream().map(t -> 
ks.getColumnFamilyStore(t.name));
      }
  
      private static Set<String> getIndexed(ColumnFamilyStore store, int 
maxResults, Expression... expressions)
@@@ -2633,13 -2627,20 +2630,13 @@@
          return QueryProcessor.executeOnceInternal(String.format(query, 
KS_NAME, cfName), values);
      }
  
-     private Set<String> executeCQLWithKeys(String rawStatement) throws 
Exception
+     private Set<String> executeCQLWithKeys(String rawStatement)
      {
 -        SelectStatement statement = (SelectStatement) 
QueryProcessor.parseStatement(rawStatement).prepare(ClientState.forInternalCalls()).statement;
 -        ResultMessage.Rows cqlRows = 
statement.executeInternal(QueryState.forInternalCalls(), QueryOptions.DEFAULT);
 -
          Set<String> results = new TreeSet<>();
 -        for (CqlRow row : cqlRows.toThriftResult().getRows())
 +        for (UntypedResultSet.Row row : 
QueryProcessor.executeOnceInternal(rawStatement))
          {
 -            for (org.apache.cassandra.thrift.Column col : row.columns)
 -            {
 -                String columnName = 
UTF8Type.instance.getString(col.bufferForName());
 -                if (columnName.equals("id"))
 -                    
results.add(AsciiType.instance.getString(col.bufferForValue()));
 -            }
 +            if (row.has("id"))
 +                results.add(row.getString("id"));
          }
  
          return results;
@@@ -2655,12 -2656,12 +2652,12 @@@
          return decoratedKey(AsciiType.instance.fromString(key));
      }
  
 -    private static Row buildRow(Collection<Cell> cells)
 +    private static Row buildRow(Collection<Cell<?>> cells)
      {
-         return buildRow(cells.toArray(new Cell<?>[cells.size()]));
+         return buildRow(Iterables.toArray(cells, Cell.class));
      }
  
 -    private static Row buildRow(Cell... cells)
 +    private static Row buildRow(Cell<?>... cells)
      {
          Row.Builder rowBuilder = BTreeRow.sortedBuilder();
          rowBuilder.newRow(Clustering.EMPTY);
@@@ -2713,4 -2714,16 +2710,16 @@@
              this.value = value;
          }
      }
+ 
 -    private static void assertRows(Set<String> actual, String... expected)
++    private static void assertRows(Iterable<String> actual, String... 
expected)
+     {
+         String message = String.format("Expected rows to contain %s but found 
%s", Arrays.toString(expected), actual);
+         Assert.assertArrayEquals(message, expected, Iterables.toArray(actual, 
String.class));
+     }
+ 
+     private static void assertRowsSize(Set<String> actual, int expectedSize)
+     {
+         String message = String.format("Expected %s to have size %d but found 
size %d", actual, expectedSize, actual.size());
+         Assert.assertEquals(message, expectedSize, actual.size());
+     }
  }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to