You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by be...@apache.org on 2022/07/11 07:51:16 UTC
[cassandra] branch cassandra-4.1 updated: Fix flaky test - org.apache.cassandra.cql3.validation.operations.InsertUpdateIfConditionTest.testConditionalUpdate
This is an automated email from the ASF dual-hosted git repository.
bereng pushed a commit to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/cassandra-4.1 by this push:
new 1d80dd0086 Fix flaky test - org.apache.cassandra.cql3.validation.operations.InsertUpdateIfConditionTest.testConditionalUpdate
1d80dd0086 is described below
commit 1d80dd008677e0084b1530295207a568853badee
Author: Bereng <be...@gmail.com>
AuthorDate: Thu Jun 9 08:53:01 2022 +0200
Fix flaky test - org.apache.cassandra.cql3.validation.operations.InsertUpdateIfConditionTest.testConditionalUpdate
patch by Berenguer Blasi; reviewed by Benjamin Lerer for CASSANDRA-17653
---
src/java/org/apache/cassandra/gms/Gossiper.java | 13 +++++++++++--
.../cassandra/utils/ExpiringMemoizingSupplier.java | 5 ++---
.../operations/InsertUpdateIfConditionTest.java | 21 +++++++++++++++++----
3 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 4c72166a9d..4a46ca3040 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -2356,12 +2356,21 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
* Returns {@code true} if there are nodes on version lower than the provided version
*/
public boolean isUpgradingFromVersionLowerThan(CassandraVersion referenceVersion)
+ {
+ return isUpgradingFromVersionLowerThanC17653(referenceVersion).left;
+ }
+
+ /* TODO: Aux method for debug purposes on fixing C17653. To be removed*/
+ @VisibleForTesting
+ public Pair<Boolean, CassandraVersion> isUpgradingFromVersionLowerThanC17653(CassandraVersion referenceVersion)
{
CassandraVersion v = upgradeFromVersionMemoized.get();
if (CassandraVersion.NULL_VERSION.equals(v) && scheduledGossipTask == null)
- return false;
+ return Pair.create(false, v);
+
+ boolean res = v != null && v.compareTo(referenceVersion) < 0;
- return v != null && v.compareTo(referenceVersion) < 0;
+ return Pair.create(res, v);
}
private boolean nodesAgreeOnSchema(Collection<InetAddressAndPort> nodes)
diff --git a/src/java/org/apache/cassandra/utils/ExpiringMemoizingSupplier.java b/src/java/org/apache/cassandra/utils/ExpiringMemoizingSupplier.java
index 2cba64dcb0..02aa09d498 100644
--- a/src/java/org/apache/cassandra/utils/ExpiringMemoizingSupplier.java
+++ b/src/java/org/apache/cassandra/utils/ExpiringMemoizingSupplier.java
@@ -71,8 +71,7 @@ public class ExpiringMemoizingSupplier<T> implements Supplier<T>
else
return t.value();
- nanos = now + this.durationNanos;
- this.expirationNanos = nanos == 0L ? 1L : nanos;
+ this.expirationNanos = now + this.durationNanos;
return t.value();
}
}
@@ -81,7 +80,7 @@ public class ExpiringMemoizingSupplier<T> implements Supplier<T>
}
@VisibleForTesting
- public void expire()
+ public synchronized void expire()
{
this.expirationNanos = 0;
}
diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java
index 627075f9de..20acd10ff1 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/operations/InsertUpdateIfConditionTest.java
@@ -21,6 +21,8 @@ package org.apache.cassandra.cql3.validation.operations;
import java.util.Arrays;
import java.util.Collection;
+import com.google.common.annotations.VisibleForTesting;
+
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -36,6 +38,7 @@ import org.apache.cassandra.gms.Gossiper;
import org.apache.cassandra.schema.SchemaConstants;
import org.apache.cassandra.schema.SchemaKeyspaceTables;
import org.apache.cassandra.utils.CassandraVersion;
+import org.apache.cassandra.utils.Pair;
import static java.lang.String.format;
import static org.junit.Assert.assertEquals;
@@ -61,14 +64,18 @@ public class InsertUpdateIfConditionTest extends CQLTester
public static Collection<Object[]> data()
{
return Arrays.asList(new Object[]{ "3.0", (Runnable) () -> {
- assertTrue(Gossiper.instance.isUpgradingFromVersionLowerThan(new CassandraVersion("3.11")));
+ Pair<Boolean, CassandraVersion> res = Gossiper.instance.isUpgradingFromVersionLowerThanC17653(new CassandraVersion("3.11"));
+ assertTrue(debugMsgCASSANDRA17653(res), res.left);
} },
new Object[]{ "3.11", (Runnable) () -> {
- assertTrue(Gossiper.instance.isUpgradingFromVersionLowerThan(SystemKeyspace.CURRENT_VERSION));
- assertFalse(Gossiper.instance.isUpgradingFromVersionLowerThan(new CassandraVersion("3.11")));
+ Pair<Boolean, CassandraVersion> res = Gossiper.instance.isUpgradingFromVersionLowerThanC17653(SystemKeyspace.CURRENT_VERSION);
+ assertTrue(debugMsgCASSANDRA17653(res), res.left);
+ res = Gossiper.instance.isUpgradingFromVersionLowerThanC17653(new CassandraVersion("3.11"));
+ assertFalse(debugMsgCASSANDRA17653(res), res.left);
} },
new Object[]{ SystemKeyspace.CURRENT_VERSION.toString(), (Runnable) () -> {
- assertFalse(Gossiper.instance.isUpgradingFromVersionLowerThan(SystemKeyspace.CURRENT_VERSION));
+ Pair<Boolean, CassandraVersion> res = Gossiper.instance.isUpgradingFromVersionLowerThanC17653(SystemKeyspace.CURRENT_VERSION);
+ assertFalse(debugMsgCASSANDRA17653(res), res.left);
} });
}
@@ -959,4 +966,10 @@ public class InsertUpdateIfConditionTest extends CQLTester
assertRows(execute("SELECT * FROM %s WHERE k = 1"), row(1, Duration.from("10s"), 6));
}
+
+ // Helper to debug on the next occurrence of CASSANDRA-17653
+ private static String debugMsgCASSANDRA17653(Pair<Boolean, CassandraVersion> res)
+ {
+ return("Failed on Cass Version: " + res.right == null ? "null" : res.right + " boolean:" + res.left);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org