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]