mirror of https://github.com/apache/cassandra
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:
parent
2c05f82755
commit
8404d2fd5c
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue