Improve performance when getting writePlacementAllSettled from ClusterMetadata in large cluster with many range movements

Patch by marcuse; reviewed by Sam Tunnicliffe for CASSANDRA-20526
This commit is contained in:
Marcus Eriksson 2025-04-04 08:23:32 +02:00
parent 2c05f82755
commit 8404d2fd5c
2 changed files with 13 additions and 7 deletions

View File

@ -1,4 +1,5 @@
5.1
* Improve performance when getting writePlacementsAllSettled from ClusterMetadata (CASSANDRA-20526)
* Add nodetool command to dump the contents of the system_views.{cluster_metadata_log, cluster_metadata_directory} tables (CASSANDRA-20525)
* Fix TreeMap race in CollectionVirtualTableAdapter causing us to lose rows in the virtual table (CASSANDRA-20524)
* Improve metadata log catch up with inter-DC mutation forwarding (CASSANDRA-20523)

View File

@ -104,6 +104,7 @@ public class ClusterMetadata
private EndpointsForRange fullCMSReplicas;
private Set<InetAddressAndPort> fullCMSEndpoints;
private Set<NodeId> fullCMSIds;
private DataPlacements writePlacementAllSettled;
public ClusterMetadata(IPartitioner partitioner)
{
@ -282,15 +283,19 @@ public class ClusterMetadata
public DataPlacement writePlacementAllSettled(KeyspaceMetadata ksm)
{
ClusterMetadata metadata = this;
Iterator<MultiStepOperation<?>> iter = metadata.inProgressSequences.iterator();
while (iter.hasNext())
if (writePlacementAllSettled == null)
{
Transformation.Result result = iter.next().applyTo(metadata);
assert result.isSuccess();
metadata = result.success().metadata;
ClusterMetadata metadata = this;
Iterator<MultiStepOperation<?>> iter = metadata.inProgressSequences.iterator();
while (iter.hasNext())
{
Transformation.Result result = iter.next().applyTo(metadata);
assert result.isSuccess();
metadata = result.success().metadata;
}
writePlacementAllSettled = metadata.placements;
}
return metadata.placements.get(ksm.params.replication);
return writePlacementAllSettled.get(ksm.params.replication);
}
// TODO Remove this as it isn't really an equivalent to the previous concept of pending ranges