Good catch! It definitely makes sense to cache this call for a single repair job as it calls ReplicationStrategy.getAddressRanges underneath which can get pretty inefficient ( https://github.com/apache/cassandra/blob/3dcbe90e02440e6ee534f643c7603d50ca08482b/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java#L170 ).
Would you mind creating a ticket and submitting a patch? Thanks! 2016-05-31 12:59 GMT-03:00 Cyril Scetbon <cyril.scet...@free.fr>: > Hi C* developers, > > Digging in the code because of a time issue during a repair full on our ~ > 60 nodes cluster, I've been able to see that this stage can be significant > (up to 60 percent of) : > > > https://github.com/apache/cassandra/blob/cassandra-2.1/src/java/org/apache/cassandra/service/StorageService.java#L2983-L2997 > > It's merely caused by the fact that > https://github.com/apache/cassandra/blob/cassandra-2.1/src/java/org/apache/cassandra/service/ActiveRepairService.java#L189 > calls `ss.getLocalRanges(keyspaceName)` everytime and that it takes more > than 99% of the time. This call takes 600ms when there is no load on the > cluster and more if there is. So for 10k ranges, you can imagine that it > takes at least 1.5 hours just to compute ranges. Don't you think that > caching this call would make sense ? > > -- > Cyril SCETBON > >