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

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


The following commit(s) were added to refs/heads/trunk by this push:
     new 9b32b8a  Fix flaky SSTableMetadataTest and SSTableMetadataTrackingTest
9b32b8a is described below

commit 9b32b8a4369049aec6e0848d21f524a40d2c93f1
Author: Andrés de la Peña <[email protected]>
AuthorDate: Fri Mar 26 15:13:22 2021 +0000

    Fix flaky SSTableMetadataTest and SSTableMetadataTrackingTest
    
    patch by Andrés de la Peña; reviewed by Brandon Williams and Ekaterina 
Dimitrova for CASSANDRA-16236
---
 .../miscellaneous/SSTableMetadataTrackingTest.java | 26 ++++++---
 .../cassandra/io/sstable/SSTableMetadataTest.java  | 68 +++++++++++-----------
 2 files changed, 52 insertions(+), 42 deletions(-)

diff --git 
a/test/unit/org/apache/cassandra/cql3/validation/miscellaneous/SSTableMetadataTrackingTest.java
 
b/test/unit/org/apache/cassandra/cql3/validation/miscellaneous/SSTableMetadataTrackingTest.java
index 288cbe1..5d367de 100644
--- 
a/test/unit/org/apache/cassandra/cql3/validation/miscellaneous/SSTableMetadataTrackingTest.java
+++ 
b/test/unit/org/apache/cassandra/cql3/validation/miscellaneous/SSTableMetadataTrackingTest.java
@@ -27,6 +27,13 @@ import static org.junit.Assert.assertEquals;
 
 public class SSTableMetadataTrackingTest extends CQLTester
 {
+    /**
+     * Max allowed difference between compared SSTable metadata timestamps, in 
seconds.
+     * We use a {@code double} to force the usage of {@link 
org.junit.Assert#assertEquals(double, double, double)} when
+     * comparing integer timestamps, otherwise {@link 
org.junit.Assert#assertEquals(float, float, float)} would be used.
+     */
+    public static final double DELTA = 5;
+
     @Test
     public void baseCheck() throws Throwable
     {
@@ -54,12 +61,12 @@ public class SSTableMetadataTrackingTest extends CQLTester
         StatsMetadata metadata = 
cfs.getLiveSSTables().iterator().next().getSSTableMetadata();
         assertEquals(9999, metadata.minTimestamp);
         assertEquals(10000, metadata.maxTimestamp);
-        assertEquals(Integer.MAX_VALUE, metadata.maxLocalDeletionTime, 5);
+        assertEquals(Integer.MAX_VALUE, metadata.maxLocalDeletionTime, DELTA);
         cfs.forceMajorCompaction();
         metadata = 
cfs.getLiveSSTables().iterator().next().getSSTableMetadata();
         assertEquals(9999, metadata.minTimestamp);
         assertEquals(10000, metadata.maxTimestamp);
-        assertEquals(Integer.MAX_VALUE, metadata.maxLocalDeletionTime, 5);
+        assertEquals(Integer.MAX_VALUE, metadata.maxLocalDeletionTime, DELTA);
     }
 
     @Test
@@ -73,12 +80,12 @@ public class SSTableMetadataTrackingTest extends CQLTester
         StatsMetadata metadata = 
cfs.getLiveSSTables().iterator().next().getSSTableMetadata();
         assertEquals(9999, metadata.minTimestamp);
         assertEquals(10000, metadata.maxTimestamp);
-        assertEquals(Integer.MAX_VALUE, metadata.maxLocalDeletionTime, 5);
+        assertEquals(Integer.MAX_VALUE, metadata.maxLocalDeletionTime, DELTA);
         cfs.forceMajorCompaction();
         metadata = 
cfs.getLiveSSTables().iterator().next().getSSTableMetadata();
         assertEquals(9999, metadata.minTimestamp);
         assertEquals(10000, metadata.maxTimestamp);
-        assertEquals(Integer.MAX_VALUE, metadata.maxLocalDeletionTime, 5);
+        assertEquals(Integer.MAX_VALUE, metadata.maxLocalDeletionTime, DELTA);
     }
 
 
