This is an automated email from the ASF dual-hosted git repository.
ifesdjeen 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 018feb36f4 NPE on Directory in ShortPaxosSimulationTest
018feb36f4 is described below
commit 018feb36f42d28bc11073741ef224b42f9a60ad0
Author: Alex Petrov <[email protected]>
AuthorDate: Thu Jul 25 14:47:13 2024 +0200
NPE on Directory in ShortPaxosSimulationTest
Patch by Alex Petrov, reviewed by Caleb Rackliffe and Marcus Eriksson for
CASSANDRA-19794
---
src/java/org/apache/cassandra/locator/CMSPlacementStrategy.java | 6 +++---
.../tcm/transformations/cms/PrepareCMSReconfiguration.java | 3 +++
.../org/apache/cassandra/simulator/cluster/OnClusterLeave.java | 7 ++++++-
.../org/apache/cassandra/simulator/cluster/OnClusterReplace.java | 7 ++++++-
4 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/src/java/org/apache/cassandra/locator/CMSPlacementStrategy.java
b/src/java/org/apache/cassandra/locator/CMSPlacementStrategy.java
index 6a90aa1770..400553ce01 100644
--- a/src/java/org/apache/cassandra/locator/CMSPlacementStrategy.java
+++ b/src/java/org/apache/cassandra/locator/CMSPlacementStrategy.java
@@ -106,13 +106,13 @@ public interface CMSPlacementStrategy
rf.put(e.getKey(), ReplicationFactor.fullOnly(e.getValue()));
}
- Directory directory = metadata.directory;
+ Directory tmpDirectory = metadata.directory;
TokenMap tokenMap = metadata.tokenMap;
for (NodeId peerId : metadata.directory.peerIds())
{
if (!filter.apply(metadata, peerId))
{
- directory = directory.without(peerId);
+ tmpDirectory = tmpDirectory.without(peerId);
tokenMap = tokenMap.unassignTokens(peerId);
}
}
@@ -123,7 +123,7 @@ public interface CMSPlacementStrategy
Token minToken =
DatabaseDescriptor.getPartitioner().getMinimumToken();
EndpointsForRange endpoints =
NetworkTopologyStrategy.calculateNaturalReplicas(minToken,
new Range<>(minToken, minToken),
-
directory,
+
tmpDirectory,
tokenMap,
rf);
diff --git
a/src/java/org/apache/cassandra/tcm/transformations/cms/PrepareCMSReconfiguration.java
b/src/java/org/apache/cassandra/tcm/transformations/cms/PrepareCMSReconfiguration.java
index 7daee231b1..0367640fda 100644
---
a/src/java/org/apache/cassandra/tcm/transformations/cms/PrepareCMSReconfiguration.java
+++
b/src/java/org/apache/cassandra/tcm/transformations/cms/PrepareCMSReconfiguration.java
@@ -215,6 +215,9 @@ public class PrepareCMSReconfiguration
public static Diff diff(Set<NodeId> currentCms, Set<NodeId> newCms)
{
+ assert !currentCms.contains(null) : "Current CMS contains a null value
" + currentCms;
+ assert !newCms.contains(null) : "New CMS contains a null value " +
newCms;
+
List<NodeId> additions = new ArrayList<>();
for (NodeId node : newCms)
{
diff --git
a/test/simulator/main/org/apache/cassandra/simulator/cluster/OnClusterLeave.java
b/test/simulator/main/org/apache/cassandra/simulator/cluster/OnClusterLeave.java
index 9e77b55815..2b2ce15086 100644
---
a/test/simulator/main/org/apache/cassandra/simulator/cluster/OnClusterLeave.java
+++
b/test/simulator/main/org/apache/cassandra/simulator/cluster/OnClusterLeave.java
@@ -30,9 +30,11 @@ import org.apache.cassandra.tcm.ClusterMetadataService;
import org.apache.cassandra.tcm.MultiStepOperation;
import org.apache.cassandra.tcm.Transformation;
import org.apache.cassandra.tcm.sequences.LeaveStreams;
+import org.apache.cassandra.tcm.sequences.ReconfigureCMS;
import org.apache.cassandra.tcm.sequences.UnbootstrapAndLeave;
import org.apache.cassandra.tcm.transformations.PrepareLeave;
+import static
org.apache.cassandra.utils.FBUtilities.getBroadcastAddressAndPort;
import static org.apache.cassandra.utils.LazyToString.lazy;
class OnClusterLeave extends OnClusterChangeTopology
@@ -83,6 +85,9 @@ class OnClusterLeave extends OnClusterChangeTopology
{
super("Prepare Leave", actions, on, () -> {
ClusterMetadata metadata = ClusterMetadata.current();
+ ReconfigureCMS.maybeReconfigureCMS(metadata,
getBroadcastAddressAndPort());
+
+ metadata = ClusterMetadata.current();
ClusterMetadataService.instance().commit(new
PrepareLeave(metadata.myNodeId(),
false,
ClusterMetadataService.instance().placementProvider(),
@@ -114,4 +119,4 @@ class OnClusterLeave extends OnClusterChangeTopology
});
}
}
-}
+}
\ No newline at end of file
diff --git
a/test/simulator/main/org/apache/cassandra/simulator/cluster/OnClusterReplace.java
b/test/simulator/main/org/apache/cassandra/simulator/cluster/OnClusterReplace.java
index d3f5d86720..19204e4d06 100644
---
a/test/simulator/main/org/apache/cassandra/simulator/cluster/OnClusterReplace.java
+++
b/test/simulator/main/org/apache/cassandra/simulator/cluster/OnClusterReplace.java
@@ -40,6 +40,7 @@ import org.apache.cassandra.tcm.MultiStepOperation;
import org.apache.cassandra.tcm.Transformation;
import org.apache.cassandra.tcm.membership.NodeId;
import org.apache.cassandra.tcm.sequences.BootstrapAndReplace;
+import org.apache.cassandra.tcm.sequences.ReconfigureCMS;
import org.apache.cassandra.tcm.transformations.PrepareReplace;
import static org.apache.cassandra.simulator.Action.Modifiers.NONE;
@@ -132,7 +133,11 @@ class OnClusterReplace extends OnClusterChangeTopology
{
super("Prepare Replace", actions, joining, () -> {
ClusterMetadata metadata = ClusterMetadata.current();
- ClusterMetadataService.instance().commit(new
PrepareReplace(new NodeId(leavingNodeId),
+ NodeId leaving = new NodeId(leavingNodeId);
+ ReconfigureCMS.maybeReconfigureCMS(metadata,
metadata.directory.endpoint(leaving));
+
+ metadata = ClusterMetadata.current();
+ ClusterMetadataService.instance().commit(new
PrepareReplace(leaving,
metadata.myNodeId(),
ClusterMetadataService.instance().placementProvider(),
true,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]