@@ -93,7 +100,7 @@ public class SSTableMetadataTrackingTest extends CQLTester
         StatsMetadata metadata = 
cfs.getLiveSSTables().iterator().next().getSSTableMetadata();
         assertEquals(9999, metadata.minTimestamp);
         assertEquals(9999, metadata.maxTimestamp);
-        assertEquals(System.currentTimeMillis()/1000, 
metadata.maxLocalDeletionTime, 5);
+        assertEquals(nowInSec(), metadata.maxLocalDeletionTime, DELTA);
         cfs.forceMajorCompaction();
         StatsMetadata metadata2 = 
cfs.getLiveSSTables().iterator().next().getSSTableMetadata();
         assertEquals(metadata.maxLocalDeletionTime, 
metadata2.maxLocalDeletionTime);
@@ -113,7 +120,7 @@ public class SSTableMetadataTrackingTest extends CQLTester
         StatsMetadata metadata = 
cfs.getLiveSSTables().iterator().next().getSSTableMetadata();
         assertEquals(9999, metadata.minTimestamp);
         assertEquals(9999, metadata.maxTimestamp);
-        assertEquals(System.currentTimeMillis()/1000, 
metadata.maxLocalDeletionTime, 5);
+        assertEquals(nowInSec(), metadata.maxLocalDeletionTime, DELTA);
         cfs.forceMajorCompaction();
         StatsMetadata metadata2 = 
cfs.getLiveSSTables().iterator().next().getSSTableMetadata();
         assertEquals(metadata.maxLocalDeletionTime, 
metadata2.maxLocalDeletionTime);
@@ -152,11 +159,16 @@ public class SSTableMetadataTrackingTest extends CQLTester
         StatsMetadata metadata = 
cfs.getLiveSSTables().iterator().next().getSSTableMetadata();
         assertEquals(9999, metadata.minTimestamp);
         assertEquals(9999, metadata.maxTimestamp);
-        assertEquals(System.currentTimeMillis()/1000, 
metadata.maxLocalDeletionTime, 5);
+        assertEquals(nowInSec(), metadata.maxLocalDeletionTime, DELTA);
         cfs.forceMajorCompaction();
         StatsMetadata metadata2 = 
cfs.getLiveSSTables().iterator().next().getSSTableMetadata();
         assertEquals(metadata.maxLocalDeletionTime, 
metadata2.maxLocalDeletionTime);
         assertEquals(metadata.minTimestamp, metadata2.minTimestamp);
         assertEquals(metadata.maxTimestamp, metadata2.maxTimestamp);
     }
+
+    private static int nowInSec()
+    {
+        return (int) (System.currentTimeMillis() / 1000);
+    }
 }
diff --git a/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataTest.java 
b/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataTest.java
index e70f72f..aecddf9 100644
--- a/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataTest.java
@@ -20,7 +20,6 @@ package org.apache.cassandra.io.sstable;
 import java.nio.charset.CharacterCodingException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.ExecutionException;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -29,7 +28,6 @@ import org.apache.cassandra.SchemaLoader;
 import org.apache.cassandra.Util;
 import org.apache.cassandra.schema.TableMetadata;
 import org.apache.cassandra.db.ColumnFamilyStore;
-import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.db.Keyspace;
 import org.apache.cassandra.db.RowUpdateBuilder;
 import org.apache.cassandra.db.marshal.AsciiType;
@@ -50,6 +48,13 @@ public class SSTableMetadataTest
     public static final String CF_STANDARDCOMPOSITE2 = "StandardComposite2";
     public static final String CF_COUNTER1 = "Counter1";
 
+    /**
+     * Max allowed difference between compared SSTable metadata timestamps, in 
seconds.
+     * We use a {@code double} to force the usage of {@link 
org.junit.Assert#assertEquals(double, double, double)} when
+     * comparing integer timestamps, otherwise {@link 
org.junit.Assert#assertEquals(float, float, float)} would be used.
+     */
+    public static final double DELTA = 10;
+
     @BeforeClass
     public static void defineSchema()
     {
@@ -73,9 +78,8 @@ public class SSTableMetadataTest
         Keyspace keyspace = Keyspace.open(KEYSPACE1);
         ColumnFamilyStore store = keyspace.getColumnFamilyStore("Standard1");
         long timestamp = System.currentTimeMillis();
-        for(int i = 0; i < 10; i++)
+        for (int i = 0; i < 10; i++)
         {
-            DecoratedKey key = Util.dk(Integer.toString(i));
             for (int j = 0; j < 10; j++)
                 new RowUpdateBuilder(store.metadata(), timestamp, 10 + j, 
Integer.toString(i))
                     .clustering(Integer.toString(j))
@@ -91,15 +95,14 @@ public class SSTableMetadataTest
             .build()
             .applyUnsafe();
 
-
         store.forceBlockingFlush();
         assertEquals(1, store.getLiveSSTables().size());
-        int ttltimestamp = (int)(System.currentTimeMillis()/1000);
+        int ttltimestamp = (int) (System.currentTimeMillis() / 1000);
         int firstDelTime = 0;
-        for(SSTableReader sstable : store.getLiveSSTables())
+        for (SSTableReader sstable : store.getLiveSSTables())
         {
             firstDelTime = sstable.getSSTableMetadata().maxLocalDeletionTime;
-            assertEquals(ttltimestamp + 10000, firstDelTime, 10);
+            assertEquals(ttltimestamp + 10000, firstDelTime, DELTA);
 
         }
 
@@ -109,27 +112,26 @@ public class SSTableMetadataTest
         .build()
         .applyUnsafe();
 
-
-        ttltimestamp = (int) (System.currentTimeMillis()/1000);
+        ttltimestamp = (int) (System.currentTimeMillis() / 1000);
         store.forceBlockingFlush();
         assertEquals(2, store.getLiveSSTables().size());
         List<SSTableReader> sstables = new 
ArrayList<>(store.getLiveSSTables());
-        if(sstables.get(0).getSSTableMetadata().maxLocalDeletionTime < 
sstables.get(1).getSSTableMetadata().maxLocalDeletionTime)
+        if (sstables.get(0).getSSTableMetadata().maxLocalDeletionTime < 
sstables.get(1).getSSTableMetadata().maxLocalDeletionTime)
         {
             
assertEquals(sstables.get(0).getSSTableMetadata().maxLocalDeletionTime, 
firstDelTime);
-            
assertEquals(sstables.get(1).getSSTableMetadata().maxLocalDeletionTime, 
ttltimestamp + 20000, 10);
+            
assertEquals(sstables.get(1).getSSTableMetadata().maxLocalDeletionTime, 
ttltimestamp + 20000, DELTA);
         }
         else
         {
             
assertEquals(sstables.get(1).getSSTableMetadata().maxLocalDeletionTime, 
firstDelTime);
-            
assertEquals(sstables.get(0).getSSTableMetadata().maxLocalDeletionTime, 
ttltimestamp + 20000, 10);
+            
assertEquals(sstables.get(0).getSSTableMetadata().maxLocalDeletionTime, 
ttltimestamp + 20000, DELTA);
         }
 
         Util.compact(store, store.getLiveSSTables());
         assertEquals(1, store.getLiveSSTables().size());
-        for(SSTableReader sstable : store.getLiveSSTables())
+        for (SSTableReader sstable : store.getLiveSSTables())
         {
-            assertEquals(sstable.getSSTableMetadata().maxLocalDeletionTime, 
ttltimestamp + 20000, 10);
+            assertEquals(sstable.getSSTableMetadata().maxLocalDeletionTime, 
ttltimestamp + 20000, DELTA);
         }
     }
 
@@ -140,18 +142,14 @@ public class SSTableMetadataTest
      * 4. flush, verify the new sstable (maxLocalDeletionTime = ~now)
      * 5. compact
      * 6. verify resulting sstable has maxLocalDeletionTime = time + 100.
-     *
-     * @throws ExecutionException
-     * @throws InterruptedException
      */
     @Test
-    public void testWithDeletes() throws ExecutionException, 
InterruptedException
+    public void testWithDeletes()
     {
         Keyspace keyspace = Keyspace.open(KEYSPACE1);
         ColumnFamilyStore store = keyspace.getColumnFamilyStore("Standard2");
         long timestamp = System.currentTimeMillis();
-        DecoratedKey key = Util.dk("deletetest");
-        for (int i = 0; i<5; i++)
+        for (int i = 0; i < 5; i++)
             new RowUpdateBuilder(store.metadata(), timestamp, 100, 
"deletetest")
                 .clustering("deletecolumn" + i)
                 .add("val", ByteBufferUtil.EMPTY_BYTE_BUFFER)
@@ -166,46 +164,46 @@ public class SSTableMetadataTest
         .applyUnsafe();
 
         store.forceBlockingFlush();
-        assertEquals(1,store.getLiveSSTables().size());
-        int ttltimestamp = (int) (System.currentTimeMillis()/1000);
+        assertEquals(1, store.getLiveSSTables().size());
+        int ttltimestamp = (int) (System.currentTimeMillis() / 1000);
         int firstMaxDelTime = 0;
-        for(SSTableReader sstable : store.getLiveSSTables())
+        for (SSTableReader sstable : store.getLiveSSTables())
         {
             firstMaxDelTime = 
sstable.getSSTableMetadata().maxLocalDeletionTime;
-            assertEquals(ttltimestamp + 1000, firstMaxDelTime, 10);
+            assertEquals(ttltimestamp + 1000, firstMaxDelTime, DELTA);
         }
 
         RowUpdateBuilder.deleteRow(store.metadata(), timestamp + 1, 
"deletetest", "todelete").applyUnsafe();
 
         store.forceBlockingFlush();
-        assertEquals(2,store.getLiveSSTables().size());
+        assertEquals(2, store.getLiveSSTables().size());
         boolean foundDelete = false;
-        for(SSTableReader sstable : store.getLiveSSTables())
+        for (SSTableReader sstable : store.getLiveSSTables())
         {
-            if(sstable.getSSTableMetadata().maxLocalDeletionTime != 
firstMaxDelTime)
+            if (sstable.getSSTableMetadata().maxLocalDeletionTime != 
firstMaxDelTime)
             {
-                
assertEquals(sstable.getSSTableMetadata().maxLocalDeletionTime, ttltimestamp, 
10);
+                
assertEquals(sstable.getSSTableMetadata().maxLocalDeletionTime, ttltimestamp, 
DELTA);
                 foundDelete = true;
             }
         }
         assertTrue(foundDelete);
         Util.compact(store, store.getLiveSSTables());
-        assertEquals(1,store.getLiveSSTables().size());
-        for(SSTableReader sstable : store.getLiveSSTables())
+        assertEquals(1, store.getLiveSSTables().size());
+        for (SSTableReader sstable : store.getLiveSSTables())
         {
-            assertEquals(ttltimestamp + 100, 
sstable.getSSTableMetadata().maxLocalDeletionTime, 10);
+            assertEquals(ttltimestamp + 100, 
sstable.getSSTableMetadata().maxLocalDeletionTime, DELTA);
         }
     }
 
     @Test
-    public void trackMaxMinColNames() throws CharacterCodingException, 
ExecutionException, InterruptedException
+    public void trackMaxMinColNames() throws CharacterCodingException
     {
         Keyspace keyspace = Keyspace.open(KEYSPACE1);
         ColumnFamilyStore store = keyspace.getColumnFamilyStore("Standard3");
         for (int j = 0; j < 8; j++)
         {
             String key = "row" + j;
-            for (int i = 100; i<150; i++)
+            for (int i = 100; i < 150; i++)
             {
                 new RowUpdateBuilder(store.metadata(), 
System.currentTimeMillis(), key)
                     .clustering(j + "col" + i)
@@ -226,7 +224,7 @@ public class SSTableMetadataTest
         }
         String key = "row2";
 
-        for (int i = 101; i<299; i++)
+        for (int i = 101; i < 299; i++)
         {
             new RowUpdateBuilder(store.metadata(), System.currentTimeMillis(), 
key)
             .clustering(9 + "col" + i)

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

Reply via email to